单击此处编辑母版标题样式解析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(Human-Computer Interface Subsystem Design)
11.7 设计任务管理子系统
(Task management Subsystem Design)
11.8 设计数据管理子系统
(Data management Subsystem Design)
11.9 设计类中的服务
11.4 系统分解(System Division)
图11.2 典型的面向对象设计模型
Human-Computer Interface Subsystem Problem Subsystem Task management Subsystem Data management Subsystem
1. 子系统之间的两种交互方式
(Communication mode of Subsystems) (1) 客户-供应商关系(Client-supplier) 作为“客户”的子系统调用作为“供应商”的 子系统,任何交互行为都是由前者驱动的。 (2) 平等伙伴关系(peer-to-peer) 每个子系统都可能调用其他子系统,因此,每 个子系统都必须了解其他子系统的接口。而且 这种交互方式还可能存在通信环路,从而使系 统难于理解,容易发生不易察觉的设计错误。 应该尽量使用客户-供应商关系。
图11.3 典型应用系统的组织结构 这个应用系统采用了层次与块状的混合结构。 3. 设计系统的拓扑结构(Topology Structure) 由子系统组成完整的系统时,典型的拓扑结构有管道 形、树形、星形等。设计者应该采用与问题结构相适应的、 尽可能简单的拓扑结构,以减少子系统之间的交互数量。
11.5 设计问题域子系统
2. 软件成分的重用级别(Reusing Levels) 软件成分的重用可以进一步划分成以下3个级别: (1) 代码重用(Code Reusing) 代码重用可以采用下列几种形式中的任何一种: 源代码剪贴(Cutting and Pasting): 存在严重的配置管理问题,人们几乎无法跟踪原始代码 块多次修改重用的过程。 源代码包含(Include):许多程序设计语言都提供包含 (include)库中源代码的机制。使用这种重用形式时,配置管 理问题有所缓解。 继承(Inheritance) :利用继承机制重用类库中的类时,无须 修改已有的代码,就可以扩充或具体化在库中找出的类, 因此,基本上不存在配置管理问题。
11.3.2 类构件(Classes Components)
面向对象技术中的“类”,是比较理想的可重 用软构件,不妨称之为类构件。类构件有3种重用 方式,分别是实例重用(Instance Reusing)、继承重 用(Inheritance Reusing)和多态重用(Polymorphism Reusing)。
11.3 软件重用(Software Reusing)
11.3.1 概述(summarize)
1. 重用(Reusing) 重用也叫再用或复用,是指同一事物不作修改 或稍加改动就多次重复使用。广义地说,软件重用 可分为以下3个层次:
(1) 知识重用(例如,软件工程知识的重用)。 (2) 方法和标准的重用(例如,面向对象方法或国家 制定的软件开发规范的重用)。 (3) 软件成分的重用。 前两个重用层次属于知识工程研究的范畴,本 节仅讨论软件成分重用问题。
2. 类构件的重用方式 (1) 实例重用(Instance Reusing) (2) 继承重用(Inheritance Reusing) (3) 多态重用(Polymorphism Reusing)
11.3.3 软件重用的效益(Reuse benefits)
1. 质量 由于不能定期进行形式化验证,错误可能而且 也确实存在。但是,随着每一次重用,都会有一些 错误被发现并被清除,构件的质量也会随之改善。 随着时间的推移,构件将变成实质上无错误的。 2. 生产率 基本上30%~50%的重用大约可以导致生 产率提高25%~40%。
3. 设计简单的类 (1) 避免包含过多的属性。 (2) 有明确的定义。 (3) 尽量简化对象之间的合作关系。 (4) 不要提供太多服务。 一个类提供的公共服务不超过7个。 遵循上述启发规则也会带来另一个问题: 设计出大量较小的类,这同样会带来一定复杂 性。解决这个问题的办法,是把系统中的类按 逻辑分组,也就是划分“主题”。
3. 成本 软件重用带来的净成本节省可以用下式估算: C=Cs-Cr-Cd Cs是项目从头开发(没有重用)时所需要的成本;Cr是与 重用相关联的成本; Cd是交付给客户的软件的实际成本。 与重用相关联的成本Cr主要包括下述成本: 领域分析与建模的成本; 设计领域体系结构的成本; 为便于重用而增加的文档的成本; 维护和完善可重用的软件成分的成本; 为从外部获取构件所付出的版税和许可证费; 创建(或购买)及运行重用库的费用; 对设计和实现可重用构件的人员的培训费用。
第11章 面向对象设计
Object-Oriented Design (OOD)
11.1 11.2 11.3 11.4 11.5 11.6
面向对象设计的准则(OOD Rule) 启发规则(Heuristic Rule ) 软件重用(Software Reusing) 系统分解(System Division) 设计问题域子系统(Problem Subsystem Design) 设计人机交互子系统
3. 典型的可重用软件成分(Reusable Elements) 可能被重用的软件成分主要有以下10种: (1) 项目计划。 (2) 成本估计。 (3) 体系结构。 例如,类属的体系结构模板(领域体系结构)。 (4) 需求模型和规格说明。 例如,类和对象的模型及规格说明、数据流等。
(5) 设计。用传统方法开发的体系结构、数据、 接口和过程设计结果,是重用的候选者,更常见的 是,系统和对象设计是可重用的。 (6) 源代码。用兼容的程序设计语言书写的、经 过验证的程序构件,是重用的候选者。 (7) 用户文档和技术文档。即使针对的应用是不 同的,也经常有可能重用用户文档和技术文档的大 部分。
(2) 继承耦合(Enhancing Inheritance Coupling) 提高继承耦合程度。继承是一般化类与特殊类 之间耦合的一种形式。从本质上看,通过继承关系 结合起来的基类和派生类,构成了系统中粒度更大 的模块。因此,它们彼此之间应该结合得越紧密越 好。
5. 强内聚(High Cohesion ) 在设计时应该力求做到高内聚。在面向对象设 计中存在下述3种内聚。 (1) 服务内聚(Service Cohesion ) 。一个服务应该完 成一个且仅完成一个功能。 (2) 类内聚(Classes Cohesion ) 。设计类的原则是, 一个类应该只有一个用途,它的属性和服务应该是 高内聚的。 (3) 一般-特殊内聚(Generalization-specialization Cohesion ) 。设计出的一般-特殊结构,应该符合多 数人的概念,这种结构应该是对相应的领域知识的 正确抽取。 紧密的继承耦合与高度的一般-特殊内聚是一 致的。
4. 使用简单的协议
5. 使用简单的服务 面向对象设计出来的类中的服务通常都很小, 一般只有3~5行源程序语句,可以用仅含一个动词 和一个宾语的简单句子描述它的功能。 如果需要在服务中使用CASE语句,通常应该 考虑用一般-特殊结构代替这个类的可能性。 6. 把设计变动减至最小
图11.1 理想的设计变动情况
(Problem Subsystem Βιβλιοθήκη Baiduesign)
面向对象设计仅需从实现角度对问题域模型做 一些补充或修改,主要是增添、合并或分解类与对 象、属性及服务,调整继承关系等等。当问题域子 系统过分复杂庞大时,应该把它进一步分解成若干 个更小的子系统。
4. 弱耦合(Low Coupling) 弱耦合是优秀设计的一个重要标准。 (1) 交互耦合(Interface Coupling) 如果对象之间的耦合通过消息连接来实现,则 这种耦合就是交互耦合。为使交互耦合尽可能松散, 应该遵守下述准则: 尽量降低消息连接的复杂程度。应该尽量减少 消息中包含的参数个数,降低参数的复杂程度。 减少对象发送(或接收)的消息数。
(Service in Classes Design )
11.10 设计关联
(Relationship Design)
11.11 设计优化(Design optimizing)
分析是提取和整理用户需求,并建立问题域精 确模型的过程。 设计则是把分析阶段得到的需求转变成符合成 本和质量要求的、抽象的系统实现方案的过程。 从面向对象分析到面向对象设计(OOD),是一 个逐渐扩充模型的过程。 面向对象设计就是用面向对象观点建立求解域 模型的过程。
(8) 用户界面。这可能是最广泛被重用的软件成 分,GUI(图形用户界面)软件经常被重用。因为 它可占到一个应用程序的60%代码量,因此,重用 的效果非常显著。 (9) 数据。在大多数经常被重用的软件成分中, 被重用的数据包括: 内部表、列表和记录结构, 以及文件和完整的数据库。 (10) 测试用例。一旦设计或代码构件将被重用, 相关的测试用例应该“附属于”它们也被重用。
1. 可重用软构件应具备的特点
(Reusable Components characteristics)
(1) 模块独立性强。具有单一、完整的功能,且经 过反复测试被确认是正确的。它应该是一个不 受或很少受外界干扰的封装体,其内部实现在 外面是不可见的。 (2) 具有高度可塑性。必须提供为适应特定需求而 扩充或修改已有构件的机制,而且所提供的机 制必须使用起来非常简单方便。 (3) 接口清晰、简明、可靠。软构件应该提供清晰、 简明、可靠的对外接口,而且还应该有详尽的 文档说明,以方便用户使用。
2. 组织系统的两种方案(Organizing Structures) (1) 层次组织 每层是一个子系统。上层在下层的基础上建立, 下层为实现上层功能而提供必要的服务。 (2) 块状组织 这种组织方案把软件系统垂直地分解成若干个 相对独立的、弱耦合的子系统,一个子系统相当于 一块,每块提供一种类型的服务。
11.2 启发规则(Heuristic Rule )
1. 设计结果应该清晰易懂 (1) 用词一致。 (2) 使用已有的协议。 (3) 减少消息模式的数目。 (4) 避免模糊的定义。
2. 一般-特殊结构的深度应适当 应该使类等级中包含的层次数适当。一般说来, 在一个中等规模(大约包含100个类)的系统中,类 等级层次数应保持为7±2。不应该仅仅从方便编码 的角度出发随意创建派生类,应该使一般-特殊结 构与领域知识或常识保持一致。
(2) 设计结果重用(Design Results Reusing) 设计结果重用指的是,重用某个软件系统的设 计模型(即求解域模型)。这个级别的重用有助于把 一个应用系统移植到完全不同的软硬件平台上。 (3) 分析结果重用(Analysis Results Reusing) 这是一种更高级别的重用,即重用某个系统的 分析模型。这种重用特别适用于用户需求未改变, 但系统体系结构发生了根本变化的场合。
11.1 面向对象设计的准则(OOD Rule)
优秀软件设计的一个主要特点就是容易维护。 1. 模块化(Modularity) 对象就是模块。它是把数据结构和操作这些数 据的方法紧密地结合在一起所构成的模块。 2. 抽象(Abstraction) 不仅支持过程抽象,而且支持数据抽象。通常 把这类抽象称为规格说明抽象。 3. 信息隐藏(Information Hiding ) 在面向对象方法中,信息隐藏通过对象的封装 性实现:类结构分离了接口与实现,从而支持了信 息隐藏。
6. 可重用(Reusable) 软件重用是提高软件开发生产率和目标系统质 量的重要途径。 重用基本上从设计阶段开始。重用有两方面的 含义: 一是尽量使用已有的类(包括开发环境提供 的类库,及以往开发类似系统时创建的类),二是 如果确实需要创建新类,则在设计这些新类的协议 时,应该考虑将来的可重复使用性。
11.7 设计任务管理子系统
(Task management Subsystem Design)
11.8 设计数据管理子系统
(Data management Subsystem Design)
11.9 设计类中的服务
11.4 系统分解(System Division)
图11.2 典型的面向对象设计模型
Human-Computer Interface Subsystem Problem Subsystem Task management Subsystem Data management Subsystem
1. 子系统之间的两种交互方式
(Communication mode of Subsystems) (1) 客户-供应商关系(Client-supplier) 作为“客户”的子系统调用作为“供应商”的 子系统,任何交互行为都是由前者驱动的。 (2) 平等伙伴关系(peer-to-peer) 每个子系统都可能调用其他子系统,因此,每 个子系统都必须了解其他子系统的接口。而且 这种交互方式还可能存在通信环路,从而使系 统难于理解,容易发生不易察觉的设计错误。 应该尽量使用客户-供应商关系。
图11.3 典型应用系统的组织结构 这个应用系统采用了层次与块状的混合结构。 3. 设计系统的拓扑结构(Topology Structure) 由子系统组成完整的系统时,典型的拓扑结构有管道 形、树形、星形等。设计者应该采用与问题结构相适应的、 尽可能简单的拓扑结构,以减少子系统之间的交互数量。
11.5 设计问题域子系统
2. 软件成分的重用级别(Reusing Levels) 软件成分的重用可以进一步划分成以下3个级别: (1) 代码重用(Code Reusing) 代码重用可以采用下列几种形式中的任何一种: 源代码剪贴(Cutting and Pasting): 存在严重的配置管理问题,人们几乎无法跟踪原始代码 块多次修改重用的过程。 源代码包含(Include):许多程序设计语言都提供包含 (include)库中源代码的机制。使用这种重用形式时,配置管 理问题有所缓解。 继承(Inheritance) :利用继承机制重用类库中的类时,无须 修改已有的代码,就可以扩充或具体化在库中找出的类, 因此,基本上不存在配置管理问题。
11.3.2 类构件(Classes Components)
面向对象技术中的“类”,是比较理想的可重 用软构件,不妨称之为类构件。类构件有3种重用 方式,分别是实例重用(Instance Reusing)、继承重 用(Inheritance Reusing)和多态重用(Polymorphism Reusing)。
11.3 软件重用(Software Reusing)
11.3.1 概述(summarize)
1. 重用(Reusing) 重用也叫再用或复用,是指同一事物不作修改 或稍加改动就多次重复使用。广义地说,软件重用 可分为以下3个层次:
(1) 知识重用(例如,软件工程知识的重用)。 (2) 方法和标准的重用(例如,面向对象方法或国家 制定的软件开发规范的重用)。 (3) 软件成分的重用。 前两个重用层次属于知识工程研究的范畴,本 节仅讨论软件成分重用问题。
2. 类构件的重用方式 (1) 实例重用(Instance Reusing) (2) 继承重用(Inheritance Reusing) (3) 多态重用(Polymorphism Reusing)
11.3.3 软件重用的效益(Reuse benefits)
1. 质量 由于不能定期进行形式化验证,错误可能而且 也确实存在。但是,随着每一次重用,都会有一些 错误被发现并被清除,构件的质量也会随之改善。 随着时间的推移,构件将变成实质上无错误的。 2. 生产率 基本上30%~50%的重用大约可以导致生 产率提高25%~40%。
3. 设计简单的类 (1) 避免包含过多的属性。 (2) 有明确的定义。 (3) 尽量简化对象之间的合作关系。 (4) 不要提供太多服务。 一个类提供的公共服务不超过7个。 遵循上述启发规则也会带来另一个问题: 设计出大量较小的类,这同样会带来一定复杂 性。解决这个问题的办法,是把系统中的类按 逻辑分组,也就是划分“主题”。
3. 成本 软件重用带来的净成本节省可以用下式估算: C=Cs-Cr-Cd Cs是项目从头开发(没有重用)时所需要的成本;Cr是与 重用相关联的成本; Cd是交付给客户的软件的实际成本。 与重用相关联的成本Cr主要包括下述成本: 领域分析与建模的成本; 设计领域体系结构的成本; 为便于重用而增加的文档的成本; 维护和完善可重用的软件成分的成本; 为从外部获取构件所付出的版税和许可证费; 创建(或购买)及运行重用库的费用; 对设计和实现可重用构件的人员的培训费用。
第11章 面向对象设计
Object-Oriented Design (OOD)
11.1 11.2 11.3 11.4 11.5 11.6
面向对象设计的准则(OOD Rule) 启发规则(Heuristic Rule ) 软件重用(Software Reusing) 系统分解(System Division) 设计问题域子系统(Problem Subsystem Design) 设计人机交互子系统
3. 典型的可重用软件成分(Reusable Elements) 可能被重用的软件成分主要有以下10种: (1) 项目计划。 (2) 成本估计。 (3) 体系结构。 例如,类属的体系结构模板(领域体系结构)。 (4) 需求模型和规格说明。 例如,类和对象的模型及规格说明、数据流等。
(5) 设计。用传统方法开发的体系结构、数据、 接口和过程设计结果,是重用的候选者,更常见的 是,系统和对象设计是可重用的。 (6) 源代码。用兼容的程序设计语言书写的、经 过验证的程序构件,是重用的候选者。 (7) 用户文档和技术文档。即使针对的应用是不 同的,也经常有可能重用用户文档和技术文档的大 部分。
(2) 继承耦合(Enhancing Inheritance Coupling) 提高继承耦合程度。继承是一般化类与特殊类 之间耦合的一种形式。从本质上看,通过继承关系 结合起来的基类和派生类,构成了系统中粒度更大 的模块。因此,它们彼此之间应该结合得越紧密越 好。
5. 强内聚(High Cohesion ) 在设计时应该力求做到高内聚。在面向对象设 计中存在下述3种内聚。 (1) 服务内聚(Service Cohesion ) 。一个服务应该完 成一个且仅完成一个功能。 (2) 类内聚(Classes Cohesion ) 。设计类的原则是, 一个类应该只有一个用途,它的属性和服务应该是 高内聚的。 (3) 一般-特殊内聚(Generalization-specialization Cohesion ) 。设计出的一般-特殊结构,应该符合多 数人的概念,这种结构应该是对相应的领域知识的 正确抽取。 紧密的继承耦合与高度的一般-特殊内聚是一 致的。
4. 使用简单的协议
5. 使用简单的服务 面向对象设计出来的类中的服务通常都很小, 一般只有3~5行源程序语句,可以用仅含一个动词 和一个宾语的简单句子描述它的功能。 如果需要在服务中使用CASE语句,通常应该 考虑用一般-特殊结构代替这个类的可能性。 6. 把设计变动减至最小
图11.1 理想的设计变动情况
(Problem Subsystem Βιβλιοθήκη Baiduesign)
面向对象设计仅需从实现角度对问题域模型做 一些补充或修改,主要是增添、合并或分解类与对 象、属性及服务,调整继承关系等等。当问题域子 系统过分复杂庞大时,应该把它进一步分解成若干 个更小的子系统。
4. 弱耦合(Low Coupling) 弱耦合是优秀设计的一个重要标准。 (1) 交互耦合(Interface Coupling) 如果对象之间的耦合通过消息连接来实现,则 这种耦合就是交互耦合。为使交互耦合尽可能松散, 应该遵守下述准则: 尽量降低消息连接的复杂程度。应该尽量减少 消息中包含的参数个数,降低参数的复杂程度。 减少对象发送(或接收)的消息数。
(Service in Classes Design )
11.10 设计关联
(Relationship Design)
11.11 设计优化(Design optimizing)
分析是提取和整理用户需求,并建立问题域精 确模型的过程。 设计则是把分析阶段得到的需求转变成符合成 本和质量要求的、抽象的系统实现方案的过程。 从面向对象分析到面向对象设计(OOD),是一 个逐渐扩充模型的过程。 面向对象设计就是用面向对象观点建立求解域 模型的过程。
(8) 用户界面。这可能是最广泛被重用的软件成 分,GUI(图形用户界面)软件经常被重用。因为 它可占到一个应用程序的60%代码量,因此,重用 的效果非常显著。 (9) 数据。在大多数经常被重用的软件成分中, 被重用的数据包括: 内部表、列表和记录结构, 以及文件和完整的数据库。 (10) 测试用例。一旦设计或代码构件将被重用, 相关的测试用例应该“附属于”它们也被重用。
1. 可重用软构件应具备的特点
(Reusable Components characteristics)
(1) 模块独立性强。具有单一、完整的功能,且经 过反复测试被确认是正确的。它应该是一个不 受或很少受外界干扰的封装体,其内部实现在 外面是不可见的。 (2) 具有高度可塑性。必须提供为适应特定需求而 扩充或修改已有构件的机制,而且所提供的机 制必须使用起来非常简单方便。 (3) 接口清晰、简明、可靠。软构件应该提供清晰、 简明、可靠的对外接口,而且还应该有详尽的 文档说明,以方便用户使用。
2. 组织系统的两种方案(Organizing Structures) (1) 层次组织 每层是一个子系统。上层在下层的基础上建立, 下层为实现上层功能而提供必要的服务。 (2) 块状组织 这种组织方案把软件系统垂直地分解成若干个 相对独立的、弱耦合的子系统,一个子系统相当于 一块,每块提供一种类型的服务。
11.2 启发规则(Heuristic Rule )
1. 设计结果应该清晰易懂 (1) 用词一致。 (2) 使用已有的协议。 (3) 减少消息模式的数目。 (4) 避免模糊的定义。
2. 一般-特殊结构的深度应适当 应该使类等级中包含的层次数适当。一般说来, 在一个中等规模(大约包含100个类)的系统中,类 等级层次数应保持为7±2。不应该仅仅从方便编码 的角度出发随意创建派生类,应该使一般-特殊结 构与领域知识或常识保持一致。
(2) 设计结果重用(Design Results Reusing) 设计结果重用指的是,重用某个软件系统的设 计模型(即求解域模型)。这个级别的重用有助于把 一个应用系统移植到完全不同的软硬件平台上。 (3) 分析结果重用(Analysis Results Reusing) 这是一种更高级别的重用,即重用某个系统的 分析模型。这种重用特别适用于用户需求未改变, 但系统体系结构发生了根本变化的场合。
11.1 面向对象设计的准则(OOD Rule)
优秀软件设计的一个主要特点就是容易维护。 1. 模块化(Modularity) 对象就是模块。它是把数据结构和操作这些数 据的方法紧密地结合在一起所构成的模块。 2. 抽象(Abstraction) 不仅支持过程抽象,而且支持数据抽象。通常 把这类抽象称为规格说明抽象。 3. 信息隐藏(Information Hiding ) 在面向对象方法中,信息隐藏通过对象的封装 性实现:类结构分离了接口与实现,从而支持了信 息隐藏。
6. 可重用(Reusable) 软件重用是提高软件开发生产率和目标系统质 量的重要途径。 重用基本上从设计阶段开始。重用有两方面的 含义: 一是尽量使用已有的类(包括开发环境提供 的类库,及以往开发类似系统时创建的类),二是 如果确实需要创建新类,则在设计这些新类的协议 时,应该考虑将来的可重复使用性。