- 320
- 0
- 约1.09万字
- 约 49页
- 2017-11-26 发布于湖北
- 举报
第7章 问题域部分的设计
上一章已经讲过,OOD的问题域部分以OOA的结果作为输入,按实现条件对其进行补充与调整。在很多方面需要补充与调整:有的编程语言不支持多继承和多态,在设计模型中就要去掉多继承,并考虑如何不使用多态而仍能完成原有的功能;选用的网络与操作系统会影响对象在不同站点上的分布、主动对象的设计、通信控制以及性能的改善措施等;若能得到可复用的模型成分,则要对模型进行修改;根据需要还可能要合并或分开一些类、属性或操作等等。 进行问题域部分设计,要继续运用OOA的方法,包括概念、表示法及一部分策略。不但要根据实现条件进行OOD设计,而且由于需求变化或新发现了错误,也要对OOA的结果进行修改。本章的重点是对OOA结果进行补充与调整,要强调的是:这部分工作主要不是细化,但OOA未完成的细节定义要在OOD完成。如下各节针对一些主要的情况讲述如何进行问题域部分的设计。 7. 1 为复用类而增加结构 如果在OOA阶段识别和定义的类是本次开发中新定义的,且没有可复用的资源,则需要进一步设计和编程。如果已存在一些可复用的类,而且这些类既有分析、设计时的定义,又有源程序,那么复用这些类显然可以提高开发效率与质量。 在OOD阶段要尽可能使用可复用的成分。例如,如果存在通用的类图书,在零售书店领域,可设立较特殊的类零售图书来继承它;而在图书馆领域,可设立类馆藏图书来继承它。如果有可能,还要尽量寻找相同或相似的具有特定结构的一组类进行复用,以减少新开发的成分。 可复用的类可能与OOA模型中的类完全相同,也可能只是相似。这要区分如下几种情况,分别进行处理。当前所需要的类(问题域原有的类)的信息与可复用类的信息相比: 1)如果完全相同,就把可复用的类直接加到问题域,并用{复用}标记所复用的类。 2)如果多于,就把可复用的类直接加到问题域,并用(复用}标记所复用的类,所需要的类再继承它。 3)如果少于,就把可复用的类直接加到问题域,删除可复用类中的多余信息,并用{复用} 标记所复用的类。 4)如果近似,按如下的方法处理: 把要复用的类加到问题域,并标以{复用}。 去掉(或标出)复用类中的不需要的属性与操作,建立从复用类到问题域原有的类之间的继承关系。 由于问题域的类继承了复用类的特征,所以前者中有些属性和操作就不需要了,应该把它们去掉。 考虑修改问题域原有类与其他类间的关系,必要时把相应的关系移到复用类上。 例如,问题域中有一个类“车辆”,其中的属性有:序号、颜色、样式和出厂年月,还有一个操作为“序号认证”。现在找到了一个可复用的类“车辆”,其中的属性有:序号、厂商和样式,也有一个操作为“序号认证”。首先把可复用的类“车辆”标记为{复用},去掉其中的不需要的属性“厂商”,把类“车辆{复用}”作为问题域中类“车辆”的一般类,再把问题域中类“车辆”中的属性“序号”和“样式”以及操作“序号认证”去掉,因为一般类中已经有了这些特征,类“车辆”从中继承即可。 7. 2 提高性能 为了提高性能,需要对问题域模型做一些处理。影响系统性能的因素有很多,下面给出一些典型的性能改进措施。 (1)调整对象的分布 把需要频繁交换信息的对象,尽量放在一台处理机上。 (2)增加保存中间结果的属性或类 对经常要进行重复的某种运算,可通过设立属性和专门的类来保存其结果值,以避免以后再重复计算。例如,对于商品销售系统,可设立一个类“商品累计”,用它的对象分门别类地记录已经销售出去的商品累计数量,以免以后每次都从头重新计算。 例如,在某个实时控制系统中,要对一种液体的流速进行自动控制。用一个流速探测器不断地探测液体的流速,同时流速调节器要根据探测结果及时对流速进行调节,使其稳定在一个流速范围内。最初的设计如图7-1a所示,用类“流速探测器”的对象中的操作“流速探测”不地刷新属性“当前流速”,用类“流速调节器”的对象中的操作“流速调节”反复地调用类“流速探测器”的对象中的操作“取当前流速”,并把读取的当前流速与属性“流速范围”比较,根据比较结果对设备进行调节。如果两个对象间的频繁消息传送成为影响性能的主要原因,则可以把两个类合并为一个类流速调节器,如图7-1b所示。 7. 3 增加一般类以建立共同协议 在OOA中,将多个类都具有的特征,提升到一般类中,考虑的是问题域中的事物的共同特征。在OOD中再定义一般类,主要是考虑到一些类具有共同的实现策略,因而用一般类集中地给出多个类的实现都要使用的属性和操作。如下为需要增加一般类的几种情况: 1) 增加一个类,将所有具有相同操作和属性的类组织在一起,提供通用的协议。例如,很多类都应该具有创建、删除、复
原创力文档

文档评论(0)