`
ruilin215
  • 浏览: 1170962 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

面向各维度的软件复用

阅读更多
复用!使我们软件工作者梦寐以求的目标。所谓复用,就是在不改变原有代码的情况下,重复使用原有代码。面向对象(OO)技术的三个基本特点都是为了复用。
  1. 封装。这个本就是为了复用。是对复杂数据结构的复用。事实上,封装并不是只有在OO在才出现的。
  2. 继承。是对基类代码的复用。派生类在不改变基类的情况下,复用了基类的代码。
  3. 多态。是对调用基类的代码的复用。调用者可以在不改变代码的情况下,使用到派生类的新特性。

不过今天我们不是只谈这方面的复用。

软件按照各种变更需求,我们可以看出几个维度对软件的复用需求。

  1. 软件需求变更。软件在需求变更的情况下,原有业务模块会发生变更。在这种情况下,属于要求对原有系统的复用。这是我们最经常说的。
  2. 软件版本升级。软件经过一段时间后,原有系统会进行升级处理。在这种情况下,属于要求对就版本系统的复用。这种复用经常被人忽略。或者说其复用难度很高,很少有人能做到。
  3. 软件系统整合。一个非常重要的需求,就是在系统整合过程中,需要复用企业中已经存在的软件。虽然说,原有软件开发商并不一定要考虑这个问题。不过,复用可以带来明显的经济价值,其成本低的诱惑力,致使企业必然走这条道路。

基于这三个维度,我们都提出了对软件复用的要求。这也是软件发展的三个维度。如下图:

你可能已经注意到了,大家经常提到的面向对象技术没有被我显式列入图中。不过这些技术都是可以以OO为基础的。特别式组件技术。

在需求变更发生的时候,对已有二进制模块的复用是最有效的复用。因此我这里推荐使用插件技术。插件技术有微内核和巨内核两种扩展方式。个人推荐第二种。使用中具体情况具体分析。使用插件技术,可以直接在原有系统的扩展点上,通过增加的插件来实现业务的变化。这样,原有其他系统都不需要经过大量测试。且效率也是非常高的。

这里提到的测试成本是非常重要的概念。从物理模块上讲,任何已变化的模块,都是不可信任--即必须经过测试的。如果能完全复用,那么这些没有变化的部分的功能的测试工作,将变得非常简化。

软件版本之间的复用,一般都是指高版本复用低版本的模块。细化一下,可以分为业务实体复用,界面功能元素复用,业务模块复用。这个概念的复用,由于介入了业务,所以导致其方法和经验不能在全世界范围公用。这也是程序员最头疼的地方。不过,都不好做也是好事,这样大家都不提这件事了。至少在设计新系统的时候,很少考虑复用旧系统的模块,或者如何让将来的系统复用现在的新模块。没有人会责怪你没有考虑这点。

好在,这个问题越来越被重视。这里面一个是早就提出的组件技术,一个是平台技术。其实这两者在这里是一样的。平台技术也正是基于业务的组件。将两者合在一起,就是业务组件技术。POJO技术(pure old java object or plain ordinary java object)就是针对此类复用而提出的一种纯业务概念,这也是让业务实体能够在后续版本直接复用的概念。让业务对象,不需要考虑系统环境,而只关系业务本身的实现。因为在后续版本中,基本业务的差别是不大的。所以其复用的可能性会非常大。业务组件的编写,对设计者的要求非常高,需要在设计的时候将组件和环境的关系隔离开,以方便后续版本的复用。

组件概念提出很长时间了,但是都没有很好的实现,与其对设计的要求很高很相关。关键还在于我们在对业务理解的精深以及设计中对组件概念的把握。

系统整合中的最大问题,在于已存系统很可能并没有考虑与其他系统的接口。这种情况下,二进制的复用难道就会变得很高。在这种方式的应用中,最基本的就是消息技术。将对已存系统的调用,封装成各种消息,发送给已存系统。这些消息可以简单的是Windows消息,也可以是WebService消息。有些公司已经钻研透Java的实现底层,可以直接将消息发送给Java虚拟机。请注意这里的消息的概念很泛化,泛指命令的组成形式。

总之,各种维度方向的复用,最基本的要求就是设计上的考虑。与其后续的考虑,不如新做的时候就在设计上进行考虑。复用,要把它作为心中紧绷的弦,才可能真正做出能复用且可被复用的软件出来。

分享到:
评论

相关推荐

    面向对象软件工程.pptx

    综上所述,面向对象软件工程是一门多维度的学科,它横跨技术、管理和人的认知,要求从业者不仅掌握编程技能,更要有良好的沟通能力和项目管理能力。通过本讲座的学习,我们希望每一位参与者都能深刻理解面向对象软件...

    软件的价值及软件工程的发展

    而现代软件工程则更注重面向对象的分析和设计,引入了软件复用、组件化开发等理念,以及软件过程管理,以持续改进软件质量和效率。 未来,软件工程将继续发展,全球化软件协作交付将成为主流。随着云计算和物联网的...

    用例驱动的面向对象方法

    面向对象方法之所以受到广泛青睐,源于其在多个维度上的显著优势: 1. **应变能力**:能够灵活应对需求的变化,这在当今快速变化的商业环境中至关重要。 2. **沟通效率**:促进开发人员、用户和管理人员之间的有效...

    软件质量与安全

    - **软件过程改进** (Software Process Improvement, SPI) 和 **软件复用** (Software Reuse) 等理念促进了软件开发效率的提升。 - **能力成熟度模型** (Capability Maturity Model, CMM) 的提出,为软件过程改进...

    现代软件开发方法(文本)

    这一学科不仅涵盖了国际与国内的软件开发标准,还深入探讨了软件体系结构、面向对象的方法、形式化的方法、统一建模语言(UML)、软件过程改进、软件复用与构件技术、特征驱动开发、敏捷软件开发、软件开发工具与环境...

    软件体系结构复习资料

    面向对象的组装技术则利用面向对象语言提供的类继承和对象封装机制,实现构件的组装与复用。 软件体系结构本身是一个复杂的概念,它为软件系统提供了一个结构、行为和属性的高级抽象。体系结构描述了构成系统的元素...

    软件工程知识点

    软件工程是一门涉及软件开发全过程的学科,旨在通过科学的方法和工具,高效地构建高质量的软件产品。...软件工程是一个多维度、系统性的工程学科,涵盖了软件生命周期的各个阶段,旨在提高软件产品的质量和效率。

    软件工程复习

    随着软件工程的发展,复用的范围已经从代码层面扩展到了设计模式、架构和领域知识等多个维度。 #### 结论与反思 通过对软件工程的复习,我们不仅掌握了软件开发的理论基础和实践技巧,还意识到了软件工程面临的...

    软件工程-应用、设计与开发课件

    本书讲解的内容包括软件开发模型、需求分析、设计(传统方法与面向对象方法,如统一建模语言UML)、编码与语言选择、软件测试、软件复用、维护、项目计划、工程管理、质量管理以及软件工程环境。软件工程课程的特点...

    软件工程技术和国家标准

    国家标准是国家层面制定的一系列规则和指导原则,旨在为各行各业提供统一的操作准则,软件工程领域的国家标准同样具有重要意义。 一、软件工程技术 软件工程技术涉及到一系列的方法和工具,用于高效、高质量地构建...

    软件工程(自编教材) 习题答案.doc

    面向复用的方法基于软件组件的复用,通过预构建的组件和框架快速构建新软件。当有大量的可复用代码和组件时,这种方法能显著提高开发效率。 除了这些模型,还有其他如敏捷开发、螺旋模型等,它们各有优势,适用于...

    C++网络编程 卷2 基于ACE和框架的系统化复用.pdf

    ACE作为一个开放源码的工具包,广泛应用于世界各地的软件项目,其强大的网络编程功能和面向对象的框架设计使得开发者能够以系统化的方式复用代码,从而高效开发出高质量且可移植的网络化应用。 书中首先对ACE的各个...

    软件质量保证复习题

    3. 面向对象模型的特性是组件的密集重用,增强了代码复用。 4. 审查和走查是同行评审的两种主要方法。 5. RMA(风险管理)涉及内部、分包商和顾客三个方面的风险。 6. 模板和检查表是支持性质量工具,用于确保遵循...

    软件工程的概念.pptx

    软件可从多个维度分类,如按功能分为应用软件、系统软件和支撑软件;按规模分为微型、小型、中型、大型、甚大型和极大型;按工作方式分为分时、实时、交互式和批处理式;按服务对象分为项目软件和产品软件;按使用...

    软件工程复习.docx

    面向复用的开发模型注重软件组件的复用,减少开发工作量,但可能牺牲部分定制性。增量模型将软件拆分成多个部分,分批开发和交付,降低风险并提高用户满意度。螺旋模型结合了瀑布模型的系统性、原型模型的灵活性和...

    大型软件开发过程的质量管理体系

    同时,采用先进的分析方法(如面向对象分析和设计)和软件复用策略,可以进一步提升软件质量。 质量管理还强调缺陷预防,通过对过去错误的分析,找出并消除导致缺陷的根源。紧密围绕用户需求进行开发,使用快速原型...

    计算机相关\C++程序设计 word稿\第一章 软件设计概论.doc

    在探讨C++程序设计的精妙之处之前,我们首先要了解软件设计的本质。...深入学习本课程,理解软件设计的各个阶段和软件质量评估的多个维度,将为我们开启高效、专业软件开发之门,让我们在C++的世界中探索无限可能。

    戏说面向对象程序设计(C#版).pdf

    ### 面向对象程序设计(C#版)关键知识点总结 #### 一、面向对象思想的核心价值 **四大发明之活字印刷——面向对象思想的胜利** ...通过合理地运用面向对象的原则和设计模式,可以构建出既高效又稳定的软件系统。

Global site tag (gtag.js) - Google Analytics