版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象分析与设计设计上第八章到第十章1第1页,共57页,2023年,2月20日,星期二8.1什么是面向对象设计第8章面向对象的设计(OOD)概述OOA与OOD的关系:1、从OOA到OOD不是转换;
——是调整和增补问题域部分OOA模型将OOA模型搬到OOD;进行必要的调整,作为OOD模型的问题域部分;人机交互部分数据口部分任务管理部分增补其它四个部分,成为完整的OOD模型。构件部署2第2页,共57页,2023年,2月20日,星期二OOA与OOD的关系:1、从OOA到OOD不是转换;
——是调整和增补问题域部分OOA模型将OOA模型搬到OOD;进行必要的调整,作为OOD模型的问题域部分;人机交互部分数据口部分任务管理部分增补其它四个部分,成为完整的OOD模型。构件部署3第3页,共57页,2023年,2月20日,星期二2、采用一致的概念和表示法——不存在分析与设计之间的鸿沟3、有不同的侧重点和不同的策略
OOA主要针对问题域,识别有关的对象以及它们之间的关系,产生一个映射问题域,满足用户需求,独立于实现的OOA模型。
OOD主要解决与实现有关的问题,基于OOA模型,针对具体的软、硬件条件(如机器、网络、OS、GUI、DBMS等)产生一个可实现的OOD模型。4、OOA与OOD可适合不同的生命周期模型——瀑布模型、螺旋模型、增量模型、喷泉模型4第4页,共57页,2023年,2月20日,星期二分析(OOA)设计(OOD)编程(OOP)演化集成测试编程(OOP)设计(OOD)分析(OOA)测试维护瀑布模型喷泉模型不同过程模型中的OOD5第5页,共57页,2023年,2月20日,星期二新增的组成部分,隔离实现条件OOD——按实现条件对OOA模型进行调整,并补充几个新的组成部分(也是由对象构成)与实现有关的因素:图形用户界面系统硬件、操作系统及网络数据管理系统其他——编程语言、可复用构件库……按实现条件调整OOA模型
实现条件
实现条件基本思想:尽可能隔离实现条件对系统的影响——提供独立的接口对不可隔离的因素,按实现条件调整OOA模型
实现条件6第6页,共57页,2023年,2月20日,星期二做什么怎么做问题域与系统责任与实现有关的因素分析设计第一种观点分析设计第二种观点第二种观点的理由:(1)在各种分析/设计方法中“做什么”和“怎么做”实际上没有严格的划分”。(2)过分强调“分析不考虑怎么做”将使某些必须在OOA考虑的问题得不到完整的认识。(3)由于OO方法表示形式的一致,不存在把细化工作留给设计人员的必然理由。(4)避免重复地认识同一事物,并有利于分析结果的复用。关键问题:对象的特征细节(如属性的数据类型和服务流程图),是在分析时定义还是在设计时定义?两种不同的观点7第7页,共57页,2023年,2月20日,星期二OOD模型——从两个侧面来描述8.2 OOD模型和过程从另一侧面观察OOD模型每个部分如何用OO概念表达——采用OOA的概念及模型组织方式从一个侧面观察OOD模型包括几个主要部分——一个核心部分加几个外围部分在辅助模型中要增加分别用于描述构件模型和部署模型的构件图和部署图第8页,共57页,2023年,2月20日,星期二OOD过程:设计OOD模型的五个部分问题域部分的设计人机交互部分的设计控制流管理部分的设计数据管理部分的设计构件部署设计前4项不强调次序每个部分均采用与OOA一致的概念、表示法及活动,但具有自己独特的策略。进行构件部署设计要在其前面四个部分完成后进行。
9第9页,共57页,2023年,2月20日,星期二对OOA结果按实现条件进行补充与调整就是问题域部分。进行问题域部分设计,要继续运用OOA的方法,包括概念、表示法及一部分策略。不但要根据实现条件进行OOD设计,而且由于需求变化或新发现了错误,也要对OOA的结果进行修改。本章的重点是对OOA结果进行补充与调整,要强调的是这部分工作主要不是细化,但OOA未完成的细节定义要在OOD完成。第9章 问题域部分的设计将OOA模型搬到OOD作为OOD的基础人机交互部分数据管理部分任务管理部分问题域部分OOA模型按实现条件(编程语言,网络与操作系统,复用支持等)进行必要的调整。10第10页,共57页,2023年,2月20日,星期二(1)为复用设计与编程的类而增加结构(2)增加一般类以建立共同协议(3)按编程语言调整继承(4)提高性能(5)为数据存储管理增补属性与服务(6)为编程方便增加底层成分(7)决定关系的实现方式(8)对例外的处理(9)编程语言限制了可用的属性类型(10)构造或优化算法(11)调整服务(12)决定对象间的可访问性(13)考虑采用设计模式(14)其它11第11页,共57页,2023年,2月20日,星期二(1)为复用设计与编程的类而增加结构OOA识别和定义的类是本次开发中新定义的,需要进行编程。如果已存在一些可复用的类,而且这些类既有分析、设计时的定义,又有源程序,那么,复用这些类即可提高开发效率与质量。可复用的类可能只是与OOA模型中的类相似,而不是完全相同,因此需对二者进行修改。目标:尽可能使复用成分增多,新开发的成分减少12第12页,共57页,2023年,2月20日,星期二不同程度的复用当前所需的类的信息比可复用类定义的信息= 直接复用< 通过继承复用> 删除可复用类的多余信息≈ 删除多余信息,通过继承而复用13第13页,共57页,2023年,2月20日,星期二第四种情况的做法:把要复用的类加到问题域,标以“复用”划掉(或标出)不用的属性与服务建立从复用类到问题域原有的类之间的泛化关系由于问题域的类继承了“复用”类的特征,所以有些属性和服务不需要了——划掉。修改问题域原有类的结构和连接,必要时移到“复用”类14第14页,共57页,2023年,2月20日,星期二例:序号颜色式样出厂年月序号认证车辆序号厂商式样序号认证可复用的类车辆问题域中的类(复用)车辆序号厂商式样序号认证可复用的类15第15页,共57页,2023年,2月20日,星期二(2)增加一般类以建立共同协议增加根类:将所有的具有相似协议的类组织在一起 提供通用的协议
例:提供创建、删除、复制等服务增加其他一般类:提供局部通用的协议 例:提供永久存储及恢复功能16第16页,共57页,2023年,2月20日,星期二对相似的操作的处理有时在若干类中定义了相同的操作,就能够从共同的超类中继承它们。然而,在不同类中的操作经常是相似的,而不是相同的。这时需要对操作原型做小的修改,使得操作就可以相互相匹配,即不仅操作的名字和特征标记必须相匹配,而且它们应该都具有相同的语义含义。调整继承的策略
1.若有些操作比其他操作具有更少的参数,要加入所没有的参数,但在这些操作的方法中忽略新加入的参数。---缺点:对消息规约,有些麻烦。(慎用)2.若在一个类中不需要父类中定义的操作,就在该类中把它声明为一个无操作的方法。(慎用)选读17第17页,共57页,2023年,2月20日,星期二(3)按编程语言调整继承起因:OOA强调如实地反映问题域,OOD考虑实现问题, 所用语言不支持多继承,甚至不支持继承多继承模式狭义菱形广义菱形18第18页,共57页,2023年,2月20日,星期二BACBAC因为聚合和泛化是不同的概念,这种方法并不是通用的(按定义)。在大多数情况下,需要考虑形成多继承的原因,将本来在特殊类中显式定义的信息离出来,作为部分对象,以原来的一般类作为整体对象。
把多继承调整为单继承
19第19页,共57页,2023年,2月20日,星期二方法1:采用关联公司人员顾主职员顾主职员公司人员身份顾主身份职员身份0..2120第20页,共57页,2023年,2月20日,星期二公司人员身份顾主身份职员身份10..10..1121第21页,共57页,2023年,2月20日,星期二方法2:压平公司人员顾主职员顾主职员问题:有什么缺点?22第22页,共57页,2023年,2月20日,星期二公司人员顾主职员顾主职员顾主信息职员信息23第23页,共57页,2023年,2月20日,星期二方法3:取消泛化顾主职员顾主职员问题:有什么缺点?24第24页,共57页,2023年,2月20日,星期二对多态性的调整25第25页,共57页,2023年,2月20日,星期二把需要频繁交换信息的对象,尽量地放在一台处理机上。增加属性或类,以保存中间结果提高或降低系统的并发度,可能要人为地增加或减少主动对象。合并通讯频繁的类流速调节器指定流速……流速调节……流速探测器当前流速……流速探测取当前流速……流速控制器指定流速当前流速……流速调节流速探测……合并前合并后(4)提高性能26第26页,共57页,2023年,2月20日,星期二用聚合关系描述复杂类帧显示背景前景*111显示显示27第27页,共57页,2023年,2月20日,星期二为编程方便增加底层成分——细化对象的分类例:将几何图形分成多边形、椭圆、扇形等特殊类几何图形多边形扇形椭圆28第28页,共57页,2023年,2月20日,星期二供货商客户0..*1..*供需合同卖方买方…….11供货商客户0..*1..*把多对多关联转化为一对多关联(5)对复杂关联的转化并决定关联的实现方式29第29页,共57页,2023年,2月20日,星期二项目人员语言语言项目人员任务项项目名人员语言……11..**11..*1..*把多元关联转化为二元关联30第30页,共57页,2023年,2月20日,星期二公司雇员*1..*工作薪水*1..*工作薪水公司雇员11把关联类转化为二元关联第31页,共57页,2023年,2月20日,星期二对关联进行调整后,要考虑关联的实现方式。(1)聚合决定在整体类中指出部分类时,是用部分类直接作为整体类中的属性的数据类型,还是把部分类用作指针或对象标识的基类型,再用这样的指针或对象标示定义整体类的属性。如果是组合,最好用第1种方式,否则就需要在程序中保证整体对象与部分对象的生命周期的一致性。(2)关联通常,通过在对象中设立指针或对象标识以指向或记录另一端的对象的方法,来实现关联。如果是单向关联,就在源端的类中设立属性,用来标记另一端的类将来创建的对象如果是双向关联,就在两端类中各设立属性,用来标记对方将来创建的对象。如果关联中对方类的多重性是1,那么可在本方设立一个指向对方对象的指针,或设立一个记录对方对象引用的属性。如果对方类的多重性大于1,那么可在本方设立一个指向对方对象的指针集合或引用集合。若关联的某端有角色名,最好把其作为另一端类的属性名,以访问与角色名相邻的类。
32第32页,共57页,2023年,2月20日,星期二(6)调整与完善属性按照语法:[可见性]属性名[‘:’类型][‘=’初始值]对属性的定义进行完善。每一个属性或者包含单个值,或者包含作为一个整体的密切相关的一组值
若要给出对属性的性质的约束,如“工龄<60”或“0≤英语成绩≤100”等,也要看语言是否对其直接支持,否则要在算法上考虑如何实现。33第33页,共57页,2023年,2月20日,星期二
为了维护数据的完整性,必须要考虑需要一起更新的多个相关联的数据值。特别是,当基本的数据发生变化时,必须更新导出的属性。通过下列方法可以做到这一点:
1)显式的代码因为每一个导出属性是根据一个或多个基本对象属性定义的,更新导出属性的一种方法是,在更新基本对象属性的操作中插入更新导出属性的代码。这种附加的代码将明确地更新依赖基本对象属性的导出属性,使得基本属性与导出属性的值同步。
2)批处理性的重计算当基本数据以批处理的方式改变时,可能在所有的基本数值改变之后,再重新计算所有的导出属性的值。
3)触发器凡是依赖基本属性的属性,都必须将它自己向基本属性注册。当基本属性的值被更新时,由专门设置的触发器更新导出属性的值。34第34页,共57页,2023年,2月20日,星期二(7)构造和优化算法
对于需要设计的操作,要从如下几方面进行详细地定义:(1)按照定义操作的格式:[可见性]操作名[‘(’参数列表‘)’][‘:’返回类型]完善操作的定义。(2)从问题域的角度,根据其责任,考虑实现操作的算法,即对象是怎样提供操作的。(3)若操作有前后置条件或不变式,考虑编程语言是否予以支持。若不支持,在操作的方法中要予以实现。(4)建议进一步地分析特定类的对象相关的所有交互图,找出其所有与之相关的消息。一个对象所要响应的每个消息都要由该对象的操作处理,其中的一个操作也可能要使用其他操作。如果类拥有状态图,还可根据内部转换以及外部转换上的动作,设计算法的详细逻辑。可用自然语言或进行了一定结构化的自然语言描述算法,也可以使用程序框图或活动图描述算法。在算法中还要考虑对例外和特殊情况的处理。如考虑对输入错误、来自中间件或其它软硬件的错误的消息以及其它例外情况的处理。
在系统较为复杂或需要处理大批量的数据的情况下,若系统在性能上有要求,就要对系统的体系结构和算法进行优化。35第35页,共57页,2023年,2月20日,星期二(8)决定对象间的可访问性(M)
从类A的对象到类B的对象有4种访问性 属性可见性:B是A的一个属性(关联、聚合)
classA {…;Bb;…}
参数可见性:B的对象是A的一个方法的参数(依赖)
A.amethod(Bb)//间接地找到一个对象,并赋给b。 局部声明可见性:B的对象是在A的一个方法中声明的一个局部变量(依赖)
classA::amethod {…;Bb;…}
全局可见性:B的对象在某种程度上全局可见(依赖) 声明B的全局实例变量对于后三种情况而言,从类A到类B间存在着依赖关系,在程序运行期间A的对象与B的对象存在着临时性的连接(临时链),而第一种情况中的链是由从类A到类B间的关联实例化而来的。36第36页,共57页,2023年,2月20日,星期二(9)定义对象实例
在逻辑上,一个类是对一组对象的抽象描述。在物理上,一个类所创建的各对象,要么在内存中,要么在外存中。在内存中创建的一个对象,用一个变量记录它的标识。在外存中的对象,可能保存在一个文件中,也可能保存在一个数据库表中。在OOD中,根据不同的实现条件和实现策略,可以按如下的方式定义对象:(1)用相应的类定义内存中的全局性对象,包括静态声明和动态创建两种方式。可以一次针对一个对象定义一个变量,也可以成批地定义对象。例如,可以定义一个数组,它的每个元素是一个对象变量,以此来成批地定义对象。(2)当系统需要通过从外存读取数据来创建一个对象时
,先创建该对象,再从外存中读取这个对象数据,把数据赋值给对象的相应属性。按照一定的策略,内存中的永久对象要保存到外存中,请参看数据管理部分。无论那种方式,都需要在在OOD文档中加以说明。按如下格式在类描述模板的定义对象部分进行描述: 处理机:<节点名>{,<节点名>}; 内存对象:{<名称>[(n元数组)][<文字描述>]}; 外存对象:{<名称>[<文字描述>]};37第37页,共57页,2023年,2月20日,星期二(10)其它在OOD的问题域部分应该根据具体问题考虑使用设计模式。在OOD的问题域部分,根据情况,还有一些其它需要考虑的问题。例如,考虑加入进行输入数据验证这样的类;考虑对来自中间件或其它软硬件的错误进行处理的类,以及对其它例外情况进行处理的类。有些作法是在OOD阶段不把这样的读写属性的操作放在类中,而认为这是一种约定,编程人员能理解。有些作法也不把诸如创建和复制对象这样的操作放在OOD模型中。
注意:包容器/集合类(如JAVA的Vector,Hashtable),是已经预定义的类库的一部分,一般不在类图中重新定义,可进行引用或继承。不要错把包容器/集合类中方法(如JAVA的find),在其他类中重新定义,可进行引用或继承。38第38页,共57页,2023年,2月20日,星期二10.1什么是人机交互部分第10章 人机交互部分的设计39第39页,共57页,2023年,2月20日,星期二控制接口部分问题域部分数据管理部分人机交互部分
OSF/Motif人机交互部分
X-Window人机交互部分
MS-Windows把人机交互部分作为系统中一个独立的组成部分,进行分析和设计,有利于隔离界面支持系统的变化对问题域部分的影响10.1什么是人机交互部分第10章 人机交互部分的设计40第40页,共57页,2023年,2月20日,星期二10.2人机交互部分的需求分析对使用系统的人进行分析——以便设计出适合其特点的交互方式和界面表现形式;对人和机器的交互过程进行分析——核心问题是人如何命令系统,以及系统如何向人提交信息。1、分析与系统交互的人——人员参与者人对界面的需求,不仅在于人机交互的内容,而且在于他们对界面表现形式、风格等方面的爱好。——前者是客观需求,对谁都一样;后者是主观需求,因人而异。(1)列举所有的人员参与者(2)调查研究(3)区分人员类型(4)统计(或估算)各类人员的比例(5)了解使用者的主观需求
(6)按照一定的准则进行折中与均衡
41第41页,共57页,2023年,2月20日,星期二2、从usecase分析人机交互usecase的构成参与者的行为和系统行为按时序交替出现,左右分明。形成交叉排列的段落。每个段落至少含有一个输入语句或输出语句;有若干纯属参与者自身或系统自身的行为陈述;可能包含一些控制语句或括号。抽取方法:删除所有与输入、输出无关的语句和不再包含任何内容的控制语句与括号,剩下的就是对一个参与者(人)使用一项系统功能时的人机交互描述。42第42页,共57页,2023年,2月20日,星期二收款员收款(usecase)输入开始本次收款的命令;作好收款准备,应收款总数置为0,输出提示信息;for
顾客选购的每种商品do
输入商品编号;
if
此种商品多于一件then
输入商品数量
endif;检索商品名称及单价;货架商品数减去售出数;if
货架商品数低于下限then
通知供货员请求上货endif;计算本种商品总价并打印编号、名称、数量、单价、总价;总价累加到应收款总数;endfor;打印应收款总数;输入顾客交来的款数;计算应找回的款数,打印以上两个数目,收款数计入账册。(a)一个usecase的例子收款员收款(人机交互)输入开始本次收款的命令;输出提示信息;for
顾客选购的每种商品输入商品编号;
if
此种商品多于一件then
输入商品数量
endif;打印商品编号、名称、数量、单价、总价;endfor;打印应收款总数输入顾客交来的款数打印交款数及找回款数;(b)人机交互描述
从usecase提取人机交互描述43第43页,共57页,2023年,2月20日,星期二10.3人机界面的设计准则易学、易用、操作方便尽量保持一致性及时提供有意义的反馈使用户的注意力集中在当前的任务上而不是界面上尽量减少用户的记忆具有语境敏感的帮助功能减少重复的输入和操作对用户的操作具有容错性,如UNDO防止灾难性的错误其它:如艺术性、趣味性、风格、视感等44第44页,共57页,2023年,2月20日,星期二一、输入与输出设计(1)输入的细化①输入步骤的细化②输入设备的选择③输入信息表现形式的选择(命令,数据)(2)输出的细化①输出步骤的细化②输出设备的选择③输出信息表现形式的选择9.4人机界面的OO设计45第45页,共57页,2023年,2月20日,星期二二、命令的组织不受欢迎的命令组织方式:(1)一条命令含有大量的参数和任选项(2)系统有大量命令,不加任何组织和引导基本命令:使用一项独立的系统功能的命令。(提取后的用况)命令步:在执行一条基本命令的交互过程中所包含的具体输入步骤。高层命令:如果一条命令是在另一条命令的引导下被选用的,则后者称作前者的高层命令。命令的组织措施——分解与组合(1)分解:将一条含有许多参数和选项的命令分解为若干命令步(2)组合:将基本命令组织成高层命令,从高层命令引向基本命令46第46页,共57页,2023年,2月20日,星期二(a)线性结构(b)树型结构(c)半序网状结构(d)一般网状结构基本命令及其命令步的结构47第47页,共57页,2023年,2月20日,星期二高层命令及其结构按功能组织:如文件下有:创建、打开、关闭、打印、删除等。按子系统组织:如文本编辑子系统、编译自系统。48第48页,共57页,2023年,2月20日,星期二两层命令之间的输出信息结构反馈信息处理结果提示信息反馈信息处理结果处理结果提示信息提示信息处理结果提示信息提示信息49第49页,共57页,2023年,2月20日,星期二反馈信息:需较长时间执行命令。处理结果,可能不需要。提示信息:对下一步可输入的命令的提示。50第50页,共57页,2023年,2月20日,星期二在建立命令树时,应遵循如下策略:把使用最频繁的命令放在前面,按照用户的工作步骤进行排列。在命令中发现整体-部分模式,以帮助对命令的组织与分块。每层命令的个数应遵循7+2原则,命令的层次深度尽量要控制在三层以内。51第51页,共57页,2023年,2月20日,星期二
1、选择界面支持系统(窗口系统、图形用户界面、可视化编程环境)2、设计报表及报告.对要生成的报表和报告格式等进行设计。每一种报表或报告应对应于一个类。
3、设计诸如安全/登录、设置和业务功能之类的窗口。
每一种窗口对应于一个类。4、在窗口中,按照命令的逻辑层次,部署所需要的元素,如菜单、工作区和对话框等。窗口中的部件元素对应窗口类的部分类,部分类与窗口类形成聚合关系。5.发现窗口类间的共性以及部件类间的共性,定义较一般的窗口类和部件类,分别形成窗口类间以及部件类间的泛化关系。
6.用类的属性表示窗口或部件的静态特征,如尺寸、位置、颜色和选项等。7.用操作表示窗口或部件的动态特征,如选中、移动和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 危重病人的床旁疼痛评估
- 护理教学中的问题解决技巧
- 链家房地产销售顾问技能与面试全解析
- 护理沟通:建立良好护患关系
- 护理课件制作软件排行榜和使用教程
- 旅游行业供应链管理岗位面试全解析
- 六年级上册英语导学案-Module8 Unit2 I often go swimming|外研社(三起)(无答案)
- 零售业人力资源部经理面试手册
- 集体谈判技巧在销售合同中的应用
- 零售行业连锁店长招聘要点
- 2026四川宜宾发展产城投资有限公司及子公司第一批员工招聘35人考试参考试题及答案解析
- 幼儿园中班语言《春节是个百音盒》课件
- GJB3243A-2021电子元器件表面安装要求
- 《群书治要》原文及解读
- 《中建集团人才流失问题及对策分析案例【论文13000字】》
- 2019年春季新版教材教科版五年级下册综合实践活动教案
- JJF 1059.1-2012测量不确定度评定与表示
- 开关电源及其软开关技术
- 心肌细胞动作电位与心电图的关系
- 模板学困生转化讲座课件02
- 广州市房地产中介服务机构资质(备案)
评论
0/150
提交评论