软件工程PPT教学课件-第十一章 面向对象设计.ppt_第1页
软件工程PPT教学课件-第十一章 面向对象设计.ppt_第2页
软件工程PPT教学课件-第十一章 面向对象设计.ppt_第3页
软件工程PPT教学课件-第十一章 面向对象设计.ppt_第4页
软件工程PPT教学课件-第十一章 面向对象设计.ppt_第5页
免费预览已结束,剩余43页可下载查看

下载本文档

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

文档简介

第十一章 面向对象设计 (object-oriented design),1. ood准则:优秀软件设计的一个重要特点是容易维护,回顾:sd准则包括 modularization 模块化 abstraction抽象 information hiding屏蔽 module independence独立性,对于 ood有类似的准则: 1、module = object,1. ood准则, procedure abstraction: 在sd中已讨论, data abstraction: class即是一种抽象数据类型。外界无须知道实现方法就可按照类协议使用class中定义的数据。, parameter abstraction: 将数据类型作为参数处理。,2、abstraction(抽象):抽出事物的本质特性, 暂不考虑其细节,使设计从具体实现方法中超脱。,1. ood准则,3、information hiding = encapsulation of object 对象封装,4、耦合(coupling): 交互耦合(interactive coupling): 通过传递message发生要求。 降低参数个数和参数复杂性 减少objects发送 接收message的个数 as loose as possible尽可能弱耦合, 继承耦合(inheritance coupling): 要求 parent class is_a child class as high as possible 子类不应舍弃父类的基本属性和操作,1. ood准则, 一般-特殊内聚(general-particular cohesion): high g-p cohesion high inheritance coupling 高继承,5、内聚(cohesion): 服务内聚(service cohesion):一个服务只完成一个功能。, 类内聚(class cohesion):一个类只有一个用途,否则分解之。,6、reusability(详见3) 可重用,2. 启发式规则,1、设计结果清晰易懂,应做到: 用词一致 按习惯用法命名。不同classes中相似的methods最好取同一名字。 使用已有的协议。 尽量减少message模式的数目。 避免模糊定义。,2、一般-特殊结构的深度应适当(约100个classes,则设计72层),2. 启发式规则,3、设计简单的class(定义不超过一页纸或两屏)。应注意: 避免过多attributes; 能用简单的语句描述一个class的任务; objects之间合作关系要简单; 避免过多methods( 7个)。,问题:设计出大量的classes,使结构复杂度增加。 解决:划分主题,提高可理解性。,4、使用简单的协议(protocol),减少message 中传递的 parameters,5、使用简单的method(case 可考虑用 inheritance替代)。,6、把设计变动减至最小。,1、概念: 知识重用(例如软件工程知识的重用), 方法和标准重用(例如oo方法和国家规定的软件开发规范的重用), 软件成分的重用,3. 软件重用 (software reuse),源码剪贴 无法溯源,无配置管理,include 修改后所有包含了此段代码的程序都须重新编译。,继承(inheritance) 无须改动原有代码,想象一下,stdio.h 被改动之后,重用软件成分有三个级别: 代码重用:,3. 软件重用, 设计重用 当移植系统时, 分析重用 当需求未变,而系统结构改变时(例如将hdis改为oo实现),2、典型的可重用软件成分(10种),项目计划:跨项目 成本估计:跨项目 体系结构:程序、数据体系 需求模型和规格说明,3. 软件重用,设计 源代码 用户文档和技术文档 用户界面 数据 测试用例,4、类构件(class component):,可重用的软构件应具备的特点: 独立、可塑、接口清晰(文档详尽),3. 软件重用,重用方式: 实例重用(instance reuse black-box reuse): 创建class的不同instances,通过messages完成不同的任务。是最基本的重用方式。 用几个简单的objects创建出更复杂的class, 是实例重用的另一种形式,继承重用(inheritance reuse): 是一种安全地裁剪已有的class component的方式。 关键:继承层次的设计, 多态重用(polymorphism reuse): parent class与child class有相同的对外接口,使 消息连接的复杂度降低。,3. 软件重用,注意:有些操作可能会妨碍class component的重用,如 与表示方法有关的操作 与数据结构、大小有关的操作 与外部设备有关的操作 实现算法在将来可能会改进改变的核心操作,解决方法:将这些操作分离出来,作为适配接口(ai,adaptive interface),使class中其它操作通过调用ai而实现。在不同应用环境下,用户只须重新定义ai操作就可以重用class。,3. 软件重用,4、重用效果的衡量:, 额外代价: 创建可重用成分的专门投资 多花2 4倍时间测试以保证质量 构件库的建立与维护需要投资 以上投资将分摊到重用这些构件的新系统成本中。重用次数越多,分摊成本越少。,3. 软件重用,记:lt = total length of code ( # of lines) ln = length of new code lr = length of reused code et 、en、 er are the corresponding efforts ( # of m-d), 重用率(reusability)与生产率(productivity),productivity,reusability =,开发代码的生产率,重用新代码的生产率,3. 软件重用,重用技术:指利用可重用的构件开发软件的技术,及开发可重用软件的技术。, 软件组合技术:, 底层部件库法(bottom-up compositional reuse) : 从可重用的代码部件库(reuse repository)中选用部件,组合成软件。,a:是,前提条件为cncr ,即重用比新开发效率高。,q:是否r 越高p就越高?, 上层组合法:完整程序的组合,3. 软件重用, 软件生成技术: 按照形式化的软件功能描述和一定的生成机理,由生成器系统(generator system)自动生成目标程序。重用的是生成器的代码规则, oo重用技术:class component的重用(详见下文),i,p,o,问题域 application domain,人机交互 human- computer interface (hci),任务管理 task management,数据管理 data management,4. 系 统 分 解,回顾sd:从dfd出发 ,ood模型分解:,4. 系 统 分 解,1、子系统之间的交互方式(collaboration), 客户-供应商(client-server)关系:, 平等伙伴(peer-to-peer)关系:,client subsystem,server subsystem,peer subsystem,peer subsystem,4. 系 统 分 解,2、系统组织方案, 水平层次组织: 将系统组织成hierarchy,同一层中的objects相互独立,而上、下层间有 client-server关系。, 一个client只能调用其相邻下层的server 封闭式(closed), 一个client可调用其下任一层的server 开放式(open) 优点:高效; 缺点:修改影响面广,hci,典型应用系统的组织结构,应 用 软 件 包,操 作 系 统,计 算 机 硬 件,人机对 话控制,仿真 软件包,图形 处理,窗口图形,屏幕图形,象素图形,4. 系 统 分 解, 垂直块组织: 将系统垂直分解成若干独立的子系统,一个子系统相当于一块,每块提供一种类型的服务。,4. 系 统 分 解,3、四种子系统的设计, 问题域子系统:基于ooa建立的object model,进行补充修改。, 调整需求, 重用class: 选出可用的class,标出与本问题无关 的 attributes 和 methods 派生出child class,标出继承的attributes 和 methods 修改关联, 组合class:通过引入root class完成,用于建立public protocol。, 调整inheritance。, 人机交互(hci)子系统:好的包装,4. 系 统 分 解, 设计准则:, 一致性: 术语、步骤、操作等始终一致。, 减少步骤:使完成一件任务所需敲键盘、点鼠标、下拉菜单等的次数都减至最少。, 及时提供反馈信息:,提供hot key操作,做一个体贴的status bar, 提供撤销(undo)命令:, 无须记忆:不应要求用户记住某个窗口的信息,然后再用到窗口中 这是系统的责任而不是用户的任务。,仁慈的你如佛祖对众生:回头是岸, 易学:提供help、联机参考等。, 富有吸引力,4. 系 统 分 解, 设计策略, 设计hci类:例如vc提供的mfc类库(microsoft foundation class library), 将用户分类(按技能、职务等), 描述用户的类型、水平、使用目的、其它特征(如年龄、性别、习惯等),写出操作脚本, 设计命令层次:注意同用户熟悉的方式( 如windows界面)尽量保持一致. 次序、深度、宽度调整适当,4. 系 统 分 解, 任务管理子系统:基于ooa建立的dynamic model, 分析并发性:, 若两个objects之间无交互行为,或它们同时接受events,则它们本质上是并发的(synchronous), 考察event flow diagram,找出没有并发对象的路径(称为控制线),每条对应一个任务(task,亦称process), 不同的tasks对应必须同时发生的不同行为,4. 系 统 分 解, 确定task类型,并分配给适当的软硬件去执行, 事件驱动型(event-driven):主要完成通信工作。 event = 数据到达的中断(interrupt), 时钟驱动型(clock-driven):完成周期性工作。, 优先型(priority):将high priority或 low priority的任务专门分离出来先做或后做。, 关键任务(key task):指关系系统成败的处理,要求高可靠性,应分离考虑,严格测试。, 协调任务(coordinator):当系统中存在三个以上tasks时,应增设一个协调任务,用于封装不同tasks之间的协调控制。,4. 系 统 分 解, 数据管理子系统:, 选择管理模式 文件管理(file manager)系统 关系数据库(relational data base)管理系统 面向对象数据库(oodb)管理系统, 设计数据格式及相应的服务,(请参阅教材p.268-270),5. 设计类中的服务 细化object model中的 methods,1、确立服务, 从 dynamic model出发:event flow diagram中, event = message ;, 接受message 的object 必有对应的 method;, method 改变 status(即 attributes),并完成 action。,5. 设计类中的服务,则算法应有do_case型控制, 从function model出发:,dfd的一般结构是,注意:action (即算法)与status 有关。例如:不同status接受同一个 event 时,其action不同 ,5. 设计类中的服务, 若 process=从input flow中抽取一个值,则,5. 设计类中的服务, 对照dfd与class-&-object图,若一个process涉及多个classes,则必须判断它属于哪一个class。 例如:,若process 改变了 receiver,则,又如:从关联上看,process所涉及的所有classes中,处于中心地位的class,一般拥有该process。,5. 设计类中的服务,2、设计实现方法, 算法设计:要求做到易修改,并且复杂度低(即效率高) ,易理解,易实现。, 数据结构设计:需要考虑具体的物理结构的选择。, 新添用于存放内部处理中间结果的class;引入新的低层操作,进一步细化。,6. 设计关联,1、单向关联 例:, 由雇员找其所属公司,则设雇主为其属性,即一单向指针, 由公司找其下属某一雇员,则有两种方法:,方法1:遍历所有雇员,找雇主匹配且满足特征的雇员。(省空间),6. 设计关联,方法2:设公司的属性雇员为一指针集。(快速),2、双向关联,方法1:将上述两种单向关联结合使用,方法2:另设关联类(特别适用于链属性),7. 优 化,1、确定优先级: 必须站在全局高度确定各项质量指标的优先级,在优化设计时制定折衷方案。切忌各子系统自以为是,导致最终优化目标对立。 最常见的情况是在效率与清晰性之间的折衷。,2、提高效率的技术, 增加关联(类),例:设某公司有2000名雇员,平均每名雇员会10种技能,其中有5人精通日语,现要查询公司中会讲日语的雇员是哪些人,7. 优化,方法1:嵌套查询 遍历雇员2000次,而对每个雇员遍历技能10次。命中率为1/4000。,方法2:用hash table实现技能,使“会讲日语”对应唯一的技能对象,则命中率上升为1/400。,方法3:增加一个额外的限定关联“精通语言”,即可立刻查得结果。,7. 优化, 调整查询次序,优化算法 例如公司有5名会日语的雇员,有200名会法语的雇员。现要找日、法语均会的雇员,则应先找到 雇员,再从中找 的雇员。,会日语,会法语, 保留内部中间过程产生的派生属性。,3、调整继承关系, 向上归纳, 向下派生,建立这样的索引必然多占空间,而且基关联改变时也必须相应地修改索引。因此,应只给那些经常执行并且开销大、命中率低的查询建立索引。,第十二章 面向对象实现,两项工作: 面向对象的设计结果翻译成面向对象的程序 测试并调试,1. 面向对象的程序设计语言 1.一致性 面向对象开发基于不随时间变化的、一致的表示方法。这种表示方法从问题域到ooa,到ood到oop. 一致的表示法既有利于在软件外发过程中始终使用统一的概念,也有利于维护人员理解软件的各种配置成分。,2. 可重用性 在更广泛的范围运用重用机制,在ooa,ood直到oop中都显式地表示问题域语义. 既可能重用它在某个问题域内的ooa结果,也可能重用相应的ood和oop结果。,1. 面向对象的程序设计语言,3. 可维护性 尽管人们反复强调保持文档与源程序一致的必要性,但是,在实际工作中很难做到. 特别是考虑到进度、预算、能力和人员等限制因素时,完全一致几乎是不可能的。因此,维护人员最终面对的往往只有源程序本身。 尽量选用面向对象语言来实现.,1. 面向对象的程序设计语言,选择面向对象语言标准 1. 将来能否占主导地位 2. 可重用性 3. 类库和开发环境 4. 其他因素,1. 面向对象的程序设计语言,2. 程序设计风格 可重用、可扩充、健壮性 1、提高可重用性 提高方法的内聚 减小方法的规模 保持方法的一致性 把策略与实现分开 全面覆盖 尽量不使用全局信息 利用继承机制,通过调用公用方法实现代码重用,2、提高可扩充性 封装实现策略 不要用一个方法遍历多条关联链 避免使用多分支语句 精心确定公有方法,3

温馨提示

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

评论

0/150

提交评论