第10章软件复用与构件技术内容介绍10.1软件复用10.2基于构件的软件开发10.3面向对象的软件重用技术10.4小结10.1软件复用10.1.1软件复用的定义10.1.2软件复用的重要性10.1.3软件复用的过程10.1.1软件复用的定义软件复用(softwarereuse)是指通过对已有软件的各种有关知识来建立新的软件,这些知识包括:领域知识、开发经验、设计经验、设计决定、体系结构、需求、设计、编码、测试和文档等。软件复用的目的是降低软件开发和维护的成本,提高软件开发效率,提高软件的质量。CaperJones定义了可作为复用候选的10种软件制品:(1)项目计划:软件项目计划的基本结构和许多内容(如进度表、风险分析)都可以跨项目复用,以减少用于制定计划的时间。10.1.1软件复用的定义(2)成本估计:由于不同的项目中经常含有类似的功能,所以有可能在极少修改或不修改的情况下,复用对该功能的成本估计。(3)体系结构:某些应用软件的体系结构往往非常相似,因此有可能创建一组公共的体系结构模板(如,事务处理体系结构),并将那些模板作为可复用的设计框架。(4)需求模型和规约:类和对象模型及其规约是明显的复用候选者,此外,用传统软件工程方法开发的分析模型(如数据流图)也是可复用的。10.1.1软件复用的定义(5)设计:用传统方法开发的体系结构、数据、接口和过程化设计都是复用的候选者,系统设计和对象设计也是可复用的。(6)源代码:经验证的程序代码是复用的候选者。(7)用户文档和技术文档:即使特定的应用有所不同,但经常可复用部分用户文档和技术文档。(8)用户界面:这是最广泛被复用的软件制品,如图形用户界面(GUI)软件经常被复用。由于用户界面部分约占一个应用软件的60%的代码量,因此其复用效主极高。10.1.1软件复用的定义(9)数据:在大多数经常被复用的软件制品中,可复用的数据包括:内部表、记录结构以及文件和完整的数据库。(10)测试案例(testcase):一旦设计或代码被复用,则其相应的测试案例也应被复用。10.1.2软件复用的重要性一般以为,要在企业内部充分地实现软件复用,应优先解决好以下一些问题:(1)在充分认识软件复用的重要性的基础上,尽快建立支持软件复用的基础设施(2)建立相应的培训计划以帮助软件工程师和管理者理解和应用软件复用(3)采用更先进的,可以促进软件复用的软件开发方法(4)采取相应的激励措施软件复用的目的是能更快、更好、成本更低地生产软件产品。一般地说,在软件开发中采用复用构件可以比从头开发这个软件更加容易。10.1.3软件复用的过程(1)抽象:即对已有软件制品的简要描述,从中抽取该制品的本质信息(即可复用部分),摒弃那些细节;(2)选取:即用户根据已有软件制品的抽象,寻找、比较和选择最适合他需要的那个制品(可复用件);(3)特化:即对已有制品(可复用件)的修改或形成它的一个实例(例化后的复用件);(4)集成:将例化后的复用件集成为应用系统。软件复用的一般过程如下:10.2基于构件的软件开发10.2.1开发可复用的软件构件10.2.2软件构件的组织10.2.3分类和检索软件构件10.2.1开发可复用的软件构件当开发一个新软件时,应该对描述需求的分析模型进行分析,以发现模型中那些指向现有的可重用的软件成分的元素。为此,应该使用能够导致“规格说明匹配”的方式从需求模型中抽取信息。为了重用的设计同样要求软件工程师应用已有的设计概念和原理,但是,也必须考虑应用领域的特征,特别是应该考虑下述的一系列关键问题。(1)标准数据。(2)标准接口协议。(3)程序模板。10.2.1开发可复用的软件构件当重用在应用系统开发中占据主导地位时,就把这样的开发方法称为基于构件的开发或构件软件。领域工程为基于构件的开发提供了所需要的可重用构件库,这些可重用的构件中的一部分是内部开发的,另一部分是从现有的应用系统中抽取出来的,还有一部分是从第三方获取的。为了实现基于构件的开发,应该使用下述4个“体系结构要素”。(1)数据交换模型(2)自动化。(3)结构化存储。(4)底层对象模型。10.2.1开发可复用的软件构件主要的公司和产业联盟已经提出了构件软件的一些标准。(2)OMG/CORBA一个对象请求代理(ORB)提供了一系列服务,这些服务使得可重用的构件(对象)能够与其他构件通信,而不管它们在系统中位于何处。(1)OpenDoc该标准定义了为使一个开发者提供的构件能够和另一个开发者提供的构件互操作,而必须实现的服务、控制基础设施和体系结构。10.2.1开发可复用的软件构件(3)COMCOM标准具有下述特点。·构件间的互操作基于指针,依赖于操作系统的API。·对Windows的依赖性强,对其他操作系统的支持相对不足。·构件运行环境的提供者仅限于Microsoft公司,但支持COM标准的开发工具比较多(例如,VC++、VB等)。对象连接与嵌入(OLE)是COM的一部分,其定义了可重用构件的标准结构。OLE已经成象语言,因此JavaBean标准比较简洁、完备。JavaBean具有下述特点。·构件模型比较完备。·仅支持Java语言。·构件运行环境主要由Sun公司提供,其他厂商也可提供运行环境具较多(例如,VisualCafe,VisualAgeforJava等)。10.2.2软件构件的组织对收集和开发的软件构件进行分类,并放入可服用构件库的适当位置。可服用构件库组织应当便于存储和检索,要求如下:(1)支持构件库的各种维护操作。增、删、更新构件库的操作应当不影响构件库的结构。(2)不仅能支持精确匹配,还应支持相似构件的查询。(3)不仅能进行简单的语法匹配,而且能查找在功能、行为上等价或相似的构件。(4)对应用领域(族)有较强的描述能力和较好的描述精确度。(5)便于构件库管理员和用户的使用。(6)具备自动化的潜力。10.2.2软件构件的组织可复用构件库的组织方法有枚举分类法、关键词分类法、多面分类法、超文本组织法、模型法等。超文本是一种非线性的网状信息组织方法,以结点作为基本单位,链作为结点之间的联想式关联。超文本组织法与基于全文检索技术,其基本思想是:所有构件都必须辅以详细的功能或行为说明文档,说明中出现的概念和构件以网状链接方式相互连接。检索者在阅读文档的过程中可按照联想思维方式任意跳转到包含相关概念或软件构件的文档中去。全文检索系统将用户给出的关键词与说明文档中的文字进行匹配,实现软件构件的浏览式检索。10.2.3分类和检索软件构件1.描述可重用的构件可以用很多种方式描述可重用的软件构件,但是一种理想的描述方式是Tracz提出的3C模型——概念(concept)、内容(content)和语境(context)。软件构件的“概念”是对构件做什么的描述,应该完整地描述构件的接口,并在前置条件和后置条件的语境中标识构件的语义。构件的“内容”描述实现概念的方法。“语境”把可重用的软件构件置于其应用领域中,也就是说,通过指定概念的、操作的和实现的特征,语境使得软件工程师能够找到适当的构件以满足应用需求。10.2.3分类和检索软件构件1.描述可重用的构件10.2.3分类和检索软件构件2.重用环境软件构件重用必须由相应的环境来支持,环境应包含下述元素:构件库,用于存储软件构件和检索构件所需要的分类信息。库管理系统,用于管理对构件库的访问。软件构件检索系统(例如,对象请求代理),通过它客户应用系统可以从库服务器中检索构件和服务。CASE工具,帮助把重用的构件集成到新设计或实现中。10.3面向对象的软件重用技术面向对象技术中的“类”是较理想的可复用构件,称之为类构件;将面向对象的可复用构件库称为可复用类库(简称类库)。1.类构件(1)实例复用由于类的封装性,使用者无需俩届实现细节,就可以使用适当的构造函数按照需要创建类的实例。再向创建的实例发送适当的消息,启动相应的服务。这是最基本的实例复用方式。此外还可以用几个简单的对象作为类的成员,创建出一个更复杂的类,这是另一种实例复用的方式。10.3面向对象的软件重用技术(2)继承复用面向对象方法特有的继承性提供了一种对已有的类构件进行裁剪的机制。当已有的类构件不能通过实例复用完全满足当前系统需求时,继承复用提供了一种安全地修改已有类构件的手段,以便在当前系统中复用。(3)多态复用利用多态性不仅可以使对象的对外接口更加一般化(基类与派出类的许多对外接口是相同的),从而降低了消息连接的复杂程度,而且还提供了一种简便可靠的构件组合机制。10.3面向对象的软件重用技术2.类库(1)类库的构造可复用基类的建立取决于领域分析阶段对当前应用(族)中有一般适用性的对象和类的标识,类库的组织方式采用类的继承层次结构,这种结构与现实问题空间的实体继承关系有某种自然、直接的对应。同时,类库的文档以超文本方式组织,每个类的说明文档中都可以包含指向其他说明文档的关键词结点的链接指针。10.3面向对象的软件重用技术(2)类库的检索一般地,类库的组织方式直接决定对类库的检索方式。常用的类库检索方法是对类库中类的继承层次结构进行树形浏览,以及进行基于类库文档的超文本检索。需要强调的是,对类库检索时并不要求待实现的类与类库中的基类完全相同或极其相似,只希望待实现的类与基类之间存在某种自然的继承关系,或基类能够提供属性、操作供待实现的子类选用。10.3面向对象的软件重用技术(3)类的合成如果从类库中检索出来的基类能够完全满足新软件项目的需求,则可以直接复用。否则,必须以类库中的基类为父类,采用构造法或子类法派生出子类。构造法为了在子类中使用类库中基类的属性和操作,可以考虑在子类中引进基类的实例作为子类的实例变量。然后,在子类中通过实例变量来复用基类的属性或操作,构造法用到面向对象方法的封装特性。子类法与构造法完全不同,子类法把新子类直接说明为类库中基类的子类。通过继承、修改基类的属性和操作来完成新子类的定义。子类法利用了面向对象方法的封装特性和继承特性。10.4小结软件复用是现代软件工程的一个重要概念,它不仅是一种技术、一种方法,也是一个过程,目的是使软件开发在质量、生产效率和成本上得到改善甚至大幅度的优化。软件构件技术作为软件复用技术的实用技术,已成为软件界研究的热点,已为多数软件企业所重视。本章主要介绍软件复用的一般概念、过程、软件复用的种类和形式、构件和基于构建的体系结构的概念、构建模型以及构建的分类检索等内容。使用软件复用技术能够提高软件生产效率,有助于改善软件质量。软件复用是一种利用已有软件元素开发新软件系统的方法。构件库的构造是一个复杂的过程,构件的检索、提取与构件库的组织方法有密切关系。面向对象方法更适于支持软件复用。谢谢!返回目录结束放映