第9章 面向对象设计与测试课件

上传人:我*** 文档编号:144909815 上传时间:2020-09-14 格式:PPT 页数:103 大小:828.50KB
返回 下载 相关 举报
第9章 面向对象设计与测试课件_第1页
第1页 / 共103页
第9章 面向对象设计与测试课件_第2页
第2页 / 共103页
第9章 面向对象设计与测试课件_第3页
第3页 / 共103页
第9章 面向对象设计与测试课件_第4页
第4页 / 共103页
第9章 面向对象设计与测试课件_第5页
第5页 / 共103页
点击查看更多>>
资源描述

《第9章 面向对象设计与测试课件》由会员分享,可在线阅读,更多相关《第9章 面向对象设计与测试课件(103页珍藏版)》请在金锄头文库上搜索。

1、第三部分 面向对象的软件开发方法,第9章 面向对象设计,9.1 什么是面向对象设计,在面向对象分析阶段只考虑问题域和系统责任,在面向对象设计阶段则要考虑与具体实现有关的问题,这样做的主要目的是: 使反映问题域本质的总体框架和组织结构长期稳定,而细节可变; 把稳定部分(问题域部分)与可变部分(与实现有关的部分)分开,使得系统能从容地适应变化; 有利于同一个分析模型用于不同的设计与实现; 支持系统族和相似系统的分析、设计或编程结果复用;,9.1 什么是面向对象设计,问题域部分的设计要对OOA结果按实现条件进行补充与调整。 即,要继续运用OOA的方法,包括概念、表示法及一部分策略。,不但要根据实现条

2、件进行OOD设计,而且由于需求变化或新发现了错误,也要对OOA的结果进行修改。,9.2 问题域部分的设计,(1)为复用设计与编程的类而增加结构,如果OOA识别和定义的类是本次开发中新定义的,那么需要进行编程。 如果已存在一些可复用的类,而且这些类既有分析、设计时的定义,又有源程序,那么,复用这些类即可提高开发效率与质量。 可复用的类可能只是与OOA模型中的类相似,而不是完全相同,因此需对二者进行修改。 目标:尽可能使复用成分增多,新开发的成分减少,9.2 问题域部分的设计,不同程度的复用,当前所需的类的信息 比 可复用类定义的信息,直接复用 通过继承复用 删除可复用类的多余信息 删除多余信息,

3、通过继承而复用,9.2 问题域部分的设计,步骤: (1)把要复用的类加到问题域, (2)标以 “复用”,划掉(或标出)不用的属性与操作 (3)建立从复用类到问题域原有的类之间的泛化关系 (4)由于问题域的类继承了“复用”类的特征, 所以有些属性和操作不需要了划掉。,第四种情况的的具体处理: 可复用类定义的信息 当前所需的类的信息,把需要频繁交换信息的对象,尽量地放在一台处理机上。 增加属性或类,以保存中间结果 提高或降低系统的并发度,可能要人为地增加或减少主动对象。 合并通讯频繁的类,流速控制器 指定流速 当前流速 流速调节 流速探测 ,合并后,(2)提高性能,9.2 问题域部分的设计,用聚合

4、关系描述复杂类,帧,显示,9.2 问题域部分的设计,为编程方便增加底层成分 细化对象的分类,例:将几何图形分成多边形、椭圆、扇形等特殊类,几何图形,绘图,9.2 问题域部分的设计,(3)增加一般类以建立共同协议 增加根类:将所有的具有相似协议的类组织在一起 提供通用的协议 例如:提供创建、删除、复制等服务 增加其他一般类:提供局部通用的协议 例如:提供永久存储及恢复功能,9.2 问题域部分的设计,(4)按编程语言调整继承 起因:OOA强调如实地反映问题域,OOD考虑实现问题, 所用语言不支持多继承,甚至不支持继承,多继承模式示例,狭义菱形,广义菱形,9.2 问题域部分的设计,因为聚合和泛化是不

5、同的概念,这种方法并不是通用的(按定义)。 在大多数情况下,需要考虑形成多继承的原因,将本来在特殊类中显式定义的信息离出来,作为部分对象,以原来的一般类作为整体对象。,把多继承调整为单继承,9.2 问题域部分的设计,方法1:采用聚合,创建“雇主”对象,创建“职员”对象,创建“雇主职员”对象,9.2 问题域部分的设计,公司人员,雇主身份,职员身份,1,0.1,0.1,1,9.2 问题域部分的设计,方法2:压平,公司人员,顾主,职员,顾主职员,问题:有什么缺点?,问题:改成继承?,9.2 问题域部分的设计,方法3:不支持泛化,顾主,职员,顾主职员,问题:有什么缺点?,9.2 问题域部分的设计,对多

6、态性的调整,9.2 问题域部分的设计,供货商,客户,0.*,1.*,供需合同 卖方 买方 .,1,1,供货商,0.*,1.*,把多对多关联转化为一对多关联,(5)对复杂关联的转化并决定关联的实现方式,项目,人员,语言,把多元关联转化为二元关联,公司,雇员,*,1.*,工作,薪水,把关联类转化为二元关联,9.2 问题域部分的设计,对关联进行调整后,要考虑关联的实现方式。 (1)聚合 决定在整体类中指出部分类时,是用部分类直接作为整体类中的属性的数据类型,还是把部分类用作指针或对象标识的基类型,再用这样的指针或对象标示定义整体类的属性。 如果是组合,最好用第1种方式,否则就需要在程序中保证整体对象

7、与部分对象的生命周期的一致性。,Class A Class B A a; /组合 A *a; /聚合,B的对象管理A的对象组合 void combination() ,9.2 问题域部分的设计,(2)关联 通常,通过在对象中设立指针或对象标识以指向或记录另一端的对象的方法,来实现关联。 (1) 如果是单向关联,就在源端的类中设立属性,用来标记另一端的类将来创建的对象 (2) 如果是双向关联,就在两端类中各设立属性,用来标记对方将来创建的对象。 (3) 如果关联中对方类的多重性是1,那么可在本方设立一个指向对方对象的指针,或设立一个记录对方对象引用的属性。 (4) 如果对方类的多重性大于1,那么

8、可在本方设立一个指向对方对象的指针集合或引用集合。 (5) 若关联的某端有角色名,最好把其作为另一端类的属性名,以访问与角色名相邻的类。,1 oldest,1.*,0.1,Provider *toProvider providerSet *head,struct providerSet Provider p; struct providerSet * next;,Consumer oldest ,9.2 问题域部分的设计,(6)调整与完善属性,按照语法:可见性 属性名:类型= 初始值 对属性的定义进行完善。 每一个属性或者包含单个值,或者包含作为一个整体的密切相关的一组值,若要给出对属性的性质

9、的约束,如“工龄60”或“0英语成绩100”等,也要看语言是否对其直接支持,否则要在算法上考虑如何实现。,9.2 问题域部分的设计,(7)构造和优化算法,对于需要设计的操作,要从如下几方面进行详细地定义: (1) 按照操作格式: 可见性 操作名(参数列表):返回类型 完善操作的定义。 (2)从问题域的角度,根据其责任,考虑实现操作的算法,即对象是怎样提供操作的。 (3)若操作有前后置条件或不变式,考虑编程语言是否予以支持。若不支持,在操作的方法中要予以实现。 (4)建议进一步地分析特定类的对象相关的所有交互图,找出其所有与之相关的消息。一个对象所要响应的每个消息都要由该对象的操作处理,其中的一

10、个操作也可能要使用其他操作。如果类拥有状态图,还可根据内部转换以及外部转换上的动作,设计算法的详细逻辑。 可用自然语言或进行了一定结构化的自然语言描述算法,也可以使用程序框图或活动图描述算法。 在算法中还要考虑对例外和特殊情况的处理。如考虑对输入错误、来自中间件或其它软硬件的错误的消息以及其它例外情况的处理。 在系统较为复杂或需要处理大批量的数据的情况下,若系统在性能上有要求,就要对系统的体系结构和算法进行优化。,(8)决定对象间的可访问性(M) 从类A的对象到类B的对象有4种访问性 属性可见性:B是A的一个属性(关联、聚合) class A ;B b; 参数可见性:B的对象是A的一个方法的参

11、数(依赖) A.amethod(B b) /间接地找到一个对象,并赋给b。 局部声明可见性:B的对象是在A的一个方法中声明的一个局部变量(依赖) class A:amethod ; B b; 全局可见性:B的对象在某种程度上全局可见(依赖) 声明B的全局实例变量 对于后三种情况而言,从类A到类B间存在着依赖关系,在程序运行期间A的对象与B的对象存在着临时性的连接(临时链),而第一种情况中的链是由从类A到类B间的关联实例化而来的。,(9) 定义对象实例,在逻辑上,一个类是对一组对象的抽象描述。 在物理上,一个类所创建的各对象, 要么在内存中(用一个变量记录对象的标识); 要么在外存中(把对象保存

12、在一个文件中或一个数据库表中) 根据不同的实现条件和实现策略,可以按如下的方式定义对象: (1) 用相应的类定义内存中的全局性对象,包括静态声明和动态创建两种方式。可以一次针对一个对象定义一个变量,也可以成批地定义对象。 例如,可以定义一个数组,它的每个元素是一个对象变量,以此来成批地定义对象。,Class A Class B A a10; A *a10; ,9.2 问题域部分的设计,(2)当系统需要通过从外存读取数据来创建一个对象时,先创建该对象,再从外存中读取这个对象数据,把数据赋值给对象的相应属性。,按照一定的策略,内存中的永久对象要保存到外存中,请参看数据管理部分。 无论那种方式,都需

13、要在在OOD文档中加以说明。按如下格式在类描述模板的定义对象部分进行描述: 处理机:,; 内存对象:(n元数组); 外存对象:;,对象 属性1 属性n,外存,内存,9.3 人机交互部分的设计,简单的讲,人机交互部分是人和计算机之间交互信息的媒介,对它的设计涉及到计算机科学、心理学、艺术学、认知科学和人机工程学等学科。本节阐述的是人机交互的软件方面的设计。,控制接口部分,问题域 部分,数据管理部分,把人机交互部分作为系统中一个独立的组成部分,进行分析和设计,有利于隔离界面支持系统的变化对问题域部分的影响.,什么是人机交互部分,9.3 人机交互部分的设计,人机交互部分的需求分析,对使用系统的人进行

14、分析 以便设计出适合其特点的交互方式和界面表现形式; 对人和机器的交互过程进行分析 核心问题是人如何命令系统,以及系统如何向人提交信息。,1、分析与系统交互的人人员参与者 人对界面的需求,不仅在于人机交互的内容,而且在于他们对界面表现形式、风格等方面的爱好。 前者是客观需求*,对谁都一样;后者是主观需求,因人而异。 (1)列举所有的人员参与者 (2)调查研究 (3)区分人员类型 (4)统计(或估算)各类人员的比例 (5)了解使用者的主观需求 (6) 按照一定的准则进行折中与均衡,2、对人和机器的交互过程进行分析 从use case分析人机交互 use case的构成 参与者的行为和系统行为按时

15、序出现,形成交叉排列的段落。 每个段落至少含有一个输入语句或输出语句; 有若干纯属参与者自身或系统自身的行为陈述; 可能包含一些控制语句或括号。 抽取方法: 删除所有与输入、输出无关的语句和不再包含任何内容的控制语句与括号, 剩下的就是对一个参与者(人)使用一项系统功能时的人机交互描述。,9.3 人机交互部分的设计,收款员收款(use case) 输入开始本次收款的命令; 作好收款准备,应收款总数 置为0,输出提示信息; for 顾客选购的每种商品 do 输入商品编号; if 此种商品多于一件 then 输入商品数量 end if; 检索商品名称及单价; 货架商品数减去售出数; if 货架商品数低于下限 then 通知供货员请求上货 end if; 计算本种商品总价并打印编号、 名称、数量、单价、总价; 总价累加到应收款总数; end for; 打印应收款总数; 输入顾客交来的款数; 计算应找回的款数, 打印以上两个数目, 收款数计入账册。 (a)一个use case的例子,从use case提取人机交互描述,9.3 人机交互部分的设计,一、输入与输出设计 (1)输入的细化 输入步骤的细化 输入设备的选择 输入信息表现形式的选择(命令,数据) (2)输出的细化 输出步骤的细化 输出设备的选择 输出信息表现形式的选择,人机界面的OO设计,9.3 人

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号