软件工程-第11章-面向对象设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/7/20
在面向对象分析中,只涉及到问题论域部分, 其余3部分是在面向对象设计中加进来的。
图11.2 典型的面向对象设计模型
2020/7/20
设计问题域子系统(一)
• 面向对象设计通常仅需从实现角度对问题域模 型作一些补充或修改,主要是增添、合并或分 解类-&-对象、属性及服务,调整继承关系 等。
• 使用简单的协议:减少消息中的参数 • 使用简单的服务 • 把设计变动减至最小
2020/7/20
*11.3 软件重用(一)
• 概念
– 重用:也叫再用或复用,是指同一事物不 作修改或稍加改动就多次重复使用。包括 知识重用、方法和标准的重用、软件成分 的重用3个层次。
2020/7/20
1. 软件成分的重用级别
• 代码重用:调用库中的模块,
– 源代码剪贴:存在配置管理问题,无法跟踪 原始代码块的修改
– 源代码包含:提供包含(include)库中源代 码,修改库中源代码之后,所有包含它的程 序都必须重新编译
– 继承:重用类库中的类,不存在配置管理问 题
2020/7/20
1. 软件成分的重用级别
– 设计结果重用:重用某个软件系统的设计模 型(即求解域模型)。有助于把一个应用系统 移植到完全不同的软硬件平台上。
• 分析并发性:
• 若两个对象彼此间不存在交互,或者同时接 受事件,则它们在本质上是并发的;
• 当系统有许多并发行为时,需要依照各个行 为的协调和通信关系,划分各种任务,以简 化并发行为的设计和编码: 通过检查各个对象的状态图及他们之间交换 的事件,把若干非并发的对象归并到一条用 任务实现的控制线中。
2020/7/20
•可重用:软件重用是提高软件开发 生产率和目标系统质量的重要途径。
•尽量使用已有的类。 •如果确实需要创建新类,则在设 计这些新类时,应该考虑将来可 重用性。
2020/7/20
启发规则(一)
• 设计结果应该清晰易懂
– 用词一致 – 使用已有的协议 – 减少消息模式的数目 – 避免模糊的定义
2020/7/20
设计人-机交互子系统(一)
确定人机交互的细节,其中包括指定窗口和 报表的形式、设计命令层次等项内容。
• 设计人-机交互子系统的策略
– 分类用户 – 描述用户 – 设计命令层次:用过程抽象机制组织起来的、
可供选用的服务的表现形式。 – 设计人-机交互类
2020/7/20
设计任务管理子系统
2020/7/20
11.4 系统分解
• 采用面向对象方法设计软件系统时,面向 对象设计模型(即求解域的对象模型),与 面向对象分析模型(即问题域的对象模型) 一样,也由主题、类与对象、结构、属性 、服务等5个层次组成。
• 大多数系统的面向对象设计模型,在逻辑 上都由四大部分组成,这四大部分对应于 组成目标系统的四个子系统,它们分别是 问题域子系统、人-机交互子系统、任务 管理子系统和数据管理子系统。
– 调整需求:修改分析结果,再把修改反映到问题域 子系统中
– 重用已有的类: – 把问题域类组合在一起:引入一个根类把应用的类
关联到一起,建立类的层次 – 增添一般化类以建立协议:在一般类中定义所有特
殊类都可使用的操作,这种操作可能是虚函数,其 细节在特殊类中定义。 – 调整继承层次:若设计语言不提供多重继承机制, 需修改分析结果。
• 继承重用:当已有的类构件不能通过实例 重用完全满足当前系统需求时,继承重用 提供了一种对已有的类构件进行裁剪的机 制。
2020/7/20
• 多态重用 利用多态性不仅可以使对象的对外接口更 加一般化(基类与派生类的许多对外接口是 相同的),从而降低了消息连接的复杂程度 ,而且还提供了一种简便可靠的软构件组 合机制。系统运行时,根据接收消息的对 象类型,由多态性机制启动正确的方法, 去响应一个一般化的消息,从而简化了消 息界面和软构件连接过程。
– 分析结果重用:重用某个系统的分析模型。 这种重用特别适用于用户需求未改变,但系 统体系结构发生了根本变化的场合。
2020/7/20
2. 类构件
– 类构件的重用方式
• 实例重用:使用适当的构造函数,按照需 要创建类的实例。然后向所创建的实例发 送适当的消息,启动相应的服务,完成需 要完成的工作。
面向对象设计
• 设计是把分析阶段得到的需求转变成符 合成本和质量要求的、抽象的系统实现 方案的过程。
• 面向对象设计可再细分为系统设计和对 象设计。系统设计确定实现系统的策略 和目标系统的高层结构。对象设计确定 解空间中的类、关联、接口形式及实现 服务的算法。
2020/7/20
•信息隐藏:属性的表示方法和操作的
进程的别名,是执行一系列活动的一段程序。
2020/7/20
设计任务管理子系统
• 设计任务管理子系统:确定各类任务并把任务分 配给适当的硬件或软件去执行。
– 确定事件驱动型任务:由事件驱动完成通信工作的任 务。
实现算法
在面向对象方法中,信息隐藏通过 对象的封装性实现:类结构分离了 接口与实现,从而支持了信息隐藏。
2020/7/20
•弱耦合:松散交互耦合、紧密继承耦合
交互耦合:指对象之间的耦合通过消息连接 来实现。交互耦合应尽可能松散:
•尽量降低消息连接的复杂程度。
•减少对象发送(接受)的消息数。
继承耦合:继承是一般化类与特殊类之间耦 合的一种形式,应该提高继承耦合程度。设 计时应使特殊类尽量多继承并使用其一般化 类的属性和服务。
2020/7/20
强内聚:
面向对象设计中存在3种内聚: •服务内聚:一个服务应该完成且仅完成一个功能。 •类内聚:一个类应只有一个用途,类的属性和服务 应全都是完成该类对象的任务所必须的,其中不包 含无用的属性或服务。
•一般-特殊内聚:设计出的一般-特殊结构,应该 符合多数人的概念,即应是对相应的领域知识的正 确抽取。
• 一般-特殊结构的深度应适当:
不能仅从方便编码的角度出发随意创建派生类 ,一个中等规模(大约包含100个类)的系统中, 类等级层次数应保持为7±2。
2020/7/20
启发规则(二)
• 设计简单的wenku.baidu.com:便于开发和管理
– 避免包含过多的属性 – 有明确的定义 – 尽量简化对象之间的合作关系 – 不要提供太多服务
在面向对象分析中,只涉及到问题论域部分, 其余3部分是在面向对象设计中加进来的。
图11.2 典型的面向对象设计模型
2020/7/20
设计问题域子系统(一)
• 面向对象设计通常仅需从实现角度对问题域模 型作一些补充或修改,主要是增添、合并或分 解类-&-对象、属性及服务,调整继承关系 等。
• 使用简单的协议:减少消息中的参数 • 使用简单的服务 • 把设计变动减至最小
2020/7/20
*11.3 软件重用(一)
• 概念
– 重用:也叫再用或复用,是指同一事物不 作修改或稍加改动就多次重复使用。包括 知识重用、方法和标准的重用、软件成分 的重用3个层次。
2020/7/20
1. 软件成分的重用级别
• 代码重用:调用库中的模块,
– 源代码剪贴:存在配置管理问题,无法跟踪 原始代码块的修改
– 源代码包含:提供包含(include)库中源代 码,修改库中源代码之后,所有包含它的程 序都必须重新编译
– 继承:重用类库中的类,不存在配置管理问 题
2020/7/20
1. 软件成分的重用级别
– 设计结果重用:重用某个软件系统的设计模 型(即求解域模型)。有助于把一个应用系统 移植到完全不同的软硬件平台上。
• 分析并发性:
• 若两个对象彼此间不存在交互,或者同时接 受事件,则它们在本质上是并发的;
• 当系统有许多并发行为时,需要依照各个行 为的协调和通信关系,划分各种任务,以简 化并发行为的设计和编码: 通过检查各个对象的状态图及他们之间交换 的事件,把若干非并发的对象归并到一条用 任务实现的控制线中。
2020/7/20
•可重用:软件重用是提高软件开发 生产率和目标系统质量的重要途径。
•尽量使用已有的类。 •如果确实需要创建新类,则在设 计这些新类时,应该考虑将来可 重用性。
2020/7/20
启发规则(一)
• 设计结果应该清晰易懂
– 用词一致 – 使用已有的协议 – 减少消息模式的数目 – 避免模糊的定义
2020/7/20
设计人-机交互子系统(一)
确定人机交互的细节,其中包括指定窗口和 报表的形式、设计命令层次等项内容。
• 设计人-机交互子系统的策略
– 分类用户 – 描述用户 – 设计命令层次:用过程抽象机制组织起来的、
可供选用的服务的表现形式。 – 设计人-机交互类
2020/7/20
设计任务管理子系统
2020/7/20
11.4 系统分解
• 采用面向对象方法设计软件系统时,面向 对象设计模型(即求解域的对象模型),与 面向对象分析模型(即问题域的对象模型) 一样,也由主题、类与对象、结构、属性 、服务等5个层次组成。
• 大多数系统的面向对象设计模型,在逻辑 上都由四大部分组成,这四大部分对应于 组成目标系统的四个子系统,它们分别是 问题域子系统、人-机交互子系统、任务 管理子系统和数据管理子系统。
– 调整需求:修改分析结果,再把修改反映到问题域 子系统中
– 重用已有的类: – 把问题域类组合在一起:引入一个根类把应用的类
关联到一起,建立类的层次 – 增添一般化类以建立协议:在一般类中定义所有特
殊类都可使用的操作,这种操作可能是虚函数,其 细节在特殊类中定义。 – 调整继承层次:若设计语言不提供多重继承机制, 需修改分析结果。
• 继承重用:当已有的类构件不能通过实例 重用完全满足当前系统需求时,继承重用 提供了一种对已有的类构件进行裁剪的机 制。
2020/7/20
• 多态重用 利用多态性不仅可以使对象的对外接口更 加一般化(基类与派生类的许多对外接口是 相同的),从而降低了消息连接的复杂程度 ,而且还提供了一种简便可靠的软构件组 合机制。系统运行时,根据接收消息的对 象类型,由多态性机制启动正确的方法, 去响应一个一般化的消息,从而简化了消 息界面和软构件连接过程。
– 分析结果重用:重用某个系统的分析模型。 这种重用特别适用于用户需求未改变,但系 统体系结构发生了根本变化的场合。
2020/7/20
2. 类构件
– 类构件的重用方式
• 实例重用:使用适当的构造函数,按照需 要创建类的实例。然后向所创建的实例发 送适当的消息,启动相应的服务,完成需 要完成的工作。
面向对象设计
• 设计是把分析阶段得到的需求转变成符 合成本和质量要求的、抽象的系统实现 方案的过程。
• 面向对象设计可再细分为系统设计和对 象设计。系统设计确定实现系统的策略 和目标系统的高层结构。对象设计确定 解空间中的类、关联、接口形式及实现 服务的算法。
2020/7/20
•信息隐藏:属性的表示方法和操作的
进程的别名,是执行一系列活动的一段程序。
2020/7/20
设计任务管理子系统
• 设计任务管理子系统:确定各类任务并把任务分 配给适当的硬件或软件去执行。
– 确定事件驱动型任务:由事件驱动完成通信工作的任 务。
实现算法
在面向对象方法中,信息隐藏通过 对象的封装性实现:类结构分离了 接口与实现,从而支持了信息隐藏。
2020/7/20
•弱耦合:松散交互耦合、紧密继承耦合
交互耦合:指对象之间的耦合通过消息连接 来实现。交互耦合应尽可能松散:
•尽量降低消息连接的复杂程度。
•减少对象发送(接受)的消息数。
继承耦合:继承是一般化类与特殊类之间耦 合的一种形式,应该提高继承耦合程度。设 计时应使特殊类尽量多继承并使用其一般化 类的属性和服务。
2020/7/20
强内聚:
面向对象设计中存在3种内聚: •服务内聚:一个服务应该完成且仅完成一个功能。 •类内聚:一个类应只有一个用途,类的属性和服务 应全都是完成该类对象的任务所必须的,其中不包 含无用的属性或服务。
•一般-特殊内聚:设计出的一般-特殊结构,应该 符合多数人的概念,即应是对相应的领域知识的正 确抽取。
• 一般-特殊结构的深度应适当:
不能仅从方便编码的角度出发随意创建派生类 ,一个中等规模(大约包含100个类)的系统中, 类等级层次数应保持为7±2。
2020/7/20
启发规则(二)
• 设计简单的wenku.baidu.com:便于开发和管理
– 避免包含过多的属性 – 有明确的定义 – 尽量简化对象之间的合作关系 – 不要提供太多服务