软件工程电子课件第9章-面向对象设计.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《软件工程电子课件第9章-面向对象设计.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 电子 课件 面向 对象 设计
- 资源描述:
-
1、2022-5-241第第9 9章章 面向对象设计面向对象设计面向对象的准则和启发规则面向对象的准则和启发规则软件重用的基本概念软件重用的基本概念系统的分解及各个子系统的设计系统的分解及各个子系统的设计设计关联设计关联设计优化设计优化2022-5-2429.1 9.1 面向对象设计的准则面向对象设计的准则n 1 1模块化模块化 面向对象软件开发模式,很自然地支持了把系统分解成模块的设计面向对象软件开发模式,很自然地支持了把系统分解成模块的设计原理:对象就是模块。它是把数据结构和操作这些数据的方法紧密地原理:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。结合在一起所
2、构成的模块。n 2 2抽象抽象化化 面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种抽象数据类型,它对外开放的公共接口构成了类的规格说明(即一种抽象数据类型,它对外开放的公共接口构成了类的规格说明(即协议),这种接口规定了外界可以使用的合法操作符,利用这些操作协议),这种接口规定了外界可以使用的合法操作符,利用这些操作符可以对类实例中包含的数据进行操作。符可以对类实例中包含的数据进行操作。2022-5-243n 3 3信息隐藏信息隐藏和封装和封装 在面向对象方法中,信息隐藏通过对象的封装性实现:类结在面向对象方法中,信息隐
3、藏通过对象的封装性实现:类结构分离了接口与实现,从而支持了信息隐藏。对于类的用户构分离了接口与实现,从而支持了信息隐藏。对于类的用户来说,属性的表示方法和操作的实现算法都应该是隐藏的。来说,属性的表示方法和操作的实现算法都应该是隐藏的。9.1 9.1 面向对象设计的准则面向对象设计的准则2022-5-2442022-5-2452022-5-246耦合指一个软件结构内不同模块之间互连的紧密程度。在面向对象方法中,耦合指一个软件结构内不同模块之间互连的紧密程度。在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。弱对象是最基本的模块,因此,耦合主要指不同对象之间相
4、互关联的紧密程度。弱耦合是优秀设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其耦合是优秀设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其他部分的影响降到最低程度。他部分的影响降到最低程度。n 一般来说,对象之间的耦合可分为两大类一般来说,对象之间的耦合可分为两大类: (1 1)交互耦合)交互耦合 如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。为使交互耦合尽可能松散,应该遵守下述准则。为使交互耦合尽可能松散,应该遵守下述准则。 尽量降低消息连接的复杂程度。应该尽量减少消息中包含的参数个数,降低参
5、数的尽量降低消息连接的复杂程度。应该尽量减少消息中包含的参数个数,降低参数的复杂程度。复杂程度。 减少对象发送(或接收)的消息数。减少对象发送(或接收)的消息数。9.1 9.1 面向对象设计的准则面向对象设计的准则2022-5-247 (2 2)继承耦合)继承耦合 与交互耦合相反,继承耦合应该提高继承耦合程度。继承是一般化类与特与交互耦合相反,继承耦合应该提高继承耦合程度。继承是一般化类与特殊类之间耦合的一种形式。从本质上看,通过继承关系结合起来的基类殊类之间耦合的一种形式。从本质上看,通过继承关系结合起来的基类和派生类,构成了系统中粒度更大的模块,因此,它们彼此之间应该结和派生类,构成了系统
6、中粒度更大的模块,因此,它们彼此之间应该结合得越紧密越好。合得越紧密越好。为获得紧密的继承耦合,特殊类应该确实是对它的一般化类的一种具体化,为获得紧密的继承耦合,特殊类应该确实是对它的一般化类的一种具体化,也就是说,它们之间在逻辑上应该存在也就是说,它们之间在逻辑上应该存在“is a”“is a”的关系。的关系。9.1 9.1 面向对象设计的准则面向对象设计的准则2022-5-248n 5 5 可扩充性可扩充性 第一,继承关系有助于复用已有定义,使开发新定义更加容易。第二,第一,继承关系有助于复用已有定义,使开发新定义更加容易。第二,在面向对象的语言中,类型系统的多态性也支持可扩充的设计。在面
7、向对象的语言中,类型系统的多态性也支持可扩充的设计。n 6 6可重用可重用性性 软件重用是提高软件开发生产率和目标系统质量的重要途径,重用基本软件重用是提高软件开发生产率和目标系统质量的重要途径,重用基本上从设计阶段开始。重用有两方面的含义:一是尽量使用已有的类上从设计阶段开始。重用有两方面的含义:一是尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类),二(包括开发环境提供的类库,及以往开发类似系统时创建的类),二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。来的可重复使用性。9.
8、1 9.1 面向对象设计的准则面向对象设计的准则2022-5-2499.2 9.2 启发规则启发规则n 1 1设计结果应该清晰易懂设计结果应该清晰易懂 使设计结果清晰、易读、易懂,是提高软件可维护性和可重使设计结果清晰、易读、易懂,是提高软件可维护性和可重用性的重要措施。用性的重要措施。 (1 1)用词一致)用词一致 应该使名字与它所代表的事物一致,而且应该尽量使用人们习惯的应该使名字与它所代表的事物一致,而且应该尽量使用人们习惯的名字。不同类中相似服务的名字应该相同。名字。不同类中相似服务的名字应该相同。 (2 2)使用已有的协议)使用已有的协议 如果开发同一软件的其他设计人员已经建立了类的
9、协议,或者在所如果开发同一软件的其他设计人员已经建立了类的协议,或者在所使用的类库中已有相应的协议,则应该使用这些已有的协议。使用的类库中已有相应的协议,则应该使用这些已有的协议。2022-5-2410 (3 3)减少消息模式的数目)减少消息模式的数目 如果已有标准的消息协议,设计人员应该遵守这些协议。如果确需如果已有标准的消息协议,设计人员应该遵守这些协议。如果确需自己建立消息协议,则应该尽量减少消息模式的数目。只要可能,就自己建立消息协议,则应该尽量减少消息模式的数目。只要可能,就使消息具有一致的模式,以利于读者理解。使消息具有一致的模式,以利于读者理解。 (4 4)避免模糊的定义)避免模
10、糊的定义 一个类的用途应该是有限的,而且通过类名应该可以较容易地推想一个类的用途应该是有限的,而且通过类名应该可以较容易地推想出它的用途出它的用途。9.2 9.2 启发规则启发规则2022-5-2411n 2 2一般一般/ /特殊结构的深度应适当特殊结构的深度应适当 应该使类等级中包含的层次数适当。一般来说,在一个中等应该使类等级中包含的层次数适当。一般来说,在一个中等规模(大约包含规模(大约包含100100个类)的系统中,类等级层次数应保持为个类)的系统中,类等级层次数应保持为7 72 2。不应该仅仅从方便编码的角度出发随意创建派生类,应。不应该仅仅从方便编码的角度出发随意创建派生类,应该使
11、一般该使一般/ /特殊结构与领域知识或常识保持一致。特殊结构与领域知识或常识保持一致。9.2 9.2 启发规则启发规则2022-5-2412n 3 3设计简单的类设计简单的类 应该尽量设计小而简单的类,以便于开发和管理。当类比较应该尽量设计小而简单的类,以便于开发和管理。当类比较庞大的时候,要记住它的所有服务是非常困难的。为保持类的庞大的时候,要记住它的所有服务是非常困难的。为保持类的简单,应该注意以下几点。简单,应该注意以下几点。 (1 1)避免包含过多的属性)避免包含过多的属性 属性过多通常表明这个类过分复杂了,它所完成的功能可能太多了。属性过多通常表明这个类过分复杂了,它所完成的功能可能
12、太多了。 (2 2)有明确的定义)有明确的定义 为了使类的定义明确,分配给每个类的任务应该简单,最好能用一为了使类的定义明确,分配给每个类的任务应该简单,最好能用一两个简单语句描述它的任务。两个简单语句描述它的任务。9.2 9.2 启发规则启发规则2022-5-2413 (3 3)尽量简化对象之间的合作关系)尽量简化对象之间的合作关系 如果需要多个对象协同配合才能做好一件事,则破坏了类的简明性如果需要多个对象协同配合才能做好一件事,则破坏了类的简明性和清晰性。和清晰性。 (4 4)不要提供太多服务)不要提供太多服务 一个类提供的服务过多,同样表明这个类过分复杂。典型地,一个一个类提供的服务过多
13、,同样表明这个类过分复杂。典型地,一个类提供的公共服务不超过类提供的公共服务不超过7 7个。个。 在开发大型软件系统时,遵循上述启发规则也会带来另一个问题;在开发大型软件系统时,遵循上述启发规则也会带来另一个问题;设计出大量较小的类,这同样会带来一定复杂性。解决这个问题的办设计出大量较小的类,这同样会带来一定复杂性。解决这个问题的办法,是把系统中的类按逻辑分组,也就是划分法,是把系统中的类按逻辑分组,也就是划分“主题主题”。9.2 9.2 启发规则启发规则2022-5-2414n 4 4使用简单的协议使用简单的协议 一般来说,消息中的参数不要超过一般来说,消息中的参数不要超过3 3个。当然,不
14、超过个。当然,不超过3 3个的个的限制也不是绝对的。但是,经验表明,通过复杂消息相互关联限制也不是绝对的。但是,经验表明,通过复杂消息相互关联的对象是紧耦合的,对一个对象的修改往往导致其他对象的修的对象是紧耦合的,对一个对象的修改往往导致其他对象的修改。改。n 5 5使用简单的服务使用简单的服务 面向对象设计出来的类中的服务通常都很小,一般只有面向对象设计出来的类中的服务通常都很小,一般只有3 35 5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能。述它的功能。9.2 9.2 启发规则启发规则2022-5-2415n 6
15、6把设计变动减至最小把设计变动减至最小 通常,设计的质量越高,设计结果保持不变的时间也越长。通常,设计的质量越高,设计结果保持不变的时间也越长。即使出现必须修改设计的情况,也应该使修改的范围尽可能小。即使出现必须修改设计的情况,也应该使修改的范围尽可能小。理想的设计变动曲线如图理想的设计变动曲线如图9-19-1所示。所示。 在设计的早期阶段,变动较大,随着时间推移,设计方案日在设计的早期阶段,变动较大,随着时间推移,设计方案日趋成熟,改动也越来越小了。图趋成熟,改动也越来越小了。图9-19-1中所示的峰值与出现设计中所示的峰值与出现设计错误或发生非预期变动的情况相对应。峰值越高,表明设计质错误
16、或发生非预期变动的情况相对应。峰值越高,表明设计质量越差,可重用性也越差。量越差,可重用性也越差。9.2 9.2 启发规则启发规则2022-5-2416图图9-1 9-1 理想的设计变动情况理想的设计变动情况9.2 9.2 启发规则启发规则2022-5-24179.3 9.3 软件重用软件重用9.3.1 9.3.1 概述概述n 1 1、重用、重用n 2 2、软件成分的重用级别、软件成分的重用级别 (1 1)代码重用)代码重用 (2 2)设计结果重用)设计结果重用 (3 3)分析结果重用)分析结果重用2022-5-2418n 3 3、典型的可重用软件成分、典型的可重用软件成分项目计划项目计划成本
17、估计成本估计体系结构体系结构需求模型和规格说明需求模型和规格说明设计设计源代码源代码用户文档和技术文档用户文档和技术文档用户界面用户界面数据数据测试用例测试用例9.3.1 9.3.1 概述概述2022-5-24199.3.2 9.3.2 类构件类构件可重用软件构件应具备的特点可重用软件构件应具备的特点模块独立性强。模块独立性强。具有高度可塑性。具有高度可塑性。接口清晰、简明、可靠。接口清晰、简明、可靠。类构件的重用方式类构件的重用方式实例重用实例重用继承重用继承重用多态重用多态重用2022-5-24209.3.3 9.3.3 软件重用的效益软件重用的效益 近近几几年年来来软软件件产产业业界界的
18、的实实例例研研究究表表明,明,通通过过积积极极的的软软件件重重用用能能够够获获得得可可观观的的商商业业效效益,益,产产品品质质量、量、开开发发生生产产率率和和整整体体成成本本都都得得到到了了改改善。善。质质量量生生产产率率成成本本2022-5-24219.4 9.4 划分子系统划分子系统人类解决复杂问题时普遍采用的策略是人类解决复杂问题时普遍采用的策略是“分而治之,各个击破分而治之,各个击破”。同样,软件工程师在设计比较复杂的应用系统时普遍采用的策略,也是同样,软件工程师在设计比较复杂的应用系统时普遍采用的策略,也是首先把系统分解成若干个比较小的部分,然后再分别设计每个部分。首先把系统分解成若
19、干个比较小的部分,然后再分别设计每个部分。系统的主要组成部分称为子系统,通常根据所提供的功能来划分子系统的主要组成部分称为子系统,通常根据所提供的功能来划分子系统。系统。各个子系统之间应该具有尽可能简单、明确的接口。接口确定了交各个子系统之间应该具有尽可能简单、明确的接口。接口确定了交互形式和通过子系统边界的信息流,但是无须规定子系统内部的实现算互形式和通过子系统边界的信息流,但是无须规定子系统内部的实现算法。法。2022-5-2422在划分和设计子系统时,应该尽量减少子系统彼此间的依赖性。在划分和设计子系统时,应该尽量减少子系统彼此间的依赖性。采用面向对象方法设计软件系统时,面向对象设计模型
20、(即求解域的采用面向对象方法设计软件系统时,面向对象设计模型(即求解域的对象模型),与面向对象分析模型(即问题域的对象模型)一样,也对象模型),与面向对象分析模型(即问题域的对象模型)一样,也由主题、类与对象、结构、属性和服务由主题、类与对象、结构、属性和服务5 5个层次组成。个层次组成。我们可以把面向对象设计模型的我们可以把面向对象设计模型的4 4大组成部分想象成整个模型的大组成部分想象成整个模型的4 4个垂直切片。典型的面向对象设计模型可以用图个垂直切片。典型的面向对象设计模型可以用图9-29-2表示。表示。9.4 9.4 划分子系统划分子系统2022-5-2423图图9-2 9-2 典型
21、的面向对象设计模型典型的面向对象设计模型9.4 9.4 划分子系统划分子系统2022-5-24249.4.1 9.4.1 子系统之间的两种交互方式子系统之间的两种交互方式n 1 1客客户户供供应应商商关关系系 在在这这种种关关系系中,中,作作为为“客客户户”的的子子系系统统调调用用作作为为“供供应应商商”的的子子系系统,统,后后者者完完成成某某些些服服务务工工作作并并返返回回结结果。果。使使用用这这种种交交互互方方案,案,作作为为客客户户的的子子系系统统必必须须了了解解作作为为供供应应商商的的子子系系统统的的接接口,口,然然而而后后者者却却无无须须了了解解前前者者的的接接口,口,因因为为任任何
22、何交交互互行行为为都都是是由由前前者者驱驱动动的。的。2022-5-2425n 2 2平等伙伴关系平等伙伴关系 在这种关系中,每个子系统都可能调用其他子系统,因此,在这种关系中,每个子系统都可能调用其他子系统,因此,每个子系统都必须了解其他子系统的接口。由于各个子系统需每个子系统都必须了解其他子系统的接口。由于各个子系统需要相互了解对方的接口,因此这种组织系统的方案比起客户要相互了解对方的接口,因此这种组织系统的方案比起客户供应商方案来,子系统之间的交互更复杂,而且这种交互方式供应商方案来,子系统之间的交互更复杂,而且这种交互方式还可能存在通信环路,从而使系统难于理解,容易发生不易察还可能存在
23、通信环路,从而使系统难于理解,容易发生不易察觉的设计错误。觉的设计错误。 总的说来,单向交互比双向交互更容易理解,也更容易总的说来,单向交互比双向交互更容易理解,也更容易设计和修改,因此,应该尽量使用客户设计和修改,因此,应该尽量使用客户供应商关系。供应商关系。9.4.1 9.4.1 子系统之间的两种交互方式子系统之间的两种交互方式2022-5-24269.4.2 9.4.2 组织系统的两种方案组织系统的两种方案n 1 1水平水平层次组织层次组织 这种组织方案把软件系统组织成一个层次系统,每层是一个子系统。这种组织方案把软件系统组织成一个层次系统,每层是一个子系统。上层在下层的基础上建立,下层
24、为实现上层功能而提供必要的服务。上层在下层的基础上建立,下层为实现上层功能而提供必要的服务。每一层内所包含的对象,彼此间相互独立,而处于不同层次上的对象,每一层内所包含的对象,彼此间相互独立,而处于不同层次上的对象,彼此间往往有关联。彼此间往往有关联。 层次结构又可进一步划分成两种模式:封闭式和开放式。层次结构又可进一步划分成两种模式:封闭式和开放式。所谓封闭式,就是每层子系统仅仅使用其直接下层提供的服务在开放模式中,某所谓封闭式,就是每层子系统仅仅使用其直接下层提供的服务在开放模式中,某层子系统可以使用处于其下面的任何一层子系统所提供的服务。层子系统可以使用处于其下面的任何一层子系统所提供的
25、服务。2022-5-2427n 2 2垂直垂直块状组织块状组织 这种组织方案把软件系统垂直地分解成若干个相对独立的、弱耦合这种组织方案把软件系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务。的子系统,一个子系统相当于一块,每块提供一种类型的服务。 利用层次和块的各种可能的组合,可以成功地由多个子系统组成一利用层次和块的各种可能的组合,可以成功地由多个子系统组成一个完整的软件系统。当混合使用层次结构和块状结构时,同一层次可个完整的软件系统。当混合使用层次结构和块状结构时,同一层次可以由若干块组成,而同一块也可以分为若干层。例如,图以由若干块组成,而同
展开阅读全文