Part3_Chap03 问题域部分的设计2014-04-22_第1页
Part3_Chap03 问题域部分的设计2014-04-22_第2页
Part3_Chap03 问题域部分的设计2014-04-22_第3页
Part3_Chap03 问题域部分的设计2014-04-22_第4页
Part3_Chap03 问题域部分的设计2014-04-22_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3 3章章 问题域部分的设计问题域部分的设计 3.1 3.1 什么是问题域部分什么是问题域部分3.2 3.2 实现条件对问题域部分的影响实现条件对问题域部分的影响3.3 3.3 设计过程设计过程对对OOA结果按实现条件进行补充与调整就是问题域部分。结果按实现条件进行补充与调整就是问题域部分。 进行问题域部分设计,要继续运用进行问题域部分设计,要继续运用OOA的方法,包括概念、表示法及的方法,包括概念、表示法及一部分策略。不但一部分策略。不但 要根据实现条件进行要根据实现条件进行OOD设计,而且由于需求变化或设计,而且由于需求变化或新发现了错误,也要对新发现了错误,也要对OOA的结果进行修改

2、,的结果进行修改,OOA未完成的细节定义要未完成的细节定义要在在OOD完成。完成。 将将OOA模型搬到模型搬到OOD作为作为OOD的基础的基础人机交互部分人机交互部分数据管理部分数据管理部分控制驱动部分控制驱动部分问题域问题域部分部分OOA模型模型按实现条件(按实现条件(编编程语言,网络与程语言,网络与操作系统,复用操作系统,复用支持等支持等)进行必)进行必要的调整。要的调整。3.1 什么是问题域部分什么是问题域部分1. 编程语言编程语言编程语言对问题域部分的设计影响最大,其中包括两方面的问题:(1)选定的编程语言可能不支持某些面向对象的概念与原则,例如不支持多继承或者多态性,此时要根据编程语

3、言的实际表达能力对模型进行调整,以保证设计模型和源程序的一致。(2)OOA阶段可能把某些与编程语言有关的对象细节推迟到OOD阶段来定义,例如对象的创建、删除、复制、转存、初始化等系统行为,属性的数据类型,和属性和操作的可见性等。编程语言确定之后,这些问题都要给出完整的解决。硬件、操作系统及网络设施硬件、操作系统及网络设施 对象的在不同站点上的分布、主动对象的设计、通信控制以及性能改进措施等。对问题域部分和控制驱动部分都有影响。3.2 实现条件对问题域部分的影响实现条件对问题域部分的影响复用支持复用支持存在对设计和编码的可复用构件,用以代替OOA模型中新定义的类无疑将提高设计与编程效率。4. 数

4、据管理系统数据管理系统主要影响OOD模型的数据接口部分的设计,对问题域部分的设计要进行相应的修改,补充一些访问该接口所需的属性与操作。5. 界面支持系统界面支持系统主要影响人机交互部分的设计,但需要与问题域部分进行消息的传递。3.2 实现条件对问题域部分的影响实现条件对问题域部分的影响7(1)为复用设计与编程的类而增加结构;(2)增加一般类以建立共同协议;(3)按编程语言调整继承;(4)提高性能;(5)为数据存储管理增补属性与服务;(6)为编程方便增加底层成分; (7) 决定关系的实现方式; (8)对例外的处理; (9)编程语言限制了可用的属性类型; 3.3 设计过程设计过程8(10)构造或优

5、化算法;(11)调整服务;(12)决定对象间的可访问性;(13 )考虑采用设计模式;(14)其它。3.3 设计过程设计过程9首先要把OOA的最终结果完整地保存起来,作为永久性的技术文档,然后复制一份OOA文档作为OOD的初始文档,设计中的一切修改和补充,都在复制的文档上进行。 3.3.1 设计准备(设计准备(1)3.3 设计过程设计过程10设计人员和分析人员的工作交接中和在自己的设计过程中,都可能发现分析工作的某些缺陷,包括对问题域和用户需求的误解、遗漏和模型表示上的偏差。针对以上问题,需要对OOA模型进行修改。需求变化所引起的修改由分析人员单独完成;设计人员对OOA模型的异议可由分析人员和设

6、计人员共同解决,两者都要经过管理人员的认可。修改的结果首先应作为OOA模型的修订版本存档,然后复制一份作为OOD的输入。 3.3.1 设计准备(设计准备(2)3.3 设计过程设计过程11(1)对继承的调整)对继承的调整起因:起因:OOA强调如实地反映问题域,强调如实地反映问题域,OOD考虑实现问题,所用语言可能考虑实现问题,所用语言可能不支持多继承,甚至不支持继承。不支持多继承,甚至不支持继承。多继承模式多继承模式狭义菱形狭义菱形广义菱形广义菱形 3.3.2 设计内容及策略设计内容及策略 3.3.2.1 针对编程语言支持能力的调整针对编程语言支持能力的调整12BACBAC因为聚合和泛化是不同的

7、概念,这种方法并不是通用的(按定义)。在大多数情况下,需要考虑形成多继承的原因,将本来在特殊类中显式定义的信息离出来,作为部分对象,以原来的一般类作为整体对象。 把多继承调整为单继承把多继承调整为单继承 (1)对继承的调整)对继承的调整 3.3.2 设计内容及策略设计内容及策略 3.3.2.1 针对编程语言支持能力的调整针对编程语言支持能力的调整13方法方法1 1:采用:采用关联关联公司人员公司人员顾主顾主职员职员顾主职员顾主职员公司人员公司人员身份身份顾主身份顾主身份职员身份职员身份0.21(1)对继承的调整)对继承的调整 3.3.2 设计内容及策略设计内容及策略 3.3.2.1 针对编程语

8、言支持能力的调整针对编程语言支持能力的调整14公司人员公司人员身份身份顾主身份顾主身份职员身份职员身份10.10.11(1)对继承的调整)对继承的调整 3.3.2 设计内容及策略设计内容及策略 3.3.2.1 针对编程语言支持能力的调整针对编程语言支持能力的调整15方法方法2 2:压平:压平公司人员公司人员顾主顾主职员职员顾主职员顾主职员问题:有什么缺点?问题:有什么缺点?(1)对继承的调整)对继承的调整 3.3.2 设计内容及策略设计内容及策略 3.3.2.1 针对编程语言支持能力的调整针对编程语言支持能力的调整16公司人员公司人员顾主顾主职员职员顾主职员顾主职员顾主信息顾主信息职员信息职员

9、信息(1)对继承的调整)对继承的调整 3.3.2 设计内容及策略设计内容及策略 3.3.2.1 针对编程语言支持能力的调整针对编程语言支持能力的调整17方法方法3 3:取消泛化:取消泛化顾主顾主职员职员顾主职员顾主职员问题:有什么缺点?问题:有什么缺点?(1)对继承的调整)对继承的调整18(2)对多态性的调整)对多态性的调整增加根类:增加根类:将所有的具有相似协议的类组织在一起将所有的具有相似协议的类组织在一起 提供通用的协议提供通用的协议例:提供创建、删除、复制等服务例:提供创建、删除、复制等服务增加其他一般类:增加其他一般类:提供局部通用的协议提供局部通用的协议例:提供永久存储及恢复功能例

10、:提供永久存储及恢复功能 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.2 增加一般类,提供共同协议增加一般类,提供共同协议20(1)为复用设计与编程的类而增加结构)为复用设计与编程的类而增加结构OOA识别和定义的类是本次开发中新定义的,需要进行识别和定义的类是本次开发中新定义的,需要进行编程。编程。如果已存在一些可复用的类,而且这些类既有分析、设如果已存在一些可复用的类,而且这些类既有分析、设计时的定义,又有源程序,那么,复用这些类即可提高开发计时的定义,又有源程序,那么,复用这些类即可提高开发效率与质量。效率与质量。可复用的类可能只是与可复用的类可能只是与O

11、OA模型中的类相似,而不是完模型中的类相似,而不是完全相同,因此需对二者进行修改。全相同,因此需对二者进行修改。目标:尽可能使复用成分增多,新开发的成分减少目标:尽可能使复用成分增多,新开发的成分减少 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.3 为实现复用采取的设计策略为实现复用采取的设计策略21不同程度的复用不同程度的复用当前所需的类的信息当前所需的类的信息比比可复用类定义的信息可复用类定义的信息直接复用直接复用 通过继承复用通过继承复用 删除可复用类的多余信息删除可复用类的多余信息删除多余信息,通过继承而复用删除多余信息,通过继承而复用 3.3.2 设

12、计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.3 为实现复用采取的设计策略为实现复用采取的设计策略22第四种情况的做法:第四种情况的做法:把要复用的类加到问题域,标以把要复用的类加到问题域,标以 “复用复用”,划掉(或标,划掉(或标出)不用的属性与服务。出)不用的属性与服务。建立从复用类到问题域原有的类之间的泛化关系。建立从复用类到问题域原有的类之间的泛化关系。由于问题域的类继承了由于问题域的类继承了“复用复用”类的特征,所以有些属类的特征,所以有些属性和服务不需要了性和服务不需要了划掉。划掉。修改问题域原有类的结构和连接,必要时移到修改问题域原有类的结构和连接,必要时移到“

13、复用复用”类。类。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.3 为实现复用采取的设计策略为实现复用采取的设计策略23例:例:序号颜色式样出厂年月序号认证车辆序号厂商式样序号认证可复用的类车辆问题域中的类(复用)(复用)车辆序号厂商式样序号认证可复用的类24对相似的操作的处理对相似的操作的处理 有时在若干类中定义了相同的操作,就能够从共同的超类中继承它们。 然而,在不同类中的操作经常是相似的,而不是相同的。这时需要对操作原型做小的修改,使得操作就可以相互匹配,即不仅操作的名字和特征标记必须相匹配,而且它们应该都具有相同的语义含义。 调整继承的策略 1若有些操

14、作比其他操作具有更少的参数,要加入所没有的参数,但在这些操作的方法中忽略新加入的参数。-缺点:对消息规约,有些麻烦。 (慎用)2若在一个类中不需要父类中定义的操作,就在该类中把它声明为一个无操作的方法。 (慎用) 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.3 为实现复用采取的设计策略为实现复用采取的设计策略影响性能的因素:数据传输、数据存取、数据处理影响性能的因素:数据传输、数据存取、数据处理 。性能估算:执行路线,累计每个环节所需时间。性能估算:执行路线,累计每个环节所需时间。改进性能的设计策略。改进性能的设计策略。 3.3.2 设计内容及策略设计内容及策

15、略3.3 设计过程设计过程 3.3.2.4 提高性能提高性能1)调整对象分布,把需要频繁交换信息的对象,尽量)调整对象分布,把需要频繁交换信息的对象,尽量地放在一台处理机上。地放在一台处理机上。 2)缩短对象的存取时间,)缩短对象的存取时间,提高或降低系统的并发度,提高或降低系统的并发度,可能要人为地增加或减少主动对象。可能要人为地增加或减少主动对象。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.4 提高性能提高性能273)合并通讯(消息)频繁的类)合并通讯(消息)频繁的类流速调节器流速调节器指定流速指定流速流速调节流速调节 流速探测器流速探测器当前流速当前流

16、速流速探测流速探测取当前流速取当前流速 流速控制器流速控制器指定流速指定流速当前流速当前流速流速调节流速调节流速探测流速探测 合并前合并前合并后合并后 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.4 提高性能提高性能4)增加属性或类,以保存中间结果以减少重复计算。)增加属性或类,以保存中间结果以减少重复计算。5 5)降低算法的计算复杂度)降低算法的计算复杂度 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.4 提高性能提高性能296)为编程方便增加底层成分,细化对象的分类)为编程方便增加底层成分,细化对象的分类例:将几何图形分成例

17、:将几何图形分成多边形、椭圆、扇形多边形、椭圆、扇形等特殊类等特殊类几何图形几何图形多边形多边形扇形扇形椭圆椭圆 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.4 提高性能提高性能30帧帧显示显示背景背景前景前景* *1 11 11 1显示显示显示显示7)将复杂对象化为整体)将复杂对象化为整体-部分关系,即用聚合关系描述复杂类部分关系,即用聚合关系描述复杂类 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.4 提高性能提高性能修改发生在问题域部分的类,但是与第修改发生在问题域部分的类,但是与第6 6章的内容密章的内容密切相关。切相关

18、。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.5 为实现对象永久存储所做的修改为实现对象永久存储所做的修改1.1.弥补弥补OOAOOA模型的不足模型的不足2.2.解决解决OOAOOA阶段推迟考虑的问题阶段推迟考虑的问题 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.6 完善对象的细节完善对象的细节3.3.设计对象的操作设计对象的操作1 1)操作的不同情况)操作的不同情况2 2)设计操作的算法)设计操作的算法3 3)描述操作的执行过程)描述操作的执行过程4 4)设计算法所需的数据结构)设计算法所需的数据结构 3.3.2 设计内容

19、及策略设计内容及策略3.3 设计过程设计过程 3.3.2.6 完善对象的细节完善对象的细节34对于需要设计的操作,要从如下几方面进行详细地定义:对于需要设计的操作,要从如下几方面进行详细地定义:(1) 按照定义操作的格式:按照定义操作的格式: 可见性可见性 操作名操作名(参数列表参数列表):返回类返回类型型 完善操作的定义。完善操作的定义。 (2)从问题域的角度,根据其责任,考虑实现操作的算法,即对象是怎)从问题域的角度,根据其责任,考虑实现操作的算法,即对象是怎样提供操作的。样提供操作的。 (3)若操作有前后置条件或不变式,考虑编程语言是否予以支持。若不)若操作有前后置条件或不变式,考虑编程

20、语言是否予以支持。若不支持,在操作的方法中要予以实现。支持,在操作的方法中要予以实现。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.6 完善对象的细节(构造和优化算法)完善对象的细节(构造和优化算法)35(4)建议进一步地分析特定类的对象相关的所有交互图,找出其所有与之)建议进一步地分析特定类的对象相关的所有交互图,找出其所有与之相关的消息。一个对象所要响应的每个消息都要由该对象的操作处理,其相关的消息。一个对象所要响应的每个消息都要由该对象的操作处理,其中的一个操作也可能要使用其他操作。如果类拥有状态图,还可根据内部中的一个操作也可能要使用其他操作。如果类拥

21、有状态图,还可根据内部转换以及外部转换上的动作,设计算法的详细逻辑。转换以及外部转换上的动作,设计算法的详细逻辑。 可用自然语言或进行了一定结构化的自然语言描述算法,也可以使用可用自然语言或进行了一定结构化的自然语言描述算法,也可以使用程序框图或活动图描述算法。程序框图或活动图描述算法。 在算法中还要考虑对例外和特殊情况的处理。如在算法中还要考虑对例外和特殊情况的处理。如考虑对输入错误、来考虑对输入错误、来自中间件或其它软硬件的错误的消息以及其它例外情况的处理。自中间件或其它软硬件的错误的消息以及其它例外情况的处理。 在系统较为复杂或需要处理大批量的数据的情况下,若系统在性能上在系统较为复杂或

22、需要处理大批量的数据的情况下,若系统在性能上有要求,就要对系统的体系结构和算法进行优化。有要求,就要对系统的体系结构和算法进行优化。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.6 完善对象的细节(构造和优化算法)完善对象的细节(构造和优化算法)4.4.设计表示关联的属性设计表示关联的属性1 1)一对一的关联)一对一的关联2 2)一对多的关联)一对多的关联5.5.设计表示整体设计表示整体- -部分关系的属性部分关系的属性 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.6 完善对象的细节完善对象的细节(1 1)用相应的类定义内存中

23、的全局性对象变量,包括静)用相应的类定义内存中的全局性对象变量,包括静态声明和动态创建两种方式。态声明和动态创建两种方式。(2 2)用文件或数据库大批量地保存对象实例。)用文件或数据库大批量地保存对象实例。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.7 定义对象实例定义对象实例38 在逻辑上,一个类是对一组对象的抽象描述。在物理上,一个类所创建在逻辑上,一个类是对一组对象的抽象描述。在物理上,一个类所创建系统的各对象,要么在内存中,要么在外存中。在内存中创建的一个对象,系统的各对象,要么在内存中,要么在外存中。在内存中创建的一个对象,用一个变量记录它的标识。

24、在外存中的对象,可能保存在一个文件中,也可用一个变量记录它的标识。在外存中的对象,可能保存在一个文件中,也可能保存在一个数据库表中。能保存在一个数据库表中。 在在OOD中,根据不同的实现条件和实现策略,可以按如下的方式定义对中,根据不同的实现条件和实现策略,可以按如下的方式定义对象:象: (1) 用相应的类定义内存中的全局性对象,包括静态声明和动态创建两用相应的类定义内存中的全局性对象,包括静态声明和动态创建两种方式。可以一次针对一个对象定义一个变量,也可以成批地定义对象。例种方式。可以一次针对一个对象定义一个变量,也可以成批地定义对象。例如,可以定义一个数组,它的每个元素是一个对象变量,以此

25、来成批地定义如,可以定义一个数组,它的每个元素是一个对象变量,以此来成批地定义对象。对象。 (2)当系统需要通过从外存读取数据来创建一个对象时)当系统需要通过从外存读取数据来创建一个对象时 ,先创建该对象,先创建该对象,再从外存中读取这个对象数据,把数据赋值给对象的相应属性。按照一定,再从外存中读取这个对象数据,把数据赋值给对象的相应属性。按照一定的策略,内存中的永久对象要保存到外存中,请参看数据管理部分。的策略,内存中的永久对象要保存到外存中,请参看数据管理部分。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.7 定义对象实例定义对象实例39 在逻辑上,一个类

26、是对一组对象的抽象描述。在物理上,一个类所创建在逻辑上,一个类是对一组对象的抽象描述。在物理上,一个类所创建 无论那种方式,都需要在在无论那种方式,都需要在在OOD文档中加以说明。按如下格式在类描述模板文档中加以说明。按如下格式在类描述模板的定义对象部分进行描述:的定义对象部分进行描述:处理机:处理机:,;内存对象:内存对象:(n元数组)元数组);外存对象:外存对象:; 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.7 定义对象实例定义对象实例40从类从类A A的对象到类的对象到类B B的对象有的对象有4 4种访问性种访问性属性可见性:属性可见性:B B是是A

27、A的一个属性(关联、聚合)的一个属性(关联、聚合)class Aclass A ;B b; ;B b; 参数可见性:参数可见性:B B的对象是的对象是A A的一个方法的参数(依赖)的一个方法的参数(依赖)A.amethod(B b) /A.amethod(B b) /间接地找到一个对象,并赋给间接地找到一个对象,并赋给b b。局部声明可见性:局部声明可见性:B B的对象是在的对象是在A A的一个方法中声明的一个局部变量(依赖)的一个方法中声明的一个局部变量(依赖)class A:amethodclass A:amethod ; B b; B b; 全局可见性:全局可见性:B B的对象在某种程度上全局可见(依赖)的对象在某种程度上全局可见(依赖) 声明声明B B的全局实例变量的全局实例变量 对于后三种情况而言,从类对于后三种情况而言,从类A到类到类B间存在着依赖关系,在程序运行期间间存在着依赖关系,在程序运行期间A的对象的对象与与B的对象存在着临时性的连接(临时链),而第一种情况中的链是由从类的对象存在着临时性的连接(临时链),而第一种情况中的链是由从类A到类到类B间间的关联实例化而来的。的关联实例化而来的。 3.3.2 设计内容及策略设计内容及策略3.3 设计过程设计过程 3.3.2.7 定义对象实例(决定对象间的可访问性)定义对象实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论