软件工程课件 SE11

上传人:清晨86****784 文档编号:260545277 上传时间:2022-02-28 格式:PPT 页数:55 大小:332KB
返回 下载 相关 举报
软件工程课件 SE11_第1页
第1页 / 共55页
软件工程课件 SE11_第2页
第2页 / 共55页
软件工程课件 SE11_第3页
第3页 / 共55页
软件工程课件 SE11_第4页
第4页 / 共55页
软件工程课件 SE11_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《软件工程课件 SE11》由会员分享,可在线阅读,更多相关《软件工程课件 SE11(55页珍藏版)》请在金锄头文库上搜索。

1、软件工程Software Engineering2022/2/261广东工业大学计算机学院第11章 面向对象设计原则o概述和对比类与类型的表示方法,介绍类型一致性原则,依据闭合行为讨论健壮的子类。 o本章内容:o11.1 类型一致性与闭合行为o11.2 封装与共生性o11.3 领域、依附集和内聚o11.4 继承与多态性的危险性o11.5 状态空间和行为Date2广东工业大学计算机学院11.1 类型一致性与闭合行为o11.1.1 类与类型o从抽象角度和外部特征来理解,最好的方式是将类看作是类型的实现,即类型包括了类的目标以及类的状态空间和行为。 一个类型可以具体实现为多个类,每个类又包括自己独特

2、的内部设计。 类型代表着类的外部特征,但子类型的概念和子类却是不同的。 Date3广东工业大学计算机学院o11.1.2 类型一致性原则 o类型一致性设计原则可表述为:如果s为t的真子类型,则s必须与t一致,即类型s的对象可以出现在类型t的对象所需要的任何环境中,并且当该对象的任何获取操作执行时,仍能保持其正确性。例如,Circle是Ellipse的子类型。尽管这个椭圆形操作扩展成圆形是不行的,但任何为圆形的对象也必然是椭圆形的。 Date4广东工业大学计算机学院o在设计中,每个类或子类的继承层次结构必须遵循类型一致性原则。为了做到每个子类与其超类一致,引入两个重要子原则:抗变性与协变性。满足下

3、列三个操作限制条件: o(1)每个超类的操作必须与其子类中一个操作相对应,它们具有相同的名字和函数原则。o(2)每个子类操作的前置条件不应强于其超类操作的前置条件,这就是抗变性原则。o(3)每个子类操作的后置条件至少要和其相应超类操作的后置条件一样强,这就是协变性原则。Date5广东工业大学计算机学院o类型一致性原则要求子类必须为类的真子类型,并且满足下列六个限制条件 :o(1)S的状态空间(State-space)必须与T的状态空间一致。o(2)在S和的共享空间中,S的状态空间必须等同于或位于T的状态空间之内。另一种描述方法:S的类不变式必须等同于或强于的不变式。o(3)对于T的每一操作(如

4、T.op),S覆盖或重定义为S.op,则:S.op必须与T.op名称相同。Date6广东工业大学计算机学院o(4)S.op的形式函数原型的参数必须与 T.op的形式函数原型的参数表一一对应。o(5)S.op的前置条件必须等同于或弱于T.op的前置条件。o(6)S.op的后置条件必须等同于或强于.op的后置条件。 Date7广东工业大学计算机学院o11.1.3 闭合行为原则 o闭合行为原则是指:在基于类型/子类型层次结构的继承层次结构中,类C的任何对象操作的执行包括从C的超类继承的所有操作应满足C的类不变式。o如果设计一个类中给某个对象发送消息来调用其修改操作,则应该检查目标类的闭合性。如果发送

5、消息并作一般(超类)条件假设,则必须做好准备,目标对象可能拒绝该消息或不作任何操作便返回。如果出现该问题,则在发送消息前,Date8广东工业大学计算机学院o可以采取下列步骤:o(1)检查运行时的目标类。o(2)限制与目标有关的变量的多态性。o(3)设计消息时假设目标是有关层次结构中最特殊、最底层的类即对其行为具有最高限制条件的类。 Date9广东工业大学计算机学院11.2 封装与共生性o11.2.1 封装结构 o1. 封装的级别 o 0级封装:没有经过封装的原始代码。o 1级封装:将封装的子程序的级别。o 2级封装:类(或对象)是将众多的子程序(称为运算指令)集合在一起形成一个高级别的结构体。

6、因为运算指令已经高出于1级封装。o 3级封装:商业类经常会在各自的应用领域里被“水平”划归为这级封装的结构。 Date10广东工业大学计算机学院o2. 制定标准管理各个封装级别之间的相互作用o传统结构设计标准 :o表11-1的扩展,其中包括了2级封装 Date11广东工业大学计算机学院o11.2.2 共生性o共生性(Connascence)一词来源于拉丁文,意思是“一起出生的”。这种意思可以理解为:“相依为命”。或许在需求分析、设计或规划阶段,具有共生性(或同族)的两个软件元素来源于一些相互联系的父类,并且至少因为同一个原因而具有共同的命运。下面是共生性应用于软件中的定义。Date12广东工业

7、大学计算机学院o在两个软件元素A和B之间,共生性意味着:o(1)在A中进行了一些变化,那么为了保持全面的正确性,就需要对B进行同样的改变(或者至少要仔细地进行校验)。o(2)或者为了保持正确性,需要在A和B中同时进行一些变化。 o静态的共生性有以下几种方式:o1)类型或类的共生性。在数据的int类型中见到过类型共生性。Date13广东工业大学计算机学院o2)名称共生性。两个(或以上)程序变量为了达到相同引用的目的,需要有相同的名称。o3)常量共生性。它实际上是一种“数值/有意义的常量”共生性。与结构设计中的混合连接技术相似,也会带来很多系统中的可维护性的问题。o4)算法共生性。算法共生性与常量

8、共生性非常相似。o5)位置共生性。一个程序单元中大部分的代码具有位置共生性:要运行正确的执行序列中的两行代码,那么它们就必须具有正确的语法。 Date14广东工业大学计算机学院o动态共生性具有以下几种形式:o1)执行共生性:执行共生性是位置共生性的动态表现形式。它有几种类型,包括顺序和相邻。o2)数值共生性:数值共生性常涉及很多算法限制。o当两个数据库中的相同信息具有不同格式时,就不能够使用数值共生性。o3)同步共生性:这种特性常在实时性的系统中出现o4)标识共生性。有两个对象,对象1和对象2 总是指向同一个对象体,其中的每一个对象都带有指向另一个对象的参数。 Date15广东工业大学计算机学

9、院o11.2.3 面向对象系统中共生性的滥用 o1. C+的友员函数 o创立C+的友员函数是非常明显地破坏封装边界的行为。 o2. 依赖于实现的偶然性 o在应用过程中利用偶然性,没有依据的事实应用和已创建类的内部操作运算之间创立超出封装边界的算法共生性。 o3. 无约束的继承 Date16广东工业大学计算机学院o11.2.4 共生性的术语o如果两个对象被迫合成为一个示例,那么说这两个对象具有示例共生性。如果两个对象不得不具有相同的生命期,则它们具有生命期共生性或者被人们表述为持续时间共生性。 Date17广东工业大学计算机学院11.3 领域、依附集和内聚o11.3.1 对象类的领域 o标准OO

10、系统包含四个主要领域:o1. 基础领域有:基础性、结构性、语义性 o基础类包括整型、bool型和字符型。o结构类过去也被称为容器类,它可以实现数据类型的结构,包括栈、队列、线性表等,通常依靠一般性设计。o语义类包括Date、Time、Angle、Money和Mass。 Date18广东工业大学计算机学院o2. 应用领域o应用领域中的一个类只能被一个单独的应用系统所使用。它包含事件识别类和事件管理类。o在应用领域中的类具有非常狭窄的可重复使用性。 o3. 商业领域中的类:属性类、角色类和关系类。o属性类描述了商业领域世界里事物的属性。o角色类由商业行为中“事物扮演角色”演变而来。o相互关系类是从

11、商业领域各种事物之间的相互关系演变而来的。Date19广东工业大学计算机学院o4. 结构领域o结构领域包含三组类:机器间通信类、数据库操作类和人机接口界面类。o结构性类在很多商业应用领域得到广泛应用,只要应用程序能在以类为支撑的物理结构上实现。 Date20广东工业大学计算机学院o5. 每一领域类的来源o不同领域的类具有不同的可重用级别。处于最低级别领域的类具有最大的可重复使用能力,而处于最高级别领域的类则具有最小的可重复使用能力。o基础领域中的类定义为具有最大的可重复使用能力,并且应用领域中的类的软件结构只能在一个单独的应用系统中使用。开发一个基础性类库是一件非常困难并且费用昂贵的事情,不必

12、自己尝试着去做这件事情。o处于商业领域中的类非常具有趣味性和挑战性。o最高级别的领域就是应用领域。 Date21广东工业大学计算机学院11.3.2 依附集 o用一种定量的方法来讲述基于基础领域的类称为依附集(Encumbrance)。o1. 依附集简介 o定义1(直接类引用集) :一个类1的直接类引用是指1直接引用的类。 o在大部分面向对象的语言里,一个类1可以直接地引用另一个类2:o定义2(间接类引用集) :如果类1的直接类引用集包含了类A1、A2、An,那么,1的间接类引用集就是1的直接类引用集和A1、 A2、 、An 的间接类引用集的并集。 Date22广东工业大学计算机学院o依附集的定

13、义:一个类的直接依附集是指这个类的直接引用集的大小,一个类的间接依附集是指这个类的间接引用集大小。 o11-1所示,类A的直接引用是A1、A2、A3 Date23广东工业大学计算机学院o图11-2所示的是类A的间接类引用集 Date24广东工业大学计算机学院o2. 依附集的使用 o依附集提供了一种衡量类的复杂程度的方法。类是处于基础领域之上有多高的程度,因而,处于高级别领域的类具有较高的间接依附集,处于低级别的类则具有较低的间接依附集。o3. Demeter规则o作为限制一个类的直接依附集的指导原则,Demeter规则是通过限制这个类直接引用集的规模来实现的。Demeter规则的得名是从一个被

14、称为Demeter的面向对象方案中演化而来的。 Date25广东工业大学计算机学院Demeter规则的惯用语是如下描述的:o(1)假设A的对象为obj,并且假设定义对象obj的所有操作运算为op,那么在执行op操作过程中,一条消息的每一个目的地一定是下面的对象之一。o(2)对象obj本身是一个特别的例子,self和super,this(在C+和Java中)/Current(在Eiffel中)。o(3)op标记符范围内通过一个参数引用一个对象o(4)通过对象obj的一个变量来引用一个对象。o(5)通过操作运算ob创建的一个对象。o(6)通过一个全局变量引用的一个对象。Date26广东工业大学计算

15、机学院11.3.3 类的内聚:一个类和它的特性 o类的内聚(class cohesion)是衡量位于一个类外部接口中的特性(属性和操作运算)间相互关联的方法。一个低级内聚的类具有一组并不属于一个整体的特性,这些特性通过类来实现抽象类型。Date27广东工业大学计算机学院o试图通过在使用变量的方法中,出现越多的重叠现象,那么这个类的内聚就越强。这种方法不好,主要原因:o(1)内聚是应该能够从一个封装软件单元的外表很容易识别的一种特性。所以为了实现类的内聚而不得不去查看类的内核的做法看起来是错误的。o(2)这样的一种衡量方法是很不稳定的,并且过分地依赖于类实现方法的特别的内部设计,而这种类的实现方

16、法在这个类的整个生命周期中可能发生改变。 Date28广东工业大学计算机学院o1. 混合事例型内聚o混合事例型内聚的定义:一个混合事例型内聚的类具有这样的特性:对于类的对象来说这些特性是未被定义的。o例如,假设一个销售部门既有发放佣金的销售人员,又有不发放佣金的销售人员。Fred是具有佣金的销售人员,而Mary是没有佣金的销售人员。在采用面向对象方法来设计有关这个部门的应用系统时,有一个Salesperson类,通过fred和mary两个变量指向这个类的对象实例。Date29广东工业大学计算机学院o2. 混合领域型内聚o在给出混合领域型内聚的定义前,先需要对“非本征的(extrinsic)”进行定义。o如果类A在不涉及到任何类B概念的前提下完全能够得到充分的定义,那么对于类A来说类B是非本征的。如果类B捕获类A中固有的一些特性,那么对于类A来说类B就是本征的。o混合领域型内聚的定义:一个混合领域型内聚的类包含这样的一个元素,这个元素是一个不同领域的非本征类的直接依附集。 Date30广东工业大学计算机学院o3. 混合角色型内聚o混合角色型内聚的定义为:一个具有混合角色型的类A包含了这样

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号