UML第11章 面向对象设计原则.ppt
《UML第11章 面向对象设计原则.ppt》由会员分享,可在线阅读,更多相关《UML第11章 面向对象设计原则.ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1111章章 面向对象设计原则面向对象设计原则 11.1 11.1 类型一致性与闭合行为类型一致性与闭合行为 11.2 11.2 封装与共生性封装与共生性 11.3 11.3 领域、依附集和内聚领域、依附集和内聚 11.4 11.4 继承与多态性的危险性继承与多态性的危险性 11.5 11.5 状态空间和行为状态空间和行为本章将介绍建立健壮的类层次结构应遵循的两本章将介绍建立健壮的类层次结构应遵循的两项重要原则:类型一致性和闭合行为。项重要原则:类型一致性和闭合行为。11.1 11.1 类型一致性与闭合行为类型一致性与闭合行为 本节首先介绍类型与类的关系,然后分别介绍本节首先介绍类型与类的
2、关系,然后分别介绍了类型一致性与闭合行为。了类型一致性与闭合行为。11.1.1 11.1.1 类与类型类与类型 类看作是类型的实现。也就是说,类型包括了类看作是类型的实现。也就是说,类型包括了类的目标以及类的状态空间和行为。类的目标以及类的状态空间和行为。一个类型可以具体实现为多个类,每个类又包一个类型可以具体实现为多个类,每个类又包括自己独特的内部设计。括自己独特的内部设计。类型代表着类的外部特征,但子类型的概念和类型代表着类的外部特征,但子类型的概念和子类却是不同的。子类却是不同的。11.1.2 11.1.2 类型一致性原则类型一致性原则 类型一致性设计原则可表述为:如果类型一致性设计原则
3、可表述为:如果s s为为t t的真的真子类型,则子类型,则s s必须与必须与t t一致,即类型一致,即类型s s的对象可以的对象可以出现在类型出现在类型t t的对象所需要的任何环境中,并且的对象所需要的任何环境中,并且当该对象的任何获取操作执行时,仍能保持其当该对象的任何获取操作执行时,仍能保持其正确性。正确性。在完善的面向对象设计中,每个类的类型必须在完善的面向对象设计中,每个类的类型必须与其超类相一致,即类或子类的继承层次结构与其超类相一致,即类或子类的继承层次结构必须遵循类型一致性原则。必须遵循类型一致性原则。为了做到每个子类的类型能够真正可信地与其为了做到每个子类的类型能够真正可信地与
4、其超类的类型一致,引入类型一致性的两个重要超类的类型一致,引入类型一致性的两个重要子原则:抗变性与协变性。子原则:抗变性与协变性。必须保证满足下列三个操作限制条件:必须保证满足下列三个操作限制条件:(1 1)每个超类的操作必须与其子类中一个操作)每个超类的操作必须与其子类中一个操作相对应,它们具有相同的名字和函数原则。相对应,它们具有相同的名字和函数原则。(2 2)每个子类操作的前置条件不应强于其超类)每个子类操作的前置条件不应强于其超类操作的前置条件,这就是抗变性原则。操作的前置条件,这就是抗变性原则。(3 3)每个子类操作的后置条件至少要和其相应)每个子类操作的后置条件至少要和其相应超类操
5、作的后置条件一样强,这就是协变性原超类操作的后置条件一样强,这就是协变性原则。则。类型一致性原则要求子类必须为类的真子类型一致性原则要求子类必须为类的真子类型,并且满足下列六个限制条件(前两个条类型,并且满足下列六个限制条件(前两个条件适用于所有类,后四个条件适用于单个操作)件适用于所有类,后四个条件适用于单个操作):(1 1)S S的状态空间必须与的状态空间必须与T T的状态空间一致。的状态空间一致。(2 2)在)在S S和的共享空间中,和的共享空间中,S S的状态空间必须的状态空间必须等同于或位于等同于或位于T T的状态空间之内。的状态空间之内。(3 3)S.opS.op必须与必须与T.o
6、pT.op名称相同。名称相同。(4 4)S.opS.op的形式函数原型的参数必须与的形式函数原型的参数必须与 T.opT.op的的形式函数原型的参数表一一对应。形式函数原型的参数表一一对应。(5 5)S.opS.op的前置条件必须等同于或弱于的前置条件必须等同于或弱于T.opT.op的的前置条件。前置条件。(6 6)S.opS.op的后置条件必须等同于或强于的后置条件必须等同于或强于.op.op的的后置条件。后置条件。11.1.3 11.1.3 闭合行为原则闭合行为原则 闭合行为原则是指:在基于类型子类型层次闭合行为原则是指:在基于类型子类型层次结构的继承层次结构中,类结构的继承层次结构中,类
7、C C的任何对象操作的的任何对象操作的执行执行-包括从包括从C C的超类继承的所有操作的超类继承的所有操作应满应满足足C C的类不变式。的类不变式。如果你发送消息并作一般(超类)条件假设,如果你发送消息并作一般(超类)条件假设,则目标对象可能拒绝该消息或不作任何操作便则目标对象可能拒绝该消息或不作任何操作便返回。如果出现该问题,则在发送消息前,可返回。如果出现该问题,则在发送消息前,可以采取下列步骤:以采取下列步骤:(1 1)检查运行时的目标类。)检查运行时的目标类。(2 2)限制与目标有关的变量的多态性。)限制与目标有关的变量的多态性。(3 3)设计消息时假设目标是有关层次结构中最)设计消息
8、时假设目标是有关层次结构中最特殊、最底层的类特殊、最底层的类-即对其行为具有最高限制即对其行为具有最高限制条件的类。条件的类。11.2 11.2 封装与共生性封装与共生性 本节介绍面向对象体系结构的两个基本特性:本节介绍面向对象体系结构的两个基本特性:封装与共生性。面向对象软件的可理解性和可封装与共生性。面向对象软件的可理解性和可维护性,甚至面向对象软件的其他有价值的特维护性,甚至面向对象软件的其他有价值的特性都是以封装与共生性为基础的。性都是以封装与共生性为基础的。11.2.1 11.2.1 封装结构封装结构 封装的级别封装的级别 :将封装的子程序的级别规定为:将封装的子程序的级别规定为1
9、1级封装。没有经过封装的原始代码规定为级封装。没有经过封装的原始代码规定为0 0级封级封装。面向对象的方法定义了更高级别的封装。装。面向对象的方法定义了更高级别的封装。类(或对象)是将众多的子程序(称为运算指类(或对象)是将众多的子程序(称为运算指令)集合在一起形成一个高级别的结构体。因令)集合在一起形成一个高级别的结构体。因为运算指令已经高出于为运算指令已经高出于1 1级封装,所以类就是处级封装,所以类就是处于于2 2级封装。级封装。制定标准管理各个封装级别之间的相互作用。制定标准管理各个封装级别之间的相互作用。表表11-111-1概括了一些传统结构设计标准。该表显概括了一些传统结构设计标准
10、。该表显示了应用于每一对封装级别的相应标准。示了应用于每一对封装级别的相应标准。表表11-1 11-1 结构设计(或结构设计(或1 1级)标准级)标准 表表11-211-2是表是表11-111-1的扩展,其中包括了的扩展,其中包括了2 2级封装,级封装,所以五个框的内容需要去命名和描述。所以五个框的内容需要去命名和描述。表表11-2 11-2 表表11-111-1的扩展,其中包括的扩展,其中包括2 2级封装级封装11.2.2 11.2.2 共生性共生性 在两个软件元素在两个软件元素A A和和B B之间,共生性意味着:之间,共生性意味着:(1 1)在)在A A中进行了一些变化,那么为了保持全面中
11、进行了一些变化,那么为了保持全面的正确性,就需要对的正确性,就需要对B B进行同样的改变。进行同样的改变。(2 2)或者为了保持正确性,需要在)或者为了保持正确性,需要在A A和和B B中同时中同时进行一些变化。进行一些变化。静态的共生性有以下几种方式静态的共生性有以下几种方式 :(1 1)类型或类的共生性)类型或类的共生性 (2 2)名称共生性)名称共生性 (3 3)常量共生性)常量共生性 (4 4)算法共生性)算法共生性 (5 5)位置共生性)位置共生性 动态共生性是一种依赖于运行代码的执行模式:动态共生性是一种依赖于运行代码的执行模式:对象。动态共生性同样具有很多形式:对象。动态共生性同
12、样具有很多形式:(1 1)执行共生性)执行共生性 (2 2)数值共生性)数值共生性 (3 3)同步共生性)同步共生性 (4 4)标识共生性)标识共生性11.2.3 11.2.3 面向对象系统中共生性的滥用面向对象系统中共生性的滥用 C+C+的友员函数的友员函数 依赖于实现的偶然性依赖于实现的偶然性 无约束的继承无约束的继承 11.2.4 11.2.4 共生性的术语共生性的术语 如果两个对象被迫合成为一个示例,那么说这如果两个对象被迫合成为一个示例,那么说这两个对象具有示例共生性。两个对象具有示例共生性。如果两个对象不得不具有相同的生命期,我就如果两个对象不得不具有相同的生命期,我就说它们具有生
13、命期共生性说它们具有生命期共生性或者被人们表述或者被人们表述为持续时间共生性。为持续时间共生性。11.3 11.3 领域、依附集和内聚领域、依附集和内聚 本节的开始部分介绍定义类的领域。在本节的本节的开始部分介绍定义类的领域。在本节的第二部分引入依附集(第二部分引入依附集(EncumbranceEncumbrance)作为一种)作为一种定量测算一个类的完整程度的方法。最后,定定量测算一个类的完整程度的方法。最后,定义了一种定量测算一个类的方法。义了一种定量测算一个类的方法。11.3.1 11.3.1 对象类的领域对象类的领域 基础领域基础领域 应用领域应用领域 商业领域商业领域 结构领域结构领
14、域 11.3.2 11.3.2 依附集依附集 依附集简介依附集简介 (1 1)定义)定义1 1:一个类:一个类1 1的直接类引用是指的直接类引用是指1 1直接引直接引用的类。用的类。(2 2)定义)定义2 2:如果类:如果类1 1的直接类引用集包含了类的直接类引用集包含了类A1A1、A2A2、AnAn,那么,那么,1 1的间接类引用集就是的间接类引用集就是1 1的直接类引用集和的直接类引用集和A1A1、A2A2、AnAn的间接类引的间接类引用集的并集。用集的并集。依附集表示依附集表示 (1 1)可以用图形方法说明依附集。用一个箭头)可以用图形方法说明依附集。用一个箭头来表示一种直接类引用。如图
15、来表示一种直接类引用。如图11-111-1所示,类所示,类A A的的直接引用是直接引用是A1A1、A2A2、A3A3。因而类。因而类A A的直接依附集的直接依附集就是就是3 3。图图11-111-1(2 2)图)图11-211-2表示的是类表示的是类A A的间接类引用集。你会的间接类引用集。你会发现类发现类A A的间接依附集是通过计算这个图表中所的间接依附集是通过计算这个图表中所有的类而得到的,也就是说,在树状视图中所有的类而得到的,也就是说,在树状视图中所有类的总和,这些类的根节点都是有类的总和,这些类的根节点都是A A并且叶子节并且叶子节点都是底部的基础类(用字母点都是底部的基础类(用字母
16、F F等表示的,如等表示的,如F1F1)。)。图图11-211-2依附集的使用。依附集提供了一种衡量类的复依附集的使用。依附集提供了一种衡量类的复杂程度的方法。类是处于基础领域之上有多高杂程度的方法。类是处于基础领域之上有多高的程度。因而,处于高级别领域的类具有较高的程度。因而,处于高级别领域的类具有较高的间接依附集,处于低级别的类则具有较低的的间接依附集,处于低级别的类则具有较低的间接依附集。间接依附集。DemeterDemeter规则规则 。一个。一个DemeterDemeter规则的惯用语是如规则的惯用语是如下描述的:下描述的:(1 1)假设)假设A A的一个对象为的一个对象为objob
17、j,并且假设定义对,并且假设定义对象象objobj的所有操作运算为的所有操作运算为opop,那么在执行,那么在执行opop操作操作过程中,一条消息的每一个目的地一定是下面过程中,一条消息的每一个目的地一定是下面的对象之一。的对象之一。(2 2)对象)对象objobj本身是一个特别的例子,本身是一个特别的例子,selfself和和supersuper(在(在smalltalksmalltalk工具中),工具中),thisthis(在(在C+C+和和JavaJava语言中),或者语言中),或者CurrentCurrent(在(在EiffelEiffel工具中)工具中)。(3 3)在)在opop标记
18、符范围内通过一个参数引用一个标记符范围内通过一个参数引用一个对象。对象。(4 4)通过对象)通过对象objobj的一个变量来引用一个对象。的一个变量来引用一个对象。(5 5)通过操作运算)通过操作运算obob创建的一个对象。创建的一个对象。(6 6)通过一个全局变量引用的一个对象。)通过一个全局变量引用的一个对象。11.3.3 11.3.3 类的内聚:一个类和它的特性类的内聚:一个类和它的特性 类的内聚(类的内聚(class cohesionclass cohesion)是衡量位于一个)是衡量位于一个类外部接口中的特性(属性和操作运算)间相类外部接口中的特性(属性和操作运算)间相互关联的方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UML第11章 面向对象设计原则 UML 11 面向 对象 设计 原则
限制150内