软件工程软件工程软件工程 (11).ppt
《软件工程软件工程软件工程 (11).ppt》由会员分享,可在线阅读,更多相关《软件工程软件工程软件工程 (11).ppt(104页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023/3/302023/3/301 1 1 1第第11 11章章 面向对象设计面向对象设计l 11.1 11.1 面向对象设计的准则面向对象设计的准则l 11.2 11.2 启发规则启发规则l 11.3 11.3 软件重用软件重用l 11.4 11.4 系统分解系统分解l 11.5 11.5 设计问题域子系统设计问题域子系统l 11.6 11.6 设计人机交互子系统设计人机交互子系统l 11.7 11.7 设计任务管理子系统设计任务管理子系统l 11.8 11.8 设计数据管理子系统设计数据管理子系统l 11.9 11.9 设计类中的服务设计类中的服务l 11.10 11.10 设计关联设
2、计关联l 11.11 11.11设计优化设计优化2023/3/302023/3/302 2 2 21.1.模块化模块化 模块化是软件设计的重要准则。在面向对象开发方法中,将对象定义为模块。对象把数据结构和作用在数据上的操作封装起来构成模块。对象是组成系统的基本模块。11.111.1面向对象设计的准则面向对象设计的准则11.1 11.1 11.1 11.1 面向对象设计的准则面向对象设计的准则面向对象设计的准则面向对象设计的准则2023/3/302023/3/303 3 3 32.2.抽象抽象 类是一种抽象数据类型,在该数据类型之上,可以创建对象(类的成员)。类包含相似对象的共同属性和服务,它对
3、外定义了公共接口,构成了类的规格说明(即协议),供外界合法访问。通过这种接口访问类实例中的数据。通常把这类抽象称为规格说明抽象规格说明抽象。3.3.信息隐藏信息隐藏 在面向对象方法中,对象是属性和服务的封装体对象是属性和服务的封装体,这就实现了信息隐藏。类结构分离了接口与实现,类的属性的表示方法和操作的实现算法,对于类的用户来说,都应该是隐藏的,用户只能通过公共接口访问类中的属性。11.111.1面向对象设计的准则面向对象设计的准则2023/3/302023/3/304 4 4 44.4.弱耦合弱耦合 所谓耦合,是指一个软件结构内不同模块之间互连的依赖关系。依赖关系越多耦合度越强,依赖关系越少
4、耦合度越弱。在面向对象方法中,对象是最基本的模块,不同对象之间相互关联的依赖关系表示了耦合度。衡量设计优良的一个重要标准就是弱耦合,弱耦合的设计中某个对象的改变不会或很少影响到其他对象。这样给理解、测试或修改带来很大的方便。反之,强耦合会给理解、测试或修改带来很大的难度,并且还降低了该类的可重用性和可移植性。不同对象之间耦合是不可避免的。两个对象必须相互联系相互依赖时,应该通过类的协议(即公共接口)实现两个对象相互依赖(耦合),而不是通过类的具体实现细节来描述。11.111.1面向对象设计的准则面向对象设计的准则2023/3/302023/3/305 5 5 5 一般说来,对象之间的耦合可分为
5、两大类,下面分别讨论一般说来,对象之间的耦合可分为两大类,下面分别讨论这两类耦合:这两类耦合:(1)(1)交互耦合交互耦合交互耦合交互耦合:如果对象之间的耦合通过消息连接来实现,则:如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。为使交互耦合尽可能松散,应该遵守这种耦合就是交互耦合。为使交互耦合尽可能松散,应该遵守下述准则:下述准则:uu尽量降低消息连接的复杂程度。应该尽量减少消息中包尽量降低消息连接的复杂程度。应该尽量减少消息中包 含的参数个数,降低参数的复杂程度。含的参数个数,降低参数的复杂程度。uu减少对象发送减少对象发送(或接收或接收)的消息数。的消息数。(2)(2)继承
6、耦合继承耦合继承耦合继承耦合:与交互耦合相反,应该提高继承耦合程度。继:与交互耦合相反,应该提高继承耦合程度。继承是一般化类与特殊类之间耦合的一种形式。从本质上看,通承是一般化类与特殊类之间耦合的一种形式。从本质上看,通过继承关系结合起来的基类和派生类,构成了系统中粒度更大过继承关系结合起来的基类和派生类,构成了系统中粒度更大的模块。因此,它们彼此之间应该结合得越紧密越好。的模块。因此,它们彼此之间应该结合得越紧密越好。为获得紧密的继承耦合,为获得紧密的继承耦合,特殊类应该确实是对它的一般化特殊类应该确实是对它的一般化特殊类应该确实是对它的一般化特殊类应该确实是对它的一般化类的一种具体化类的一
7、种具体化类的一种具体化类的一种具体化。因此,如果一个派生类放弃了它基类的许多。因此,如果一个派生类放弃了它基类的许多属性,则它们之间是松耦合的。在设计时应该使特殊类尽量多属性,则它们之间是松耦合的。在设计时应该使特殊类尽量多继承并使用其一般化类的属性和服务,从而更紧密地耦合到其继承并使用其一般化类的属性和服务,从而更紧密地耦合到其一般化类。一般化类。11.111.1面向对象设计的准则面向对象设计的准则2023/3/302023/3/306 6 6 65.5.强内聚强内聚 所谓内聚,是一个模块内各个元素彼此结合的紧密程度。结合得越紧密内聚越强,结合得越不紧密内聚越弱。强内聚也是衡量设计优良的一个
8、重要标准。在面向对象设计中,内聚可分为下述三类:(1)服务内聚。一个服务应该是单一的,即只完成一个任务。(2)类内聚。类内聚要求类的属性和服务应该是高内聚的,而且它们应该是系统任务所必需的。一个类应该只有一个功能,如果某个类有多个功能,通常应该把它分解成多个专用的类。11.111.1面向对象设计的准则面向对象设计的准则2023/3/302023/3/307 7 7 7 (3)一般-特殊内聚。一般-特殊内聚表示:一般-特殊结构符合领域知识的表示形式,也就是说,特殊类应该尽量地继承一般类的属性和服务。这样的一般-特殊结构是高内聚的。例如,虽然表面看来飞机与汽车有相似的地方(都用发动机驱动,都有轮子
9、,),但是,如果把飞机和汽车都作为“机动车”类的子类,则不符合领域知识的表示形式,这样的一般-特殊结构是低内聚的。高内聚的一般-特殊结构应该是,设置一个抽象类“交通工具”,把飞机和机动车作为交通工具类的子类,而汽车又是机动车类的子类。11.111.1面向对象设计的准则面向对象设计的准则2023/3/302023/3/308 8 8 86.6.可重用可重用 在面向对象设计中,一个类的设计应该具有通用性,为开发相似的系统提供软件重用可能。软件重用可以提高软件开发生产率,确保目标系统质量。可重用是面向对象开发方法的一可重用是面向对象开发方法的一个重要特性个重要特性,也就是说,用面向对象的概念和方法比
10、较容易实现重用。因此,在软件开发过程中,为了实现重用,既要尽量在软件开发过程中,为了实现重用,既要尽量重用已有的类,又要创建可重用的新类重用已有的类,又要创建可重用的新类。11.111.1面向对象设计的准则面向对象设计的准则2023/3/302023/3/309 9 9 91.1.设计结果应该清晰易懂设计结果应该清晰易懂 良好的设计结果应该是清晰易懂的,它能提高软件的可维护性和可重用性。如果一个设计结构不清楚,并且难以理解,是不会被人们接受的。设计时采用以下几个策略能使结果清晰易懂。(1)命名一致。命名应该与专业领域中的名字一致,并且要是符合人们习惯的名字。不同类中相似服务的名字应该相同。11
11、.211.2启发规则启发规则11.2 11.2 11.2 11.2 启发规则启发规则启发规则启发规则2023/3/302023/3/3010101010 (2)重用协议(公共接口)。在设计中应该使用已经建立了类的协议,避免重复劳动或重复定义带来的差异(不统一)。这些协议可能是其他设计人员已经建立了类的协议,或是在类库中已有的协议。(3)减少消息连接。尽量采用已有标准的消息连接,去掉不必要的消息连接。采用统一模式建立自己需要的消息连接,以便理解和使用,增强可理解性和可使用性。(4)避免模糊的定义。应该定义具有明确、有限用途的类,避免那些模糊的、不准确的类定义。11.211.2启发规则启发规则20
12、23/3/302023/3/30111111112.2.一般一般 -特殊结构的深度应适当特殊结构的深度应适当 从基类派生子类,再从子类派生下一层子类,这样的一般-特殊结构的类层次数应该适当,不必过于细化,层次的深度应该是有限的。一般来说,在一个中等规模(大约包含100个类)的系统中,类层次数应保持为72。11.211.2启发规则启发规则2023/3/302023/3/30121212123.3.设计简单的类设计简单的类 类设计应该尽量小而简单,便于开发和管理。定义很大的类,它所包含的属性和服务相对就多,会给开发和使用带来困难。实践表明,简单类一个类的定义在50行左右(或两屏)。简单类可按照下列
13、的策略定义。(1)避免包含太多的属性。一个类包含的属性多少将决定类的复杂程度。一个类包含太多的属性表明该类过于复杂了,因此,就可能有过多的作用在这些属性上的服务。(2)避免提供太多服务。一个类包含的服务多少也是决定类的复杂程度的一个重要因素。太复杂的类所提供的服务肯定太多。一般来说,一个类提供的公共服务不要超过七个。11.211.2启发规则启发规则2023/3/302023/3/3013131313 (3)明确精练的定义。如果一个类的任务简单了,则它的定义就明确精练了,通常任务简单的类可用几个简单语句描述。(4)简化对象间的合作(通信)。每个对象应该独立完成任务。也就是说,对象在完成任务时,尽
14、量不要依赖于其他对象的配合(帮助),对象之间过多的依赖会破坏类的简明性和清晰性。虽然,遵循上述设计策略能设计出明确精练的较小的类,但在开发大型软件系统中,必定会有大量较小的类设计出来,这将会导致类间的通信变复杂。采用划分“主题”的方法,可以解决这个问题。11.211.2启发规则启发规则2023/3/302023/3/30141414144.4.设计简单的协议设计简单的协议 消息中的参数越多表示对象之间传递的消息越复杂,同样表明对象之间的依赖关系越复杂,即对象间的耦合度越高。一般来说,简单消息中的参数不要超过三个。过多的参数会导致对象的修改较复杂,因为对一个对象的修改往往导致其他对象的修改。11
15、.211.2启发规则启发规则2023/3/302023/3/30151515155.5.设计简单的服务设计简单的服务 类中的服务应该设计得既简单又小,用35行源程序代码比较适合。服务的源程序中不要包含过多的语句行,或者复杂的语句控制结构,如分支嵌套、循环嵌套和函数调用等。如果一个服务非常复杂,则应该检查该服务的控制结构,并进行分解和简化,尽量避免设计复杂的服务。11.211.2启发规则启发规则2023/3/302023/3/30161616166.6.减少设计变动减少设计变动 随着设计方案逐渐成熟,改动也应该越来越小,这样才能设计出优良的结果。优良的设计能保证软件质量,并能提高软件的可重用性。
16、因此,在设计中尽可能少改动,或者尽可能缩小修改的范围。图图11.1 理想的设计变动情况理想的设计变动情况11.211.2启发规则启发规则2023/3/302023/3/301717171711.3.1 11.3.1 概述概述 1.1.重用重用 重用也叫再用或复用,是指同一事物不作修改或稍加改重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用动就多次重复使用。广义地说,软件重用可分为以下。广义地说,软件重用可分为以下3 3个层次:个层次:11.311.3软件重用软件重用11.3 11.3 11.3 11.3 软件重用软件重用软件重用软件重用2023/3/302023/3/30181
17、81818(1)(1)知识重用知识重用(例如,软件工程知识的重用例如,软件工程知识的重用)。(2)(2)方法和标准的重用方法和标准的重用(例如,面向对象方法或国家制定的软例如,面向对象方法或国家制定的软件开发规范的重用件开发规范的重用)。(3)(3)软件成分的重用。软件成分的重用。前两个重用层次属于知识工程研究的范畴,本节仅讨论前两个重用层次属于知识工程研究的范畴,本节仅讨论软件成分重用问题。软件成分重用问题。11.311.3软件重用软件重用2023/3/302023/3/30191919192.2.软件成分的重用级别软件成分的重用级别软件成分的重用可以进一步划分成以下软件成分的重用可以进一步
18、划分成以下3 3个级别:个级别:(1)(1)代码重用:代码重用:人们谈论得最多的是代码重用,通常把它理解为调人们谈论得最多的是代码重用,通常把它理解为调用库中的模块。实际上,代码重用也可以采用下列几种形式中的任何一种:用库中的模块。实际上,代码重用也可以采用下列几种形式中的任何一种:uu源代码剪贴源代码剪贴:这是最原始的重用形式。这种重用方式的缺点,是复制或:这是最原始的重用形式。这种重用方式的缺点,是复制或修改原有代码时可能出错,更糟糕的是,存在严重的配置管理问题,人们修改原有代码时可能出错,更糟糕的是,存在严重的配置管理问题,人们几乎无法跟踪原始代码块多次修改重用的过程。几乎无法跟踪原始代
19、码块多次修改重用的过程。11.311.3软件重用软件重用2023/3/302023/3/3020202020uu源代码包含源代码包含:许多程序设计语言都提供包含:许多程序设计语言都提供包含(include)(include)库中库中源代码的机制。使用这种重用形式时,配置管理问题有所缓源代码的机制。使用这种重用形式时,配置管理问题有所缓解,因为修改了库中源代码之后,所有包含它的程序自然都解,因为修改了库中源代码之后,所有包含它的程序自然都必须重新编译。必须重新编译。uu继承继承:利用继承机制重用类库中的类时,无须修改已有的:利用继承机制重用类库中的类时,无须修改已有的代码,就可以扩充或具体化在库
20、中找出的类,因此,基本上代码,就可以扩充或具体化在库中找出的类,因此,基本上不存在配置管理问题。不存在配置管理问题。11.311.3软件重用软件重用2023/3/302023/3/3021212121(2)(2)设计结果重用设计结果重用 设计结果重用指的是,设计结果重用指的是,重用某个软件系统的设计模型重用某个软件系统的设计模型(即即求解域模型求解域模型)。这个级别的重用有助于把一个应用系统移植到。这个级别的重用有助于把一个应用系统移植到完全不同的软硬件平台上。完全不同的软硬件平台上。(3)(3)分析结果重用分析结果重用 这是一种更高级别的重用,即这是一种更高级别的重用,即重用某个系统的分析模
21、型重用某个系统的分析模型。这种重用特别这种重用特别适用于用户需求未改变适用于用户需求未改变,但系统体系结构发生但系统体系结构发生了根本变化的场合了根本变化的场合。11.311.3软件重用软件重用2023/3/302023/3/30222222223.3.典型的可重用软件成分典型的可重用软件成分更具体地说,可能被重用的软件成分主要有以下更具体地说,可能被重用的软件成分主要有以下1010种:种:(1 1)项目计划项目计划。软件项目计划的基本结构和许多内容(例如,软件质量。软件项目计划的基本结构和许多内容(例如,软件质量保证计划)都是可以跨项目重用的。这样做减少了用于制定计划的时间,保证计划)都是可
22、以跨项目重用的。这样做减少了用于制定计划的时间,也降低了与建立进度表和进行风险分析等活动相关联的不确定性。也降低了与建立进度表和进行风险分析等活动相关联的不确定性。(2 2)成本估计成本估计。因为在不同项目中经常含有类似的功能,所以有可能在。因为在不同项目中经常含有类似的功能,所以有可能在只做极少修改或根本不做修改的情况下,重用对该功能的成本估计结果。只做极少修改或根本不做修改的情况下,重用对该功能的成本估计结果。11.311.3软件重用软件重用2023/3/302023/3/3023232323(3 3)体系结构体系结构。即使在考虑不同的应用领域时,也很少有。即使在考虑不同的应用领域时,也很
23、少有截然不同的程序和数据体系结构。因此,有可能创建一组类截然不同的程序和数据体系结构。因此,有可能创建一组类属的体系结构模板(例如,事务处理体系结构),并把那些属的体系结构模板(例如,事务处理体系结构),并把那些模板作为可重用的设计框架。通常把类属的体系结构模板称模板作为可重用的设计框架。通常把类属的体系结构模板称为领域体系结构。为领域体系结构。(4 4)需求模型和规格说明需求模型和规格说明。类和对象的模型及规格说明是。类和对象的模型及规格说明是明显的重用的候选者,此外,用传统软件工程方法开发的分明显的重用的候选者,此外,用传统软件工程方法开发的分析模型(例如,数据流图),也是可重用的。析模型
24、(例如,数据流图),也是可重用的。11.311.3软件重用软件重用2023/3/302023/3/3024242424(5 5)设计设计。用传统方法开发的体系结构、数据、接口和过。用传统方法开发的体系结构、数据、接口和过程设计结果,是重用的候选者,更常见的是,系统和对象设程设计结果,是重用的候选者,更常见的是,系统和对象设计是可重用的。计是可重用的。(6 6)源代码源代码。用兼容的程序设计语言书写的、经过验证的。用兼容的程序设计语言书写的、经过验证的程序构件,是重用的候选者。程序构件,是重用的候选者。(7 7)用户文档和技术文档用户文档和技术文档。即使针对的应用是不同的,也。即使针对的应用是不
25、同的,也经常有可能重用用户文档和技术文档的大部分。经常有可能重用用户文档和技术文档的大部分。11.311.3软件重用软件重用2023/3/302023/3/3025252525(8 8)用户界面用户界面。这可能是最广泛被重用的软件成分,。这可能是最广泛被重用的软件成分,GUIGUI(图形用户界面)软件经常被重用。因为它可占到一个应用(图形用户界面)软件经常被重用。因为它可占到一个应用程序的程序的60%60%代码量,因此,重用的效果非常显著。代码量,因此,重用的效果非常显著。(9 9)数据数据。在大多数经常被重用的软件成分中,被重用的。在大多数经常被重用的软件成分中,被重用的数据包括:数据包括:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程软件工程软件工程 11 软件工程 11
限制150内