资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
第9页 / 共35页
第10页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,OOA方法的基本顺序:,需求陈述建立 Object Model建立 Dynamic Model建立 Function Model定义服务,建立 Object Model: 确定Class-&-Object确定关联识别主题确立属性确立继承关系,2,软 件 工 程,-第6章 面向对象的分析与设计方法,面向对象设计(Object-Oriented Design),1. OOD准则:优秀软件设计的一个重要特点是容易维护,回顾:SD准则包括 Modularization Abstraction Information hiding Module independence,对于 OOD有类似的准则: 1、模块化:Module = Object,4,1. OOD准则,3、信息隐藏Information hiding = 对象封装Encapsulation of object, 继承耦合(inheritance coupling): 要求 Parent class IS_A child class as high as possible,2、抽象Abstraction:抽出事物的本质特性, 暂不考虑其细节,使设计从具体实现方法中超脱。,5,1. OOD准则, 一般-特殊内聚,5、内聚Cohesion: 服务内聚(service cohesion):一个服务只完成一个功能。, 类内聚(class cohesion):一个类只有一个用途,否则分解之。,6、复用性Reusability,6,2. 启发式规则,1、设计结果清晰易懂,应做到: 用词一致 按习惯用法命名。不同classes中相似的methods最好取同一名字。 使用已有的protocol。 尽量减少message模式的数目。 避免模糊定义。,2、一般-特殊结构的深度应适当(约100个classes,则设计72层),7,2. 启发式规则,3、设计简单的class(定义不超过一页纸或两屏)。应注意: 避免过多attributes; 能用简单的语句描述一个class的任务; objects之间合作关系要简单; 避免过多methods( 7个)。,问题:设计出大量的classes,使结构复杂度增加。 解决:划分主题,提高可理解性。,4、使用简单的protocol,减少message 中传递的 parameters,5、使用简单的method(CASE 可考虑用 inheritance替代)。,6、把设计变动减至最小。,8,概念: 知识重用(例如软件工程知识的重用), 方法和标准重用(例如OO方法和国家规定的软件开发规范的重用), 软件成分的重用,3. 软件重用 (Software Reuse),源码剪贴 无法溯源,无配置管理,Include 修改后所有包含了此段代码的程序都须重新编译。,Inheritance 无须改动原有代码,想象一下,stdio.h 被改动之后,重用软件成分有三个级别: 代码重用:,9,3. 软件重用, 设计重用 当移植系统时, 分析重用 当需求未变,而系统结构改变时,重用效果的衡量:,额外代价: 创建可重用成分的专门投资 多花2 4倍时间测试以保证质量 构件库的建立与维护需要投资 以上投资将分摊到重用这些构件的新系统成本中。重用次数越多,分摊成本越少。,10,I,P,O,问题域 Application Domain,人机交互 Human- Computer Interface (HCI),任务管理 Task Management,数据管理 Data Management,4. 系 统 分 解,回顾SD:从DFD出发 ,OOD模型分解:,11,4. 系 统 分 解,1、子系统之间的交互方式(collaboration), 客户-供应商(client-server)关系:, 平等伙伴(peer-to-peer)关系:,Client subsystem,Server subsystem,Peer subsystem,Peer subsystem,12,4. 系 统 分 解,2、系统组织方案, 水平层次组织: 将系统组织成hierarchy,同一层中的objects相互独立,而上、下层间有 client-server关系。, 一个client只能调用其相邻下层的server 封闭式(closed), 一个client可调用其下任一层的server 开放式(open) 优点:高效; 缺点:修改影响面广,13,HCI,典型应用系统的组织结构,应 用 软 件 包,操 作 系 统,计 算 机 硬 件,人机对 话控制,仿真 软件包,图形 处理,窗口图形,屏幕图形,象素图形,4. 系 统 分 解, 垂直块组织: 将系统垂直分解成若干独立的子系统,一个子系统相当于一块,每块提供一种类型的服务。,14,5. 设计类中的服务 细化object model中的 methods,1、确立服务, 从 dynamic model出发:, 从function model出发:,15,5. 设计类中的服务,2、设计实现方法, 算法设计:要求做到易修改,并且复杂度低(即效率高) 易理解,易实现。, 数据结构设计:需要考虑具体的物理结构的选择。, 新添用于存放内部处理中间结果的class;引入新的低层操作,进一步细化。,16,6. 设计关联,1、单向关联 例:, 由雇员找其所属公司,则设雇主为其属性,即一单向指针, 由公司找其下属某一雇员,则有两种方法:,方法1:遍历所有雇员,找雇主匹配且满足特征的雇员。(省空间),17,6. 设计关联,方法2:设公司的属性雇员为一指针集。(快速),2、双向关联,方法1:将上述两种单向关联结合使用,方法2:另设关联类(特别适用于链属性),18,7. 优 化,1、确定优先级: 必须站在全局高度确定各项质量指标的优先级,在优化设计时制定折衷方案。切忌各子系统自以为是,导致最终优化目标对立。 最常见的情况是在效率与清晰性之间的折衷。,2、提高效率的技术, 增加关联(类),例:设某公司有2000名雇员,平均每名雇员会10种技能,其中有5人精通日语,现要查询公司中会讲日语的雇员是哪些人,19,7. 优化,方法1:嵌套查询 遍历雇员2000次,而对每个雇员遍历技能10次。命中率为1/4000。,方法2:用Hash Table实现技能,使“会讲日语”对应唯一的技能对象,则命中率上升为1/400。,方法3:增加一个额外的限定关联“精通语言”,即可立刻查得结果。,20,7. 优化, 调整查询次序,优化算法 例如公司有5名会日语的雇员,有200名会法语的雇员。现要找日、法语均会的雇员,则应先找的 雇员,再从中找 的雇员。,会日语,会法语, 保留内部中间过程产生的派生属性。,3、调整继承关系, 向上归纳, 向下派生,建立这样的索引必然多占空间,而且基关联改变时也必须相应地修改索引。因此,应只给那些经常执行并且开销大、命中率低的查询建立索引。,21,一个简单的面向对象设计的例子,:输入窗口对象,:客户账号对象,:数据库对象,1.输入客户ID,2.从数据库中取出 客户账号对象,3.读取客户账号信息,4.存款总额,5.存款,6.更新数据库,22,简化的账户类图,23,设计类图,. . .,方法过程,可见名:类型表示 (参数表),方法名,24,25,GetAccount Read information From database,方法n,MakeWithdrawal,GetAccount: Integer (CustomerID),MakeWithdrawal: Currency (WithdrawAmount),ListLargeAccounts (1000000),26,面向对象的数据库设计,从一个类图建立一个对象数据库模式,可以依照以下的步骤: (1)确定哪些类需要持久存储 (2)定义持久类 (3)表示持久类之间的关联 (4)为每个字段选择合适的数据库类型和值域(如果有必要),27,面向对象的数据库设计,(一)类的表示 暂存对象:一个在实例化或方法调用中不需要存储任何属性值的对象。 持久对象:一个在实例化或方法调用中必须存储一个或多个属性值的对象。 对象数据库模式包括每个需要持久存储的类的定义,用ODL(object definition language)来定义。可以从相应的UML类图中得到。,28,类的表示,Class Account Attribute Integer AccountNumber Attribute Currency Balance Attribute Date DateOpened Attribute String CustomerID Attribute String AccountState relationship customer AssigenedTo inverse customer:Uses 这个ODL类对应前面的账号类的ODL定义。Attribute关键字用于申明对象的属性,relationship用于申明一个来与另一个类之间的关系。,29,类的表示,Class customer Attribute String name Attribute String Address Attribute String phoneNumber relationship set Makes inverse Account:Makes 客户类的ODL定义.客户可以同时拥有多个账号。,30,类的关系的表示,对于多对多的关系,如果关系本身还有属性,则生成一个新的相关类。否则表示法同“一对多”。,31,带属性相关类的ODL定义,Class CatalogProduct Attribute real price relationship Catalog AppearsIn1 inverse Catalog:Contains1 relationship ProductItem AppearsIn2 inverse ProductItem:Contains2 ,32,一般化关系,体现类之间的继承和泛化的关系,33,一般化关系,Class Order Attribute String OrderID Attribute String Date Attribute String PriorityCode Attribute real TotalS&H Attribute real TotalTax Attribute real GrandTotal Class webOrder extends Order Attribute EmailAddress Attribute ReplyMethod ,34,一般化关系,Class phoneOrder Attribute String phoneClerk Attribute String CallStartTime Attribute Integer LengthOfCall Class MailOrder extends Order Attribute String DateReceived Attribute ProcessClerk ,35,关键字extends说明类之间的继承关系。当存储在面向对象数据库中时,这三个派生类的对象将继承order类中所定义的所有属性、方法和关系。 参照完整性时有对象标识实现的,因此在面向对象数据库中不需要关键属性。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号