面向对象的设计准则ppt课件_第1页
面向对象的设计准则ppt课件_第2页
面向对象的设计准则ppt课件_第3页
面向对象的设计准则ppt课件_第4页
面向对象的设计准则ppt课件_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第11章 面向对象设计 (OOD)11.1 面向对象设计的准那么面向对象设计的准那么11.2 启发规那么启发规那么11.3 软件重用软件重用11.4 系统分解系统分解11.5 设计问题域子系统设计问题域子系统11.6 设计人机交互子系统设计人机交互子系统11.7 设计义务管理子系统设计义务管理子系统11.8 设计数据管理子系统设计数据管理子系统11.9 设计类中的效力设计类中的效力11.10 设计关联设计关联11.11 设计优化设计优化分析是提取和整理用户需求,并建立问题域准确分析是提取和整理用户需求,并建立问题域准确模型的过程。模型的过程。设计是把分析阶段得到的需求转变成符合本钱和设计是把分

2、析阶段得到的需求转变成符合本钱和质量要求的、笼统的系统实现方案的过程。质量要求的、笼统的系统实现方案的过程。从面向对象分析到面向对象设计从面向对象分析到面向对象设计(OOD),是一个,是一个逐渐扩展模型的过程。面向对象设计就是用面向逐渐扩展模型的过程。面向对象设计就是用面向对象观念建立求解域模型的过程。对象观念建立求解域模型的过程。分析和设计活动是一个多次反复迭代的过程。面分析和设计活动是一个多次反复迭代的过程。面向对象方法学在概念和表示方法上的一致性,保向对象方法学在概念和表示方法上的一致性,保证了在各项开发活动之间的平滑证了在各项开发活动之间的平滑(无缝无缝)过渡。过渡。面向对象设计可再细

3、分为系统设计和对象设计。面向对象设计可再细分为系统设计和对象设计。系统设计确定实现系统的战略和目的系统的高层系统设计确定实现系统的战略和目的系统的高层构造。对象设计确定解空间中的类、关联、接口构造。对象设计确定解空间中的类、关联、接口方式及实现效力的算法。方式及实现效力的算法。优秀的设计,是权衡了各种要素,从而使得系统在优秀的设计,是权衡了各种要素,从而使得系统在其整个生命周期中的总开销最小的设计。其整个生命周期中的总开销最小的设计。对大多数软件系统而言,对大多数软件系统而言,60%以上的软件费用都用以上的软件费用都用于软件维护,因此,优秀软件设计的一个主要特点于软件维护,因此,优秀软件设计的

4、一个主要特点就是容易维护。就是容易维护。11.1 面向对象设计的准那么面向对象设计的准那么面向对象设计准那么面向对象设计准那么1. 模块化模块化对象是把数据构造和操作这些数据的方法严密地结合在一对象是把数据构造和操作这些数据的方法严密地结合在一同所构成的模块。面向对象软件开发方式支持了把系统分同所构成的模块。面向对象软件开发方式支持了把系统分解成模块的设计原理:解成模块的设计原理:2. 笼统笼统过程笼统过程笼统数据笼统。类实践上是一种笼统数据类型,它对外开放的数据笼统。类实践上是一种笼统数据类型,它对外开放的公共接口构成了类的规格阐明公共接口构成了类的规格阐明(即协议即协议),这种接口规定了,

5、这种接口规定了外界可以运用的合法操作符,利用这些操作符可以对类实外界可以运用的合法操作符,利用这些操作符可以对类实例中包含的数据进展操作。例中包含的数据进展操作。参数化笼统,是指当描画类的规格阐明时并不详细指定所参数化笼统,是指当描画类的规格阐明时并不详细指定所要操作的数据类型,而是把数据类型作为参数。例如,要操作的数据类型,而是把数据类型作为参数。例如,C+言语提供的言语提供的“模板机制就是一种参数化笼统机制。模板机制就是一种参数化笼统机制。3. 信息隐藏信息隐藏在面向对象方法中,信息隐藏经过对象的封装性实现:类在面向对象方法中,信息隐藏经过对象的封装性实现:类构造分别了接口与实现,从而支持

6、了信息隐藏。构造分别了接口与实现,从而支持了信息隐藏。4. 弱耦合弱耦合耦合指一个软件构造内不同模块之间互连的严密程度。在耦合指一个软件构造内不同模块之间互连的严密程度。在面向对象方法中,对象是最根本的模块,因此,耦合主要面向对象方法中,对象是最根本的模块,因此,耦合主要指不同对象之间相互关联的严密程度。指不同对象之间相互关联的严密程度。弱耦合是优秀设计的一个重要规范,由于这有助于使得系弱耦合是优秀设计的一个重要规范,由于这有助于使得系统中某一部分的变化对其他部分的影响降到最低程度。在统中某一部分的变化对其他部分的影响降到最低程度。在理想情况下,对某一部分的了解、测试或修正,无须涉及理想情况下

7、,对某一部分的了解、测试或修正,无须涉及系统的其他部分。系统的其他部分。当然,对象不能够是完全孤立的,当两个对象必需相互联当然,对象不能够是完全孤立的,当两个对象必需相互联络相互依赖时,应该经过类的协议络相互依赖时,应该经过类的协议(即公共接口即公共接口)实现耦合,实现耦合,而不应该依赖于类的详细实现细节。而不应该依赖于类的详细实现细节。普通说来,对象之间的耦合可分为两大类:普通说来,对象之间的耦合可分为两大类:(1) 交互耦合交互耦合 尽能够松散尽能够松散交互耦合交互耦合 对象之间的耦合经过音讯衔接来实现。对象之间的耦合经过音讯衔接来实现。为使交互耦合尽能够松散,应该遵守下述准那么:为使交互

8、耦合尽能够松散,应该遵守下述准那么:a) 尽量降低音讯衔接的复杂程度。应该尽量减少音讯中包尽量降低音讯衔接的复杂程度。应该尽量减少音讯中包含的参数个数,降低参数的复杂程度。含的参数个数,降低参数的复杂程度。b) 减少对象发送减少对象发送(或接纳或接纳)的音讯数。的音讯数。(2) 承继耦合承继耦合 尽能够严密尽能够严密承继是普通化类与特殊类之间耦合的一种方式,应该提高承继是普通化类与特殊类之间耦合的一种方式,应该提高承继耦合程度。从本质上看,经过承继关系结合起来的基承继耦合程度。从本质上看,经过承继关系结合起来的基类和派生类,构成了系统中粒度更大的模块。因此,它们类和派生类,构成了系统中粒度更大

9、的模块。因此,它们彼此之间应该结合得越严密越好。彼此之间应该结合得越严密越好。为获得严密的承继耦合,特殊类应该确实是对它的普通化为获得严密的承继耦合,特殊类应该确实是对它的普通化类的一种详细化。因此,假设一个派生类摒弃了它基类的类的一种详细化。因此,假设一个派生类摒弃了它基类的许多属性,那么它们之间是松耦合的。在设计时应该使特许多属性,那么它们之间是松耦合的。在设计时应该使特殊类尽量多承继并运用其普通化类的属性和效力,从而更殊类尽量多承继并运用其普通化类的属性和效力,从而更严密地耦合到其普通化类。严密地耦合到其普通化类。5. 强内聚强内聚内聚衡量一个模块内各个元素彼此结合的严密程度。也可内聚衡

10、量一个模块内各个元素彼此结合的严密程度。也可以把内聚定义为:设计中运用的一个构件内的各个元素,以把内聚定义为:设计中运用的一个构件内的各个元素,对完成一个定义明确的目的所做出的奉献程度。在设计时对完成一个定义明确的目的所做出的奉献程度。在设计时应该力求做到高内聚。在面向对象设计中存在下述应该力求做到高内聚。在面向对象设计中存在下述3种内聚。种内聚。1 效力内聚。一个效力应该完成一个且仅完成一个功能。效力内聚。一个效力应该完成一个且仅完成一个功能。2 类内聚。设计类的原那么是,一个类应该只需一个用类内聚。设计类的原那么是,一个类应该只需一个用途,它的属性和效力应该是高内聚的。类的属性和效力应途,

11、它的属性和效力应该是高内聚的。类的属性和效力应该全都是完成该类对象的义务所必需的,其中不包含无用该全都是完成该类对象的义务所必需的,其中不包含无用的属性或效力。假设某个类有多个用途,通常应该把它分的属性或效力。假设某个类有多个用途,通常应该把它分解成多个公用的类。解成多个公用的类。3 普通普通-特殊内聚。设计出的普通特殊内聚。设计出的普通-特殊构造,应该符合特殊构造,应该符合多数人的概念,更准确地说,这种构造应该是对相应的领多数人的概念,更准确地说,这种构造应该是对相应的领域知识的正确抽取。域知识的正确抽取。严密的承继耦合与高度的普通严密的承继耦合与高度的普通-特殊内聚是一致的。特殊内聚是一致

12、的。6. 可重用可重用软件重用是提高软件开发消费率和目的系统质量的软件重用是提高软件开发消费率和目的系统质量的重要途径。重用根本上从设计阶段开场。重要途径。重用根本上从设计阶段开场。重用有两方面的含义:重用有两方面的含义: 一是尽量运用已有的类一是尽量运用已有的类(包括开发环境提供的类库,包括开发环境提供的类库,及以往开发类似系统时创建的类及以往开发类似系统时创建的类);二是假设确实需求创建新类,那么在设计这些新类二是假设确实需求创建新类,那么在设计这些新类的协议时,应该思索未来的可反复运用性。的协议时,应该思索未来的可反复运用性。设计结果应该明晰易懂设计结果应该明晰易懂1 用词一致。应该使名

13、字与它所代表的事物一致,用词一致。应该使名字与它所代表的事物一致,而且应该尽量运用人们习惯的名字。不同类中类似效而且应该尽量运用人们习惯的名字。不同类中类似效力的名字应该一样。力的名字应该一样。2 运用已有的协议。假设开发同一软件的其他设计运用已有的协议。假设开发同一软件的其他设计人员曾经建立了类的协议,或者在所运用的类库中已人员曾经建立了类的协议,或者在所运用的类库中已有相应的协议,那么应该运用这些已有的协议。有相应的协议,那么应该运用这些已有的协议。3 减少音讯方式的数目。假设已有规范的音讯协议,减少音讯方式的数目。假设已有规范的音讯协议,设计人员应该遵守这些协议。假设确需本人建立音讯设计

14、人员应该遵守这些协议。假设确需本人建立音讯协议,那么应该尽量减少音讯方式的数目,只需能够,协议,那么应该尽量减少音讯方式的数目,只需能够,就使音讯具有一致的方式,以利于读者了解。就使音讯具有一致的方式,以利于读者了解。4 防止模糊的定义。一个类的用途应该是有限的,防止模糊的定义。一个类的用途应该是有限的,而且应该从类名可以较容易地推想出它的用途。而且应该从类名可以较容易地推想出它的用途。11.2 启发规那么启发规那么2. 普通普通-特殊构造的深度应适当特殊构造的深度应适当普通说来,在一个中等规模普通说来,在一个中等规模(大约包含大约包含100个类个类)的系的系统中,类等级层次数应坚持为统中,类

15、等级层次数应坚持为72。不应该仅仅从方。不应该仅仅从方便编码的角度出发随意创建派生类,应该使普通便编码的角度出发随意创建派生类,应该使普通-特特殊构造与领域知识或常识坚持一致。殊构造与领域知识或常识坚持一致。3. 设计简单的类设计简单的类应该尽量设计小而简单的类,以便于开发和管理。为应该尽量设计小而简单的类,以便于开发和管理。为使类坚持简单,应该留意以下几点。使类坚持简单,应该留意以下几点。(1) 防止包含过多的属性。防止包含过多的属性。 (2) 有明确的定义。分配给每个类的义务应该简单。有明确的定义。分配给每个类的义务应该简单。(3) 尽量简化对象之间的协作关系。尽量简化对象之间的协作关系。

16、 (4) 不要提供太多效力。不要提供太多效力。4. 运用简单的协议运用简单的协议阅历阐明,经过复杂音讯相互关联的对象是紧耦合的,阅历阐明,经过复杂音讯相互关联的对象是紧耦合的,对一个对象的修正往往导致其他对象的修正。对一个对象的修正往往导致其他对象的修正。5. 运用简单的效力运用简单的效力面向对象设计出来的类中的效力通常都很小,可以用面向对象设计出来的类中的效力通常都很小,可以用仅含一个动词和一个宾语的简单句子描画它的功能。仅含一个动词和一个宾语的简单句子描画它的功能。设法分解或简化复杂的效力。设法分解或简化复杂的效力。6. 把设计变动减至最小把设计变动减至最小通常,设计的质量越高,设计结果坚

17、持不变的时间也通常,设计的质量越高,设计结果坚持不变的时间也越长。即使出现必需修正设计的情况,也应该使修正越长。即使出现必需修正设计的情况,也应该使修正的范围尽能够小。理想的设计变动曲线如图的范围尽能够小。理想的设计变动曲线如图11.1所示。所示。在设计的早期阶段,变动较大,随着时间推移,设在设计的早期阶段,变动较大,随着时间推移,设计方案日趋成熟,改动也越来越小了。图计方案日趋成熟,改动也越来越小了。图11.1中的峰中的峰值与出现设计错误或发生非预期变动的情况相对应。值与出现设计错误或发生非预期变动的情况相对应。峰值越高,阐明设计质量越差,可重用性也越差。峰值越高,阐明设计质量越差,可重用性

18、也越差。图图11.1 理想的设计变动情况理想的设计变动情况1. 重用重用重用也叫再用或复用,是指同一事物不作修正或稍加重用也叫再用或复用,是指同一事物不作修正或稍加改动就多次反复运用。改动就多次反复运用。软件重用可分为以下软件重用可分为以下3个层次:个层次:(1) 知识重用知识重用(例如,软件工程知识的重用例如,软件工程知识的重用)。(2) 方法和规范的重用方法和规范的重用(例如,面向对象方法或国家制例如,面向对象方法或国家制定的软件开发规范的重用定的软件开发规范的重用)。(3) 软件成分的重用。软件成分的重用。前两个重用层次属于知识工程研讨的范畴,本节仅讨前两个重用层次属于知识工程研讨的范畴

19、,本节仅讨论软件成分重用问题。论软件成分重用问题。11.3 软件重用软件重用 11.3.1 概述概述2. 软件成分的重用级别软件成分的重用级别软件成分的重用可以进一步划分成以下软件成分的重用可以进一步划分成以下3个级别:个级别:(1) 代码重用代码重用 采用以下几种方式中的任何一种:采用以下几种方式中的任何一种: 源代码剪贴源代码剪贴 源代码包含源代码包含 承继承继(2) 设计结果重用设计结果重用重用某个软件系统的设计模型重用某个软件系统的设计模型(即求解域模型即求解域模型)。(3) 分析结果重用分析结果重用重用某个系统的分析模型。重用某个系统的分析模型。3. 典型的可重用软件成分典型的可重用

20、软件成分更详细地说,能够被重用的软件成分主要有以下更详细地说,能够被重用的软件成分主要有以下10种:种:1 工程方案。软件工程方案的根本构造和许多内容工程方案。软件工程方案的根本构造和许多内容例如,软件质量保证方案都是可以跨工程重用的。例如,软件质量保证方案都是可以跨工程重用的。2 本钱估计。由于在不同工程中经常含有类似的功本钱估计。由于在不同工程中经常含有类似的功能,所以有能够在只做极少修正或根本不做修正的情能,所以有能够在只做极少修正或根本不做修正的情况下,重用对该功能的本钱估计结果。况下,重用对该功能的本钱估计结果。3 体系构造。即使在思索不同的运用领域时,也很体系构造。即使在思索不同的

21、运用领域时,也很少有截然不同的程序和数据体系构造。因此,有能够少有截然不同的程序和数据体系构造。因此,有能够创建一组类属的体系构造模板例如,事务处置体系创建一组类属的体系构造模板例如,事务处置体系构造,并把那些模板作为可重用的设计框架。通常构造,并把那些模板作为可重用的设计框架。通常把类属的体系构造模板称为领域体系构造。把类属的体系构造模板称为领域体系构造。4 需求模型和规格阐明。类和对象的模型及规格阐需求模型和规格阐明。类和对象的模型及规格阐明是明显的重用的候选者;用传统软件工程方法开发明是明显的重用的候选者;用传统软件工程方法开发的分析模型例如,数据流图,也是可重用的。的分析模型例如,数据

22、流图,也是可重用的。5 设计。用传统方法开发的体系构造、数据、接口和过设计。用传统方法开发的体系构造、数据、接口和过程设计结果,是重用的候选者,更常见的是,系统和对象程设计结果,是重用的候选者,更常见的是,系统和对象设计是可重用的。设计是可重用的。6 源代码。用兼容的程序设计言语书写的、经过验证的源代码。用兼容的程序设计言语书写的、经过验证的程序构件,是重用的候选者。程序构件,是重用的候选者。7 用户文档和技术文档。即使针对的运用是不同的,也用户文档和技术文档。即使针对的运用是不同的,也经常有能够重用用户文档和技术文档的大部分。经常有能够重用用户文档和技术文档的大部分。8 用户界面。这能够是最

23、广泛被重用的软件成分,用户界面。这能够是最广泛被重用的软件成分,GUI图形用户界面软件经常被重用。由于它可占到一个运图形用户界面软件经常被重用。由于它可占到一个运用程序的用程序的60%代码量,因此,重用的效果非常显著。代码量,因此,重用的效果非常显著。9 数据。在大多数经常被重用的软件成分中,被重用的数据。在大多数经常被重用的软件成分中,被重用的数据包括:数据包括: 内部表、列表和记录构造,以及文件和完好的内部表、列表和记录构造,以及文件和完好的数据库。数据库。10 测试用例。一旦设计或代码构件将被重用,相关的测试用例。一旦设计或代码构件将被重用,相关的测试用例应该测试用例应该“附属于它们也被

24、重用。附属于它们也被重用。面向对象技术中的面向对象技术中的“类,是比较理想的可重用软构类,是比较理想的可重用软构件,无妨称之为类构件。类构件有件,无妨称之为类构件。类构件有3种重用方式,种重用方式,分别是实例重用、承继重用和多态重用。下面进分别是实例重用、承继重用和多态重用。下面进一步讲述与类构件有关的内容。一步讲述与类构件有关的内容。11.3.2 类构件类构件1. 可重用软构件应具备的特点可重用软构件应具备的特点模块独立性强。具有单一、完好的功能,且经过反模块独立性强。具有单一、完好的功能,且经过反复测试被确认是正确的。它应该是一个不受或复测试被确认是正确的。它应该是一个不受或很少受外界干扰

25、的封装体,其内部实如今外面很少受外界干扰的封装体,其内部实如今外面是不可见的。是不可见的。(2) 具有高度可塑性。可重用的软构件必需具有高度具有高度可塑性。可重用的软构件必需具有高度可裁剪性,也就是说,必需提供为顺应特定需可裁剪性,也就是说,必需提供为顺应特定需求而扩展或修正已有构件的机制,而且运用非求而扩展或修正已有构件的机制,而且运用非常简一方便。常简一方便。(3) 接口明晰、简明、可靠。软构件应该提供明晰、接口明晰、简明、可靠。软构件应该提供明晰、简明、可靠的对外接口,而且还应该有详尽的简明、可靠的对外接口,而且还应该有详尽的文档阐明,以方便用户运用。文档阐明,以方便用户运用。精心设计的

26、精心设计的“类根本上能满足上述要求,可以以为类根本上能满足上述要求,可以以为它是可重用软构件的雏形。它是可重用软构件的雏形。2. 类构件的重用方式类构件的重用方式(1) 实例重用实例重用由于类的封装性,运用者无须了解实现细节就可以由于类的封装性,运用者无须了解实现细节就可以运用适当的构造函数,按照需求创建类的实例。然运用适当的构造函数,按照需求创建类的实例。然后向所创建的实例发送适当的音讯,启动相应的效后向所创建的实例发送适当的音讯,启动相应的效力,完成需求完成的任务。这是最根本的重用方式。力,完成需求完成的任务。这是最根本的重用方式。此外,还可以用几个简单的对象作为类的成员创建此外,还可以用

27、几个简单的对象作为类的成员创建出一个更复杂的类,这是实例重用的另一种方式。出一个更复杂的类,这是实例重用的另一种方式。(2) 承继重用承继重用面向对象方法特有的承继性提供了一种对已有的类构面向对象方法特有的承继性提供了一种对已有的类构件进展裁剪的机制。当已有的类构件不能经过实例重件进展裁剪的机制。当已有的类构件不能经过实例重用完全满足当前系统需求时,承继重用提供了一种平用完全满足当前系统需求时,承继重用提供了一种平安地修正已有类构件,以便在当前系统中重用的手段。安地修正已有类构件,以便在当前系统中重用的手段。为提高承继重用的效果,关键是设计一个合理的、具为提高承继重用的效果,关键是设计一个合理

28、的、具有一定深度的类构件承继层次构造。有一定深度的类构件承继层次构造。. 每个子类在承继父类的属性和效力的根底上,只参每个子类在承继父类的属性和效力的根底上,只参与少量新属性和新效力,这就不仅降低了每个类构件与少量新属性和新效力,这就不仅降低了每个类构件的接口复杂度,表现出一个明晰的进化过程,提高了的接口复杂度,表现出一个明晰的进化过程,提高了每个子类的可了解性,而且为软件开发人员提供了更每个子类的可了解性,而且为软件开发人员提供了更多可重用的类构件。必要时应在领域专家协助下,建多可重用的类构件。必要时应在领域专家协助下,建立符合领域知识的承继层次。立符合领域知识的承继层次。. 为多态重用奠定

29、了良好根底。为多态重用奠定了良好根底。(3) 多态重用多态重用利用多态性不仅可以使对象的对外接口更加普通化利用多态性不仅可以使对象的对外接口更加普通化(基基类与派生类的许多对外接口是一样的类与派生类的许多对外接口是一样的),从而降低了音,从而降低了音讯衔接的复杂程度,而且还提供了一种简便可靠的软讯衔接的复杂程度,而且还提供了一种简便可靠的软构件组合机制。系统运转时,根据接纳音讯的对象类构件组合机制。系统运转时,根据接纳音讯的对象类型,由多态性机制启动正确的方法,去呼应一个普通型,由多态性机制启动正确的方法,去呼应一个普通化的音讯,从而简化了音讯界面和软构件衔接过程。化的音讯,从而简化了音讯界面

30、和软构件衔接过程。为充分实现多态重用,在设计类构件时,应该把留意为充分实现多态重用,在设计类构件时,应该把留意力集中在以下一些能够影响重用性的操作上:力集中在以下一些能够影响重用性的操作上: 与表示方法有关的操作。与表示方法有关的操作。 与数据构造、数据大小等有关的操作。与数据构造、数据大小等有关的操作。 与外部设备有关的操作。例如,设备控制。与外部设备有关的操作。例如,设备控制。 实现算法在未来能够会改良实现算法在未来能够会改良(或改动或改动)的中心操作。的中心操作。1. 质量质量随着每一次构件的重用,都会有一些错误被发现随着每一次构件的重用,都会有一些错误被发现并被去除,构件的质量也会随之

31、改善。随着时间并被去除,构件的质量也会随之改善。随着时间的推移,构件将变本钱质上无错误的。的推移,构件将变本钱质上无错误的。2. 消费率消费率当把可重用的软件成分运用于软件开发的全过程当把可重用的软件成分运用于软件开发的全过程时,创建方案、模型、文档、代码和数据所需破时,创建方案、模型、文档、代码和数据所需破费的时间将减少,从而将用较少的投入给客户提费的时间将减少,从而将用较少的投入给客户提供一样级别的产品,因此,消费率得到了提高。供一样级别的产品,因此,消费率得到了提高。11.3.3 软件重用的效益软件重用的效益3. 本钱本钱软件重用能节省的净本钱软件重用能节省的净本钱C为:为: C=Cs-

32、Cr-CdCs是工程从头开发没有重用时所需求的本钱;是工程从头开发没有重用时所需求的本钱; Cd是交付给客户的软件的实践本钱;是交付给客户的软件的实践本钱;Cr是与重用相关联的本钱,主要包括下述本钱:是与重用相关联的本钱,主要包括下述本钱: 领域分析与建模的本钱;领域分析与建模的本钱; 设计领域体系构造的本钱;设计领域体系构造的本钱; 为便于重用而添加的文档的本钱;为便于重用而添加的文档的本钱; 维护和完善可重用的软件成分的本钱;维护和完善可重用的软件成分的本钱; 为从外部获取构件所付出的版税和答应证为从外部获取构件所付出的版税和答应证费;费; 创建或购买及运转重用库的费用;创建或购买及运转重

33、用库的费用; 对设计和实现可重用构件的人员的培训费对设计和实现可重用构件的人员的培训费用。用。在设计比较复杂的运用系统时普遍采用的战略,是在设计比较复杂的运用系统时普遍采用的战略,是首先把系统分解成假设干个比较小的部分,然后再首先把系统分解成假设干个比较小的部分,然后再分别设计每个部分。分别设计每个部分。系统的主要组成部分称为子系统。通常根据所提供系统的主要组成部分称为子系统。通常根据所提供的功能来划分子系统。普通说来,子系统的数目应的功能来划分子系统。普通说来,子系统的数目应该与系统规模根本匹配。该与系统规模根本匹配。各个子系统之间应该具有尽能够简单、明确的接口。各个子系统之间应该具有尽能够

34、简单、明确的接口。接口确定了交互方式和经过子系统边境的信息流,接口确定了交互方式和经过子系统边境的信息流,但是无须规定子系统内部的实现算法。因此,可以但是无须规定子系统内部的实现算法。因此,可以相对独立地设计各个子系统。相对独立地设计各个子系统。在划分和设计子系统时,应该尽量减少子系统彼此在划分和设计子系统时,应该尽量减少子系统彼此间的依赖性。间的依赖性。11.4 系统分解系统分解 面向对象设计模型面向对象设计模型(即求解域的对象模型即求解域的对象模型),由下面,由下面5个层次组成:个层次组成: 主题主题 类与对象类与对象 构造构造 属性属性 效力效力这这5个层次一层比一层表示的细节更多,可以

35、把这个层次一层比一层表示的细节更多,可以把这5个层次想象为整个模型的程度切片。个层次想象为整个模型的程度切片。面向对象设计模型面向对象设计模型面向对象分析模型面向对象分析模型(即问题域的对象模型即问题域的对象模型)面向对象设计模型面向对象设计模型面向对象设计模型,在逻辑上都由面向对象设计模型,在逻辑上都由4大部分组成:大部分组成:人机交互部分人机交互部分问题域部分问题域部分义务管理部分义务管理部分数据管理部分数据管理部分这这4大部分对应于组成目的系统的大部分对应于组成目的系统的4个子系统:个子系统:问题域子系统问题域子系统人机交互子系统人机交互子系统义务管理子系统义务管理子系统数据管理子系统数

36、据管理子系统可以把面向对象设计模型的可以把面向对象设计模型的4大组成部分想象大组成部分想象成整个模型的成整个模型的4个垂直切片。个垂直切片。典型的面向对象设计模型可以用图典型的面向对象设计模型可以用图11.2表示。表示。图图11.2 典型的面向对象设计模型典型的面向对象设计模型1. 子系统之间的两种交互方式子系统之间的两种交互方式(1) 客户客户-供应商供应商(Client-supplier)关系关系在这种关系中,作为在这种关系中,作为“客户的子系统调用作为客户的子系统调用作为“供应商的子系统,后者完成某些效力任务并供应商的子系统,后者完成某些效力任务并前往结果。前往结果。 (2) 平等同伴平

37、等同伴(peer-to-peer)关系关系在这种关系中,每个子系统都能够调用其他子系在这种关系中,每个子系统都能够调用其他子系统,因此,每个子系统都必需了解其他子系统的统,因此,每个子系统都必需了解其他子系统的接口。接口。总的说来,单向交互比双向交互更容易了解,也总的说来,单向交互比双向交互更容易了解,也更容易设计和修正,因此应该尽量运用客户更容易设计和修正,因此应该尽量运用客户-供应供应商关系。商关系。2. 组织系统的两种方案组织系统的两种方案(1)程度层次组织程度层次组织 把软件系统组织成一个层次系统,每层是一个子系把软件系统组织成一个层次系统,每层是一个子系统。上层在下层的根底上建立,下

38、层为实现上层功能而统。上层在下层的根底上建立,下层为实现上层功能而提供必要的效力。每一层内所包含的对象,彼此间相互提供必要的效力。每一层内所包含的对象,彼此间相互独立,而处于不同层次上的对象,彼此间往往有关联。独立,而处于不同层次上的对象,彼此间往往有关联。实践上,在上、下层之间存在客户实践上,在上、下层之间存在客户-供应商关系。供应商关系。 层次构造又可进一步划分成两种方式:封锁式和开层次构造又可进一步划分成两种方式:封锁式和开放式。所谓封锁式,就是每层子系统仅仅运用其直接下放式。所谓封锁式,就是每层子系统仅仅运用其直接下层提供的效力。在开放方式中,某层子系统可以运用途层提供的效力。在开放方

39、式中,某层子系统可以运用途于其下面的任何一层子系统所提供的效力。于其下面的任何一层子系统所提供的效力。(2)垂直块状组织垂直块状组织这种组织方案把软件系统垂直地分解成假设干个相对独这种组织方案把软件系统垂直地分解成假设干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的效力。提供一种类型的效力。利用层次和块的各种能够的组合,可以胜利地由多利用层次和块的各种能够的组合,可以胜利地由多个子系统组成一个完好的软件系统。当混合运用层个子系统组成一个完好的软件系统。当混合运用层次构造和块状构造时,同一层次可以由假设干块组次构造和块状构造

40、时,同一层次可以由假设干块组成,而同一块也可以分为假设干层。成,而同一块也可以分为假设干层。例如,图例如,图11.3表示一个运用系统的组织构造,这个表示一个运用系统的组织构造,这个运用系统采用了层次与块状的混合构造。运用系统采用了层次与块状的混合构造。图图11.3 典型运用系统的组织构造典型运用系统的组织构造3. 设计系统的拓扑构造设计系统的拓扑构造由子系统组成完好的系统时,典型的拓扑构造有:由子系统组成完好的系统时,典型的拓扑构造有: 管道形管道形 树形树形 星形星形设计者应该采用与问题构造相顺应的、尽能够简单设计者应该采用与问题构造相顺应的、尽能够简单的拓扑构造,以减少子系统之间的交互数量

41、。的拓扑构造,以减少子系统之间的交互数量。经过面向对象分析所得出的问题域准确模型,为设计问题经过面向对象分析所得出的问题域准确模型,为设计问题域子系统奠定了良好的根底,建立了完好的框架。只需能域子系统奠定了良好的根底,建立了完好的框架。只需能够,就应该坚持面向对象分析所建立的问题域构造。通常,够,就应该坚持面向对象分析所建立的问题域构造。通常,面向对象设计仅需从实现角度对问题域模型做一些补充或面向对象设计仅需从实现角度对问题域模型做一些补充或修正,主要是增添、合并或分解类与对象、属性及效力,修正,主要是增添、合并或分解类与对象、属性及效力,调整承继关系等等。当问题域子系统过分复杂庞大时,应调整

42、承继关系等等。当问题域子系统过分复杂庞大时,应该把它进一步分解成假设干个更小的子系统。该把它进一步分解成假设干个更小的子系统。运用面向对象方法学开发软件,可以坚持问题域组织框架运用面向对象方法学开发软件,可以坚持问题域组织框架的稳定性,从而便于追踪分析、设计和编程的结果。在设的稳定性,从而便于追踪分析、设计和编程的结果。在设计与实现过程中所做的细节修正计与实现过程中所做的细节修正(例如,添加详细类,添加例如,添加详细类,添加属性或效力属性或效力),并不影响开发结果的稳定性,由于系统的总,并不影响开发结果的稳定性,由于系统的总体框架是基于问题域的。体框架是基于问题域的。11.5 设计问题域子系统

43、设计问题域子系统1. 调整需求调整需求有两种情况:有两种情况: 用户需求或外部环境发生了变化;用户需求或外部环境发生了变化; 面向对象分析模型不能完好、准确地反映用户的真面向对象分析模型不能完好、准确地反映用户的真实需求。实需求。方法是:简单地修正面向对象分析结果,然后再把这方法是:简单地修正面向对象分析结果,然后再把这些修正反映到问题域子系统中。些修正反映到问题域子系统中。2. 重用已有的类重用已有的类3. 把问题域类组合在一同把问题域类组合在一同在面向对象设计过程中,设计者往往经过引入一个根在面向对象设计过程中,设计者往往经过引入一个根类而把问题域类组合在一同。类而把问题域类组合在一同。在

44、面向对象设计过程中,能够对面向对象分析所得在面向对象设计过程中,能够对面向对象分析所得出的问题域模型做的补充或修正如下:出的问题域模型做的补充或修正如下:4. 增添普通化类以建立协议增添普通化类以建立协议在设计过程中,常有一些详细类需求一个公共的协议,在设计过程中,常有一些详细类需求一个公共的协议,即需求定义一组类似的效力。在这种情况下可以引入即需求定义一组类似的效力。在这种情况下可以引入一个附加类一个附加类(例如,根类例如,根类),以便建立这个协议,以便建立这个协议(即命名即命名公共效力集合,这些效力在详细类中仔细定义公共效力集合,这些效力在详细类中仔细定义)。5. 调整承继层次调整承继层次

45、(1) 运用多重承继机制运用多重承继机制运用多重承继机制时,应该防止出现属性及效力的命运用多重承继机制时,应该防止出现属性及效力的命名冲突。下面经过例子阐明防止命名冲突的方法。名冲突。下面经过例子阐明防止命名冲突的方法。图图11.4 窄菱形方式窄菱形方式图图11.4是一种多重承继方是一种多重承继方式的例子,这种方式可以式的例子,这种方式可以称为窄菱形方式。运用这称为窄菱形方式。运用这种方式时出现属性及效力种方式时出现属性及效力命名冲突的能够性比较大。命名冲突的能够性比较大。图图11.5见书见书262页是另页是另一种多重承继方式,称为一种多重承继方式,称为阔菱形方式。运用这种方阔菱形方式。运用这

46、种方式时,属性及效力的名字式时,属性及效力的名字发生冲突的能够性比较小,发生冲突的能够性比较小,但是,它需求用更多的类但是,它需求用更多的类才干表示同一个设计。才干表示同一个设计。图图11.6 把多重承继简化为单一层次的单承继把多重承继简化为单一层次的单承继常见的做法是,把多常见的做法是,把多重承继构造简化成单重承继构造简化成单一的单承继层次构造,一的单承继层次构造,如图如图11.6所示。显然,所示。显然,在多重承继构造中的在多重承继构造中的某些承继关系,经简某些承继关系,经简化后将不再存在,这化后将不再存在,这阐明需求在各个详细阐明需求在各个详细类中反复定义某些属类中反复定义某些属性和效力。

47、性和效力。(2) 运用单承继机制运用单承继机制假设计划运用仅提供单承继机制的言语实现系统,假设计划运用仅提供单承继机制的言语实现系统,那么必需把面向对象分析模型中的多重承继构造转那么必需把面向对象分析模型中的多重承继构造转换成单承继构造。换成单承继构造。6. ATM系统实例系统实例图图11.7描画了上章给出的描画了上章给出的ATM系统的问题域子系统的构造。系统的问题域子系统的构造。在面向对象设计阶段无须对已有的问题域模型作本质性的在面向对象设计阶段无须对已有的问题域模型作本质性的修正或扩展。修正或扩展。图图11.7 ATM系统问题域子系统的构造系统问题域子系统的构造设计人机交互子系统的战略:设

48、计人机交互子系统的战略:1. 分类用户分类用户通常从以下几个不同角度进展分类:通常从以下几个不同角度进展分类:按技艺程度分类按技艺程度分类(新手、初级、中级、高级新手、初级、中级、高级)。按职务分类按职务分类(总经理、经理、职员总经理、经理、职员)。按所属集团分类按所属集团分类(职员、顾客职员、顾客)。11.6 设计人机交互子系统设计人机交互子系统2. 描画用户描画用户描画用户信息有:描画用户信息有:用户类型。用户类型。运用系统欲到达的目的。运用系统欲到达的目的。特征特征(年龄、性别、受教育程度、限制要素等年龄、性别、受教育程度、限制要素等)。关键的胜利要素关键的胜利要素(需求、喜好、习惯等需

49、求、喜好、习惯等)。技艺程度。技艺程度。完本钱职任务的脚本。完本钱职任务的脚本。3. 设计命令层次设计命令层次(1) 研讨现有的人机交互含义和准那么研讨现有的人机交互含义和准那么(2) 确定初始的命令层次确定初始的命令层次所谓命令层次,本质上是用过程笼统机制组织起来的、所谓命令层次,本质上是用过程笼统机制组织起来的、可供选用的效力的表示方式。可供选用的效力的表示方式。设计命令层次时,通常先从对效力的过程笼统着手,设计命令层次时,通常先从对效力的过程笼统着手,然后再进一步修正它们,以适宜详细运用环境的需求。然后再进一步修正它们,以适宜详细运用环境的需求。(3) 精化命令层次精化命令层次应该思索以

50、下一些要素:应该思索以下一些要素:次序:仔细选择每个效力的名字,并在命令层的每一次序:仔细选择每个效力的名字,并在命令层的每一部分内把效力排好次序。部分内把效力排好次序。整体整体-部分关系:寻觅在这些效力中存在的整体部分关系:寻觅在这些效力中存在的整体-部分方部分方式,这样做有助于在命令层中分组组织效力。式,这样做有助于在命令层中分组组织效力。宽度和深度:命令层次的宽度和深度都不应该过大。宽度和深度:命令层次的宽度和深度都不应该过大。操作步骤:应该用尽量少的单击、拖动和击键组合来操作步骤:应该用尽量少的单击、拖动和击键组合来表达命令,而且应该为高级用户提供简捷的操作方法。表达命令,而且应该为高

51、级用户提供简捷的操作方法。4. 设计人机交互类设计人机交互类人机交互类与所运用的操作系统及编程言语亲密相关。人机交互类与所运用的操作系统及编程言语亲密相关。例如,在例如,在Windows环境下运转的环境下运转的Visual C+言语提供言语提供了了MFC类库,设计人机交互类时,往往仅需从类库,设计人机交互类时,往往仅需从MFC类库中选出一些适用的类,然后从这些类派生出符合类库中选出一些适用的类,然后从这些类派生出符合本人需求的类就可以了。本人需求的类就可以了。设计任务的一项重要内容就是,确定哪些是必需同时动作设计任务的一项重要内容就是,确定哪些是必需同时动作的对象,哪些是相互排斥的对象。然后进

52、一步设计义务管的对象,哪些是相互排斥的对象。然后进一步设计义务管理子系统。理子系统。11.7 设计义务管理子系统设计义务管理子系统1. 分析并发性分析并发性经过面向对象分析建立起来的动态模型,是分析并发性的经过面向对象分析建立起来的动态模型,是分析并发性的主要根据。假设两个对象彼此间不存在交互,或者它们同主要根据。假设两个对象彼此间不存在交互,或者它们同时接受事件,那么这两个对象在本质上是并发的。时接受事件,那么这两个对象在本质上是并发的。经过检查各个对象的形状图及它们之间交换的事件,可以经过检查各个对象的形状图及它们之间交换的事件,可以把假设干个非并发的对象归并到一条控制线中。所谓控制把假设

53、干个非并发的对象归并到一条控制线中。所谓控制线,是一条普及形状图集合的途径,在这条途径上每次只线,是一条普及形状图集合的途径,在这条途径上每次只需一个对象是活动的。在计算机系统中用义务需一个对象是活动的。在计算机系统中用义务(task)实现控实现控制线,普通以为义务是进程制线,普通以为义务是进程(process)的别名。通常把多个义的别名。通常把多个义务的并发执行称为多义务。务的并发执行称为多义务。对于某些运用系统来说,经过划分义务,可以简化系统的对于某些运用系统来说,经过划分义务,可以简化系统的设计及编码任务。不同的义务标识了必需同时发生的不同设计及编码任务。不同的义务标识了必需同时发生的不

54、同行为。这种并发行为既可以在不同的处置器上实现,也可行为。这种并发行为既可以在不同的处置器上实现,也可以在单个处置器上利用多义务操作系统仿真实现以在单个处置器上利用多义务操作系统仿真实现(通常采用通常采用时间分片战略仿真多处置器环境时间分片战略仿真多处置器环境)。2. 设计义务管理子系统设计义务管理子系统常见的义务有事件驱动型义务、时钟驱动型义务、优先义常见的义务有事件驱动型义务、时钟驱动型义务、优先义务、关键义务和协调义务等。设计义务管理子系统,包括务、关键义务和协调义务等。设计义务管理子系统,包括确定各类义务并把义务分配给适当的硬件或软件去执行。确定各类义务并把义务分配给适当的硬件或软件去

55、执行。1 确定事件驱动型义务确定事件驱动型义务某些义务是由事件驱动的,这类义务能够主要完成通讯任某些义务是由事件驱动的,这类义务能够主要完成通讯任务。例如,与设备、屏幕窗口、其他义务、子系统、另一务。例如,与设备、屏幕窗口、其他义务、子系统、另一个处置器或其他系统通讯。事件通常是阐明某些数据到达个处置器或其他系统通讯。事件通常是阐明某些数据到达的信号。的信号。在系统运转时,这类义务的任务过程如下:义务处于睡眠在系统运转时,这类义务的任务过程如下:义务处于睡眠形状形状(不耗费处置器时间不耗费处置器时间),等待来自数据线或其他数据源的,等待来自数据线或其他数据源的中断;一旦接纳到中断就唤醒了该义务

56、,接纳数据并把数中断;一旦接纳到中断就唤醒了该义务,接纳数据并把数据放入内存缓冲区或其他目的地,通知需求知道这件事的据放入内存缓冲区或其他目的地,通知需求知道这件事的对象,然后该义务又回到睡眠形状。对象,然后该义务又回到睡眠形状。2 确定时钟驱动型义务确定时钟驱动型义务某些义务每隔一定时间间隔就被触发以执行某些处置。在某些义务每隔一定时间间隔就被触发以执行某些处置。在这些场所往往需求运用时钟驱动型义务。这些场所往往需求运用时钟驱动型义务。时钟驱动型义务的任务过程如下:义务设置了唤醒时间后时钟驱动型义务的任务过程如下:义务设置了唤醒时间后进入睡眠形状;义务睡眠进入睡眠形状;义务睡眠(不耗费处置器

57、时间不耗费处置器时间),等待来自,等待来自系统的中断;一旦接纳到这种中断,义务就被唤醒并做它系统的中断;一旦接纳到这种中断,义务就被唤醒并做它的任务,通知有关的对象,然后该义务又回到睡眠形状。的任务,通知有关的对象,然后该义务又回到睡眠形状。3 确定优先义务确定优先义务优先义务可以满足高优先级或低优先级的处置需求:优先义务可以满足高优先级或低优先级的处置需求:高优先级:某些效力具有很高的优先级,为了在严厉限定高优先级:某些效力具有很高的优先级,为了在严厉限定的时间内完成这种效力,能够需求把这类效力分别成独立的时间内完成这种效力,能够需求把这类效力分别成独立的义务。的义务。低优先级:与高优先级相

58、反,有些效力是低优先级的,属低优先级:与高优先级相反,有些效力是低优先级的,属于低优先级处置于低优先级处置(通常指那些背景处置通常指那些背景处置)。设计时能够用额。设计时能够用额外的义务把这样的处置分别出来。外的义务把这样的处置分别出来。4 确定关键义务确定关键义务关键义务是有关系统胜利或失败的关键处置,这类处关键义务是有关系统胜利或失败的关键处置,这类处置通常都有严厉的可靠性要求。置通常都有严厉的可靠性要求。在设计过程中能够用额外的义务把这样的关键处置分在设计过程中能够用额外的义务把这样的关键处置分别出来,以满足高可靠性处置的要求。对高可靠性处别出来,以满足高可靠性处置的要求。对高可靠性处置

59、应该精心设计和编码,并且应该严厉测试。置应该精心设计和编码,并且应该严厉测试。5 确定协调义务确定协调义务当系统中存在当系统中存在3个以上义务时,就应该添加一个义务,个以上义务时,就应该添加一个义务,用它作为协调义务。用它作为协调义务。引入协调义务会添加系统的总开销引入协调义务会添加系统的总开销(添加从一个义务到添加从一个义务到另一个义务的转换时间另一个义务的转换时间),但是引入协调义务有助于把,但是引入协调义务有助于把不同义务之间的协调控制封装起来。运用形状转换矩不同义务之间的协调控制封装起来。运用形状转换矩阵可以比较方便地描画该义务的行为。这类义务应该阵可以比较方便地描画该义务的行为。这类

60、义务应该仅做协调任务,不要让它再承当其他效力任务。仅做协调任务,不要让它再承当其他效力任务。6 尽量减少义务数尽量减少义务数必需仔细分析和选择每个确实需求的义务。应该使系必需仔细分析和选择每个确实需求的义务。应该使系统中包含的义务数尽量少。统中包含的义务数尽量少。7 确定资源需求确定资源需求设计者在决议究竟采用软件还是硬件的时候,必需综设计者在决议究竟采用软件还是硬件的时候,必需综合权衡一致性、本钱、性能等多种要素,还要思索未合权衡一致性、本钱、性能等多种要素,还要思索未来的可扩展性和可修正性。来的可扩展性和可修正性。运用多处置器或固件,主要是为了满足高性能的需求。运用多处置器或固件,主要是为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论