第十二章 面向对象系统设计第十二章 面向对象系统设计在软件开发人员完成了面向对象的分析之后,面向对象详细设计和开发阶段就可以开始,我们面对的问题是如何针对系统的具体实现进行面向对象的设计 。
第十二章 面向对象系统设计面向对象的软件构建过程见图 12.1,注意此时我们应建立了经过分析设计得到的定义得很好的类 。
编程语言应是面向对象的,如 C++,Java,Delphi
等等 。
一组语句就形成了一个服务 ( 方法 ) 。 服务与特定类相关,每个服务代表一个所需的操作方法,
使得类能完成系统中的职责 。 服务类似于系统中的模块 。 类组合形成子系统或系统软件,再与其他 4
个部件组合形成软件系统 。
语句子系统或系统服务类属性服务
S H
P
D P
一个或多个语句组成服务
S,软件,H,硬件,P,人员,P,过程,D,数据一个或多个服务属于一个类或对象类一个或多个对象类组成子系统或系统第十二章 面向对象系统设计第十二章 面向对象系统设计
12.1 从面向对象分析到面向对象设计面向对象设计四项主要工作问题域设计人机交互设计任务管理设计数据管理设计第十二章 面向对象系统设计从面向对象分析到面向对象设计面向对象分析是针对问题域和系统责任的,对应着分析工作五个活动,存在着面向对象分析的各层模型化的“问题空间”。
最终呈现越来越多的细节,层次是总体模型的一些水平薄片。
第十二章 面向对象系统设计第十二章 面向对象系统设计五个层次对应着在面向对象分析中介绍过的五个主要活动:
发现类及对象;
识别结构;
识别主题;
定义属性;
定义服务 。
这些活动,不必按顺序进行。这些活动指导人们从高的抽象层
(如问题域的类及对象)到越来越低的抽象层(结构、
属性和服务)。
从面向对象分析到面向对象设计第十二章 面向对象系统设计面向对象设计针对与实现有关的因素继续开展面向对象分析的五个活动,包括问题域、人机交互、任务管理和数据管理等四个部分的设计。如图所示,面向对象设计模型从横向看是上述四个部分,从纵向看每个部分仍然是五个层次。
第十二章 面向对象系统设计
1,为什么需要问题域部分设计首先,让我们先来分析一下在描述系统时的遇到的变动因素和稳定因素,这是面向对象分析方法的策略基础 。
12.2问题域部分设计 ( PDC:主体部件设计 ) 问题域部分
( PDC)设计但是,系统中最稳定的方面,就是问题空间被当作整体看待的对象

要使系统从容地适应变化的需求
,保持总体结构的稳定性就显得格外重要,重用的关键 \可扩充性所需要的 。
系统需求最容易变动的就是加工与子加工,就是服务;
其次,与外界的接口也是容易变动;
第三,描述问题空间中的实体所用的数据属性有时也在发生变化,
第十二章 面向对象系统设计
2 如何进行问题域部分设计首先:对需求说明修改,使它们反映到问题模型中,
其次,针对特定的实现环境,对分析结果加以增补 。
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计
·把问题域专用类组合在一起;
·通过增添一般类而建立协议;
·复审并挑剔对面向对象分析结果增补
·调整继承的支持级别;
·提供数据管理部分;
·不要仅为反映队伍分工而作修改
·增加低层细节;
·改进性能;
要考虑以下因素:
重用设计和编程类;
第十二章 面向对象系统设计
11.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计首先考虑的因素:
·重用设计和编程类;
首先考虑如何从自己的或别人的源程序中把现成的类增加到问题域部分 。 现成的类可能是用面向对象方法编写的,
也可能是用某种非面向对象方法编写的可用软件,
在后一种情况下,把软件封装在一个特意设计的,基于服务的界面中,
改造成类的形式,把现成的类增加到问题域部分中 。
其次,划掉现成类中任何不用的属性和服务;并增加一个现成类到问题域类之间的一般/特殊关系 。
接着,划掉问题域类中不再需要的部分,这些属性和服务现在是从现成类中继承的了,并修正问题域类的结构和连接,必要时把它们移向现成类

第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计其次考虑的因素在面向对象设计中,通常先引入一个类以便把问题域专用的类组合在一起,它仅仅起到,根,类的作用,把全部下层的类组合在一起 。
一般/特殊结构如图所示的例子中的,面向对象分析 Root”就是这样的一个,根,
类当没有一种更满意的组合机制可用时,这实际上就是一种把类库中的某些类组织在一起的方法 。
而且这样的类可以用于建立一个协议
·把问题域专用类组合在一起;
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计面向对象分析 Root
面向对象分析 Subject
面向对象分析 Attribute
面向对象分析 Class
面向对象分析 Connection
面向对象分析 Service
面向对象分析 GenSpec Connection
面向对象分析 Instance Connection
面向对象分析 Message Connection
面向对象分析 Part Connection
·把问题域专用类组合在一起; 其次考虑的因素第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计·通过增添一般类而建立协议;
第三考虑因素:
有时,一些专用类将需要一个相似的协议,这意味着它们将要定义一个相似的服务 ( 以及相应的属性 ) 集合 。 在这种情况下,可引进一个附加类,以便建立这种协议 。
在上面例子中的,面向对象分析 Part”就是这样的一个类,它为所有的特殊类定义了一个共同遵守的协议 。
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计第四考虑因素:
有时如果面向对象分析的一般/特殊结构包括多继承,在使用一种只有单继承或无继承性的编程语言时,就需要对面向对象分析的结果作一些修改 。
( 1) 多继承模式
( 2) 针对单继承语言的调整
·调整继承的支持级别;
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计
1
多继承模式
·调整继承的支持级别; 第四考虑因素:
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计
2
针对单继承语言的调整
·调整继承的支持级别; 第四考虑因素:
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计性能是一个系统成功的关键因素 。 性能的含义远不只是一个系统或应用程序执行得多快,上乘的软件能把该做的事情做得,足够快,( 符合需求或客户期望 ),而且费用和进度又符合要求 。
下面有几种可望改进性能的措施:
第五考虑因素:·改进性能;
在对象之间具有高度繁忙消息流通的情况下,
把两个或更多的类加以合并可实现高度耦合;
在类及对象中扩充一些保存临时结果的属性。
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计第六考虑因素:
·提供数据管理部分;
为了提供数据管理部分,每个被保存的对象需要知道自己是怎样被存储的 。
( 1)第一种方法是“每个对象自己保存自己”;通知一个对象保存自己;每个对象知道如何保存自己;增加一个属性和一个服务来完成此事。
( 2)第二种方法是,每个对象把自己传送给数据管理部分,让数据管理部分来存储对象自己,通知一个对象保存自己;在这种方法中,可以把任何 — 个提供同一组服务的存储系统插入数据管理部分,而不需对问题域部分做额外的修改;增加属性和服务以完成此事。
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计第七考虑因素:·增加低层细节 ;
为了设计和编程的方便,可以在低层成分中分离出一些独立的类,
这种方法有助于把与机器细节有关的东西放在低层类中隔离起来 。
第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计第八考虑因素:
在进行小组分工时,不要分裂问题域的基本结构和类,要遵守稳定性,可重用性和可扩充性的原则,那种因人设事的修改是毫无意义的 。
相反,应完整地保持问题域部分,把较大的结构和类分配到各个小组 。
·不要仅为反映队伍分工而作修改第十二章 面向对象系统设计
12.2问题域部分 ( PDC) 设计 问题域部分
( PDC)设计第九考虑因素:
考察所做的选择,重新审查和挑剔对问题域部分的内容所作的任何修改 。 无论何时何地,
要尽可能地保持建立的基本问题域的结构 。
·复审并挑剔对面向对象分析结果增补第十二章 面向对象系统设计
1,为什么需要人机交互部分设计人机交互部分突出人如何命令系统以及系统如何向用户提交信息,人在使用计算机过程中的感受直接影响到他 ( 她 ) 对系统的接受程度 。
人机交互中起主导作用的是人,为了考察其产品的用户友好性,国外一些大的软件公司在新产品上市之前,总要组织一些实际的用户进行产品试用,并通过详细考察和记录被试验者的生理反应,从而确定产品是否使用户感到满意 。
非计算机专业人员在使用计算机的人群中所占的比例不断增加;
人机交互部分的友好性直接关系到一个软件系统的成败;
性能很差的人机交互部分将使一个功能很强的产品变得不可接受。
12.3人机交互部分设计 ( HIC:用户界面部件 ) 人机交互部分
( HIC)设计第十二章 面向对象系统设计
12.3 从面向对象分析到面向对象设计其它三个部分则是面向对象分析阶段未曾考虑的,全部在面向对象设计阶段建立。
人机交互部分包括有效的人机交互所需的显示和输入,这些类在很大程度上依赖于所用的图形用户界面环境,例如 Windows,
Foxbase,C++,而且可能包括
“窗口”、“菜单”、“滚动条”、“按钮”等针对项目的特殊类。
人机交互部分第十二章 面向对象系统设计
12.3 从面向对象分析到面向对象设计人机交互部分
FrontPage编辑区视图模式默认文件名网页查看方式第十二章 面向对象系统设计
2 如何设计人机交互部分
12.3人机交互部分 ( HIC) 设计 人机交互部分
( HIC)设计
·描述人和他们的任务脚本;
·设计命令层次;
·设计详细的交互;
·继续做原型;
·对人分类; 要考虑以下策略:
·;
·设计人机交互部分的类;
·根据图形用户界面 ( 如果可用的话 ) 进行设计 。
第十二章 面向对象的设计方法
12,3人机交互部分 ( HIC) 设计 人机交互部分
( HIC)设计考虑按以下的一个或几个原则分类:
( 1) 按技能层次分类初学者/临时人员/中级水平/高级水平
( 2) 按组织层次分类行政人员/办公人员/职员/管理人员/办事员
( 3) 按不同组的成员身份职员/顾客
·1,对人分类花些时间去研究将使用系统的人,把自己置身于用户的地位,
并在那里多待一会儿。身临其境地看人们如何实际地做他们的工作。
这是绝对需要的,要真正设身处地为那些与系统利害相关的人着想。
考虑这些人想达到什么目的? 他们要完成什么任务? 你能提供什么具体工具来支持那些任务
? 工具如何做得最协调?
第十二章 面向对象的设计方法任务又称为进程 ( 进程是一连串的活动,由它的代码所定义 ),若干任务并发执行时叫做多任务 。
下列几类系统是需要多任务的:
负责局部设备的数据采集及控制的系统需要多任务;
某些人机界面 —— 其中的多窗口可同时选来做输入 ——
需要多任务;
多用户系统,一个用户任务可能有多份复制品;
多子系统软件结构,任务可能被用作程序片之间的协作和通信;
负责与其他系统通信的系统需要多任务 。
单处理机上的多任务,可能需要一个任务在其他任务执行期间与它们协作和通信 。
12.4 任务管理部分 ( TMC) 设计任务管理部分第十二章 面向对象的设计方法任务增加了设计,编码和过程的复杂性,因此必须细心地选择并作最终调整 。
( 1) 用户输入错误 。
( 2) 设备错误 。
( 3) 物理限制 。
( 4) 代码错误 。
12.4 任务管理部分 ( TMC) 设计任务管理部分第十二章 面向对象的设计方法
12.4.1 为什么需要有任务管理部分对某些应用来说,任务能简化总体设计和编码 。
独立的任务把必须并发执行的行为分离开来 。 这种并发行为可以在多个独立的处理机上实现,或者在运行多任务操作系统的单处理机上模拟 。
设立任务的优点:简化必要的并发行为的设计和编码 。
设立任务的副作用:会增加设计,
编码,测试和维护的复杂性 。
12.4 任务管理部分 ( TMC) 设计任务管理部分第十二章 面向对象的设计方法
12.4.2 怎样设计任务管理部分任务的选择和调整,遵照下述策略:
( 1) 识别事件驱动任务:事件驱动的任务是指与设备,其他处理机或其他系统通讯的任务 。
( 2) 识别时钟驱动任务:时间驱动的任务是指按一定时间周期激活的任务

( 3) 识别优先任务和关键任务:关键任务是指对整个系统成败起重要作用的任务,这些任务处理要求有较高的可靠性 。
12.4 任务管理部分 ( TMC) 设计任务管理部分第十二章 面向对象的设计方法
( 4) 定义任务协调器:三个或三个以上的任务应增加一个任务协调器 ( 一个新类 ),专门负责任务之间的调动
,协同和仲裁 。
( 5) 定义任务:说明任务的名称,描述任务的功能,优先级,包含此任务的服务,任务与其他任务的协同方式以及任务的通信方式 。
12.4 任务管理部分 ( TMC) 设计任务管理部分第十二章 面向对象的设计方法设计数据管理部件的目的是,将目标软件系统中依赖开发平台的数据存取部分与其他功能分离,数据存取通过一般的数据管理系统 ( 如文件系统,关系数据库或面向对象数据库 ) 实现,但实现细节集中在 DMC中 。 这样既有利于软件的扩充,移植和维护,又简化了软件设计,编码和测试的过程 。
12.5 数据管理部件 ( DMC) 的设计数据管理部分第十二章 面向对象的设计方法无论哪种数据管理方法 。 DMC都包括数据存放方法的设计,也包括相应服务的设计 。
1,采用普通文件数据管理时对象需要知道要打开那些文件,如何正确地定位到文件的有关记录,如何检索旧的值,以及如何用新的值进行更新 。
2,采用关系型数据库管理时对象要知道存取那些表,如何存取所需的栏,如何检索旧的值
,以及如何用新的值进行更新 。
3,面向对象的数据管理时扩充的关系型方法,与采用关系型数据库管理系统时所介绍的方法相同 。
12.5 数据管理部件 ( DMC) 的设计第十二章 面向对象的设计方法对象模型的数据管理部件要实现以下目标

( 1) 存储问题域的持久对象 ( 类 ) 。
也就是说,对于那些在信息系统中两次调用之间需要保存的对象,数据管理部件提供了与操作平台的数据管理存储系统之间的接口 —— 文件,关系的,索引的,面向对象的或其他类型的 。
( 2) 数据管理部件为问题域中所有的持久对象封装了查找和存储机制 。
12.5 数据管理部件 ( DMC) 的设计数据管理部分问题域车辆项机动车名称型号发动机编号颜色制造厂出厂时间销售项销售商销售价格售出时间售出地点车主项姓名身份证所在地区机动车管理系统模型数据管理车辆项数据管理机动车名称数据管理车辆型号、参数数据管理制造厂数据管理销售项数据管理销售商数据管理销售价格数据管理售出信息数据管理车主项数据管理车主信息数据管理人机交互任务管理第十二章 面向对象的设计方法对象模型的数据管理部件要实现以下目标

( 1) 存储问题域的持久对象 ( 类 ) 。
也就是说,对于那些在信息系统中两次调用之间需要保存的对象,数据管理部件提供了与操作平台的数据管理存储系统之间的接口 —— 文件,关系的,索引的,面向对象的或其他类型的 。
( 2) 数据管理部件为问题域中所有的持久对象封装了查找和存储机制 。
12.5 数据管理部件 ( DMC) 的设计数据管理部分第十二章 面向对象的设计方法
12.5 数据管理部件 ( DMC) 的设计数据管理车辆项数据管理机动车名称数据管理车辆参数数据管理制造厂数据管理销售项数据管理销售商数据管理销售价格数据管理售出信息数据管理车主项数据管理车主信息数据管理车辆项数据管理车辆项服务车辆参数据管理车辆 参数服务机动车名称管理名称服务制造厂数据管理制造厂服务销售项数据管理销售项服务销售价格数据管理价格服务售出信息数据管理售出信息服务车辆项数据管理车辆项服务车主信息数据管理车主信息服务第十二章 面向对象的设计方法
12.6 小结本章介绍了面向对象的软件设计技术 。 即:
在软件开发人员完成了面向对象的分析之后,
如何针对对象系统的五个层次 —— 类及对象层,
结构层,主题层和服务层,具体地实现进行面向对象的设计 。 介绍了面向对象设计的四项主要工作 —— 问题域部分的设计,人机交互部分的设计,任务管理部分的设计和数据管理部分的设计 。
第十二章 面向对象的设计方法
12.6 小结面向对象分析的结果被直接地放进问题域部分
。 在这个部分中,可能需要类,结构,属性及服务的结合与分解 。 这种分解采用专门的工程标准来做,而工具需要获知每一个决策 。 标准包括可重用的设计与编码类,把问题域专用类组合在一起,通过增加一般类来创立约定,提供一个继承性的支撑层次,改善界面,提供存储管理,以及增加低层细节等 。
第十二章 面向对象的设计方法
12.6 小结人机交互部分包括有效的人机交互所需的显示和输入 。 这些类在很大程度上依赖于所用的图形用户界面 (
GUI) 和针对 GUI的特殊类 。
任务管理部分包括任务 ( 程序 ) 的定义,通讯和协调 。 还包括硬件分配,外部系统及设备约定 。
数据管理部分包括永久数据的存取,它隔离了数据管理方法,无论是普通文件,带标记语言的普通文件,
关系型,面向对象,或其他的面向对象分析集中于问题域,系统责任和需求 。