资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,共,130,页 第,*,页,第八章 面向对象设计(,OOD,),OOD,与结构化设计有何不同?,OOD,的过程是什么?,如何完成系统及子系统各部分的设计?,2024/11/16,1,第八章 面向对象设计(OOD)OOD与结构化设计有何不同?2,从面向对象的分析,到,面向对象设计,(通常写为,OOD,),是一个,逐渐扩充模型的过程,。,然而在实际的开发过程中,二者的界限是模糊的,。,2024/11/16,2,从面向对象的分析到面向对象设计(通常写为OOD),是一个,8.1.,面向对象设计的准则,模块化,抽象,过程抽象,数据抽象,信息隐藏,2024/11/16,3,8.1.面向对象设计的准则模块化2023/9/193,8.1.,面向对象设计的准则(续),弱耦合,交互耦合(通过消息连接实现),继承耦合(一般化类与特殊类),强内聚,服务内聚(一个服务仅完成一个功能),类内聚 (一个类只有一个用途),一般,-,特殊内聚,可重用,尽量使用已有的类,如果确实需要创建新类,2024/11/16,4,8.1.面向对象设计的准则(续)弱耦合2023/9/194,8.2,启发规则,设计结果应该清晰易懂,用词一致,使用已有的协议,减少消息模式的数目,避免模糊的定义,一般特殊结构的深度应适当,设计简单的类,避免包含过多的属性,有明确定义,尽量简化对象之间的合作关系,不要提供太多服务,2024/11/16,5,8.2 启发规则设计结果应该清晰易懂2023/9/195,8.2,启发规则(续),使用简单的协议,使用简单的服务,设计变动减至最小,2024/11/16,6,8.2 启发规则(续)使用简单的协议 2023/9/196,面向对象设计继续做面向对象分析阶段的工作,建立软件的结构。,系统的主要组成部分称为子系统,一般来说,子系统的数目应该与系统规模基本匹配。,各子系统之间应该具有尽可能简单、明确的接口,尽量减少子系统彼此间的依赖性。,8.3,系统分解,2024/11/16,7,面向对象设计继续做面向对象分析阶段的工作,建立软件的结构,在设计阶段中,五个层次用于建立系统的四个组成成份。,问题论域部分,人机交互部分,任务管理部分,数据管理部分,2024/11/16,8,在设计阶段中,五个层次用于建立系统的四个组成成份。2023/,问题论域部分,包括与应用问题直接有关的所有类和对象,。,识别和定义这些类和对象的工作在,OOA,中已经开始,,在,OOA,阶段得到的有关应用的概念模型描述了我们要解决的问题。,在,OOD,阶段,应当继续,OOA,阶段的工作,,对在,OOA,中得到的结果进行改进和增补,。,8.4,问题域子系统,2024/11/16,9,问题论域部分包括与应用问题直接有关的所有类和对象。8.4,1,、问题论域部分的设计(调整需求),在,OOA,阶段得到的概念模型描述了要解决的问题,在,OOD,阶段,继续,OOA,阶段的工作,对在,OOA,中得到的结果进行改进和增补。,对,OOA,模型中的某些类与对象、结构、属性、操作进行组合与分解。,要考虑对时间与空间的折衷、内存管理、开发人员的变更、以及类的调整等。,2024/11/16,10,1、问题论域部分的设计(调整需求)在OOA阶段得到的概念模型,2.,复用设计,根据问题解决的需要,把从类库或其它来源得到的既存类增加到问题解决方案中去。,2024/11/16,11,2.复用设计根据问题解决的需要,把从类库或其它来源得到的既存,3,、把问题论域相关的类关联起来,在设计时,,从类库中引进一个根类,做为包容类,把所有与问题论域有关的类关联到一起,建立类的层次,。,把同一问题论域的一些类集合起来,存于类库中。,2024/11/16,12,3、把问题论域相关的类关联起来在设计时,从类库中引进一个根类,4,、加入一般化类以建立类间协议,有时,某些特殊类要求一组类似的服务。,此时,应加入一个一般化的类,定义为所有这些特殊类共用的一组服务名,这些服务都是虚函数。,在特殊类中定义其实现。,2024/11/16,13,4、加入一般化类以建立类间协议有时,某些特殊类要求一组类似的,5,、调整继承支持级别,在,OOA,阶段建立的,对象模型中可能包括有多继承关系,,但实现时使用的程序设计语言可能只有单继承,甚至没有继承机制,这样就需对分析的结果进行修改。,多继承模式有两种:,狭义的菱形,广义的菱形,2024/11/16,14,5、调整继承支持级别在OOA阶段建立的对象模型中可能包括有多,2024/11/16,15,2023/9/1915,针对单继承语言的调整,把特殊类的对象看做是一个一般类对象所扮演的角色,通过实例连接把多继承的层次结构转换为单继承的层次结构。,把多继承的层次结构平铺,成为单继承的层次结构。在这种情况下,有些属性或操作在同层的特殊类中会重复出现。,2024/11/16,16,针对单继承语言的调整把特殊类的对象看做是一个一般类对象所扮演,2024/11/16,17,2023/9/1917,针对无继承语言的调整,当使用无继承的程序设计语言时,必须把具有继承关系的类层次结构平铺开来,成为一组类和对象。,一般可利用命名惯例,把这些类或对象关联起来。,2024/11/16,18,针对无继承语言的调整当使用无继承的程序设计语言时,必须把具有,6,、改进性能,提高执行效率和速度是系统设计的主要指标之一。有时,,必须改变问题论域的结构以提高效率,。,如果类之间经常需要传送大量消息,可合并相关的类以减少消息传递引起的速度损失。,增加某些属性到原来的类中,或增加低层的类,以保存暂时结果,避免每次都要重复计算造成速度损失。,2024/11/16,19,6、改进性能提高执行效率和速度是系统设计的主要指标之一。有时,7,、加入较低层的构件,在做面向对象分析时,,分析员往往专注于较高层的类和对象,避免考虑太多较低层的实现细节,。,在做面向对象设计时,,设计师在找出高层的类和对象时,必须考虑到底需要用到哪些较低层的类和对象,。,2024/11/16,20,7、加入较低层的构件在做面向对象分析时,分析员往往专注于较高,在,OOA,阶段给出了所需的属性和操作,,在设计阶段必须根据需求把交互细节加入到用户界面设计中,包括人机交互所必需的实际显示和输入。,用户界面部分设计主要由以下几个方面组成。,8.5,设计人,-,机交互子系统,2024/11/16,21,在 OOA 阶段给出了所需的属性和操作,8.5 设计人-机,1,、用户分类,按技能层次分类:,外行,初学者,熟练者,专家,按组织层次分类:,行政人员,管理人员,专业技术人员,其它办事员,按所属集团分类:,顾客,职员,按职务分类:,总经理,经理,职员,2024/11/16,22,1、用户分类按技能层次分类:2023/9/1922,2,、描述人及其任务的脚本,对以上定义的每一类用户,列出对以下问题做出的考虑:,什么人,、,目的,、,特点,、,成功的关键因素,、,熟练程度,以及,任务脚本,。,例子:,什么人,分析员,目的,要求一个工具来辅助分析工作,(,摆脱繁重的画图和检查图的工作,),。,2024/11/16,23,2、描述人及其任务的脚本对以上定义的每一类用户,列出对以下,特点,年龄:,42,岁;教育水平:大学;限制:不要微型打印,小于,9,个点的打印太小。,成功的关键因素,工具应当使分析工作顺利进行;工具不应与分析工作冲突;工具应能捕获假设和思想,能适时做出折衷;应能及时给出模型各个部分的文档,这与给出需求同等重要。,熟练程度,专家。,2024/11/16,24,特点年龄:42岁;教育水平:大学;限制:不要微型打印,,任务脚本,主脚本,:,识别“核心的”类和对象;,识别“核心”结构;,在发现了新的属性或操作时随时都可以加进模型中去。,检验模型,:,打印模型及其全部文档。,2024/11/16,25,任务脚本2023/9/1925,3,、设计命令层,研究现行的人机交互活动的内容和准则,:这些准则可以是非形式的,如“输入时眼睛不易疲劳”,也可以是正式规定的;,建立一个初始的命令层,:可以有多种形式,如一系列,Menu Screens,、或一个,Menu Bar,、或一系列,Icons.,细化命令层,:考虑以下几个问题。,2024/11/16,26,3、设计命令层研究现行的人机交互活动的内容和准则:这些准则可,排列命令层次。,把使用最频繁的操作放在前面,;,按照用户工作步骤排列,。,通过,逐步分解,,找到整体局部模式,以帮助在,命令层中对操作分块,。,根据人们短期记忆的“,72,”,或“,每次记忆,3,块每块,3,项,”的特点,把深度尽量限制在三层之内。,减少操作步骤,:把点取、拖动和键盘操作减到最少,并为高级用户提供简捷的操作方法,2024/11/16,27,排列命令层次。把使用最频繁的操作放在前面;按照用户工作步骤排,4,、设计详细的交互,用户界面设计有若干原则,包括:,一致性,:采用一致的术语、一致的步骤和一致的活动。,操作步骤少:,减少敲键和鼠标点取的次数,减少完成某件事所需的下拉菜单的距离。,不要“哑播放”,:每当用户等待系统完成一个活动时,要给出一些反馈信息。,2024/11/16,28,4、设计详细的交互用户界面设计有若干原则,包括:2023/9,Undo,:在操作出现错误时,要恢复或部分恢复原来的状态。,减少人脑的记忆负担,:不应在一个窗口使用在另一个窗口中记忆或写下的信息;需要人按特定次序记忆的东西应当组织得容易记忆。,学习的时间和效果,:提供联机的帮助信息。,趣味性,:尽量采取图形界面,符合人类习惯,.,2024/11/16,29,Undo:在操作出现错误时,要恢复或部分恢复原来的状态。2,任务,是进程的别称,是执行一系列活动的一段程序。,当系统中有许多并发行为时,需要依照各个行为的协调和通信关系,划分各种任务,以简化并发行为的设计和编码。,任务管理主要包括任务的选择和调整,它的工作有以下几种。,8.6,任务管理部分设计,2024/11/16,30,任务,是进程的别称,是执行一系列活动的一段程序。8.6 任,识别事件驱动任务,:,一些负责与硬件设备通信的任务是事件驱动的,也就是说,这种任务可由事件来激发。,识别时钟驱动任务,:,以固定的时间间隔激发这种事件,以执行某些处理。某些人机界面、子系统、任务、处理机或与其它系统需要周期性的通信,因此时钟驱动任务应运而生,。,2024/11/16,31,识别事件驱动任务:一些负责与硬件设备通信的任务是事件驱,识别优先任务和关键任务,:,根据处理的优先级别来安排各个任务。,识别协调者,:当有三个或更多的任务时,应当增加一个追加任务,起协调者的作用。它的行为可以用状态转换矩阵来描述。,评审各个任务,:对各任务进行评审,确保它能满足选择任务的工程标准事件驱动?时钟驱动?优先级,/,关键任务?协调者?,2024/11/16,32,识别优先任务和关键任务:根据处理的优先级别来安排各个任务。,定义各个任务,定义任务的工作主要包括:,它是什么任务,、,如何协调工作,及,如何通信,。,(1),它是什么任务,为任务命名,并简要说明这个任务。,(2),如何协调工作,定义各个任务如何协调工作。指出它是事件驱动还是时钟驱动。,2024/11/16,33,定义各个任务定义任务的工作主要包括:它是什么任务、如何协调工,(3),如何通信,定义各个任务之间如何通信。任务从哪里取值,结果送往何方。,(4),一个模版任务的定义如下:,Name,(,任务名,),Description,(,描述,),Priority,(,优先级,),Servicesincluded,(,包含的操作,),、,Communication Via,(,经由谁通信,),。,2024/11/16,34,(3)如何通信定义各个任务之间如何通信。任务从哪,确定资源需求,:,为了满足高性能需求,设计者必须通过计算系统
展开阅读全文