第11章面向对象设计
第11章 面向对象设计
本章内容 11.1面向对象设计的准则 11.2启发规则 11.3软件重用 11.4系统分解 11.5设计问题域子系统 11.6设计人机交互子系统 11.7设计任务管理子系统 11.8设计数据管理子系统 11.9设计类中的服务 11.10设计关联 11.11设计优化
本章内容 11.1 面向对象设计的准则 11.2 启发规则 11.3 软件重用 11.4 系统分解 11.5 设计问题域子系统 11.6 设计人机交互子系统 11.7 设计任务管理子系统 11.8 设计数据管理子系统 11.9 设计类中的服务 11.10 设计关联 11.11 设计优化
回顾:面向对象分析 ■分析的主要工作:理解、表达和验证 ■关键:建立对象模型、动态模型和功能模型。 ■复杂的对象模型由5个层次组成:主题层、类与对象层、 结构层、属性层和服务层。 ■分析模型都不是一次完成的,为了理解问题域的全部含义, 必须反复多次地进行分析
回顾:面向对象分析 ◼ 分析的主要工作:理解、表达和验证 ◼ 关键:建立对象模型、动态模型和功能模型。 ◼ 复杂的对象模型由5个层次组成:主题层、类与对象层、 结构层、属性层和服务层。 ◼ 分析模型都不是一次完成的,为了理解问题域的全部含义, 必须反复多次地进行分析
分析 设计 实现 O0方法的步骤
分 析 设 计 实 现 OO方法的步骤
■分析是提取和整理用户需求,并建立问题域精确模型的过 程。 ■设计则是把分析阶段得到的需求转变成符合成本和质量要 求的、抽象的系统实现方案的过程。 ■从面向对象分析到面向对象设计,是一个逐渐扩充模型的 过程,或者说,面向对象设计就是利用面向对象观点建立 求解域模型的过程。 ■在实际的软件开发过程中分析和设计的界限是模糊的。分 析和设计活动是一个多次反复迭代的过程
◼ 分析是提取和整理用户需求,并建立问题域精确模型的过 程。 ◼ 设计则是把分析阶段得到的需求转变成符合成本和质量要 求的、抽象的系统实现方案的过程。 ◼ 从面向对象分析到面向对象设计,是一个逐渐扩充模型的 过程,或者说,面向对象设计就是利用面向对象观点建立 求解域模型的过程。 ◼ 在实际的软件开发过程中分析和设计的界限是模糊的。分 析和设计活动是一个多次反复迭代的过程
输入OOA模型 OOD 过程 问题域部分设计 人机交互部分设计 任务管理部分设计 数据管理部分设计 构件化与系统部署 向OOP输出OOD模型
问题域部分设计 输入OOA模型 人机交互部分设计 任务管理部分设计 数据管理部分设计 构件化与系统部署 向OOP输出OOD模型 OOD 过程
OOA与OOD的关系 致的概念与表示法 OOA和OOD采用一致的概念和表示法,从而不存在分析 与设计之间的鸿沟。 不同的内容、目标和抽象层次 √OOA:研究问题域和用户需求,运用面向对象的观点发现问题域中 与系统直接有关的对象,以及对象的特征和相互关系。目标是建立 个直接映射问题域,符合用户需求的O○A模型 √oOD:在○OA模型基础上,针对选定的实现平台进行系统设计,按 照实现的要求进行具体的设计,目标是产生一个能够在选定的软硬件 平台上实现的OOD模型 √○OA模型:抽象层次较高,忽略了与实现有关的因素 √○○D模型:抽象层次较低,包含了与实现平台有关的细节 10
10 OOA与OOD的关系 ◼ 一致的概念与表示法 OOA和OOD采用一致的概念和表示法,从而不存在分析 与设计之间的鸿沟。 ◼ 不同的内容、目标和抽象层次 ✓OOA:研究问题域和用户需求,运用面向对象的观点发现问题域中 与系统直接有关的对象,以及对象的特征和相互关系。目标是建立一 个直接映射问题域,符合用户需求的OOA模型。 ✓OOD:在OOA模型基础上,针对选定的实现平台进行系统设计,按 照实现的要求进行具体的设计,目标是产生一个能够在选定的软硬件 平台上实现的OOD模型。 ✓OOA模型:抽象层次较高,忽略了与实现有关的因素 ✓OOD模型:抽象层次较低,包含了与实现平台有关的细节
111面向对象设计的准则 口所谓优秀设计,就是权衡了各种因素,从而使得系统在其 整个生命周期中的总开销最小的设计。 口对大多数软件系统而言,60%以上的软件费用都用于软件 维护,因此,优秀软件设计的一个主要特点就是容易维护。 口在第五章介绍了软件设计的几条基本原理,这些原理在进 行面向对象设计时仍然成立,但是增加了一些与面向对象 方法密切相关的新特点,从而具体化为下列的面向对象设 计准则:
11.1 面向对象设计的准则 所谓优秀设计,就是权衡了各种因素,从而使得系统在其 整个生命周期中的总开销最小的设计。 对大多数软件系统而言,60%以上的软件费用都用于软件 维护,因此,优秀软件设计的一个主要特点就是容易维护。 在第五章介绍了软件设计的几条基本原理,这些原理在进 行面向对象设计时仍然成立,但是增加了一些与面向对象 方法密切相关的新特点,从而具体化为下列的面向对象设 计准则:
1.模块化 ■对象就是模块。它是把数据结构和操作这些数据的方法紧密 地结合在一起所构成的模块。 2.抽象 面向对象方法不仅支持过程抽象,而且支持数据抽象。类实 际上是一种抽象数据类型。此外,某些面向对象的程序设计 语言还支持参数化抽象(把数据类型作为参数)。 3.信息隐藏 在面向对象方法中,信息隐藏通过对象的封装实现:类结构 分离了接口与实现,从而支持了信息隐藏
1. 模块化 ◼ 对象就是模块。它是把数据结构和操作这些数据的方法紧密 地结合在一起所构成的模块。 2. 抽象 ◼ 面向对象方法不仅支持过程抽象,而且支持数据抽象。类实 际上是一种抽象数据类型。此外,某些面向对象的程序设计 语言还支持参数化抽象(把数据类型作为参数)。 3. 信息隐藏 ◼ 在面向对象方法中,信息隐藏通过对象的封装实现:类结构 分离了接口与实现,从而支持了信息隐藏
4.弱耦 ■耦合指不同对象之间相互关联的紧密程度。 般说来,对象之间的耦合可分为两大类 √交互耦合 √如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。 交互耦合应尽可能松散:尽量降低消息连接的复杂程度;尽量减 少消息中的参数个数,降低参数的复杂程度;减少对象发送(或 接收)的消息数。 √继承耦合 与交互耦合相反,应该提高继承耦合程度 √继承是一般化类与特殊类之间耦合的一种形式。通过继承关系结合起 来的基类和派生类,构成了系统中粒度更大的模块。彼此之间应该越 紧密越好
4. 弱耦合 ◼ 耦合指不同对象之间相互关联的紧密程度。 ◼ 一般说来,对象之间的耦合可分为两大类: ✓ 交互耦合 ✓ 如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。 ✓ 交互耦合应尽可能松散:尽量降低消息连接的复杂程度;尽量减 少消息中的参数个数,降低参数的复杂程度;减少对象发送(或 接收)的消息数。 ✓ 继承耦合 ✓ 与交互耦合相反,应该提高继承耦合程度。 ✓ 继承是一般化类与特殊类之间耦合的一种形式。通过继承关系结合起 来的基类和派生类,构成了系统中粒度更大的模块。彼此之间应该越 紧密越好