- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十章 面向对象设计 从面向对象分析(OOA)到面向对象设计(通常缩写为OOD),是一个逐渐扩充模型的过程。或者说,面向对象设计就是用面向对象观点建立求解域模型的过程。 尽管分析和设计的定义有明显区别,但是在实际的软件开发过程中二者的界限是模糊的。 许多分析结果可以直接映射成设计结果,而在设计过程中又往往会加深和补充对系统需求的理解,从而进一步完善分析结果。 分析和设计活动是一个多次反复迭代的过程 10.1 面向对象设计的准则 模块化 对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。 抽象 面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种抽象数据类型,某些面向对象的程序设计语言还支持参数化抽象。 信息隐藏 在面向对象方法中,信息隐藏通过对象的封装性实现: 10.1 面向对象设计的准则 弱耦合 交互耦合: 如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。为使交互耦合尽可能松散,应该遵守下述准则。 尽量降低消息连接的复杂程度。 减少对象发送(或接收)的消息数。 继承耦合 与交互耦合相反,应该提高继承耦合程度。为获得紧密的继承耦合,特殊类应该确实是对它的一般化类的一种具体化, 10.1 面向对象设计的准则 强内聚 服务内聚 一个服务应该完成一个且仅完成一个功能。 类内聚 设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。 一般—特殊内聚 设计出的一般—特殊结构,应该符合多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。 可重用 尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类), 如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。 10.2 启发规则 设计结果应该清晰易懂 一般\特殊结构的深度应适当 设计简单的类 使用简单的协议 使用简单的服务 把设计变动减至最小 10.3 软件重用 重用 知识的重用 方法和标准的重用 软件成分的重用 软件成分的重用级别 代码重用 源代码剪贴 源代码包含 继承 设计结果重用 重用某个软件系统的设计模型 分析结果重用 典型的可重用软件成分 项目计划、成本估计、体系结构、需求模型和规格说明、设计、源代码、用户文档和技术文档、用户界面、数据、测试用例 类构件 可重用软构件应具备的特点 模块独立性 具有高度可塑性 接口清晰、简明、可靠 类构件的重用方式 实例重用 继承重用 多态重用 10.4构件级设计 构件是计算机软件中的一个模块化的构造块 在UML规范中将构件定义为“系统中某一定型化的、可配置的和可替换的部件,该部件封装了实现并暴露一系列接口”。 面向对象的观点: 构件包括一组协作类 构件中的每一个类都被详细阐述,包括所有的属性和与其实现相关的操作。 从分析模型开始,详细描述分析类(对于构件而言该类与问题域相关)和基础类(对于构件而言该类为问题域提供了支持性服务)。 传统观点: 一个构件就是程序的一个功能要素,有处理逻辑、实现处理逻辑所需的内部数据结构以及能够保证构件被调用和实现数据传递的接口构成。传统构件称为模块 模块控制构件,协调问题域中所有其他构件的调用; 问题域构件,完成部分或全部用户的需求; 基础设施构件,负责完成问题域中所需要相关处理的功能 10.4构件级设计 1:标识出所有与问题域相对应的设计类 2:确定所有与基础设施相对应的设计类 3:细化所有不能作为复用构件的设计类 在类或构件的协作时说明消息的细节 为每一个构件确定适当的接口 细化属性并且定义相应的数据类型和数据结构 详细描述每个操作中的处理流 4:说明持久性数据源(数据库和文件)并确定管理数据源所需要的类 5:开发并且细化类或构件的行为表示 6:细化部署图以提供额外的实现细节 7:考虑每一个构件级设计表示,并且时刻考虑其他选择 10.4构件级设计 基于类的构件设计原则 开闭原则(The Open-Closed Principle, OCP):模块应该对外延具有开放性,对修改具有封闭性。 替换原则(Subsitution Principle, SP):子类可以替换它们的基类。 依赖倒置原则(Dependency Inversion Principle, DIP):依赖于抽象、而非具体实现 接口分离原则(Interface Segregation Principle, ISP):多个用户专用接口比一个通用接口要好。 迪米特法则(最少知道原则) 合成复用原则 打包的原则 发布复用等价性原则(Release Reuse Equivalency Principle, REP):复用的粒度就是发布的粒度。 共同封装原则(Common Closure Principle, CCP): 一同变更
文档评论(0)