软件工程面向对象设计课件_第1页
软件工程面向对象设计课件_第2页
软件工程面向对象设计课件_第3页
软件工程面向对象设计课件_第4页
软件工程面向对象设计课件_第5页
已阅读5页,还剩181页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章面向对象设计11/1/20221第八章面向对象设计10/23/20221第八章面向对象设计说明简写为OOD面向对象设计就是用面向对象观点建立求解域模型的过程面向对象设计可以被分为两个阶段系统设计确定实现系统的策略和目标系统的高层结构对象设计确定解空间中的类、关联、接口形式及实现服务的算法11/1/20222第八章面向对象设计说明10/23/20222第八章面向对象设计8.1面向对象设计的准则8.2启发规则8.3系统分解8.4设计问题域子系统8.5设计人-机交互子系统8.6设计任务管理子系统11/1/20223第八章面向对象设计8.1面向对象设计的准则10/23/2第八章面向对象设计8.7设计数据管理子系统8.8设计类中的服务8.9设计关联8.10设计优化8.11实例11/1/20224第八章面向对象设计8.7设计数据管理子系统10/23/8.1面向对象设计的准则明确设计决定质量,决定可维护性第四章的几条原理仍然有效,增加了面向对象的特点模块化抽象逐步求精信息隐藏11/1/202258.1面向对象设计的准则明确10/23/202258.1面向对象设计的准则1、模块化2、抽象3、信息隐藏4、弱耦合交互耦合(仅通过消息连接来实现)尽量降低消息连接的复杂程度减少对象发送(或接收)的消息数11/1/202268.1面向对象设计的准则1、模块化10/23/202268.1面向对象设计的准则4、弱耦合继承耦合应该越紧密越好在设计时应该使特殊类尽量多继承并使用其一般化类的属性和服务5、强内聚服务内聚类内聚一般-特殊内聚(应符合多数人的概念)11/1/202278.1面向对象设计的准则4、弱耦合10/23/202278.1面向对象设计的准则6、可重用首先,尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类)其次,如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性11/1/202288.1面向对象设计的准则6、可重用10/23/202288.2启发规则明确回顾第四章中的七条启发式规则提高模块独立性模块规模应该适中深度、宽度、扇出和扇入都应适当模块的作用域应该在控制域之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测11/1/202298.2启发规则明确10/23/202298.2启发规则一、设计结果应该清晰易懂-为了以后可能的重用服务1、用词一致2、使用已有的协议3、减少消息模式的数目4、避免模糊的定义11/1/2022108.2启发规则一、设计结果应该清晰易懂-为了以后可能的重用8.2启发规则二、一般-特殊结构的深度应适当应该使类等级中包含的层次数适当(即继承的层数)11/1/2022118.2启发规则二、一般-特殊结构的深度应适当10/23/28.2启发规则三、设计简单的类1、避免包含过多的属性2、有明确的定义3、尽量简化对象之间的合作关系4、不要提供太多服务典型地,一个类提供的公共服务不超过7个11/1/2022128.2启发规则三、设计简单的类10/23/2022128.2启发规则四、使用简单的协议一般来说,消息中的参数不要超过3个(不是绝对的)五、使用简单的服务面向对象设计出来的类中的服务通常都很小,一般只有3~5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能11/1/2022138.2启发规则四、使用简单的协议10/23/2022138.2启发规则六、把设计变动减至最小通常,设计的质量越高,设计结果保持不变的时间也越长11/1/2022148.2启发规则六、把设计变动减至最小10/23/202218.3系统分解说明大多数系统的面向对象设计模型,在逻辑上都由四大部分组成。这四大部分对应于组成目标系统的四个子系统问题域子系统人-机交互子系统任务管理子系统数据管理子系统11/1/2022158.3系统分解说明10/23/2022158.3系统分解说明面向对象设计模型也包含五个层次主题层类-&对象层结构层属性层服务层11/1/2022168.3系统分解说明10/23/2022168.3系统分解11/1/2022178.3系统分解10/23/2022178.3系统分解一、子系统之间的两种交互方式客户-供应商关系(Client_supplier)单向交互平等伙伴关系(peer_to_peer)双向交互推荐11/1/2022188.3系统分解一、子系统之间的两种交互方式10/23/208.3系统分解二、组织系统的两种方案1、层次组织封闭式马尔可夫原则开放式2、块状组织这种组织方案把软件系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务11/1/2022198.3系统分解二、组织系统的两种方案10/23/202218.4设计问题域子系统说明面向对象设计仅需从实现角度对问题域模型作一些补充或修改,主要是增添、合并或分解类—&—对象、属性及服务,调整继承关系等。当问题域子系统过分复杂庞大时,应该把它进一步分解成若干个更小的子系统11/1/2022208.4设计问题域子系统说明10/23/2022208.4设计问题域子系统一、调整需求用户需求或外部环境发生了变化分析员对问题域理解不透彻或缺乏领域专家帮助,导致面向对象分析模型不能准确反映用户的真正需求二、重用已有的类三、把问题域类组合在一起在面向对象设计过程中,设计者往往通过引入一个根类而把问题域类组合在一起11/1/2022218.4设计问题域子系统一、调整需求10/23/2022218.4设计问题域子系统四、增加一般化类以建立协议五、ATM系统之例见下页星型拓扑所划分的三个更小的子系统实际上就是分析阶段所划分的三个主题11/1/2022228.4设计问题域子系统四、增加一般化类以建立协议10/2311/1/20222310/23/2022238.5设计人-机交互子系统说明在第四章的基础上从面向对象设计的角度做些补充一、设计人-机交互界面的准则1、一致性使用一致的术语,一致的步骤,一致的动作2、减少步骤11/1/2022248.5设计人-机交互子系统说明10/23/2022248.5设计人-机交互子系统11/1/2022258.5设计人-机交互子系统10/23/2022258.5设计人-机交互子系统一、设计人-机交互界面的准则3、及时提供反馈信息11/1/2022268.5设计人-机交互子系统一、设计人-机交互界面的准则108.5设计人-机交互子系统一、设计人-机交互界面的准则4、提供撤销命令5、无须记忆6、易学11/1/2022278.5设计人-机交互子系统一、设计人-机交互界面的准则108.5设计人-机交互子系统11/1/2022288.5设计人-机交互子系统10/23/2022288.5设计人-机交互子系统一、设计人-机交互界面的准则7、富有吸引力11/1/2022298.5设计人-机交互子系统一、设计人-机交互界面的准则108.5设计人-机交互子系统二、设计人-机交互界面的策略1、分类用户分类角度按技能水平分类(新手/初级/中级/高级)按职务分类(总经理/经理/职员)按所属集团分类(职员/顾客)2、描述用户应该仔细了解将来使用系统的每类用户的情况,把获得的各项信息记录下来11/1/2022308.5设计人-机交互子系统二、设计人-机交互界面的策略1011/1/20223110/23/20223111/1/20223210/23/2022328.5设计人-机交互子系统二、设计人-机交互界面的策略3、设计命令层次1)研究现有的人-机交互含义和准则2)确定初始的命令层次实质上是用过程抽象机制组织起来的、可供选用的服务的表示形式3)精化命令层次(考虑下述因素)次序在命令层的每一部分内把服务排好次序11/1/2022338.5设计人-机交互子系统二、设计人-机交互界面的策略108.5设计人-机交互子系统二、设计人-机交互界面的策略3、设计命令层次3)精化命令层次整体-部分关系有助于在命令层中分组组织服务宽度和深度操作步骤应该用尽量少的单击、拖动和击键组合来表达命令,而且应该为高级用户提供简捷的操作方法4)设计人-机交互类(以MFC为例)11/1/2022348.5设计人-机交互子系统二、设计人-机交互界面的策略108.6设计任务管理子系统说明设计工作的一项重要内容是,确定哪些是必须同时动作的对象,哪些是相互排斥的对象,然后进一步设计任务管理子系统11/1/2022358.6设计任务管理子系统说明10/23/2022358.6设计任务管理子系统一、分析并发性通过面向对象分析建立起来的动态模型,是分析并发性的主要依据。如果两个对象彼此间不存在交互,或者它们同时接受事件,则这两个对象在本质上是并发的11/1/2022368.6设计任务管理子系统一、分析并发性10/23/20228.6设计任务管理子系统二、设计任务管理子系统设计任务管理子系统,包括确定各类任务并把任务分配给适当的硬件或软件去执行1、确定事件驱动型任务如与设备、屏幕窗口等的通信2、确定时钟驱动型任务某些任务每隔一定时间间隔就被触发以执行某些处理工作过程:睡眠,接收中断,处理中断,睡眠……11/1/2022378.6设计任务管理子系统二、设计任务管理子系统10/23/8.6设计任务管理子系统二、设计任务管理子系统3、确定优先任务高优先级低优先级4、确定关键任务关键任务是有关系统成功或失败的关键处理,这类处理通常都有严格的可靠性要求对高可靠性处理应该精心设计和编码,并且应该严格测试11/1/2022388.6设计任务管理子系统二、设计任务管理子系统10/23/8.6设计任务管理子系统二、设计任务管理子系统5、确定协调任务当系统中存在三个以上任务时,就应该增加一个任务,用它作为协调任务6、尽量减少任务数必须仔细分析和选择每个确实需要的任务。应该使系统中包含的任务数尽量少11/1/2022398.6设计任务管理子系统二、设计任务管理子系统10/23/8.6设计任务管理子系统二、设计任务管理子系统7、确定资源需求使用多处理器或固件,主要是为了满足高性能的需求。设计者必须通过计算系统载荷(即每秒处理的业务数及处理一个业务所花费的时间),来估算所需要的CPU(或其他固件)的处理能力11/1/2022408.6设计任务管理子系统二、设计任务管理子系统10/23/8.7设计数据管理子系统一、选择数据存储管理模式三种模式1、文件管理系统OS的一部分,但是需要额外代码2、关系数据库管理系统一致的接口标准化的语言3、面向对象数据库管理系统扩展的关系数据库管理系统和扩展的面向对象程序设计语言11/1/2022418.7设计数据管理子系统一、选择数据存储管理模式10/28.7设计数据管理子系统二、设计数据管理子系统1、设计数据格式1)文件系统第一范式(就是数据表的每一列不可再分)2)关系数据库管理系统第三范式每个非关键字属性仅函数依赖于主关键字如“学生系宿舍”存在传递依赖,不符合第三范式3)面向对象数据库管理系统扩展的关系数据库途径扩展的面向对象程序设计语言途径11/1/2022428.7设计数据管理子系统二、设计数据管理子系统10/238.7设计数据管理子系统二、设计数据管理子系统2、设计相应的服务如果某个类的对象需要存储起来,则在这个类中增加一个属性和服务,用于完成存储对象自身的工作1)文件系统打开,检索,更新,关闭注意,为提高性能应该批量处理访问文件的要求11/1/2022438.7设计数据管理子系统二、设计数据管理子系统10/238.7设计数据管理子系统二、设计数据管理子系统2、设计相应的服务2)关系数据库管理系统访问数据表,检索,更新3)面向对象数据库管理系统扩展的关系数据库途径扩展的面向对象程序设计语言途径11/1/2022448.7设计数据管理子系统二、设计数据管理子系统10/238.7设计数据管理子系统三、实例ATM中,需要存储的对象主要是账户类的对象。为了支持数据管理子系统的实现,账户对象必须知道自己是怎样存储的每个对象自己保存自己由数据管理子系统负责存储对象11/1/2022458.7设计数据管理子系统三、实例10/23/2022458.8设计类中的服务一、确定类中应有的服务对象模型进行对象设计的基本框架对象模型中,通常只在每个类中列出很少几个最核心的服务动态模型对象中的许多服务都与对象收到的事件密切相关11/1/2022468.8设计类中的服务一、确定类中应有的服务10/23/28.8设计类中的服务一、确定类中应有的服务功能模型 DFD中的某些处理可能与对象提供的服务相对应11/1/2022478.8设计类中的服务一、确定类中应有的服务10/23/28.8设计类中的服务二、设计实现服务的方法1、设计实现服务的算法1)算法复杂度2)容易理解与容易实现3)易修改2、选择数据结构3、定义内部类和内部操作11/1/2022488.8设计类中的服务二、设计实现服务的方法10/23/28.9设计关联在面向对象设计过程中,设计人员必须确定实现关联的具体策略一、关联的遍历(使用关联的方式)单向遍历双向遍历11/1/2022498.9设计关联在面向对象设计过程中,设计人员必须确定实现8.9设计关联二、实现单向关联关联的重数是一阶的实现关联的指针是一个简单指针关联的重数是多阶的需要用一个指针集合实现关联实例(下二页)11/1/2022508.9设计关联二、实现单向关联10/23/2022508.9设计关联11/1/2022518.9设计关联10/23/20225111/1/20225210/23/2022528.9设计关联三、实现双向关联方法一、只用属性实现一个方向的关联,当需要反向遍历时就执行一次正向查找11/1/2022538.9设计关联三、实现双向关联10/23/2022538.9设计关联三、实现双向关联方法二、两个方向的关联都用属性实现11/1/2022548.9设计关联三、实现双向关联10/23/2022548.9设计关联三、实现双向关联方法三、用独立的关联对象实现双向关联11/1/2022558.9设计关联三、实现双向关联10/23/2022558.9设计关联四、链属性的实现三种情形:1:1关联1:N关联M:N关联11/1/2022568.9设计关联四、链属性的实现10/23/2022568.10设计优化一、确定优先级二、提高效率的几项技术1、增加冗余关联(分析时应避免的)以提高访问效率哈希表实现11/1/2022578.10设计优化一、确定优先级哈希表实现10/23/208.10设计优化一、确定优先级二、提高效率的几项技术1、增加冗余关联以提高访问效率限定词(索引)11/1/2022588.10设计优化一、确定优先级限定词(索引)10/23/8.10设计优化二、提高效率的几项技术2、调整查询次序例:查询“扬州所有的女公交司机”应安排什么查询次序?3、保留派生属性(中间结果)11/1/2022598.10设计优化二、提高效率的几项技术10/23/2028.10设计优化三、调整继承关系在面向对象设计过程中,建立良好的继承关系是优化设计的一项重要内容1、抽象与具体首先创建一些满足具体用途的类,然后对它们进行归纳,一旦归纳出一些通用的类以后,往往可以根据需要再派生出具体类。在进行了一些具体化(即专门化)的工作之后,也许就应该再次归纳了11/1/2022608.10设计优化三、调整继承关系10/23/20226011/1/20226110/23/20226111/1/20226210/23/20226211/1/20226310/23/20226311/1/20226410/23/2022648.10设计优化三、调整继承关系2、为提高继承程度而修改类定义不能违背领域知识和常识应该确保现有类的协议(即同外部世界的接口)不变3、利用委托实现行为共享11/1/2022658.10设计优化三、调整继承关系10/23/202265继承了add,remove,first,last将List的实例作为属性,从而其本身只有两个操作11/1/202266继承了add,remove,first,last将List的8.11实例问题的初衷介绍一个简化的C++类库管理系统的分析和设计过程11/1/2022678.11实例问题的初衷10/23/2022678.11实例一、面向对象分析1、需求1)管理用C++语言定义的类2)用户能够方便地向类库中添加新的类,并能建立新类与库中原有类的关系3)用户能够通过类名从类库中查询出指定的类4)用户能够查看或修改与指定类有关的信息(包括数据成员的定义、成员函数的定义及这个类与其他类的关系)11/1/2022688.11实例一、面向对象分析10/23/2022688.11实例一、面向对象分析1、需求5)用户能够从类库中删除指定的类6)用户能够在浏览窗口中方便、快速地浏览当前类的父类和子类7)具有“联想”浏览功能,也就是说,可以把当前类的某个子类或父类指定为新的当前类,从而浏览这个新当前类的父类和子类8)用户能够查看或修改某个类的指定成员函数的源代码11/1/2022698.11实例一、面向对象分析10/23/2022698.11实例一、面向对象分析1、需求9)本系统是一个简化的多用户系统,每个用户都可以建立自己的类库,不同类库之间互不干扰10)对于用户的误操作或错误的输入数据,系统能给出适当的提示信息,并且仍然继续稳定地运行11)系统易学易用,用户界面应该是GUI(图形用户界面)的11/1/2022708.11实例一、面向对象分析10/23/2022708.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象基本对象就两个类库类(类条目)由需求3)4)条可知类条目中应包含属性:类名父类列表成员函数列表数据成员列表11/1/2022718.11实例一、面向对象分析10/23/2022718.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类条目中的每个“父类”应包含信息:名字访问权虚基类标志(virtual)11/1/2022728.11实例一、面向对象分析10/23/2022728.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类条目中的每个“成员函数”应包含信息:函数名访问权(public,protected,private)虚函数标志(virtual)返回值类型参数函数代码(需求8))11/1/2022738.11实例一、面向对象分析10/23/2022738.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类条目中的每个“数据成员”应包含信息:数据名访问权(public,protected,private)数据类型由于“父类”、“成员函数”、“数据成员”的相对独立性,将它们都作为对象11/1/2022748.11实例一、面向对象分析10/23/2022748.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类条目中应包含操作:对于类名(设置类名)对于父类列表(添加、删除、更改)对于成员函数(添加、删除、更改)对于数据成员(添加、删除、更改)11/1/2022758.11实例一、面向对象分析10/23/2022758.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类库包含的属性:库名类条目列表类库包含的操作:插入一个类条目(需求2))删除一个类条目(需求5))存储类库读出类库(放到内存中)11/1/2022768.11实例一、面向对象分析10/23/2022768.11实例一、面向对象分析2、建立对象模型2)分析类—&—对象之间的关系一个用户拥有多个类库每个类库由0或多个类条目组成每个类条目由0或多个父类每个类条目0或多个数据成员每个类条目0或多个成员函数组成注:上述关系全是对象之间的关系,而不是类之间的关系11/1/2022778.11实例一、面向对象分析10/23/2022778.11实例一、面向对象分析2、建立对象模型下页动态模型(无需)不存在状态转换的问题功能模型(无需)没有数据转换的问题,所以无需用DFD描述功能11/1/2022788.11实例一、面向对象分析10/23/20227811/1/20227910/23/2022798.11实例二、面向对象设计1、设计类库结构两种可选结构二叉树(下页图示)链表操作简单,逻辑表现力不好11/1/2022808.11实例二、面向对象设计10/23/2022808.11实例讨论其典型优缺点11/1/2022818.11实例讨论其典型优缺点10/23/2022818.11实例二、面向对象设计1、设计类库结构最终的选择:11/1/2022828.11实例二、面向对象设计10/23/2022828.11实例二、面向对象设计2、设计问题域子系统从实现的角度对前述对象模型所做补充:1)类条目(ClassEntry)用“父类链表头指针”、“成员函数链表头指针”、“数据成员链表头指针”代替对应的列表增加“注释”增加“next”指针增加“查找指定父类信息”、“查找指定成员函数信息”、“查找指定数据成员信息”11/1/2022838.11实例二、面向对象设计10/23/2022838.11实例二、面向对象设计2、设计问题域子系统从实现的角度对前述对象模型所做补充:2)类库(ClassEntryLink)将“类条目列表”改为“类链头指针”应有服务(取得库中类条目的个数,读文件并在内存中建立类链表,写链表,插入一个类条目,删除一个类条目,按类名查找并将内容复制到指定地点)11/1/2022848.11实例二、面向对象设计10/23/2022848.11实例二、面向对象设计2、设计问题域子系统从实现的角度对前述对象模型所做补充:3)父类(ClassBase),成员函数(ClassFun),数据成员(ClassData),各添加一个指针(next)4)类条目缓冲区(Buffer)11/1/2022858.11实例二、面向对象设计10/23/20228511/1/20228610/23/2022868.11实例二、面向对象设计3、设计人-机交互子系统1)窗口包含下述构件:登录窗口11/1/2022878.11实例二、面向对象设计10/23/2022878.11实例二、面向对象设计3、设计人-机交互子系统1)窗口包含下述构件:主窗口11/1/2022888.11实例二、面向对象设计10/23/202288创建窗口11/1/202289创建窗口10/23/202289选择浏览方式窗口11/1/202290选择浏览方式窗口10/23/202290类名浏览窗口11/1/202291类名浏览窗口10/23/2022918.11实例二、面向对象设计3、设计人-机交互子系统1)窗口包含下述构件:按类关系浏览窗口(略)2)重用我们设计的是一个可重用类库管理系统,在设计和实现这个类库管理系统的过程中,自然应该尽可能重用已有的软构件11/1/2022928.11实例二、面向对象设计10/23/2022928.11实例二、面向对象设计3、设计人-机交互子系统2)重用采用VC环境,尽可能重用MFC中的类上述所有的窗口类可以从MFC中的CDialog类继承只有很少的编程工作量4、其它类(略)没有设计如下的两个子系统:任务管理子系统数据管理子系统11/1/2022938.11实例二、面向对象设计10/23/202293第八章面向对象设计11/1/202294第八章面向对象设计10/23/20221第八章面向对象设计说明简写为OOD面向对象设计就是用面向对象观点建立求解域模型的过程面向对象设计可以被分为两个阶段系统设计确定实现系统的策略和目标系统的高层结构对象设计确定解空间中的类、关联、接口形式及实现服务的算法11/1/202295第八章面向对象设计说明10/23/20222第八章面向对象设计8.1面向对象设计的准则8.2启发规则8.3系统分解8.4设计问题域子系统8.5设计人-机交互子系统8.6设计任务管理子系统11/1/202296第八章面向对象设计8.1面向对象设计的准则10/23/2第八章面向对象设计8.7设计数据管理子系统8.8设计类中的服务8.9设计关联8.10设计优化8.11实例11/1/202297第八章面向对象设计8.7设计数据管理子系统10/23/8.1面向对象设计的准则明确设计决定质量,决定可维护性第四章的几条原理仍然有效,增加了面向对象的特点模块化抽象逐步求精信息隐藏11/1/2022988.1面向对象设计的准则明确10/23/202258.1面向对象设计的准则1、模块化2、抽象3、信息隐藏4、弱耦合交互耦合(仅通过消息连接来实现)尽量降低消息连接的复杂程度减少对象发送(或接收)的消息数11/1/2022998.1面向对象设计的准则1、模块化10/23/202268.1面向对象设计的准则4、弱耦合继承耦合应该越紧密越好在设计时应该使特殊类尽量多继承并使用其一般化类的属性和服务5、强内聚服务内聚类内聚一般-特殊内聚(应符合多数人的概念)11/1/20221008.1面向对象设计的准则4、弱耦合10/23/202278.1面向对象设计的准则6、可重用首先,尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类)其次,如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性11/1/20221018.1面向对象设计的准则6、可重用10/23/202288.2启发规则明确回顾第四章中的七条启发式规则提高模块独立性模块规模应该适中深度、宽度、扇出和扇入都应适当模块的作用域应该在控制域之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测11/1/20221028.2启发规则明确10/23/202298.2启发规则一、设计结果应该清晰易懂-为了以后可能的重用服务1、用词一致2、使用已有的协议3、减少消息模式的数目4、避免模糊的定义11/1/20221038.2启发规则一、设计结果应该清晰易懂-为了以后可能的重用8.2启发规则二、一般-特殊结构的深度应适当应该使类等级中包含的层次数适当(即继承的层数)11/1/20221048.2启发规则二、一般-特殊结构的深度应适当10/23/28.2启发规则三、设计简单的类1、避免包含过多的属性2、有明确的定义3、尽量简化对象之间的合作关系4、不要提供太多服务典型地,一个类提供的公共服务不超过7个11/1/20221058.2启发规则三、设计简单的类10/23/2022128.2启发规则四、使用简单的协议一般来说,消息中的参数不要超过3个(不是绝对的)五、使用简单的服务面向对象设计出来的类中的服务通常都很小,一般只有3~5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能11/1/20221068.2启发规则四、使用简单的协议10/23/2022138.2启发规则六、把设计变动减至最小通常,设计的质量越高,设计结果保持不变的时间也越长11/1/20221078.2启发规则六、把设计变动减至最小10/23/202218.3系统分解说明大多数系统的面向对象设计模型,在逻辑上都由四大部分组成。这四大部分对应于组成目标系统的四个子系统问题域子系统人-机交互子系统任务管理子系统数据管理子系统11/1/20221088.3系统分解说明10/23/2022158.3系统分解说明面向对象设计模型也包含五个层次主题层类-&对象层结构层属性层服务层11/1/20221098.3系统分解说明10/23/2022168.3系统分解11/1/20221108.3系统分解10/23/2022178.3系统分解一、子系统之间的两种交互方式客户-供应商关系(Client_supplier)单向交互平等伙伴关系(peer_to_peer)双向交互推荐11/1/20221118.3系统分解一、子系统之间的两种交互方式10/23/208.3系统分解二、组织系统的两种方案1、层次组织封闭式马尔可夫原则开放式2、块状组织这种组织方案把软件系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务11/1/20221128.3系统分解二、组织系统的两种方案10/23/202218.4设计问题域子系统说明面向对象设计仅需从实现角度对问题域模型作一些补充或修改,主要是增添、合并或分解类—&—对象、属性及服务,调整继承关系等。当问题域子系统过分复杂庞大时,应该把它进一步分解成若干个更小的子系统11/1/20221138.4设计问题域子系统说明10/23/2022208.4设计问题域子系统一、调整需求用户需求或外部环境发生了变化分析员对问题域理解不透彻或缺乏领域专家帮助,导致面向对象分析模型不能准确反映用户的真正需求二、重用已有的类三、把问题域类组合在一起在面向对象设计过程中,设计者往往通过引入一个根类而把问题域类组合在一起11/1/20221148.4设计问题域子系统一、调整需求10/23/2022218.4设计问题域子系统四、增加一般化类以建立协议五、ATM系统之例见下页星型拓扑所划分的三个更小的子系统实际上就是分析阶段所划分的三个主题11/1/20221158.4设计问题域子系统四、增加一般化类以建立协议10/2311/1/202211610/23/2022238.5设计人-机交互子系统说明在第四章的基础上从面向对象设计的角度做些补充一、设计人-机交互界面的准则1、一致性使用一致的术语,一致的步骤,一致的动作2、减少步骤11/1/20221178.5设计人-机交互子系统说明10/23/2022248.5设计人-机交互子系统11/1/20221188.5设计人-机交互子系统10/23/2022258.5设计人-机交互子系统一、设计人-机交互界面的准则3、及时提供反馈信息11/1/20221198.5设计人-机交互子系统一、设计人-机交互界面的准则108.5设计人-机交互子系统一、设计人-机交互界面的准则4、提供撤销命令5、无须记忆6、易学11/1/20221208.5设计人-机交互子系统一、设计人-机交互界面的准则108.5设计人-机交互子系统11/1/20221218.5设计人-机交互子系统10/23/2022288.5设计人-机交互子系统一、设计人-机交互界面的准则7、富有吸引力11/1/20221228.5设计人-机交互子系统一、设计人-机交互界面的准则108.5设计人-机交互子系统二、设计人-机交互界面的策略1、分类用户分类角度按技能水平分类(新手/初级/中级/高级)按职务分类(总经理/经理/职员)按所属集团分类(职员/顾客)2、描述用户应该仔细了解将来使用系统的每类用户的情况,把获得的各项信息记录下来11/1/20221238.5设计人-机交互子系统二、设计人-机交互界面的策略1011/1/202212410/23/20223111/1/202212510/23/2022328.5设计人-机交互子系统二、设计人-机交互界面的策略3、设计命令层次1)研究现有的人-机交互含义和准则2)确定初始的命令层次实质上是用过程抽象机制组织起来的、可供选用的服务的表示形式3)精化命令层次(考虑下述因素)次序在命令层的每一部分内把服务排好次序11/1/20221268.5设计人-机交互子系统二、设计人-机交互界面的策略108.5设计人-机交互子系统二、设计人-机交互界面的策略3、设计命令层次3)精化命令层次整体-部分关系有助于在命令层中分组组织服务宽度和深度操作步骤应该用尽量少的单击、拖动和击键组合来表达命令,而且应该为高级用户提供简捷的操作方法4)设计人-机交互类(以MFC为例)11/1/20221278.5设计人-机交互子系统二、设计人-机交互界面的策略108.6设计任务管理子系统说明设计工作的一项重要内容是,确定哪些是必须同时动作的对象,哪些是相互排斥的对象,然后进一步设计任务管理子系统11/1/20221288.6设计任务管理子系统说明10/23/2022358.6设计任务管理子系统一、分析并发性通过面向对象分析建立起来的动态模型,是分析并发性的主要依据。如果两个对象彼此间不存在交互,或者它们同时接受事件,则这两个对象在本质上是并发的11/1/20221298.6设计任务管理子系统一、分析并发性10/23/20228.6设计任务管理子系统二、设计任务管理子系统设计任务管理子系统,包括确定各类任务并把任务分配给适当的硬件或软件去执行1、确定事件驱动型任务如与设备、屏幕窗口等的通信2、确定时钟驱动型任务某些任务每隔一定时间间隔就被触发以执行某些处理工作过程:睡眠,接收中断,处理中断,睡眠……11/1/20221308.6设计任务管理子系统二、设计任务管理子系统10/23/8.6设计任务管理子系统二、设计任务管理子系统3、确定优先任务高优先级低优先级4、确定关键任务关键任务是有关系统成功或失败的关键处理,这类处理通常都有严格的可靠性要求对高可靠性处理应该精心设计和编码,并且应该严格测试11/1/20221318.6设计任务管理子系统二、设计任务管理子系统10/23/8.6设计任务管理子系统二、设计任务管理子系统5、确定协调任务当系统中存在三个以上任务时,就应该增加一个任务,用它作为协调任务6、尽量减少任务数必须仔细分析和选择每个确实需要的任务。应该使系统中包含的任务数尽量少11/1/20221328.6设计任务管理子系统二、设计任务管理子系统10/23/8.6设计任务管理子系统二、设计任务管理子系统7、确定资源需求使用多处理器或固件,主要是为了满足高性能的需求。设计者必须通过计算系统载荷(即每秒处理的业务数及处理一个业务所花费的时间),来估算所需要的CPU(或其他固件)的处理能力11/1/20221338.6设计任务管理子系统二、设计任务管理子系统10/23/8.7设计数据管理子系统一、选择数据存储管理模式三种模式1、文件管理系统OS的一部分,但是需要额外代码2、关系数据库管理系统一致的接口标准化的语言3、面向对象数据库管理系统扩展的关系数据库管理系统和扩展的面向对象程序设计语言11/1/20221348.7设计数据管理子系统一、选择数据存储管理模式10/28.7设计数据管理子系统二、设计数据管理子系统1、设计数据格式1)文件系统第一范式(就是数据表的每一列不可再分)2)关系数据库管理系统第三范式每个非关键字属性仅函数依赖于主关键字如“学生系宿舍”存在传递依赖,不符合第三范式3)面向对象数据库管理系统扩展的关系数据库途径扩展的面向对象程序设计语言途径11/1/20221358.7设计数据管理子系统二、设计数据管理子系统10/238.7设计数据管理子系统二、设计数据管理子系统2、设计相应的服务如果某个类的对象需要存储起来,则在这个类中增加一个属性和服务,用于完成存储对象自身的工作1)文件系统打开,检索,更新,关闭注意,为提高性能应该批量处理访问文件的要求11/1/20221368.7设计数据管理子系统二、设计数据管理子系统10/238.7设计数据管理子系统二、设计数据管理子系统2、设计相应的服务2)关系数据库管理系统访问数据表,检索,更新3)面向对象数据库管理系统扩展的关系数据库途径扩展的面向对象程序设计语言途径11/1/20221378.7设计数据管理子系统二、设计数据管理子系统10/238.7设计数据管理子系统三、实例ATM中,需要存储的对象主要是账户类的对象。为了支持数据管理子系统的实现,账户对象必须知道自己是怎样存储的每个对象自己保存自己由数据管理子系统负责存储对象11/1/20221388.7设计数据管理子系统三、实例10/23/2022458.8设计类中的服务一、确定类中应有的服务对象模型进行对象设计的基本框架对象模型中,通常只在每个类中列出很少几个最核心的服务动态模型对象中的许多服务都与对象收到的事件密切相关11/1/20221398.8设计类中的服务一、确定类中应有的服务10/23/28.8设计类中的服务一、确定类中应有的服务功能模型 DFD中的某些处理可能与对象提供的服务相对应11/1/20221408.8设计类中的服务一、确定类中应有的服务10/23/28.8设计类中的服务二、设计实现服务的方法1、设计实现服务的算法1)算法复杂度2)容易理解与容易实现3)易修改2、选择数据结构3、定义内部类和内部操作11/1/20221418.8设计类中的服务二、设计实现服务的方法10/23/28.9设计关联在面向对象设计过程中,设计人员必须确定实现关联的具体策略一、关联的遍历(使用关联的方式)单向遍历双向遍历11/1/20221428.9设计关联在面向对象设计过程中,设计人员必须确定实现8.9设计关联二、实现单向关联关联的重数是一阶的实现关联的指针是一个简单指针关联的重数是多阶的需要用一个指针集合实现关联实例(下二页)11/1/20221438.9设计关联二、实现单向关联10/23/2022508.9设计关联11/1/20221448.9设计关联10/23/20225111/1/202214510/23/2022528.9设计关联三、实现双向关联方法一、只用属性实现一个方向的关联,当需要反向遍历时就执行一次正向查找11/1/20221468.9设计关联三、实现双向关联10/23/2022538.9设计关联三、实现双向关联方法二、两个方向的关联都用属性实现11/1/20221478.9设计关联三、实现双向关联10/23/2022548.9设计关联三、实现双向关联方法三、用独立的关联对象实现双向关联11/1/20221488.9设计关联三、实现双向关联10/23/2022558.9设计关联四、链属性的实现三种情形:1:1关联1:N关联M:N关联11/1/20221498.9设计关联四、链属性的实现10/23/2022568.10设计优化一、确定优先级二、提高效率的几项技术1、增加冗余关联(分析时应避免的)以提高访问效率哈希表实现11/1/20221508.10设计优化一、确定优先级哈希表实现10/23/208.10设计优化一、确定优先级二、提高效率的几项技术1、增加冗余关联以提高访问效率限定词(索引)11/1/20221518.10设计优化一、确定优先级限定词(索引)10/23/8.10设计优化二、提高效率的几项技术2、调整查询次序例:查询“扬州所有的女公交司机”应安排什么查询次序?3、保留派生属性(中间结果)11/1/20221528.10设计优化二、提高效率的几项技术10/23/2028.10设计优化三、调整继承关系在面向对象设计过程中,建立良好的继承关系是优化设计的一项重要内容1、抽象与具体首先创建一些满足具体用途的类,然后对它们进行归纳,一旦归纳出一些通用的类以后,往往可以根据需要再派生出具体类。在进行了一些具体化(即专门化)的工作之后,也许就应该再次归纳了11/1/20221538.10设计优化三、调整继承关系10/23/20226011/1/202215410/23/20226111/1/202215510/23/20226211/1/202215610/23/20226311/1/202215710/23/2022648.10设计优化三、调整继承关系2、为提高继承程度而修改类定义不能违背领域知识和常识应该确保现有类的协议(即同外部世界的接口)不变3、利用委托实现行为共享11/1/20221588.10设计优化三、调整继承关系10/23/202265继承了add,remove,first,last将List的实例作为属性,从而其本身只有两个操作11/1/2022159继承了add,remove,first,last将List的8.11实例问题的初衷介绍一个简化的C++类库管理系统的分析和设计过程11/1/20221608.11实例问题的初衷10/23/2022678.11实例一、面向对象分析1、需求1)管理用C++语言定义的类2)用户能够方便地向类库中添加新的类,并能建立新类与库中原有类的关系3)用户能够通过类名从类库中查询出指定的类4)用户能够查看或修改与指定类有关的信息(包括数据成员的定义、成员函数的定义及这个类与其他类的关系)11/1/20221618.11实例一、面向对象分析10/23/2022688.11实例一、面向对象分析1、需求5)用户能够从类库中删除指定的类6)用户能够在浏览窗口中方便、快速地浏览当前类的父类和子类7)具有“联想”浏览功能,也就是说,可以把当前类的某个子类或父类指定为新的当前类,从而浏览这个新当前类的父类和子类8)用户能够查看或修改某个类的指定成员函数的源代码11/1/20221628.11实例一、面向对象分析10/23/2022698.11实例一、面向对象分析1、需求9)本系统是一个简化的多用户系统,每个用户都可以建立自己的类库,不同类库之间互不干扰10)对于用户的误操作或错误的输入数据,系统能给出适当的提示信息,并且仍然继续稳定地运行11)系统易学易用,用户界面应该是GUI(图形用户界面)的11/1/20221638.11实例一、面向对象分析10/23/2022708.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象基本对象就两个类库类(类条目)由需求3)4)条可知类条目中应包含属性:类名父类列表成员函数列表数据成员列表11/1/20221648.11实例一、面向对象分析10/23/2022718.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类条目中的每个“父类”应包含信息:名字访问权虚基类标志(virtual)11/1/20221658.11实例一、面向对象分析10/23/2022728.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类条目中的每个“成员函数”应包含信息:函数名访问权(public,protected,private)虚函数标志(virtual)返回值类型参数函数代码(需求8))11/1/20221668.11实例一、面向对象分析10/23/2022738.11实例一、面向对象分析2、建立对象模型1)确定类—&—对象类条目中的每个“数据成员”应包含信息:数据名访问权(public,protected,private)数据类型由于“父类”、“成员函数”、“数据成员”的相对独立性,将它

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论