如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第十一章面向对象的设计11.7设计任务管理子系统11.8设计数据管理子系统11.9设计类中的服务11.10设计关联11.11设计优化11.12小结习题第十一章面向对象的设计因此分析和设计活动是一个多次反复迭代的过程,面向对象方法学在概念和表现方法上的一致性,保证了在各项开发活动之间的平滑(无缝)过度,领域专家和开发人员能够比较容易地跟踪整个系统开发过程,这是面向对象方法与传统比起来具有的一大优势。二、三、OOD模型概述先看下图:OOD模型OOD模型四、11.1面向对象设计的准则3、信息隐蔽5、高内聚11.2面向对象设计的启发规则分析与设计毕竟是性质不同的两类开发工作,分析工作可以与具体实现无关,设计工作则在很大程度上受具体实现环境的约束。因此OOD的问题域部分把OOA的结果作为输入,按实现条件进行补充与调整。在开始进行设计工作之前(至少在完成设计之前),设计者应该了解本项目预计要使用的编程语言,可用的软构件库(主要是类库)以及程序员的编程经验。设计问题域主要要做以下工作:1、为复用类而增加结构。2、增加一般类为建立共同协议(简化系统结构,提高继承和多态性)。3、按编程语言调整继承。4、提高性能。5、调整与完善属性。一、为复用类而增加结构如果OOA识别定义的类是本次开发新定义的,且没有可复用资源,则需要进一步设计、编程,如果已存在一些可复用的类,而且这些类及有分析、设计时的定义,还有源代码,复用这些类显然可以提高开发效益和质量。此阶段的目标是尽可能使用可复用的成分例:通用类“图书”,在零售书店领域可用特殊类(子类)“零售图书”从中继承,图书馆领域可用特殊类(子类),“馆藏图书”从中继承。如何使用复用类?如何使用复用类?如果可用类只是与OOA模型中的类相似,而不是完全相同,就需要对二者进行修改,不同相似情况分别处理方式如下:1.如果两个类相等,就把可复用的类,直接加到问题域,并用{复用}加以标记所复用的类。2.如果新类的需求多于可复用类,就把可复用类直接加到问题域,并用{复用}加以标记所复用的类,所需要类再从中继承。3.如果新类的需求少于可复用类,就把可复用类直接加到问题域,删除可复用类中得多余信息,并用{复用}加以标记所复用类。4.如果约等于按如下方法处理:把要复用类加到问题域.标以{复用}划掉要复用类中无用的属性,建立与问题域原有类之间的继承关系.由于问题域的类继承了复用类的特征,所以前者中有些属性和操作就不需要了,应该把它们划掉。修改问题域原有类与其它类的关系,必要时,把相应的关系移到复用类上。4.如果约等于按如下方法处理:例:问题域中类“车辆”,其属性有“序号”“颜色”“样式”和“出厂年月”,操作“序号认证”。现找到一个可复用类“车辆”,其属性有“序号”“厂商”和“样式”,操作“序号认证”。首先把可复用的类“车辆”标记为{复用},划掉不用的属性“厂商”把类“车辆{复用}”作为类“车辆”的一般类,再把类“车辆”中的属性,“序号”“样式”操作“序号认证”去掉,类“车辆”继承即可。二、增加一般类以建立共同协议在OOA中考虑的是问题域中的事物的共同特征,而设定一般类。在OOD中一般类的定义主要考虑,一些类具有共同的实现策略,即多个类的实现都要使用的属性和操作集中抽象成一般类。如以下情况:增加一个类将所有具有相同的操作和属性的类组织一起,提供通用协议。例:每个类都具有“创建”“删除”“复制”等操作可以把它们放在一般类“信息处理”类中,特殊类“学生信息”“教师信息”等从中继承。三、按编程语言调整继承:OOA如实反映问题域,OOD才考虑实现、OOA模型中出现了多继承,而编程语言不支持多继承,甚至不支持继承,就需要按编程语言对OOA的设计进行调整。1.对多继承的调整方法1:把其中的一个继承关系换为聚合关系如:由于聚合和继承是不同的概念,以上方法不可通用,大多数情况需要考虑形成多继承的原因进行转换。例:一般类“人员”,两个特殊类为“研究生”“教职工”多继承图A,调整单继承图为B。(用聚合把多继承转成单继承)多继承图A单继承图为B方法2:采用压平的方式,上例:把“在职研究生”直接升为“人员”图,2.取消继承(若编程语言不支持继承只能取消)方法1:继承结构展平成如下:方法2:继承转为聚合如:3.对多态性的调整如果编程语言不支持多态性,就要把与多态性有关的属性和操作的名字分别赋予不同的含义,有时还要按实际需要重新分类。四、提高性能影响系统性能的因素大体上可分为三类:数据传输时间,数据存取时间和处理时间,为了提高性能,需对问题作如下处理。1.调整对象的分布:尽量把需要频繁交换信息的对象放在一台