- 相关推荐
软件的复用技术及开发方法
软件的复用技术及开发方法
2.1软件的复用技术
软件复用是指在开发新的软件系统时,对已有的软件或软件模块重新使用,该软件可以是己经存在的软件,也可以是专门的可复用组件〔8〕。软件可复用性的高低影响到生产效率的高低、软件质量的好坏和系统可维护性的好坏。在软件工程中面临的问题不是缺乏复用,而是缺乏广泛的、系统的复用。软件复用包括构造可复用软件和用可复用软件进行构造。构造可复用软件,一方面可以从现存的软件系统中抽取,另一方面通过改写或重新设计来实施。
Jones将软件复用的对象分为4种数据复用、体系结构复用、设计复用和程序复用。这样,软件复用可在实现层、设计层和体系结构层三个层次上实现。实现层软件复用是指对己有的程序代码进行复用,它包括源代码组件形式。设计层软件复用是指对已有的软件系统的设计信息进行复用。而体系结构层软件复用是最有效的软件复用,它主要是软件体系结构形式化的复用,即将软件的框架组织,全局结构设计作为复用对象。可复用的软件体系结构则通常是显式地复用软件体系结构,并通过集成其他软件体系结构,建立新的更高层次的体系结构。
面向对象的软件复用机制主要有两种:继承和对象组合。
(1)继承
继承是指子类可以从父类中直接获得某些特征和行为的能力,继承可作为代码复用和概念复用的手段。作为代码复用的手段是指:子类通过继承父类的行为,一些代码就不必重写;作为概念复用的手段是指:子类共享父类的方法定义。作为代码复用和概念复用手段的继承机制,在面向对象技术中,通过面向对象技术的一些主要机制来实现对“支持可维护性的可复用性”的支持。这些面向对象的主要机制是:数据的抽象化、封装和多态性。通过运用这些机制,继承可以在高层次上提供(相对于传统的低层次复用)可复用性:数据的抽象化和继承关系使得概念或定义可以复用;多态性使得实现和应用可以复用;而抽象化和封装可以保持和促进系统的可维护性。这样一来,复用的焦点不再集中在函数和算法等具体实现细节上,而是集中在最重要的含有宏观商业逻辑的抽象层次上。换言之,复用的焦点发生了“倒转”。发生复用焦点的倒转并不是因为实现细节的复用并不重要,而是因为这些细节上的复用己经做的很好了,并且这种复用在提高复用性的同时提高了软件的可维护性。由于继承关系直接继承的是接口,同时也继承实现,因而实际上父类的内部实现对子类而言是可见的,属于白盒复用方式。
(2)对象的组合
对象组合是指新的复杂功能可以通过组装或组合对象来获得。这种复杂的功能由对象组合来获得的设计思想与过程化程序设计思想是相似的,在过程化程序设计中,一个复杂的功能模块可以分解为更细小的和更简单的功能模块,整体功能是各个局部功能的聚集。在面向对象系统中,系统是由对象构成,因此复杂的功能或者说能完成更复杂功能的对象,可以通过功能较简单的对象的组装或组合来实现。对象组合方式是从整体与局部的角度来考虑软件复用思想的。
对象组合要求对象具有良好的接口定义,使用对象的接口来使用对象的功能,并往往运用赋值多态来获得具体对象,对象的内部功能是不可见的,对象只以“黑盒”的形式出现,属于黑盒复用方式。
面向对象的软件复用过程有以下步骤:
①抽象:对软件制品进行抽象,抽象层次越高,复用的机会就越大;
②选择:一般通过分类和编目方案组织和检索可复用的软件制品;
③特殊化:即将上步选定了的一个一般化的软件制品进行特殊化,以满足特定领域的要求;
④集成:集成需要在软件体系结构或框架的指导下,将选定的、特殊化了的模块集合组成一个完整的软件系统。要有效地将可复用制品集成为一个软件系统,使用者必须清楚地理解该模块的接口。
而从复用的使用角度上看,软件复用的使用行为可能发生在三个维上。
①平台维:以某平台上的软件为基础,修改它与运行平台相关的部分,使其能够运行在新的平台,即软件移植;
②时间维:使用以前的软件版本作为新版本的基础,加入新功能,适应新需求,即软件维护;
③应用维:将某软件或其中构件用于其他系统中,新系统具有不同功能和用途,即真正的软件复用。
这三种行为中都重复使用了现有的软件,但是真正意义的软件复用指的是应用维上的软件复用,即“使用为复用而开发的软件”来更快更好地开发新的应用系统。通过软件复用,消除了许多重复劳动,降低了软件开发的时间。同时,复用高质量的己有开发成果,避免了重新开发可能引入的错误,从而提高了软件的质量。
2.2软件的开发方法
2.2.1结构化开发方法
结构化方法是把现实世界描绘为数据在信息系统中的流动,以及在数据流动的过程中数据向信息的转化。其基本思想为:基于功能分解设计系统结构,通过把复杂的问题逐层分解,进行简化(即自顶向下,逐层细化),将整个程序结构划分成若干个功能相对独立的子模块直至最简,并且每个模块最终都可使用顺序、选择、循环三种基本结构来实现,它是从系统内部功能上模拟客观世界。
结构化方法强调系统开发过程的整体性和全局性,强调在整体优化的前提下来考虑具体的分析设计问题。结构化方法严格地区分开发阶段,强调一步一步地严格地进行系统分析与设计,每一步工作都及时地总结、发现问题,从而避免了开发过程的混乱状态。
结构化方法是目前被广泛采用的系统开发方法之一,但是结构化方法也存在的许多问题,其局限性有以下几点:
(1)难以解决软件重用问题。结构化方法从功能抽象出发进行模块划分,所划分出的模块千差万别,模块共用的程度不高。
(2)结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题域。同时,当系统较复杂时,很难检验分析的正确性。因此,结构化分析方法容易隐藏一些对问题域的理解偏差,与后继开发阶段的衔接也比较困难。
(3)结构化方法对需求变化的适应能力比较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起相关联的许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程。
(4)结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致。结构化方法的结果-数据流图(DFD)和结构化设计结果-模块结构图(MSD)是两种不同的表示体系,从分析到设计的“转换”使得设计文档与问题域的本来面貌相差甚远。
2.2.2面向对象开发方法
面向对象的开发方法采用从特殊到一般的归纳方法,它是对现实世界中的实体进行分类,然后区分对象及其属性,整理对象及其组成部分,并划分成不同的对象类,从而得到现实系统中对象及其关系,进而分析并掌握系统运行的规律。OOA的重点是使用面向对象的观点解决现实世界模型的建立问题,是利用从问题域中抽象出的类和对象来研究系统实际需求的一种分析方法。
这种方法是以对象作为分析问题、解决问题的核心,对问题空间进行直接映射,使计算机实现的对象与真实世界具有一一对应关系,所以自然符合人类认识规律,有效地解决了需求分析模型和软件设计模型的不匹配现象,它同时也易于适应系统的变化处理。面向对象的系统设计基本过程一般包括:问题域分析、发现和定义对象类、识别对象的外部联系、建立系统的静态模型、以及建立系统的动态行为模型。
(1)问题域分析:分析应用领域的业务范围、业务规则和业务处理过程,确定系统的责任、范围和边界,确定系统的需求;
(2)发现和定义对象类:识别对象和类,确定它们的内部特征:属性和服务操作;
(3)识别对象的外部联系:在发现和定义对象与类的过程中,需要同时识别对象与对象、类与类之间的各种外部联系,包括结构性的静态联系和行为性的动态联系;
(4)建立系统的静态结构模型:分析系统的静态结构,建立系统的静态结构模型,并且把它们用图形和文字说明表达出来;
(5)建立系统的动态行为模型:分析系统的行为,建立系统的动态行为模型,并且把它们用图形和文字说明表达出来。
面向对象模型比以往的模型有了很大的进步,但仍有不足。首先面向对象方法中对象的确定有时会因客观边界模糊而难以确定,这样很难保证软件描述的正确性。其次面向对象方法在描述问题域方面存在不足。在问题域中,面向对象方法把具体或抽象的问题现象直接表述为对象,同时把现象类型直接表述为类。大多数OOA方法支持多视角模型,即对同一问题域现象,不同的主体可以将它表述为同一对象或类型。但系统的描述在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图通过面向对象的表述对存在的问题现象达成一致,然而结果得到的对象或类并不适合于某个描述者对对象的独自表述,即在面向对象模型中,很难把不同描述者对现象的描述正确的统一起来。
2.2.3基于设计模式的开发方法
设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。希望避免重复设计或尽可能少做重复设计。而模式是针对一个反复出现的问题优秀的解决方案,它的方法就是发现变化、封装变化〔2‘,。模式本身已经充分考虑了变化的情况,并且采用了一种特殊的对待变化的方法,它不是预先考虑会如何变化,而是考虑哪里可能会变化,然后隔离,所以当变化发生时不会带来全局性的破坏。
有经验的面向对象设计者能做出良好的设计,他们知道:不是解决任何问题都要从头做起。他们更愿意复用以前用过的好的解决方案。这些经验是他们成为内行的部分原因。实际上,在许多面向对象的系统中,都存在诸多的类和相互通信的对象的重复模式。这些模式帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。一个熟悉这些模式的设计者不需要再去发现它们,就能够立即将它们应用于设计问题中。使得面向对象设计更灵活、优雅,最终复用性更好。
模式可以在软件开发的各个阶段被使用,既可以创建一个解决单一问题的模式或者针对某一用例应用的模式,也可以同时使用多个模式来解决复杂的问题。模式的设计类型可以包括结构化的、行为化的和条件化的解决方案,因此,模式的应用范围是非常广阔和灵活的。一旦‘懂得了模式,许多设计决策自然而然就产生了。在人们充分认识到模式的重要性后,逐渐将面向对象软件的设计经验作为设计模式记录下来。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的、重复出现的设计,能够被人们有效的利用。
模式和系统架构有很大的相似性,都是处理一些抽象概念间的关系,但是二者还是有很大的不同,模式是领域无关的,它是解决一些抽象问题的,但是系统架构是针对所要解决的实际问题的,是领域相关的。模式在应用时可以
通过下述步骤进行设计:
(1)对问题领域进行分析、分解,结合模式的适用条件找到和待解决的问题匹配的模式,对该模式进行定制应用到具体系统中来。
(2)和模式结合在一起构建起整个系统架构。比如:MVC(Model-View-Controller),它是专门针对交互系统提出的,如果要构建一个交互系统,那么就可以直接应用MVC模式,然后在该模式所搭建的场景启发下去发现Model、View以及Controller,在大的场景的指导下根据其它的需求(模式)构建一些小的场景对系统进行有效的分化。
2.3 设计模式的优点
大多数设计模式还能使软件更容易修改和维护。因为它们都是久经考验的解决方案。它们的结构也都是经过长期发展形成的,比新构思的解决方案更善于应对变化。而且,这些模式所用代码往往更易于理解——从而使代码更易维护。
设计模式对优秀面向对象设计的策略提出了一些建议,其中包括按接口编程、尽量用聚合、找出变化并封装。这些策略在大多数设计模式中都遵循和使用着。所以用不着学习太多设计模式,只学几个就能使你理解这些策略的重要性。这种理解将会成为将策略应用于实际设计问题的一种能力,即使你并不直接使用设计模式。
设计模式还有一个好处是,可以在不使用巨型继承层次结构的情况下,为复杂问题创建出设计方案。同样,即使并不直接使用设计模式,不使用巨型继承层次结构也会使设计质量提高。
【软件的复用技术及开发方法】相关文章:
游戏软件开发VC++05-13
大专软件技术专业开题报告怎么写(软件技术开题报告范文)07-19
软件开发风险及控制措施(通用6篇)05-12
浅谈软件开发项目的成本控制论文04-18
卓越计划下软件技术专业教改08-05
我国高新技术开发区发展状况评估浅议05-30
积累资料的方法06-14
方法、思路与问题06-01