第三部分 面向对象设计
3.1 面向对象设计(OOD)的定义?
在面向对象分析阶段,已经针对用户需求建立起用面向对象概念描述的系统分析模型。在设计阶段,要考虑为实现系统而采用的计算机设备、操作系统、网络、数据库管理系统以及所采用的编程语言等有关因素,进一步运用面向对象的方法对系统进行设计,最后形成一个可以实现的设计模型,即面向对象设计模型。
3.2 面向对象设计(OOD)与面向对象分析(OOA)的关系?
在面向对象分析阶段,针对的是现实世界,把需求转化为面向对象概念所建立的模型,以易于理解问题域和系统责任,最终建立一个映射问题域,满足用户需求,独立于实现的OOA模型,面向对象的设计就是在面向对象分析的基础上运用面向对象方法主要解决与实现有关的问题,,目标是产生一个符合具体实现条件的OOD模型。由于OOD以OOA为基础,且OOA与OOD采用一致的表示法,使得从OOA到OOD不存在转换,只需做必要的修改与调整。OOA与OOD之间不存在传统方法中分析与设计之间的鸿沟,二者能够紧密衔接。OOA与OOD之间不强调阶段划分,但是OOA与OOD有着不同的侧重点和不同的分工,并因此具有不同的开发过程及具体策略。“分析”只针对问题域和系统责任,不考虑实现有关的因素,建立一个独立于实现的OOA模型;设计则考虑与实现有关的问题,如选用的编程语言、数据库系统和图形用户界面等,建立一个针对具体实现的OOD模型。
3.3 面向对象设计(OOD)的特点?
- 以面向对象的分析为基础,一般不依赖结构化分析
- 与相应的OOA方法共同构成OOA&D方法体系,OOA和OOD采用一致的概念与原则,但属于软件生命周期的不同阶段,有不同的目标和策略
- 较全面地体现了面向对象方法的概念与原则
- 大多数OOD方法独立于编程语言,但是具体应用OOD时,则要考虑特定编程语言,因为它通过面向对象的设计所得到的系统模型,要由确定的编程语言实现
3.4 面向对象设计(OOD)过程以及过程模型?
在OOA 阶段只考虑问题域和系统责任,在OOD阶段则要考虑与具体实现有关的问题,这样做的目的是
- 使反映问题域本质的总体框架和组织结构长期稳定,而细节可变
- 把稳定部分(问题域部分)与可变部分(与实现有关的部分)分开,使得系统能从容地适应变化
- 有利于同一个分析模型用于不同的设计和实现
- 支持系统族和相似系统的分析与设计
- 使一个成功的系统具有超出其生存期的可扩展性
为达到上述目的,设计如下的面向对象设计模型
从一个侧面观察OOD模型,它包括一个核心部分,即问题域部分;还包括四个外围部分,即人机交互部分、控制驱动部分、数据管理部分以及构件及部署部分。初始的问题域部分即为OOA模型,要按照实现条件对其进行补充与调整;人机交互部分即人机界面设计部分;控制驱动部分即用来定义和协调并发的各个控制流;数据管理部分用来对永久对象的存取建模;构件及部署部分中的构件模型用于描述构件以及构件之间的关系,部署模型用于描述结点、结点之间的关系以及构件在结点上的分布。
OOD过程
- 问题域部分的设计
- 人机交互部分的设计
- 控制驱动部分的设计
- 数据管理部分的设计
3.4.1 问题域部分的设计
问题域部分是由与问题有关的对象构成,并且在特定的实现平台上提供用户所需功能的组成部分。它是在OOA模型基础上按实现的要求进行必要的修改、调整和细节补充而得到的。
问题域部分设计过程是:
- 输入OOA模型,并进行必要的修改
- 逐一考察影响问题域部分设计的实现条件,对模型作相应的调整与补充
- 建立分析文档和设计文档之间的映射关系
设计内容及策略
(1)针对编程语言支持能力的调整:包括对继承的调整和对多态性的调整
(2)增加一般类,提供共同协议
(3)为实现复用采取的设计策略:直接复用;删除可复用类的多余信息;通过继承复用;删除多余信息,通过继承而复用
(4)提高性能:从数据传输时间、数据存取时间、数据处理时间三个方面考虑
(5)为实现对象永久存储所做的修改
(6)完善对象的细节:弥补OOA模型的不足;解决OOA结点推迟考虑的问题;设计对象的操作;设计表示关联的属性(一对一、一对多);设计表示整体-部分关系的属性
(7)定义对象实例
(8)修改或补充辅助模型及模型规约
3.4.2 人机交互部分的设计
人机交互部分突出人如何命令系统以及系统如何向用户提交信息。设计人机交互就是要设计输入与输出,其中所包含的对象(称作界面对象)以及其间的关系构成了系统的人机交互部分的模型。
人机界面的OO设计:一般是以一种选定的界面支持系统为基础,利用它所支持的界面构造成分,设计一个可满足人机交互需求、适合使用者特点的人机界面设计模型。
- 界面支持系统:包括窗口系统、图形用户界面、可视化编程环境
- 界面元素:窗口、菜单、对话盒、滚动条、其他
设计过程和策略:
面向对象的人机界面设计是在人机交互需求分析的基础上,以选定的界面支持系统为背景,选择实现人机交互所需的界面元素来构造人机界面,并用面向对象的概念和表示法来表示这些界面元素以及它们之间的关系,从而形成整个系统的OOD模型的人机交互部分
- 选择和掌握界面支持系统:考虑硬件、操作系统以及编程语言;界面实现的支持级别;界面风格与视感;其他(软件价格、熟悉哪种操作系统)
- 根据人机交互需求选择界面元素:系统的启动;高层命令组织结构的实现;基本命令的执行;异常命令的输入;详细交互过程的输入与输出
- 用OO概念表示界面元素:对象和类;属性与操作;整体-部分结构;一般-特殊结构;关联;消息
- 设计原则:尽量减少用户输入;有效性检查(如格式检查、内容检查);
人机交互部分设计准则
- 易学、易用、操作方便
- 尽量保持一致性
- 及时提供有意义的反馈
- 尽量减少用户的记忆
- 减少重复的输入和操作
- 提供具有语境敏感的功能
- 防止灾难性错误
ps:命令
基本命令:使用一项独立的系统功能的命令
命令步:在执行一条基本命令的交互过程中所包含的具体输入步骤
高层命令:一条命令是在另一条命令的引导下完成的
3.4.3 控制驱动部分的设计
控制驱动部分由系统中全部主动类构成,这些主动类描述了系统中所有的主动对象,每个主动对象是系统中一个控制流的驱动中。一个控制流就是一个进程(既是处理机资源的分配单位又是其他资源的分配单位)或者线程(仅仅是处理机资源的分配单位)
设计过程和策略:
- 选择软件体系结构风格:综合考虑各种因素,做出合理的权衡
- 确定系统分布方案:从数据分布和功能分布考虑,包括对象的分布、类的分布、类图的分布和在类规约中的表示
- 识别控制流:以结点为单位识别控制流;从用户需求、用例来认识控制流;实现并行计算、结点之间通信的控制流;对其他控制流进行协调的控制流
- 用主动对象表示控制流
- 把控制驱动看成一个包
3.4.4 数据管理部分的设计
数据管理部分负责将应用系统中的对象在选定的数据管理系统中进行存储,并将存储结果恢复到应用系统,将实现数据存储、检索、管理、维护的系统称为数据管理系统,包括文件系统和数据库系统两大类。
由于目前面向对象数据库还没有广泛使用,所以我们还是以关系型数据库为主,存储检索数据。
数据库(DB):数据库是长期存储在计算机内、有组织、可共享的数据集合
数据库管理系统(DBMS):DBMS是用于建立、使用和维护数据库的软件。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性
关系数据库与面向对象方法不匹配,原因在于:关系数据库不是全面支持面向对象中的全部概念,如类间关系(继承、多态)
非关系型数据库:优点是存储任何对象,缺点是对非关系型数据库很难进行结构化操作
面向对象数据库:采用面向对象数据模型的数据库称为面向对象数据库,支持面向对象的基本概念
数据库设计的基本流程:
- 概念设计阶段:将用户下信息要求统一到一个整体逻辑结构中,此结构能表达用户的要求,且独立于任何DBMS软件和硬件
- 逻辑设计阶段:将概念设计阶段得到的结果转换为与选用的DBMS所支持的数据模型向符合的逻辑结构
- 物理设计阶段:对给定的逻辑数据模型选取一个最适合应用要求的物理结构。数据库的物理结构包括数据库的存储记录格式、存储记录安排、存取方法等,它是完全依赖于给定的硬件环境和数据库产品的
3.4.5 构件及部署部分的设计
构件图和部署图分别用于对系统进行构件设计和部署设计。
构件图设计:利用构件对面向对象系统物理实现方面建模,其中一个主要建模元素是制品,可以把制品分为工作产品制品(开发过程的产物,如源代码及数据文件等),可部署的制品(如动态链接库dll或可执行程序exe文件)。对具体的物理构件进行建模,直至能对产生的构件进行部署。
部署图设计:对系统的网络结构进行拓扑,也可以用它展示部署在结点上的构件。主要用于对嵌入式系统和分布式系统进行建模
具体可参考构件图和部署图的设计
参考书籍
《面向对象的系统分析》(第2版) 邵维忠 杨芙清 著
《UML面向对象技术教程》 王少锋 编著