《第11章ood 软件工程 课件.ppt》由会员分享,可在线阅读,更多相关《第11章ood 软件工程 课件.ppt(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第11章章 面向对象设计面向对象设计11.1 面向对象设计的准则面向对象设计的准则11.2 启发规则启发规则11.3 软件重用软件重用11.4 系统分解系统分解11.5 设计问题域子系统设计问题域子系统11.6 设计人机交互子系统设计人机交互子系统11.7 设计任务管理子系统设计任务管理子系统11.8 设计数据管理子系统设计数据管理子系统11.9 设计类中的服务设计类中的服务11.10 设计关联设计关联11.11 设计优化设计优化小结小结优秀设计就是使得系统在其整个生命周期中的总开优秀设计就是使得系统在其整个生命周期中的总开销最小的设计销最小的设计,其主要特点就是容易维护。其主要特点就是容易
2、维护。结合面向对象方法的特点结合面向对象方法的特点,下面重温本书第下面重温本书第5章讲述章讲述的指导软件设计的几条基本原理的指导软件设计的几条基本原理.它们在进行面向它们在进行面向对象设计时仍然成立。对象设计时仍然成立。11.1 面向对象设计的准则面向对象设计的准则1.模块化模块化面向对象软件开发模式,很自然地支持模块的设计面向对象软件开发模式,很自然地支持模块的设计原理:对象就是模块。原理:对象就是模块。2.抽象抽象面向对象方法支持过程和数据抽象。面向对象方法支持过程和数据抽象。类是一种抽象数据类型。使用者无须知道类中数据类是一种抽象数据类型。使用者无须知道类中数据元素的具体表示方法,就可以
3、通过接口使用类中定元素的具体表示方法,就可以通过接口使用类中定义的数据。义的数据。这类抽象称为规格说明抽象。这类抽象称为规格说明抽象。3.信息隐藏信息隐藏对象的封装性实现支持了信息隐藏。对象的封装性实现支持了信息隐藏。4.弱耦合弱耦合耦合主要指不同对象之间相互关联的紧密程度。耦合主要指不同对象之间相互关联的紧密程度。两个对象应该通过类的接口实现耦合,而不应该依两个对象应该通过类的接口实现耦合,而不应该依赖于类的具体实现细节赖于类的具体实现细节(友元友元)。对象之间的两类耦合:对象之间的两类耦合:(1)交互耦合交互耦合:交换消息交换消息使交互耦合尽可能松散的准则:减少消息中包含的使交互耦合尽可能
4、松散的准则:减少消息中包含的参数个数,降低参数的复杂程度参数个数,降低参数的复杂程度,减少消息数。减少消息数。(2)继承耦合继承耦合:互为基类和派生类互为基类和派生类(非模块之间非模块之间)与交互耦合相反,应该提高继承耦合程度。与交互耦合相反,应该提高继承耦合程度。通过继承关系结合起来的通过继承关系结合起来的基类和派生类,构成了更基类和派生类,构成了更大的模块大的模块。5.强内聚强内聚在面向对象设计中存在下述在面向对象设计中存在下述3种内聚。种内聚。(1)服务内聚。一个服务应该完成一个且仅完成服务内聚。一个服务应该完成一个且仅完成一个功能。一个功能。(2)类内聚。设计类的原则是,一个类应该只有
5、类内聚。设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。类的一个用途,它的属性和服务应该是高内聚的。类的属性和服务应该全都是完成该类对象的任务所必需属性和服务应该全都是完成该类对象的任务所必需的。如果某个类有多个用途,通常应该把它分解成的。如果某个类有多个用途,通常应该把它分解成多个专用的类。多个专用的类。(3)一般一般-特殊特殊(继承继承)内聚。设计出的一般内聚。设计出的一般-特殊结特殊结构,应该符合多数人的概念,更准确地说,这种结构,应该符合多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。构应该是对相应的领域知识的正确抽取。紧密的继承耦合与高度的一
6、般紧密的继承耦合与高度的一般-特殊内聚是一致的。特殊内聚是一致的。6.可重用可重用重用有两方面的含义:重用有两方面的含义:一是尽量使用已有的类一是尽量使用已有的类二是在设计新类的协议时考虑将来的可重用性。二是在设计新类的协议时考虑将来的可重用性。1.设计结果应该清晰易懂设计结果应该清晰易懂保证设计结果清晰易懂的主要因素如下保证设计结果清晰易懂的主要因素如下:(1)用词一致用词一致:一词一用。一词一用。(2)使用已有的协议。使用已有的协议。(3)减少消息模式的数目。减少消息模式的数目。(4)避免模糊的定义:类的用途有限,名清晰避免模糊的定义:类的用途有限,名清晰11.2 启发规则启发规则2.一般
7、一般-特殊结构的深度应适当特殊结构的深度应适当一个中等规模一个中等规模(大约包含大约包含100个类个类)的系统中,类等级的系统中,类等级层次数应保持为层次数应保持为72。不应该仅仅从方便编码的角度出发随意创建派生类,不应该仅仅从方便编码的角度出发随意创建派生类,应该使一般应该使一般-特殊结构与领域知识或常识保持一致。特殊结构与领域知识或常识保持一致。3.设计简单的类设计简单的类小而简单的类便于开发和管理小而简单的类便于开发和管理(高内聚高内聚)。为使类保。为使类保持简单,应该注意以下几点。持简单,应该注意以下几点。(1)避免包含过多的属性:完成的功能可能太多了。避免包含过多的属性:完成的功能可
8、能太多了。(2)有明确的定义:任务应该简单。有明确的定义:任务应该简单。(3)简化对象之间的合作关系。如果需要多个对象简化对象之间的合作关系。如果需要多个对象协同配合才能做好一件事,则破坏了类的简明性和协同配合才能做好一件事,则破坏了类的简明性和清晰性。清晰性。(4)不要提供太多服务。典型地,一个类提供的公不要提供太多服务。典型地,一个类提供的公共服务不超过共服务不超过7个。个。4.使用简单的协议使用简单的协议消息中的参数最好不要超过消息中的参数最好不要超过3个。个。复杂消息导致对象紧耦合。复杂消息导致对象紧耦合。5.使用简单的服务(模块复杂性)使用简单的服务(模块复杂性)类中的服务小为好,类
9、中的服务小为好,35行源程序语句,可用一个行源程序语句,可用一个简单句子描述它的功能。简单句子描述它的功能。如果需要在服务中使用复杂的如果需要在服务中使用复杂的CASE语句,考虑用语句,考虑用一般一般-特殊结构代替这个类的可能性。特殊结构代替这个类的可能性。6.把设计变动减至最小(稳定性)把设计变动减至最小(稳定性)设计的质量越高,设计结果越设计的质量越高,设计结果越稳定稳定。随着时间推移,设计方案日趋成熟,改动越来越小。随着时间推移,设计方案日趋成熟,改动越来越小。1.重用重用重用也叫再用或复用,是指同一事物不作修改或稍重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用。软件重
10、用可分为加改动就多次重复使用。软件重用可分为3个层次:个层次:(1)知识重用知识重用(例如,软件工程知识的重用例如,软件工程知识的重用)。(2)方法和标准的重用方法和标准的重用(例如,面向对象方法或国家例如,面向对象方法或国家制定的软件开发规范的重用制定的软件开发规范的重用)。(3)软件成分的重用。软件成分的重用。本节仅讨论软件成分重用问题。本节仅讨论软件成分重用问题。11.3 软件重用软件重用 11.3.1 概述概述3.10种种典型的可重用软件成分典型的可重用软件成分(1)项目计划:软件质量保证计划。项目计划:软件质量保证计划。(2)成本估计:不同项目中类似功能的成本估算。成本估计:不同项目
11、中类似功能的成本估算。(3)体系结构:事务类处理体系结构。体系结构:事务类处理体系结构。(4)需求模型需求模型/规格说明:对象模型,数据流图。规格说明:对象模型,数据流图。(5)设计:体系结构、数据、接口和过程设计。设计:体系结构、数据、接口和过程设计。(6)源代码:兼容的程序构件。源代码:兼容的程序构件。(7)用户文档和技术文档:部分重用。用户文档和技术文档:部分重用。(8)用户界面:用户界面:GUI 可占应用程序的可占应用程序的60%代码量。代码量。(9)数据:数据:记录结构,文件和完整的数据库。记录结构,文件和完整的数据库。(10 测试用例:与重用设计或代码相关的用例。测试用例:与重用设
12、计或代码相关的用例。面向对象技术中的类构件有面向对象技术中的类构件有3种重用方式:实例重种重用方式:实例重用、继承重用和多态重用。用、继承重用和多态重用。1.可重用软构件应具备的特点可重用软构件应具备的特点(1)模块独立性强:具有单一、完整的功能,且经模块独立性强:具有单一、完整的功能,且经过反复测试被确认是正确的。过反复测试被确认是正确的。11.3.2 类构件类构件(2)具有高度可塑性:必须提供为适应特定需求而具有高度可塑性:必须提供为适应特定需求而扩充或修改已有构件的机制,且使用起来非常简单扩充或修改已有构件的机制,且使用起来非常简单方便。方便。(3)接口清晰、简明、可靠,详尽的文档说明。
13、接口清晰、简明、可靠,详尽的文档说明。精心设计的精心设计的“类类”基本上能满足上述要求。基本上能满足上述要求。确定各项质量指标的相对重要性确定各项质量指标的相对重要性(即确定优先级即确定优先级),以便在优化设计时制定折衷方案。以便在优化设计时制定折衷方案。如在效率和清晰性之间寻求折衷。如在效率和清晰性之间寻求折衷。下面讲述在优化设计时提高效率的技术,以及建立下面讲述在优化设计时提高效率的技术,以及建立良好的继承结构的方法。良好的继承结构的方法。11.11 设计优化设计优化 11.11.1 确定优先级确定优先级1.增加冗余关联以提高访问效率:空间换时间增加冗余关联以提高访问效率:空间换时间例如,
14、询问公司中会讲日语的雇员有哪些人。例如,询问公司中会讲日语的雇员有哪些人。无冗余关联:遍历次数无冗余关联:遍历次数=雇员数雇员数X技能数技能数11.11.2 提高效率的几项技术提高效率的几项技术加冗余关联精通语言:直接得到所有会讲日语的雇员加冗余关联精通语言:直接得到所有会讲日语的雇员建立索引必然占用内存空间建立索引必然占用内存空间,因此只给那些经常执行并且开销大、命中率低的查询因此只给那些经常执行并且开销大、命中率低的查询建立索引建立索引2.调整查询次序:并列条件,调整查询次序:并列条件,先少后多先少后多找会找会2门外语的人门外语的人:N(L1)N(L2)3.存储存储/保留派生属性保留派生属
15、性:空间换时间空间换时间11.11.3 调整继承关系:调整继承关系:提高共享提高共享1.具体具体-抽象抽象-具体具体2.为提高继承程度而修为提高继承程度而修改类定义改类定义3.利用委托利用委托(非继承非继承)实现行为共享实现行为共享委托:把一类对象作为另一类对象的属性。委托:把一类对象作为另一类对象的属性。只委托另一类对象实现有意义的操作只委托另一类对象实现有意义的操作.不会发生不不会发生不慎使用继承的有害操作的问题。慎使用继承的有害操作的问题。用表实现栈的两种方法用表实现栈的两种方法:a)继承继承 b)委托委托面向对象设计准则面向对象设计准则提高设计质量的启发式规则提高设计质量的启发式规则软件重用软件重用:类构件重用技术。类构件重用技术。系统设计与对象设计系统设计与对象设计:界限模糊,反复迭代。界限模糊,反复迭代。设计求解空间设计求解空间OO模型的模型的4大逻辑部分:大逻辑部分:问题域子系统、人机交互子系统、任务管理子问题域子系统、人机交互子系统、任务管理子系统和数据管理子系统。系统和数据管理子系统。设计类中服务的方法及实现关联的策略。设计类中服务的方法及实现关联的策略。如何根据系统目标,做优化工作。如何根据系统目标,做优化工作。本章本章小结小结
限制150内