漫淡(8):软件的重用

发表于:2008-02-20来源:作者:点击数: 标签:软件的重用
设计软件可以产生组件、架构和应用程序,如果在设计阶段更多地关注识别和设计组件和架构,那么在应用程序中就可以更多地进行软件重用。 在设计组件时,尽量考虑组件的通用性,使尽可能多的不同应用程序能够使用,而对于使用组件的应用程序而言,组件是黑箱,
设计软件可以产生组件、架构和应用程序,如果在设计阶段更多地关注识别和设计组件和架构,那么在应用程序中就可以更多地进行软件重用。

  在设计组件时,尽量考虑组件的通用性,使尽可能多的不同应用程序能够使用,而对于使用组件的应用程序而言,组件是黑箱,即利用组件的应用程序开发者不必了解这些组件的具体实现。典型的组件有:链表、数组、字符串、按钮和复选框。当程序员发现他在重复地写类似的代码,这时就隐藏着“组件”,程序员这时应花时间,挖掘出组件,即抽取这些代码代的公共成分,并为它创建统一的、通用的接口时,组件就诞生。就这个意义来讲,函数就是组件,但组件比函数更广泛,是函数概念的扩展。例如:类可作为组件,它含了更多的东西,一个组件含多个函数(方法)。

  架构是软件的骨架结构,类似与建筑的框架。对于类似的应用程序可以选用类似的架构,这就是架构的重用。对于利用架构进行软件设计时,架构是白箱。因此,开发者应理解架构,并使用适合的语言实现这个架构,架构既是可重用设计(代码重写),也是可重用代码(连用代码一并重用)。

  软件重用的理想状态是:应用软件是由通用的组件和专用的实体充实到一个通用的架构中。

  软件重用被看做是解决软件危机的良药,CBD模型(以组件为基础的设计)不再强调软件的开发,而是着眼于软件的组装,利用被严格地约束和封装的组件,快速地搭建应用系统。在这个模型中,软件的开发分为两个阶段:准备组件和组装组件。而这两个阶段又是可以并行的,它们既有很强的独立性,又有一种互动关系。对于应用程序的开发来说,应尽量考虑使用已有组件(在组件库中寻找),如果缺某方面的组件,那么可以有两种策略来处理:一是启动组件开发;二是暂不开发新组件,而是先尽量完成应用的开发,以后,再对该部分进行总结、整理,看是否有公共功能可以提炼出组件供以后使用,如果有,则启动新组件的开发。这说明组件开发的需求不是凭空想像的,实际上都是来源于实际应用开发的需要。CBD思想直接导致了一类开发工具与方法的研究,如RAD(快速应用开发)。

  面向对象技术,从设计的角度进一步强化了软件内部的重用性。例如:

  1、被封装的实体,向外提供服务公共接口功能而隐藏内部实现(这类似于组件作为黑盒被复用的情况),可以作为基本的重用单位,这些实体表现为类、类群(子系统)。

  2、类的继承性允许我们重用代码:类可以继承其他类的行为,这些行为的代码不必重写。

  3、抽象类(不产生实例的类)是公共因子的高度抽象,它充分定义了类的行为(方法),但不需要完全实现,而是由子类重新定义方法(代码实现)。这就是从设计角度重用抽象类的行为(虽然重写了代码,但重用了设计结果)。

  4、面向对象设计中,客户/服务器建模:一个对象需要另一个对象的服务,提出请求的对象是“客户”,接收请求并提供服务的对象是“服务器”。客户与服务器的交互(单向的)方式由一个契约所描述。服务器就是一个运行时的复用单元(它为许多对象提供服务)。

原文转自:http://www.ltesting.net