第11章面向对象设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6. 把设计变动减至最小
出现必须修改设计的情况,应该使修改的范围尽可能小。
理想的设计变动情况
11.3 软件重用
11.3.1 概述
1. 重用
重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复 使用。
广义地说,软件重用可分为以下3个层次: ✓ 知识重用(软件工程知识的重用)。 ✓ 方法和标准的重用(面向对象方法或国家制定的软件开发规范的重 用)。 ✓ 软件成分的重用。
OOD 过程
输入OOA模型 问题域部分设计
人机交互部分设计
任务管理部分设计
数据管理部分设计
构件化与系统部署 向OOP输出OOD模型
OOA与OOD的关系
一致的概念与表示法 OOA和OOD采用一致的概念和表示法,从而不存在分析 与设计之间的鸿沟。
不同的内容、目标和抽象层次
✓OOA:研究问题域和用户需求,运用面向对象的观点发现问题域中 与系统直接有关的对象,以及对象的特征和相互关系。目标是建立一 个直接映射问题域,符合用户需求的OOA模型。 ✓OOD:在OOA模型基础上,针对选定的实现平台进行系统设计,按 照实现的要求进行具体的设计,目标是产生一个能够在选定的软硬件 平台上实现的OOD模型。 ✓OOA模型:抽象层次较高,忽略了与实现有关的因素 ✓OOD模型:抽象层次较低,包含了与实现平台有关的细节
个定义明确的目的所做出的贡献程度。 在设计时应该力求做到高内聚。 在面向对象设计中存在下述3种内聚:
✓ 服务内聚。一个服务应该完成一个且仅完成一个功能。 ✓ 类内聚。一个类应该只有一个用途,它的属性和服务应该是
高内聚的。 ✓ 一般-特殊内聚。设计出的一般-特殊结构,应该符合多数人
的概念,应该是对相应的领域知识的正确抽取。
回顾:面向对象分析
分析的主要工作:理解、表达和验证 关键:建立对象模型、动态模型和功能模型。 复杂的对象模型由5个层次组成:主题层、类与对象层、
结构层、属性层和服务层。 分析模型都不是一次完成的,为了理解问题域的全部含义,
必须反复多次地进行分析。
分析
设计
实现源自文库
OO方法的步骤
分析是提取和整理用户需求,并建立问题域精确模型的过 程。
1. 模块化
对象就是模块。它是把数据结构和操作这些数据的方法紧密 地结合在一起所构成的模块。
2. 抽象
面向对象方法不仅支持过程抽象,而且支持数据抽象。类实 际上是一种抽象数据类型。此外,某些面向对象的程序设计 语言还支持参数化抽象(把数据类型作为参数)。
3. 信息隐藏
在面向对象方法中,信息隐藏通过对象的封装实现:类结构 分离了接口与实现,从而支持了信息隐藏。
1. 设计结果应该清晰易懂
用词一致。 使用已有的协议。 减少消息模式的数目。 避免模糊的定义。
2. 一般-特殊结构的深度应适当
应该使类等级中包含的层次数适当。一般说来,在一个中等规模(大约 包含100个类)的系统中,类等级层次数应保持为7±2。
不应该仅仅从方便编码的角度出发随意创建派生类,应该使一般-特殊 结构与领域知识或常识保持一致。
3. 设计简单的类
应该尽量设计小而简单的类,以便于开发和管理。 为使类保持简单,应该注意以下几点:
✓ 避免包含过多的属性。 ✓ 有明确的定义。 ✓ 尽量简化对象之间的合作关系。 ✓ 不要提供太多服务:一个类提供的公共服务不超过7个。 ✓ 在开发大型软件系统时,设计出大量较小的类,需要划分“主题”。
设计则是把分析阶段得到的需求转变成符合成本和质量要 求的、抽象的系统实现方案的过程。
从面向对象分析到面向对象设计,是一个逐渐扩充模型的 过程,或者说,面向对象设计就是利用面向对象观点建立 求解域模型的过程。
在实际的软件开发过程中分析和设计的界限是模糊的。分 析和设计活动是一个多次反复迭代的过程。
第11章 面向对象设计
本章内容
11.1 面向对象设计的准则 11.2 启发规则 11.3 软件重用 11.4 系统分解 11.5 设计问题域子系统 11.6 设计人机交互子系统 11.7 设计任务管理子系统 11.8 设计数据管理子系统 11.9 设计类中的服务 11.10 设计关联 11.11 设计优化
4. 弱耦合
耦合指不同对象之间相互关联的紧密程度。
一般说来,对象之间的耦合可分为两大类:
✓ 交互耦合
✓ 如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。
✓ 交互耦合应尽可能松散:尽量降低消息连接的复杂程度;尽量减 少消息中的参数个数,降低参数的复杂程度;减少对象发送(或 接收)的消息数。
✓ 继承耦合
✓ 与交互耦合相反,应该提高继承耦合程度。 ✓ 继承是一般化类与特殊类之间耦合的一种形式。通过继承关系结合起
来的基类和派生类,构成了系统中粒度更大的模块。彼此之间应该越 紧密越好。
5. 强内聚
内聚衡量一个模块内各个元素彼此结合的紧密程度。 内聚定义为:设计中使用的一个构件内的各个元素,对完成一
6. 可重用
软件重用是提高软件开发生产率和目标系统质量的重要途 径。
重用基本上从设计阶段开始。 重用有两方面的含义:
✓ 一是尽量使用已有的类(包括开发环境提供的类库,及以往开发类 似系统时创建的类),
✓ 二是如果确实需要创建新类,则在设计这些新类的协议时,应该 考虑将来的可重复使用性。
11.2 启发规则
10
11.1 面向对象设计的准则
所谓优秀设计,就是权衡了各种因素,从而使得系统在其 整个生命周期中的总开销最小的设计。
对大多数软件系统而言,60%以上的软件费用都用于软件 维护,因此,优秀软件设计的一个主要特点就是容易维护。
在第五章介绍了软件设计的几条基本原理,这些原理在进 行面向对象设计时仍然成立,但是增加了一些与面向对象 方法密切相关的新特点,从而具体化为下列的面向对象设 计准则:
4. 使用简单的协议
一般说来,消息中的参数不要超过3个。当然,不超过3个的限制也不 是绝对的。
5. 使用简单的服务
一般说来,应该尽量避免使用复杂的服务。类中的服务都很小,可以 用仅含一个动词和一个宾语的简单句子描述它的功能。
如果一个服务中包含了过多的源程序语句,或者语句嵌套层次太多, 或者使用了复杂的CASE语句,则应该仔细检查这个服务,设法分解 或简化它,考虑用一般-特殊结构代替。