版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章 问题域部分的设计1、 什么是面向对象设计1、 OOA与OOD的关系: 1 )面向对象的设计就是在OOA的基础上运用面向对象方法,主要解决与现实有滚得问题,目标是产生一个符合现实条件的OOD模型。与现实条件有关的因素有:图形用户系统、硬件、操作系统、网络、数据管理系统和编辑语言等。 2 )由于OOD以OOA模型为基础且OOA与OOD采用一致的表示方法,这使得从OOA到OOD不存在转换,只需做必要的修改和调整,或补充某些细节,并增加几个与现实关联的相独立部分即可。因此OOA与OOD之间不存在分析与设计的鸿沟,二者能紧密衔接,大大降低了从OOA与OOD的难度、工作量和出错频率。 3 )OOA
2、主要针对问题域,识别有关的对象以及它们之间的关系,产生一个映射问题域,满足用户需求,独立于实现的OOA模型。OOD主要解决与实现有关的问题,基于OOA模型,针对具体的软、硬件条件(如机器、网络、OS、GUI、DBMS等)产生一个可实现的OOD模型。2、OOD模型和过程 在OOA阶段只考虑问题域和系统操作责任,在OOD阶段要考虑与具体实现的问题。图6-1 OOD模型从一个侧面观察 OOD模型包括五个主要部分一个核心部分加四个外围部分 问题域部分、人机交换部分、控制驱动部分、数据管理部分、构建及部署部分从另一侧面观察 OOD模型每个部分仍采用OOA的概念和表示方法,只是在辅助模型中要增加分别于描述
3、构件模型和部署的构件图和部署图。OOD过程: 设计OOD模型的五个部分 问题域部分的设计、人机交互部分的设计、控制流管理部分的设计、数据管理部分的设计、构件部署设计。前4项不强调次序,每个部分均采用与OOA一致的概念、表示法及活动,但具有自己独特的策略。进行构件部署设计要在其前面四个部分完成后进行。2、 问题域部分的设计 对OOA结果按实现条件进行补充与调整就是问题域部分。进行问题域部分设计,要继续运用OOA的方法,包括概念、表示法及一部分策略。不但 要根据实现条件进行OOD设计,而且由于需求变化或新发现了错误,也要对OOA的结果进行修改。本章的重点是对OOA结果进行补充与调整,要强调的是这部
4、分工作主要不是细化,但OOA未完成的细节定义要在OOD完成。 1、为复用类而增加结构2、提高性能3、增加一般类以建立共同协议4、按编程语言调整继承5、转化复杂关联决定关系的实现方式6、调整与完善属性7、构造及优化算法8、决定对象间的可访问性9、定义对象实例10、其他如下针对一些主要的情况讲述如何进行问题域的设计 1、为复用类而增加结构如果在 OOA识别和定义的类是本次开发中新定义的,而且没有可复用的资源,则需要进一步设计和编程。如果已存在一些可复用的类,而且这些类既有分析、设计时的定义,又有源程序,那么,复用这些类即可提高开发效率与质量。 可复用的类可能只是与OOA模型中的类相似,而不是完全相
5、同对二者进行修改。1) 如果完全相同,就把可复用的类直接加到问题域,并用复用标记所复用的类。2) 如果大于,就把可复用的类直接加到问题域,并用复用标记所复用的类,所需要的累再继承它。3) 如果大于,就把可复用的类直接加到问题域,删除可复用类中的多余信息,并用复用标记所复用的类。4) 如果相似,按如下方法处理; 把要复用的类加到问题域,标以 “复用”。 划掉(或标出)不用的属性与服务。 建立从复用类到问题域原有的类之间的泛化关系。 由于问题域的类继承了“复用”类的特征,所以有些属性和服务不需要了应 该把它们划掉。 考虑修改问题域原有类的结构和连接,必要时移到“复用”类。图6-2问题域中例题2、提
6、高性能1) 调整对象的分布 把需要频繁交换信息的对象,尽量地放在一台处理机上。 2)增加保存中间结果的属性或类 避免以后重复计算。 3)提高或降低系统的并发度,可能要人为地增加或减少主动对象。 4)合并通讯频繁的类5)用聚合关系描述复杂类 如果一个所描述事物过于复杂,其操作也可能比较复杂,因为其中间可能要包多项工作内容。对这种情况的处理,可考虑用聚合关系描述复杂类。6) 细化对象的分类 如果一个类的概念范畴过于大,那么它所描述的对象的实际情况可能就有若干差异。解决的一个方法就是把类划分的更细一些,在原先较为一般的类之下定义一些针对不同具体情况的类。在每个特殊类中分别定义适合各自对象的操作。3、
7、增加一般类以建立共同协议 1)增加一个类,将所有具有相同操作和属性的类组织在一起,提供通用的协议。 2)增加一般的类,提供局部通用的协议。 3)对相似操作的处理。 通过对特征标记做小的修改,以使他们相同,然后再把他们提升到一般类中。4 、按编程语言调整继承 由于在OOA强调如实地反映问题域,OOD考虑实现问题,所用语言不支持多继承,甚至不支持继承。 1)对多继承的调整 方法一:采用聚合把多继承转换为单继承因为聚合和泛化是不同的概念,这种方法并不是通用的(按定义)。在大多数情况下,需要考虑形成多继承的原因,将本来在特殊类中显式定义的信息离出来,作为部分对象,以原来的一般类作为整体对象。 图6-3
8、多继承中的一个继承换为聚合示例 图6-4所示的模型中有一个多继承,现假设编程语言不支持多继承,仅支持单继承。 图6-4多继承示例 图6-5采用聚合的方式把多继承转换为单位继承示例由于在图6-4所示的模型是按人员身份对一本类“人员”进行分类,并形成了其下的两个特殊类“研究生”和“教职工”,现在用身份作为一个类,依据它对原模型进行调整,如图6-5所示。图6-5用类“人员”创建对象的用意不变。创建类“研究生”的对象时,使用类“人员”和类“身份”以及自身的信息,类“教职工”也与此类似。创建“在职研究生”的对象时,使用类图中的四个类的信息。 方法二:采用压平的方式 采用这种方法,使得类“教职工”和“研究
9、生”中的一些特征要在类的“在职研究生”中重复出现,导致信息冗余。图6-6采用压平的方式把多继承转换为单位继承图6-7采用压平和聚合的方式把继承转换为单位继承2) 取消继承方法一:把继承结构展平图6-8完全取消继承示例方法二:采用聚合的方法图6-9采用聚合的方式取消继承3) 对多态性的调整 在继承结构中,具有相同名字的属性和操作,在不同的类中可以具有不同的类型和行为。这种在继承结构中对同一命令具有不同的含义的机制,就是继承的多态。如果编程的语言不支持多态,就需要把多态有关的属性和操作的名字分别赋不同的含义,也即明确把他们是为不同的东西,不但如此,往往还要按实际要求,重新考虑对象的分类,并对属性和
10、操作进行调整。 属性“边数”、“顶点坐标”和操作“绘图”不能被所有的特殊继承或不参加修改的继承,就说明它们只能适合多边形集合的一个子集,把这个子集定义为一个特殊的类“不规则多边形”,并把这些属性和操作下降到该特殊类中。这样类“正多边形”和“矩形”也不能继承那些不适合自己的属性和操作,而是要自己进行的定义。如图6-1所示。图6-10多态性的调整示例5、转化复杂关联决定关系的实现方式 (1)对复杂关联的转化 1)把多元关联和N元关联转化为二元关联 2)把多对多关联类转化为一对多关联图6-11把多对关联转化为一对关联 在图6-11中类“供需合同”设立了两个属性“卖方”和“买方”在实例化后分别用于记录
11、类“供货商”和“客户”的对象的标识。若不仅仅需要从类“供需合同”的对象访问其他对象,还存在着其他对象的访问。(2)关联的实现方式 对关联进行调整后,要考虑关联的实现方式。 A.聚合 决定在整体类中指出部分类时,是用部分类直接作为整体类中的属性的数据类型,还是把部分类用作指针或对象标识的基类型,再用这样的指针或对象标示定义整体类的属性。如果是组合,最好用第1种方式,否则就需要在程序中保证整体对象与部分对象的生命周期的一致性。 B.关联 通常,通过在对象中设立指针或对象标识以指向或记录另一端的对象的方法,来实现关联。如果是单向关联,就在源端的类中设立属性,用来标记另一端的类将来创建的对象。如果是双
12、向关联,就在两端类中各设立属性,用来标记对方将来创建的对象。如果关联中对方类的多重性是1,那么可在本方设立一个指向对方对象的指针,或设立一个记录对方对象引用的属性。 如果对方类的多重性大于1,那么可在本方设立一个指向对方对象的指针集合或引用集合。 若关联的某端有角色名,最好把其作为另一端类的属性名,以访问与角色名相邻的类。 6、调整完备与属性 按照语法: 可见性 属性名:类型= 初始值 对属性的定义进行完善。每一个属性或者包含单个值,或者包含作为一个整体的密切相关的一组值。图6-12对编辑语言不支持的属性类型进行调整的示例 若要给出对属性的性质的约束,如“工龄60”或“0英语成绩100”等,也
13、要看语言是否对其直接支持,否则要在算法上考虑如何实现。 为了维护数据的完整性,必须要考虑需要一起更新的多个相关联的数据值。特别是,当基本的数据发生变化时,必须更新导出的属性。通过下列方法可以做到这一点: 1)显式的代码 因为每一个导出属性是根据一个或多个基本对象属性定义的,更新导出属性的一种方法是,在更新基本对象属性的操作中插入更新导出属性的代码。这种附加的代码将明确地更新依赖基本对象属性的导出属性,使得基本属性与导出属性的值同步。 2)批处理性的重计算 当基本数据以批处理的方式改变时,可能在所有的基本数值改变之后,再重新计算所有的导出属性的值。 3)触发器 凡是依赖基本属性的属性,都必须将它
14、自己向基本属性注册。当基本属性的值被更新时,由专门设置的触发器更新导出属性的值。7、构造和优化算法 对于需要设计的操作,要从如下几方面进行详细地定义: 1)按照定义操作的格式: 可见性 操作名(参数列表):返回类型 完善操作的定义。 2)从问题域的角度,根据其责任,考虑实现操作的算法,即对象是怎样提供操作的。 3)若操作有前后置条件或不变式,考虑编程语言是否予以支持。若不支持,在操作的方法中要予以实现。 4)建议进一步地分析特定类的对象相关的所有交互图,找出其所有与之相关的消息。一个对象所要响应的每个消息都要由该对象的操作处理,其中的一个操作也可能要使用其他操作。如果类拥有状态图,还可根据内部
15、转换以及外部转换上的动作,设计算法的详细逻辑。 可用自然语言或进行了一定结构化的自然语言描述算法,也可以使用程序框图或活动图描述算法。 在算法中还要考虑对例外和特殊情况的处理。如考虑对输入错误、来自中间件或其它软硬件的错误的消息以及其它例外情况的处理。 在系统较为复杂或需要处理大批量的数据的情况下,若系统在性能上有要求,就要对系统的体系结构和算法进行优化。8、决定对象间的可访问性 从类A的对象到类B的对象有4种访问性(1)属性可见性:B是A的一个属性(关联、聚合) class A ;B b;(2)参数可见性:B的对象是A的一个方法的参数(依赖) A.amethod(B b) /间接地找到一个对
16、象,并赋给b(3)局部声明可见性:B的对象是在A的一个方法中声明的一个局部变量(依赖) class A:amethod ; B b;(4) 全局可见性:B的对象在某种程度上全局可见(依赖)声明B的全局实例变 量。 对于后三种情况而言,从类A到类B间存在着依赖关系,在程序运行期间A的对象与B的对象存在着临时性的连接(临时链),而第一种情况中的链是由从类A到类B间的关联实例化而来的。 9、定义对象实例 在逻辑上,一个类是对一组对象的抽象描述。在物理上,一个类所创建的各对象,要么在内存中,要么在外存中。在内存中创建的一个对象,用一个变量记录它的标识。在外存中的对象,可能保存在一个文件中,也可能保存在
17、一个数据库表中。 在OOD中,根据不同的实现条件和实现策略,可以按如下的方式定义对象: 1) 用相应的类定义内存中的全局性对象,包括静态声明和动态创建两种方式。可以一次针对一个对象定义一个变量,也可以成批地定义对象。例如,可以定义一个数组,它的每个元素是一个对象变量,以此来成批地定义对象。 2)当系统需要通过从外存读取数据来创建一个对象时 ,先创建该对象,再从外存中读取这个对象数据,把数据赋值给对象的相应属性。按照一定的策略,内存中的永久对象要保存到外存中,请参看数据管理部分。 无论那种方式,都需要在在OOD文档中加以说明。按如下格式在类描述模板的定义对象部分进行描述:处理机:,;内存对象:(
18、n元数组);外存对象:;10 、其他 在OOD的问题域部分应该根据具体问题考虑使用设计模式。 在OOD的问题域部分,根据情况,还有一些其它需要考虑的问题。例如,考虑加入进行输入数据验证这样的类;考虑对来自中间件或其它软硬件的错误进行处理的类,以及对其它例外情况进行处理的类。 有些作法是在OOD阶段不把这样的读写属性的操作放在类中,而认为这是一种约定,编程人员能理解。 有些作法也不把诸如创建和复制对象这样的操作放在OOD模型中。 第7章 人机交互部分的设计1、 什么是人机交互部分人机交互部分是OOD模型的组成部分之一,突出人如何任命系统以及系统如何向用户提交信息。设计人机交互就是要设计输入与输出
19、,其中包含的对象以及其间的关系构成了人机交互的模型。图7-1设计员与用户协作设计人机界面的工作过程把人机交互部分作为系统中一个独立的组成部分,进行分析和设计,有利于隔离界面支持系统的变化对问题域部分的影响。二、人机交互部分的需求分析对使用系统的人进行分析以便设计出适合其特点的交互方式和界面表现形式;对人和机器的交互过程进行分析核心问题是人如何命令系统,以及系统如何向人提交信息。1、分析与系统交互的人人员参与者 人对界面的需求,不仅在于人机交互的内容,而且在于他们对界面表现形式、风格等方面的爱好。前者是客观需求,对谁都一样;后者是主观需求,因人而异。(1)列举所有的人员参与者(2)对人员参与者进
20、行调查研究(3)区分人员类型,并了解人员的主主观需求(4)统计(或估算)各类人员的比例(5) 按照一定的准则进行折中与均衡2、从用况(use case)分析人机交互 use case的构成 (1)参与者的行为和系统行为按时序交替出现,左右分明。形成交叉排列的段落。 (2)每个段落至少含有一个输入语句或输出语句; (3)有若干纯属参与者自身或系统自身的行为陈述; (4) 可能包含一些控制语句或括号。 抽取方法:删除所有与输入、输出无关的语句和不再包含任何内容的控制语句与括号,剩下的就是对一个参与者(人)使用一项系统功能时的人机交互描述。收款员收款(use case)输入开始本次收款的命令; 作好
21、收款准备,应收款总数 置为0,输出提示信息;for 顾客选购的每种商品 do 输入商品编号; if 此种商品多于一件 then 输入商品数量 end if; 检索商品名称及单价; 货架商品数减去售出数; if 货架商品数低于下限 then 通知供货员请求上货 end if; 计算本种商品总价并打印编号、 名称、数量、单价、总价; 总价累加到应收款总数;end for; 打印应收款总数;输入顾客交来的款数; 计算应找回的款数, 打印以上两个数目, 收款数计入账册。 (a)一个use case的例子收款员收款(人机交互)输入开始本次收款的命令; 输出提示信息;for 顾客选购的每种商品 输入商品编
22、号; if 此种商品多于一件 then 输入商品数量 end if; 打印商品编号、名称、 数量、单价、总价;end for; 打印应收款总数 输入顾客交来的款数 打印交款数及找回款数;(b)人机交互描述 从use case提取人机交互描述图7-2从用况提取人机交互描述的示例三、如何设计人交互部分1、设计输入与输出(1)设计输入1)确定输入设备2)设计输入界面3)输入步骤的细化输入步骤的细化输入设备的选择输入信息表现形式的选择(命令,数据)(2)设计输出1)确定输出设备2)确定输出的内容和形式3)输出步骤的细化输出设备的选择输出信息表现形式的选择2、命令的组织 不受欢迎的命令组织方式:(1)一
23、条命令含有大量的参数和任选项(2)系统有大量命令,不加任何组织和引导命令的组织措施分解与组合(1)分解:将一条含有许多参数和选项的命令分解为若干命令步(2)组合:将基本命令组织成高层命令,从高层命令引向基本命令基本命令:使用一项独立的系统功能的命令。(提取后的用况)命令步:在执行一条基本命令的交互过程中所包含的具体输入步骤。高层命令:如果一条命令是在另一条命令的引导下被选用的,则后者称作前者的高层命令。(a)线性结构 (b) 树型结构(d) 一般网状结构(c) 半序网状结构 图7-3基本命令及其命令的结构图7-4高层命令及其结构 高层命令按功能组织:如文件下有:创建、打开、关闭、打印、删除等。
24、 按子系统组织:如文本编辑子系统、编译自系统。 在两个命令之间通常要输出信息,如图7-5所示。图7-5a表示两个命令步之间不存在这输出信息结构。图7-4b表示连个命令步之间可能存在三种输出信息结构。第一种为反馈信息,在一个命令需要较长的时间执行时,应该向用户显示当前命令的情况,给出一个进度;第二中处理结果,当前命令执行的结果可能要向用户显示;第三种提示信息,即对下一步可输入的命令的提示。图7-5c表示两层命令之间的更为复杂的输出信息结构。图7-5命令之间的输出信息结构在建立命令树时,应遵循如下策略:a.把使用最频繁的命令放在前面,按照用户的工作步骤进行排列。b.在命令中发现整体-部分模式,以帮
25、助对命令的组织与分块。c.每层命令的个数应遵循7+2原则,命令的层次深度尽量要控制在三层以内。3、 用OO概念表达所有的界面成分 1)每一种窗口对应于一个类。2)在窗口中,按照命令的逻辑层次,部署所需要的元素,如菜单、工作区和对话 框等。窗口中的部件元素对应窗口类的部分类,部分类与窗口类形成聚合关系。 3)发现窗口类间的共性以及部件类间的共性,定义较一般的窗口类和部件类,分别形成窗口类间以及部件 类间的泛化关系。 4)用类的属性表示窗口或部件的静态特征,如尺寸、位置、颜色和选项等。 5)用操作表示窗口或部件的动态特征,如选中、移动和滚屏等。有的操作要涉及到问题域中的类。6)发现界面类之间的联系
26、,在其间建立关联。必要时,进一步地绘制用户与系统会话的顺序图。7)建立界面类与问题域类之间的联系。有些界面对象要与问题域中的对象进行通讯,故要对二者之间的通讯进行设计。 在具体设计时,设计人员应该注意以下几点: (a)人机界面只负责输入与输出和窗口更新这样的工作,并把所有面向问题域部分的请求转发给问题域部分,即在界面对象中不应该对业务逻辑进行处理。 (b)一种常见的作法是,问题域部分的对象不应该主动发起与界面部分对象之间的通讯,而只能对界面部分对象进行响应,也就是说,只有界面部分的对象才能访问问题域部分的对象。通常把界面对象向问题域部分对象传输的信息或发布命令看作是“请求”,而把从问题域部分对象向界面部分对象传输的信息看作是“回应”或“通知”。 (c)尽量减少界面部分与问题域部分的耦合。由于界面是易变的,从易于维护和易于复用的角度出发,问题域部分和界面部分应该是低
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 轻松培养小学生英语兴趣的实践经验
- 追及问题奥数六年级难点
- 道路照明设备招标
- 配电工程招标文件获取
- 酒店客房人力资源外包
- 重新出发严守纪律的保证书
- 鉴定人保证书的法律效力解析
- 钢管架工程分包劳务协议
- 铜管配件采购合同
- 钢质门窗招标文件
- 3班主任基本功竞赛:主题班会《我本是高山》教学课件
- 回族服饰历史源流服饰作用样式非遗传承保护课件
- 医院医疗安全管理手册
- 高低压电力系统预试验及维保服务方案
- 医患关爱和人文关怀管理制度
- 包工头与工人安全协议书范文
- 2024年江苏南京农业大学人才派遣人员招聘历年【重点基础提升】模拟试题(共500题)附带答案详解
- 药事管理学调研报告讨论
- 【基于OCALE的跨境电商的运营策略探析7000字(论文)】
- 大学助农直播创业计划书
- 医疗质量检查反馈表
评论
0/150
提交评论