软件工程 第11章:面向对象设计原则.ppt
《软件工程 第11章:面向对象设计原则.ppt》由会员分享,可在线阅读,更多相关《软件工程 第11章:面向对象设计原则.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件工程软件工程Software Engineering2023年1月3日1广东工业大学计算机学院第第11章章 面向对象设计原则面向对象设计原则o概述和对比类与类型的表示方法,介绍类型一致性概述和对比类与类型的表示方法,介绍类型一致性原则,依据闭合行为讨论健壮的子类。原则,依据闭合行为讨论健壮的子类。o本章内容:本章内容:o11.1 类型一致性与闭合行为类型一致性与闭合行为o11.2 封装与共生性封装与共生性o11.3 领域、依附集和内聚领域、依附集和内聚o11.4 继承与多态性的危险性继承与多态性的危险性o11.5 状态空间和行为状态空间和行为2023/1/32广东工业大学计算机学院11.1
2、 类型一致性与闭合行为类型一致性与闭合行为o11.1.1 类与类型类与类型o从抽象角度和外部特征来理解,最好的方式是将类从抽象角度和外部特征来理解,最好的方式是将类看作是类型的实现,即类型包括了类的目标以及类看作是类型的实现,即类型包括了类的目标以及类的状态空间和行为。的状态空间和行为。一个类型可以具体实现为多个类,每个类又包括自己一个类型可以具体实现为多个类,每个类又包括自己独特的内部设计。独特的内部设计。类型代表着类的外部特征,但子类型的概念和子类却类型代表着类的外部特征,但子类型的概念和子类却是不同的。是不同的。2023/1/33广东工业大学计算机学院o11.1.2 类型一致性原则类型一
3、致性原则 o类型一致性设计原则可表述为:如果类型一致性设计原则可表述为:如果s为为t的真子类的真子类型,则型,则s必须与必须与t一致,即类型一致,即类型s的对象可以出现在的对象可以出现在类型类型t的对象所需要的任何环境中,并且当该对象的对象所需要的任何环境中,并且当该对象的任何获取操作执行时,仍能保持其正确性。例如,的任何获取操作执行时,仍能保持其正确性。例如,Circle是是Ellipse的子类型。尽管这个椭圆形操作的子类型。尽管这个椭圆形操作扩展成圆形是不行的,但任何为圆形的对象也必然扩展成圆形是不行的,但任何为圆形的对象也必然是椭圆形的。是椭圆形的。2023/1/34广东工业大学计算机学
4、院o在设计中,每个类或子类的继承层次结构必须遵循在设计中,每个类或子类的继承层次结构必须遵循类型一致性原则。为了做到每个子类与其超类一致,类型一致性原则。为了做到每个子类与其超类一致,引入两个重要子原则:抗变性与协变性。满足下列引入两个重要子原则:抗变性与协变性。满足下列三个操作限制条件:三个操作限制条件:o(1)每个超类的操作必须与其子类中一个操作相)每个超类的操作必须与其子类中一个操作相对应,它们具有相同的名字和函数原则。对应,它们具有相同的名字和函数原则。o(2)每个子类操作的前置条件不应强于其超类操)每个子类操作的前置条件不应强于其超类操作的前置条件,这就是抗变性原则。作的前置条件,这
5、就是抗变性原则。o(3)每个子类操作的后置条件至少要和其相应超)每个子类操作的后置条件至少要和其相应超类操作的后置条件一样强,这就是协变性原则。类操作的后置条件一样强,这就是协变性原则。2023/1/35广东工业大学计算机学院o类型一致性原则要求子类必须为类的真子类型,类型一致性原则要求子类必须为类的真子类型,并且满足下列六个限制条件并且满足下列六个限制条件:o(1)S的状态空间(的状态空间(State-space)必须与)必须与T的的状态空间一致。状态空间一致。o(2)在)在S和的共享空间中,和的共享空间中,S的状态空间必须等的状态空间必须等同于或位于同于或位于T的状态空间之内。另一种描述方
6、法:的状态空间之内。另一种描述方法:S的类不变式必须等同于或强于的不变式。的类不变式必须等同于或强于的不变式。o(3)对于)对于T的每一操作(如的每一操作(如T.op),),S覆盖或重覆盖或重定义为定义为S.op,则:,则:S.op必须与必须与T.op名称相同。名称相同。2023/1/36广东工业大学计算机学院o(4)S.op的形式函数原型的参数必须与的形式函数原型的参数必须与 T.op的的形式函数原型的参数表一一对应。形式函数原型的参数表一一对应。o(5)S.op的前置条件必须等同于或弱于的前置条件必须等同于或弱于T.op的的前置条件。前置条件。o(6)S.op的后置条件必须等同于或强于的后
7、置条件必须等同于或强于.op的的后置条件。后置条件。2023/1/37广东工业大学计算机学院o11.1.3 闭合行为原则闭合行为原则 o闭合行为原则是指:在基于类型闭合行为原则是指:在基于类型/子类型层次结构子类型层次结构的继承层次结构中,类的继承层次结构中,类C的任何对象操作的执行的任何对象操作的执行包括从包括从C的超类继承的所有操作的超类继承的所有操作应满足应满足C的的类不变式。类不变式。o如果设计一个类中给某个对象发送消息来调用其修如果设计一个类中给某个对象发送消息来调用其修改操作,则应该检查目标类的闭合性。如果发送消改操作,则应该检查目标类的闭合性。如果发送消息并作一般(超类)条件假设
8、,则必须做好准备,息并作一般(超类)条件假设,则必须做好准备,目标对象可能拒绝该消息或不作任何操作便返回。目标对象可能拒绝该消息或不作任何操作便返回。如果出现该问题,则在发送消息前,如果出现该问题,则在发送消息前,2023/1/38广东工业大学计算机学院o可以采取下列步骤:可以采取下列步骤:o(1)检查运行时的目标类。)检查运行时的目标类。o(2)限制与目标有关的变量的多态性。)限制与目标有关的变量的多态性。o(3)设计消息时假设目标是有关层次结构中最特)设计消息时假设目标是有关层次结构中最特殊、最底层的类殊、最底层的类即对其行为具有最高限制条件即对其行为具有最高限制条件的类。的类。2023/
9、1/39广东工业大学计算机学院11.2 封装与共生性封装与共生性o11.2.1 封装结构封装结构 o1.封装的级别封装的级别 o 0级封装:没有经过封装的原始代码。级封装:没有经过封装的原始代码。o 1级封装:将封装的子程序的级别。级封装:将封装的子程序的级别。o 2级封装:类(或对象)是将众多的子程序(称级封装:类(或对象)是将众多的子程序(称为运算指令)集合在一起形成一个高级别的结构体。为运算指令)集合在一起形成一个高级别的结构体。因为运算指令已经高出于因为运算指令已经高出于1级封装。级封装。o 3级封装:商业类经常会在各自的应用领域里被级封装:商业类经常会在各自的应用领域里被“水平水平”
10、划归为这级封装的结构。划归为这级封装的结构。2023/1/310广东工业大学计算机学院o2.制定标准管理各个封装级别之间的相互作用制定标准管理各个封装级别之间的相互作用o传统结构设计标准传统结构设计标准:o表表11-1的扩展,其中包括了的扩展,其中包括了2级封装级封装 2023/1/311广东工业大学计算机学院o11.2.2 共生性共生性o共生性(共生性(Connascence)一词来源于拉丁文,)一词来源于拉丁文,意思是意思是“一起出生的一起出生的”。这种意思可以理解为:。这种意思可以理解为:“相相依为命依为命”。或许在需求分析、设计或规划阶段,具。或许在需求分析、设计或规划阶段,具有共生性
11、(或同族)的两个软件元素来源于一些相有共生性(或同族)的两个软件元素来源于一些相互联系的父类,并且至少因为同一个原因而具有共互联系的父类,并且至少因为同一个原因而具有共同的命运。下面是共生性应用于软件中的定义。同的命运。下面是共生性应用于软件中的定义。2023/1/312广东工业大学计算机学院o在两个软件元素在两个软件元素A和和B之间,共生性意味着:之间,共生性意味着:o(1)在)在A中进行了一些变化,那么为了保持全面中进行了一些变化,那么为了保持全面的正确性,就需要对的正确性,就需要对B进行同样的改变(或者至少进行同样的改变(或者至少要仔细地进行校验)。要仔细地进行校验)。o(2)或者为了保
12、持正确性,需要在)或者为了保持正确性,需要在A和和B中同时进中同时进行一些变化。行一些变化。o静态的共生性有以下几种方式:静态的共生性有以下几种方式:o1)类型或类的共生性。在数据的)类型或类的共生性。在数据的int类型中见到过类型中见到过类型共生性。类型共生性。2023/1/313广东工业大学计算机学院o2)名称共生性。两个(或以上)程序变量为了达)名称共生性。两个(或以上)程序变量为了达到相同引用的目的,需要有相同的名称。到相同引用的目的,需要有相同的名称。o3)常量共生性。它实际上是一种)常量共生性。它实际上是一种“数值数值/有意义的有意义的常量常量”共生性。与结构设计中的混合连接技术相
13、似,共生性。与结构设计中的混合连接技术相似,也会带来很多系统中的可维护性的问题。也会带来很多系统中的可维护性的问题。o4)算法共生性。算法共生性与常量共生性非常相)算法共生性。算法共生性与常量共生性非常相似。似。o5)位置共生性。一个程序单元中大部分的代码具)位置共生性。一个程序单元中大部分的代码具有位置共生性:要运行正确的执行序列中的两行代有位置共生性:要运行正确的执行序列中的两行代码,那么它们就必须具有正确的语法。码,那么它们就必须具有正确的语法。2023/1/314广东工业大学计算机学院o动态共生性具有以下几种形式:动态共生性具有以下几种形式:o1)执行共生性)执行共生性:执行共生性是位
14、置共生性的动态表执行共生性是位置共生性的动态表现形式。它有几种类型,包括顺序和相邻。现形式。它有几种类型,包括顺序和相邻。o2)数值共生性)数值共生性:数值共生性常涉及很多算法限制。数值共生性常涉及很多算法限制。o当两个数据库中的相同信息具有不同格式时,就不当两个数据库中的相同信息具有不同格式时,就不能够使用数值共生性。能够使用数值共生性。o3)同步共生性)同步共生性:这种特性常在实时性的系统中出现这种特性常在实时性的系统中出现o4)标识共生性。有两个对象,对象)标识共生性。有两个对象,对象1和对象和对象2 总总是指向同一个对象体,其中的每一个对象都带有指是指向同一个对象体,其中的每一个对象都
15、带有指向另一个对象的参数。向另一个对象的参数。2023/1/315广东工业大学计算机学院o11.2.3 面向对象系统中共生性的滥用面向对象系统中共生性的滥用 o1.C+的友员函数的友员函数 o创立创立C+的友员函数是非常明显地破坏封装边界的友员函数是非常明显地破坏封装边界的行为。的行为。o2.依赖于实现的偶然性依赖于实现的偶然性 o在应用过程中利用偶然性,没有依据的事实应用和在应用过程中利用偶然性,没有依据的事实应用和已创建类的内部操作运算之间创立超出封装边界的已创建类的内部操作运算之间创立超出封装边界的算法共生性。算法共生性。o3.无约束的继承无约束的继承 2023/1/316广东工业大学计
16、算机学院o11.2.4 共生性的术语共生性的术语o如果两个对象被迫合成为一个示例,那么说这两个如果两个对象被迫合成为一个示例,那么说这两个对象具有示例共生性。如果两个对象不得不具有相对象具有示例共生性。如果两个对象不得不具有相同的生命期,则它们具有生命期共生性同的生命期,则它们具有生命期共生性或者被或者被人们表述为持续时间共生性。人们表述为持续时间共生性。2023/1/317广东工业大学计算机学院11.3 领域、依附集和内聚领域、依附集和内聚o11.3.1 对象类的领域对象类的领域 o标准标准OO系统包含四个主要领域:系统包含四个主要领域:o1.基础领域有:基础性、结构性、语义性基础领域有:基
17、础性、结构性、语义性 o基础类包括整型、基础类包括整型、bool型和字符型。型和字符型。o结构类过去也被称为容器类,它可以实现数据类型结构类过去也被称为容器类,它可以实现数据类型的结构,包括栈、队列、线性表等,通常依靠一般的结构,包括栈、队列、线性表等,通常依靠一般性设计。性设计。o语义类包括语义类包括Date、Time、Angle、Money和和Mass。2023/1/318广东工业大学计算机学院o2.应用领域应用领域o应用领域中的一个类只能被一个单独的应用系统所应用领域中的一个类只能被一个单独的应用系统所使用。它包含事件识别类和事件管理类。使用。它包含事件识别类和事件管理类。o在应用领域中
18、的类具有非常狭窄的可重复使用性。在应用领域中的类具有非常狭窄的可重复使用性。o3.商业领域中的类:属性类、角色类和关系类。商业领域中的类:属性类、角色类和关系类。o属性类描述了商业领域世界里事物的属性。属性类描述了商业领域世界里事物的属性。o角色类由商业行为中角色类由商业行为中“事物扮演角色事物扮演角色”演变而来。演变而来。o相互关系类是从商业领域各种事物之间的相互关系相互关系类是从商业领域各种事物之间的相互关系演变而来的。演变而来的。2023/1/319广东工业大学计算机学院o4.结构领域结构领域o结构领域包含三组类:机器间通信类、数据库操作结构领域包含三组类:机器间通信类、数据库操作类和人
19、机接口界面类。类和人机接口界面类。o结构性类在很多商业应用领域得到广泛应用,只要结构性类在很多商业应用领域得到广泛应用,只要应用程序能在以类为支撑的物理结构上实现。应用程序能在以类为支撑的物理结构上实现。2023/1/320广东工业大学计算机学院o5.每一领域类的来源每一领域类的来源o不同领域的类具有不同的可重用级别。处于最低级不同领域的类具有不同的可重用级别。处于最低级别领域的类具有最大的可重复使用能力,而处于最别领域的类具有最大的可重复使用能力,而处于最高级别领域的类则具有最小的可重复使用能力。高级别领域的类则具有最小的可重复使用能力。o基础领域中的类定义为具有最大的可重复使用能力,基础领
20、域中的类定义为具有最大的可重复使用能力,并且应用领域中的类的软件结构只能在一个单独的并且应用领域中的类的软件结构只能在一个单独的应用系统中使用。开发一个基础性类库是一件非常应用系统中使用。开发一个基础性类库是一件非常困难并且费用昂贵的事情,不必自己尝试着去做这困难并且费用昂贵的事情,不必自己尝试着去做这件事情。件事情。o处于商业领域中的类非常具有趣味性和挑战性。处于商业领域中的类非常具有趣味性和挑战性。o最高级别的领域就是应用领域。最高级别的领域就是应用领域。2023/1/321广东工业大学计算机学院11.3.2 依附集依附集 o用一种定量的方法来讲述基于基础领域的类称为依用一种定量的方法来讲
21、述基于基础领域的类称为依附集(附集(Encumbrance)。)。o1.依附集简介依附集简介 o定义定义1(直接类引用集)(直接类引用集):一个类:一个类1的直接类引用的直接类引用是指是指1直接引用的类。直接引用的类。o在大部分面向对象的语言里,一个类在大部分面向对象的语言里,一个类1可以直接地可以直接地引用另一个类引用另一个类2:o定义定义2(间接类引用集)(间接类引用集):如果类:如果类1的直接类引用的直接类引用集包含了类集包含了类A1、A2、An,那么,那么,1的间接的间接类引用集就是类引用集就是1的直接类引用集和的直接类引用集和A1、A2、An 的间接类引用集的并集。的间接类引用集的并
22、集。2023/1/322广东工业大学计算机学院o依附集的定义:一个类的直接依附集是指这个类的依附集的定义:一个类的直接依附集是指这个类的直接引用集的大小,一个类的间接依附集是指这个直接引用集的大小,一个类的间接依附集是指这个类的间接引用集大小。类的间接引用集大小。o11-1所示,类所示,类A的直接引用是的直接引用是A1、A2、A3 2023/1/323广东工业大学计算机学院o图图11-2所示的是类所示的是类A的间接类引用集的间接类引用集 2023/1/324广东工业大学计算机学院o2.依附集的使用依附集的使用 o依附集提供了一种衡量类的复杂程度的方法。类是依附集提供了一种衡量类的复杂程度的方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 第11章:面向对象设计原则 11 面向 对象 设计 原则
限制150内