第11篇ood 软件工程 课件.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3. 利用委托(非继承)实现行为共享 委托:把一类对象作为另一类对象的属性。 只委托另一类对象实现有意义的操作. 不会发生不慎使用继承的有害操作的问题。 用表实现栈的两种方法: a) 继承 b) 委托 面向对象设计准则 提高设计质量的启发式规则 软件重用: 类构件重用技术。 系统设计与对象设计: 界限模糊,反复迭代。 设计求解空间OO模型的4大逻辑部分: 问题域子系统、人机交互子系统、任务管理子 系统和数据管理子系统。 设计类中服务的方法及实现关联的策略。 如何根据系统目标,做优化工作。 本章小结 * * * * Not a contradiction, because a derived object (module) includes the code of its base class’ 为获得紧密的继承耦合,派生类应该是它的基类的一种具体化, 尽量多继承并使用其属性和服务,从而更紧密地耦合到其基类。 * * * 应该使名字与它所代表的事物一致,而且应该尽量使用人们习惯的名字。不同类中相似服务的名字应该相同。 * * * * * * * * * * * * * 2. 为提高继承程度而修改类定义 如果在一组相似的类中存在公共的属性和公共的行为,则可以把这些公共的属性和行为抽取出来放在一个共同的祖先类中,供其子类继承,如图11.13(a)和(b)所示。在对现有类进行归纳的时候,要注意下述两点: (1)不能违背领域知识和常识;(2)应该确保现有类的协议(即同外部世界的接口)不变。 更常见的情况是,各个现有类中的属性和行为(操作),虽然相似却并不完全相同,在这种情况下需要对类的定义稍加修改,才能定义一个基类供其子类从中继承需要的属性或行为。 * 有时程序员只想用继承作为实现操作共享的一种手段,并不打算确保基类和派生类具有相同的行为。在这种情况下,如果从基类继承的操作中包含了子类不应有的行为,则可能引起麻烦。例如,假设程序员正在实现一个Stack(后进先出栈)类,类库中已经有一个List(表)类。如果程序员从List类派生出Stack类,则如图11.14(a)所示:把一个元素压入栈,等价于在表尾加入一个元素;把一个元素弹出栈,相当于从表尾移走一个元素。但是,与此同时,也继承了一些不需要的表操作。例如,从表头移走一个元素或在表头增加一个元素。万一用户错误地使用了这类操作,Stack类将不能正常工作。 * 图11.14(b)描绘了委托List类实现Stack类操作的方法。Stack类的每个实例都包含一个私有的List类实例(或指向List类实例的指针)。Stack对象的操作push(压栈),委托List类对象通过调用last(定位到表尾)和add(加入一个元素)操作实现,而pop(出栈)操作则通过List的last和remove(移走一个元素)操作实现。 * 单击此处编辑母版标题样式 单击此处编辑母版副标题样式 第11章 面向对象设计 11.1 面向对象设计的准则 11.2 启发规则 11.3 软件重用 11.4 系统分解 11.5 设计问题域子系统 11.6 设计人机交互子系统 11.7 设计任务管理子系统 11.8 设计数据管理子系统 11.9 设计类中的服务 11.10 设计关联 11.11 设计优化 小结 优秀设计就是使得系统在其整个生命周期中的总开销最小的设计, 其主要特点就是容易维护。 结合面向对象方法的特点, 下面重温本书第5章讲述的指导软件设计的几条基本原理. 它们在进行面向对象设计时仍然成立。 11.1 面向对象设计的准则 1. 模块化 面向对象软件开发模式,很自然地支持模块的设计原理:对象就是模块。 2. 抽象 面向对象方法支持过程和数据抽象。 类是一种抽象数据类型。使用者无须知道类中数据元素的具体表示方法,就可以通过接口使用类中定义的数据。 这类抽象称为规格说明抽象。 3. 信息隐藏 对象的封装性实现支持了信息隐藏。 4. 弱耦合 耦合主要指不同对象之间相互关联的紧密程度。 两个对象应该通过类的接口实现耦合,而不应该依赖于类的具体实现细节(友元)。 对象之间的两类耦合: (1) 交互耦合:交换消息 使交互耦合尽可能松散的准则:减少消息中包含的参数个数,降低参数的复杂程度, 减少消息数。 (2) 继承耦合:互为基类和派生类(非模块之间) 与交互耦合相反,应该提高继承耦合程度。 通过继承关系结合起来的基类和派生类,构成了更大的模块。 5. 强内聚 在面向对象设计中存在下述3种内聚。 (1) 服务内聚。一个服务应该完成一个且仅完成一个功能。 (2) 类内聚。设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档