面向对象设计的任务是对面向对象分析的结果作进一步的规范化整理,以便可以被面向对象编程直接接受。
概念
面向对象设计是一种软件设计方法,是一种project化规范。这是毫无疑问的。面向对象设计的主要工作包含:
— 确定须要的类;
— 给每一个类提供一组完整的操作;
— 明白地使用继承来表现共同点。
概括地说,面向对象设计就是“依据需求决定所需的类、类的操作,以及类之间关联的过程”。
从面向对象分析到面向对象设计是一个逐步扩充模型的过程。面向对象分析以实际问题为中心,能够不考虑与软件实现相关的不论什么问题,主要考虑“做什么”的问题;面向对象设计则是面向软件实现的实际开发活动,主要考虑“怎么做”的问题。
面向对象设计的目标是管理程序内部各部分的相互依赖。为了达到这个目标,面向对象设计要求将程序分成块,每一个块的规模应该小到能够管理的程度,然后分别将各个块隐藏在接口(interface)的后面,让它们仅仅通过接口相互交流。比方说,假设用面向对象设计的方法来设计一个client-server应用,那么server和client之间不应该有直接的依赖,而是应该让server的接口和client的接口相互依赖。
这样的依赖关系的转换使得系统的各部分具有了可复用性。还是拿上面那个样例来说,client就不必依赖于特定的server,所以就能够复用到其它的环境下。假设要复用某一个程序块,仅仅要实现必需的接口即可了。
面向对象设计是一种解决软件问题的设计范式(paradigm),一种抽象的范式。使用OOD这样的设计范式,我们能够用对象来表现问题领域的实体,每一个对象都有对应的状态和行为。面向对象设计是一种抽象的范式,抽象能够分成许多层次,从很概括的到很特殊的都有,而对象可能处于不论什么一个抽象层次上。另外,彼此不同但又互有关联的对象能够共同构成抽象:仅仅要这些对象之间有类似性,就能够把它们当成同一类的对象来处理。
原则
面向对象设计的主要原则例如以下。
1.模块化
面向对象开发方法非常自然地支持了把系统分解成模块的设计原则:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。
2.抽象
面向对象方法不仅支持过程抽象,并且支持数据抽象。
3.信息隐藏
在面向对象方法中,信息隐藏通过对象的封装性来实现。
4.低耦合
在面向对象方法中,对象是最主要的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。低耦合是设计的一个重要标准,由于这有助于使得系统中某一部分的变化对其它部分的影响降到最低程度。
5.高内聚
— 操作内聚。
— 类内聚。
— 一般-详细内聚。
任务
面向对象设计的主要任务例如以下。
1.对象定义规格的求精
对于面向对象分析所抽象出来的对象、类,以及汇集的分析文档,面向对象设计须要有一个依据设计要求整理和求精的过程,使之更能符合面向对象编程的须要。这个整理和求精过程主要有两个方面:一是要依据面向对象的概念模型整理分析所确定的对象结构、属性、方法等内容,改正错误的内容,删去不必要和反复的内容等。二是进行分类整理,以便于下一步数据库设计和程序处理模块设计的须要。整理的方法主要是进行归类,对类、对象、属性、方法和结构、主题进行归类。
2.数据模型和数据库设计
数据模型的设计须要确定类、对象属性的内容、消息连接的方式、系统訪问、数据模型的方法等。最后,每一个对象实例的数据都必须落实到面向对象的库结构模型中。
3.优化
面向对象设计的优化设计过程是从还有一个角度对分析结果和处理业务过程的整理归纳,优化包含对象和结构的优化、抽象、集成。
对象和结构的模块化表示为面向对象设计提供了一种范式,这样的范式支持对类和结构的模块化。这样的模块符合一般模块化所要求的全部特点,如信息隐蔽性好,内部聚合度强和模块之间耦合度弱等。集成化使得单个构件有机地结合在一起,相互支持。
阶段
面向对象设计分为两个阶段,即高层设计和低层设计。
高层设计阶段开发系统的结构,构造软件的整体模型。在这个阶段中,应该标识出在详细的计算机环境中进行问题求解所须要的概念,并添加一批须要的类,当中包含那些能使软件系统与外部世界进行交互的类。高层设计阶段的输出是适合应用软件要求的类、类之间的关系,以及应用子系统的视图规格说明。图6-13说明了面向对象设计导出的系统结构的大致形式。
在高层设计的过程中,应当使子系统的高层部件之间的通信量达到最小,把子系统中相互之间存在高度交互的类划分在同一组中。
低层设计集中于类的具体设计阶段。类设计的目标是形成单一概念的模型(即一个概念用一个独立的类来表示),并且设计的部件应该是可复用的和可靠的。在类的设计过程中须要採用信息隐蔽、高内聚、低耦合等设计原则。反复使用现有的类是面向对象的技术的主要长处之中的一个。
图6-13 面向对象设计导出的系统结构
过程和步骤
Coad与Yourdon在设计阶段继续採用面向对象分析阶段中提到的5个层次(对象和类、结构、属性、服务和主题),这样有助于从分析到设计的自然过渡。依据Coad与Yourdon的面向对象设计方法,设计阶段的主要任务是利用这5个层次来建立系统的4个组成部分,即问题领域、用户界面、任务管理和数据管理。
1.问题领域
问题领域包含与我们所面对的应用问题直接相关的全部类和对象。实际上,在面向对象分析阶段就已经開始进行问题领域的分析。此时须要对它进行进一步的细化。面向对象分析得到了与应用有关的概念模型,面向对象设计应该对这个概念模型进行改进和增补。主要依据需求的变化来对面向对象分析阶段产生的模型中的类和对象、结构、属性和操作进行组合和分解,依据面向对象设计原则来添加必要的类、属性和关系。问题领域部分的设计包含:
— 复用设计
— 关联问题领域中的类
— 增加一般化的类以建立类间协议
— 调整继承的支持级别
— 改进性能
— 增加较低层的组件
2.用户界面
通常在面向对象分析阶段给出了所需的属性和操作,在面向对象设计阶段必须依据需求把交互的细节增加用户界面的设计中,包含有效的人机交互所必需的实际显示和输入。用户界面部分的设计主要由下面几个方面组成:
— 用户分类
— 描写叙述人及其任务的脚本
— 设计命令层
— 设计具体的交互
— 继续扩展用户界面原型
— 设计人机交互类
— 依据图形用户界面进行设计任务管理部分的设计
3.任务管理
任务是进程的别称,是运行一系列活动的一段程序。当系统中有很多并发行为时,须要按照各个行为的协调和通信关系来划分各种任务,以简化并发行为的设计和编码。任务管理主要包含任务的选择和调整,它的工作包含:
— 识别事件驱动任务。
— 识别时钟驱动任务。
— 识别优先任务和关键任务。
— 识别任务之间的协调者。
— 对各个任务进行评审保证它可以满足选择任务的过程标准。
— 定义各个任务,说明它是什么任务、任务之间怎样协调工作、怎样通信。
4.数据管理
数据管理提供了在数据管理系统中存储和检索对象的基本结构,包含对永久性数据的訪问和管理。数据管理的方法主要有三种,即文件管理、关系数据库管理,以及面向对象的数据库管理。数据管理设计包含:
— 数据存放设计。数据存放设计选择数据存放的方式(文件存放、关系数据库表格存放或面向对象的数据库存放)。
— 设计对应的操作。为每一个须要存储的对象和类添加用于存储管理的属性和操作,在类和对象的定义中加以描写叙述。
在每个过程中,面向对象设计的基本操作步骤包含:
— 细化重组类。
— 细化和实现类间关系,明白其可见性。
— 添加属性,指定属性的类型与可见性。
— 分配职责,定义运行每一个职责的方法。
— 对消息驱动的系统,明白消息传递方式。
— 利用设计模式进行局部设计。
— 画出具体的类图与序列图。