UML第11章 面向对象设计原则.pptVIP

  1. 1、本文档共78页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 面向对象设计原则 11.1 类型一致性与闭合行为 11.2 封装与共生性 11.3 领域、依附集和内聚 11.4 继承与多态性的危险性 11.5 状态空间和行为 本章将介绍建立健壮的类层次结构应遵循的两项重要原则:类型一致性和闭合行为。 11.1 类型一致性与闭合行为 本节首先介绍类型与类的关系,然后分别介绍了类型一致性与闭合行为。 11.1.1 类与类型 类看作是类型的实现。也就是说,类型包括了类的目标以及类的状态空间和行为。 一个类型可以具体实现为多个类,每个类又包括自己独特的内部设计。 类型代表着类的外部特征,但子类型的概念和子类却是不同的。 11.1.2 类型一致性原则 类型一致性设计原则可表述为:如果s为t的真子类型,则s必须与t一致,即类型s的对象可以出现在类型t的对象所需要的任何环境中,并且当该对象的任何获取操作执行时,仍能保持其正确性。 在完善的面向对象设计中,每个类的类型必须与其超类相一致,即类或子类的继承层次结构必须遵循类型一致性原则。 为了做到每个子类的类型能够真正可信地与其超类的类型一致,引入类型一致性的两个重要子原则:抗变性与协变性。 必须保证满足下列三个操作限制条件: (1)每个超类的操作必须与其子类中一个操作相对应,它们具有相同的名字和函数原则。 (2)每个子类操作的前置条件不应强于其超类操作的前置条件,这就是抗变性原则。 (3)每个子类操作的后置条件至少要和其相应超类操作的后置条件一样强,这就是协变性原则。 类型一致性原则要求子类S必须为类T的真子类型,并且满足下列六个限制条件(前两个条件适用于所有类,后四个条件适用于单个操作): (1)S的状态空间必须与T的状态空间一致。 (2)在S和T的共享空间中,S的状态空间必须等同于或位于T的状态空间之内。 (3)S.op必须与T.op名称相同。 (4)S.op的形式函数原型的参数必须与 T.op的形式函数原型的参数表一一对应。 (5)S.op的前置条件必须等同于或弱于T.op的前置条件。 (6)S.op的后置条件必须等同于或强于T.op的后置条件。 11.1.3 闭合行为原则 闭合行为原则是指:在基于类型/子类型层次结构的继承层次结构中,类C的任何对象操作的执行--包括从C的超类继承的所有操作——应满足C的类不变式。 如果你发送消息并作一般(超类)条件假设,则目标对象可能拒绝该消息或不作任何操作便返回。如果出现该问题,则在发送消息前,可以采取下列步骤: (1)检查运行时的目标类。 (2)限制与目标有关的变量的多态性。 (3)设计消息时假设目标是有关层次结构中最特殊、最底层的类--即对其行为具有最高限制条件的类。 11.2 封装与共生性 本节介绍面向对象体系结构的两个基本特性:封装与共生性。面向对象软件的可理解性和可维护性,甚至面向对象软件的其他有价值的特性都是以封装与共生性为基础的。 11.2.1 封装结构 封装的级别 :将封装的子程序的级别规定为1级封装。没有经过封装的原始代码规定为0级封装。面向对象的方法定义了更高级别的封装。类(或对象)是将众多的子程序(称为运算指令)集合在一起形成一个高级别的结构体。因为运算指令已经高出于1级封装,所以类就是处于2级封装。 制定标准管理各个封装级别之间的相互作用。表11-1概括了一些传统结构设计标准。该表显示了应用于每一对封装级别的相应标准。 表11-2是表11-1的扩展,其中包括了2级封装,所以五个框的内容需要去命名和描述。 11.2.2 共生性 在两个软件元素A和B之间,共生性意味着: (1)在A中进行了一些变化,那么为了保持全面的正确性,就需要对B进行同样的改变。 (2)或者为了保持正确性,需要在A和B中同时进行一些变化。 静态的共生性有以下几种方式 : (1)类型或类的共生性 (2)名称共生性 (3)常量共生性 (4)算法共生性 (5)位置共生性 动态共生性是一种依赖于运行代码的执行模式:对象。动态共生性同样具有很多形式: (1)执行共生性 (2)数值共生性 (3)同步共生性 (4)标识共生性 11.2.3 面向对象系统中共生性的滥用 C++的友员函数 依赖于实现的偶然性 无约束的继承 11.2.4 共生性的术语 如果两个对象被迫合成为一个示例,那么说这两个对象具有示例共生性。 如果两个对象不得不具有相同的生命期,我就说它们具有生命期共生性——或者被人们表述为持续时间共生性。 11.3 领域、依附集和内聚 本节的开始部分介绍定义类的领域。在本节的第二部分引入依附集(Encumbrance)作为一种定量测算一个类的完整程度的方法。最后

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档