第7章 面向对象设计要点
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章 面向对象设计
• 面向对象设计过程wk.baidu.com准则
面向对象设计过程 面向对象设计准则
• 基于UML的面向对象设计过程
系统构架设计 用例设计 类设计 数据库设计 用户界面设计
7.1 面向对象设计过程与准则
• 面向对象设计的主要任务是在面向对象分析的基 础上完成体系结构设计、接口设计、数据设计、 类设计及构件设计。 • 面向对象分析和设计的界限是模糊的,从面向对 象分析到面向对象设计是一个逐渐扩充模型的过 程。分析的结果通过细化直接生成设计结果,在 设计过程中逐步加深对需求的理解,从而进一步 完善需求分析的结果。 • 分析和设计活动是一个反复迭代的过程。
7.1.2 面向对象设计准则
(6) 可重用 • 软件重用是提高软件开发生产率和目标系统质量 的重要途径。 • 重用基本上从设计阶段开始。重用有两方面的含 义:
一是尽量使用已有的类 ( 包括开发环境提供的类库,及以 往开发类似系统时创建的类); 二是如果确实需要创建新类,则在设计这些新类的协议时, 应该考虑将来的可重复使用性。
7.2.1 相关概念
• 服务和子系统接口
开放体系结构的一个例子是 Java的Swing用户接口包。它 允许绕过高层直接访问低层接口以克服性能瓶颈。如图所 示。
7.2.2 基于UML的面向对象设计过程
• • • • • 系统构架设计 用例设计 类设计 数据库设计 用户界面设计
7.2.2.1 构架设计
7.2.2.1 构架设计
图书馆内部用户
办公室PC 收费管理 采编部PC 图书信息加工 处罚 远程读者 PC机 预订/查询
7.1.2 面向对象设计准则
(3) 信息隐藏
在面向对象方法中,信息隐藏通过对象的封装性实现。对 于类的用户来说,属性的表示方法和操作的实现算法都应 该是隐藏的。 在面向对象设计中,耦合主要指不同对象之间相互关联的 程度。如果一个对象过多地依赖于其它对象来完成自己的 工作,则不仅使该对象的可理解性下降,而且还会增加测 试、修改的难度,同时降低了类的可重用性和可移植性。 对象不可能是完全孤立的,当两个对象必须相互联系时, 应该通过类的公共接口实现耦合,不应该依赖于类的具体 实现细节。
(3)
对各个子系统进行设计。对于面向对象的系统,典型的 子系统有问题域子系统、人机交互子系统和任务管理子 系统。 (4) 对象设计及优化。
7.1.2 面向对象设计准则
•
面向对象设计准则
传统的面向过程方法中的模块通常是函数、过程及子程 序等,而面向对象方法中的模块则是类、对象、接口、 构件等。
(1) 模块化
7.2基于UML的面向对象设计过程
• 面向对象的系统设计主要活动是进行系统 分解,并在此基础上定义子系统 /构件之间 的接口。为此,首先根据子系统可提供的 服务来定义子系统,然后对子系统细化, 建立层次结构。要求对子系统的分解尽可 能做到高内聚、低耦合。
7.2.1 相关概念
• 子系统和类
在大型和复杂的软件系统情形,首先根据需求的功能模型 (用例模型),将系统分解成若干个部分,每一部分又可 分解为若干子系统或类,每个子系统还可以由更小的子系 统或类组成,如图所示。
7.1.1 面向对象设计过程
• 面向对象设计过程
(1) 建立系统环境模型。在设计的初始阶段,系统设计师用 系统环境图对软件与外部实体交互的方式进行建模。下图 给出了系统环境图的一般的结构。
7.1.1 面向对象设计过程
(2) 设计系统体系结构。体系结构设计可以自底向上进行, 如将关系紧密的对象组织成子系统或层;也可以自顶向 下进行,尤其是使用设计模式或遗产系统时,会从子系 统的划分入手。
• 构架设计的目的是要勾画出系统的总体结 构,这项工作由经验丰富的构架设计师主 持完成。 • 该活动以用例模型、对象模型为输入。 • 输出:物理结构、子系统及其接口、概要 的设计类。
7.2.2.1 构架设计
构架工程师
子系统 用例模型 概要 接口 补充需求 构 架 设 计 设计类
分析模型
构架描述 分析模型的说明
系统构架
设计模型和实施模型
7.2.2.1 构架设计
• 第1步:构造系统的物理模型 • 首先用UML的配置图描述系统的物理构架 • 将需求分析阶段捕获的系统功能分配到这 些物理节点上。 • 配置图上可以显示计算节点的拓扑结构、 硬件设备配置、通信路径、各个节点上运 行的系统软件配置、应用软件配置。 • 一个图书馆信息管理系统的物理模型如图 示
(4) 弱耦合
7.1.2 面向对象设计准则
(5) 强内聚
设计类的原则是一个类的属性和操作全部都是完成某个任 务所必须的,其中不包括无用的属性和操作。例如设计一 个平衡二叉树类,该类的目的就是要解决平衡二叉树的访 问,其中所有的属性和操作都与解决这个问题相关,其他 无关的属性和操作在这里都是垃圾,应该清除。
在面向过程的方法中,数据及在数据上的处理是分离的; 而在面向对象方法中,数据及其上的处理是封装在一起 的,具有更好的独立性,也能够更好地支持复用。
7.1.2 面向对象设计准则
(2) 抽象
面向对象方法不仅支持过程抽象,而且支持数据抽象。 类实际上就是一种抽象数据类型。 可以将类的抽象分为规格说明抽象及参数化抽象: 类对外开放的公共接口构成了类的规格说明,即协议。 这种接口规定了外部可以使用的服务,使用者无需知道 这些服务的具体实现算法。通常将这类抽象称为规格说 明抽象。 参数化抽象是指当描述类的规格说明时并不具体指定所 要操作的数据类型,而是将数据类型作为参数。
系统结构的类图
7.2.1 相关概念
• 服务和子系统接口
子系统分层的目的是建立系统的层次结构。每一层仅依赖 于它下一层提供的服务,而对它的上一层可以一无所知。 下图给出了一个三层的系统结构的示例。
7.2.1 相关概念
• 服务和子系统接口
如果在一个系统的层次结构中,每 一层只能访问与其相邻的下一层, 则称之为封闭体系结构;如果每一 层还可访问比其相邻下一层更低的 层次,则称之为开放体系结构。 典型的封闭体系结构的例子就是开 放系统互联参考模型(OSI模型), 如图所示。
• 面向对象设计过程wk.baidu.com准则
面向对象设计过程 面向对象设计准则
• 基于UML的面向对象设计过程
系统构架设计 用例设计 类设计 数据库设计 用户界面设计
7.1 面向对象设计过程与准则
• 面向对象设计的主要任务是在面向对象分析的基 础上完成体系结构设计、接口设计、数据设计、 类设计及构件设计。 • 面向对象分析和设计的界限是模糊的,从面向对 象分析到面向对象设计是一个逐渐扩充模型的过 程。分析的结果通过细化直接生成设计结果,在 设计过程中逐步加深对需求的理解,从而进一步 完善需求分析的结果。 • 分析和设计活动是一个反复迭代的过程。
7.1.2 面向对象设计准则
(6) 可重用 • 软件重用是提高软件开发生产率和目标系统质量 的重要途径。 • 重用基本上从设计阶段开始。重用有两方面的含 义:
一是尽量使用已有的类 ( 包括开发环境提供的类库,及以 往开发类似系统时创建的类); 二是如果确实需要创建新类,则在设计这些新类的协议时, 应该考虑将来的可重复使用性。
7.2.1 相关概念
• 服务和子系统接口
开放体系结构的一个例子是 Java的Swing用户接口包。它 允许绕过高层直接访问低层接口以克服性能瓶颈。如图所 示。
7.2.2 基于UML的面向对象设计过程
• • • • • 系统构架设计 用例设计 类设计 数据库设计 用户界面设计
7.2.2.1 构架设计
7.2.2.1 构架设计
图书馆内部用户
办公室PC 收费管理 采编部PC 图书信息加工 处罚 远程读者 PC机 预订/查询
7.1.2 面向对象设计准则
(3) 信息隐藏
在面向对象方法中,信息隐藏通过对象的封装性实现。对 于类的用户来说,属性的表示方法和操作的实现算法都应 该是隐藏的。 在面向对象设计中,耦合主要指不同对象之间相互关联的 程度。如果一个对象过多地依赖于其它对象来完成自己的 工作,则不仅使该对象的可理解性下降,而且还会增加测 试、修改的难度,同时降低了类的可重用性和可移植性。 对象不可能是完全孤立的,当两个对象必须相互联系时, 应该通过类的公共接口实现耦合,不应该依赖于类的具体 实现细节。
(3)
对各个子系统进行设计。对于面向对象的系统,典型的 子系统有问题域子系统、人机交互子系统和任务管理子 系统。 (4) 对象设计及优化。
7.1.2 面向对象设计准则
•
面向对象设计准则
传统的面向过程方法中的模块通常是函数、过程及子程 序等,而面向对象方法中的模块则是类、对象、接口、 构件等。
(1) 模块化
7.2基于UML的面向对象设计过程
• 面向对象的系统设计主要活动是进行系统 分解,并在此基础上定义子系统 /构件之间 的接口。为此,首先根据子系统可提供的 服务来定义子系统,然后对子系统细化, 建立层次结构。要求对子系统的分解尽可 能做到高内聚、低耦合。
7.2.1 相关概念
• 子系统和类
在大型和复杂的软件系统情形,首先根据需求的功能模型 (用例模型),将系统分解成若干个部分,每一部分又可 分解为若干子系统或类,每个子系统还可以由更小的子系 统或类组成,如图所示。
7.1.1 面向对象设计过程
• 面向对象设计过程
(1) 建立系统环境模型。在设计的初始阶段,系统设计师用 系统环境图对软件与外部实体交互的方式进行建模。下图 给出了系统环境图的一般的结构。
7.1.1 面向对象设计过程
(2) 设计系统体系结构。体系结构设计可以自底向上进行, 如将关系紧密的对象组织成子系统或层;也可以自顶向 下进行,尤其是使用设计模式或遗产系统时,会从子系 统的划分入手。
• 构架设计的目的是要勾画出系统的总体结 构,这项工作由经验丰富的构架设计师主 持完成。 • 该活动以用例模型、对象模型为输入。 • 输出:物理结构、子系统及其接口、概要 的设计类。
7.2.2.1 构架设计
构架工程师
子系统 用例模型 概要 接口 补充需求 构 架 设 计 设计类
分析模型
构架描述 分析模型的说明
系统构架
设计模型和实施模型
7.2.2.1 构架设计
• 第1步:构造系统的物理模型 • 首先用UML的配置图描述系统的物理构架 • 将需求分析阶段捕获的系统功能分配到这 些物理节点上。 • 配置图上可以显示计算节点的拓扑结构、 硬件设备配置、通信路径、各个节点上运 行的系统软件配置、应用软件配置。 • 一个图书馆信息管理系统的物理模型如图 示
(4) 弱耦合
7.1.2 面向对象设计准则
(5) 强内聚
设计类的原则是一个类的属性和操作全部都是完成某个任 务所必须的,其中不包括无用的属性和操作。例如设计一 个平衡二叉树类,该类的目的就是要解决平衡二叉树的访 问,其中所有的属性和操作都与解决这个问题相关,其他 无关的属性和操作在这里都是垃圾,应该清除。
在面向过程的方法中,数据及在数据上的处理是分离的; 而在面向对象方法中,数据及其上的处理是封装在一起 的,具有更好的独立性,也能够更好地支持复用。
7.1.2 面向对象设计准则
(2) 抽象
面向对象方法不仅支持过程抽象,而且支持数据抽象。 类实际上就是一种抽象数据类型。 可以将类的抽象分为规格说明抽象及参数化抽象: 类对外开放的公共接口构成了类的规格说明,即协议。 这种接口规定了外部可以使用的服务,使用者无需知道 这些服务的具体实现算法。通常将这类抽象称为规格说 明抽象。 参数化抽象是指当描述类的规格说明时并不具体指定所 要操作的数据类型,而是将数据类型作为参数。
系统结构的类图
7.2.1 相关概念
• 服务和子系统接口
子系统分层的目的是建立系统的层次结构。每一层仅依赖 于它下一层提供的服务,而对它的上一层可以一无所知。 下图给出了一个三层的系统结构的示例。
7.2.1 相关概念
• 服务和子系统接口
如果在一个系统的层次结构中,每 一层只能访问与其相邻的下一层, 则称之为封闭体系结构;如果每一 层还可访问比其相邻下一层更低的 层次,则称之为开放体系结构。 典型的封闭体系结构的例子就是开 放系统互联参考模型(OSI模型), 如图所示。