知识要点
构件组装是将库中的构件经适当修改后相互连接,或者将它们与当前开发项目中的软件元素连接,最终构成新的目标软件。
构件组装技术大体可分为:
1. 基于功能的组装技术:基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序/过程函数的形式出现,并且接口说明必须清晰。当使用这种组装技术进行软件开发时,开发人员首先要对新系统进行功能分解,将系统分解为强内聚、松耦合的功能模块;然后根据各模块的功能需求提取构件,进行适应性修改后,再接接到上述功能分解框架中。
2. 基于数据的组装技术:基于数据的组装技术首先根据当前软件问题的核心数据结构设计出一个框架,然后根据框架中各结点的需求提取构件并进行适应性修改,再将构件逐个分配至框架中的适当位置。此后,构件的组装方式仍然是传统的子程序调用与参数传递。这种组装技术也要求库中构件以子程序形式出现,但它所需的软件设计方法不再是功能分解,而是面向数据的设计方法,例如:Jackson 系统开发方法。
3. 面向对象的组装技术:由于封装和继承特征,面向对象方法比其他软件开发方法更适合支持软件复用。在面向对象的软件开发方法中,如果从类库中检索出来的基类能够完全满足新系统的需求,则可以直接应用。否则,必须以基类为父类,生成相应的子类,以满足新系统的需求。
设计模式
创建型模式是对对象实例化过程的抽象。
- 单例模式(Singleton):确保一个类只有一个实例,并提供了全局访问入口;
- 原型模式(Prototype):允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象;
- 构建器模式(Builder):将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
结构型模式主要用于如何组合已有的类和对象以获得更大的结构,一般借鉴封装、代理、继承等概念将一个或多个类或对象进行组合、封装,以提供统一的外部视图或新的功能。
行为型模式主要用于对象之间的职责及其提供的服务的分配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任一对象都无法单独完成的任务。
- 命令模式(Command):将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
- 观察者模式:观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
- 状态模式:对于对象内部的状态,允许其在不同的状态下拥有不同的行为,对状态单独封装成类。
- 中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
耦合表示模块之间联系的程度。紧密耦合表示模块之间联系非常强,松散耦合表示模块之间联系比较弱,非耦合则表示模块之间无任何联系,是完全独立的。
模块的耦合类型通常分为 7 种,根据耦合度从低到高排序如下表所示。
面向对象设计是模型驱动和用例驱动的,整个设计过程将面向对象分析阶段所产生的需求模型作为输入,并生成供构建阶段使用的设计模型作为输出。
COM 支持两种形式的对象组装:包含和聚集。
- 包含:一种简单的对象组装技术,其含义是一个对象拥有指向另一个对象的唯一引用。
- 聚集:直接把内部对象的接口引用传给外部对象的客户,而不再转发请求。
面向对象的分析模型主要由顶层架构图、用例与用例图和领域概念模型构成。设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、描述复杂对象的状态图和用于描述流程化处理过程的活动图等。
在面向对象分析中,利用用例与用例图表示需求,从用例模型中提炼形成领域模型,用例的实现可以用交互图表示。从领域模型和用例图形成类图,用包图和类图形成体系结构图。之后再进行后续的开发工作。
面向对象的设计原则
- 开闭原则:指软件实体应