chp3 继承.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
chp3 继承

* 面向对象分析与设计 Object-Oriented Analysis and Design 第三章 继承 学习目的 ?理解继承(Inheritance)的含义 ?理解抽象类与具体类的区别 ?理解何时使用继承 为何需要继承 ?继承允许类从其父类获得某些特性,并增加其独有 的特征 ?子类继承父类的所有字段、消息和方法 ?UML中,继承用三角形描述(父类端) ?为何使用继承 ? 支持更丰富、更强大的建模 ? 可以通过子类共享父类中的信息和行为,从而减少编程 ? 自然,符合人类的思维 为何需要继承 类型之前必须 有冒号 设计类层次 ?对集合(Collection)建模,四种集合 ? List:集合中对象按插入顺序放置 ? Bag:对象没有顺序的集合 ? LinkedList:每一个对象指向序列中的下一个对象,插 入快,访问慢 ? ArrayList:利用数组保持对象的顺序,在内存中顺序存 放。访问快,插入慢 设计类层次 ?从顶到下建模 ?自底向上建模 设计类层次 ? 查找可以共享的消息,并 将其方法尽可能高层次的 类中 ? contains(:Object):boolean ? elementAt(:int):Object ? numberOfElements():int 即使未考虑属性,也给 其留下位置 尚未考虑实现方法 的消息用斜体 为类层次增加实现 ? 为类添加字段、构造函数和方法 ? 不能为所有Collection类实现contains 消息 ? List类contains的Java实现 ? 只编写一个方法,但可用于List的所有子类 ? LinkedList和ArrayList的elementAt方法需要不同的实现 未指定接收对象,表示消 息发送给当前对象 为类层次增加实现 ?类似地,实现numberOfElements消息 ? 将元素数实现为字段:获取元素数快,占用额外空间, 增、删元素慢 ? 按需计算元素数:获取元素数慢,不要额外空间,增、 删元素快 ?两类消息 ? 没有关联方法 ? 有关联方法 ?未完成的方法称为抽象方法(abstract method), 反之为具体方法(concrete method) ? 抽象方法用斜体或者{abstract}表示 为类层次增加实现 抽象类 ? 抽象类是至少有一个抽象方法的类,抽象方法可以是自身 的,也可以是从父类继承的 ? 抽象类的名称用斜体,或在旁边用{abstract}表示 抽象类 ?抽象类的优点 ? 允许更丰富、更灵活的建模,比如List类有三个消息, 但不是每一个都能给出具体的方法 ? 更多的代码共享,可以写出使用抽象方法的具体方法, 比如List的contains调用了抽象方法 ?如果调用抽象方法,会怎么样 ? 大多数语言禁止创建抽象类的实例(比如创建 Collection对象并调用其contains方法),从而使得一 定调用已实现的方法 抽象类 ?实际设计时,大多数超类都是抽象类 ?继承层次通常自底向上产生 ? 1、找出问题域的具体概念,以及其知识和行为 ? 2、找出共同点,引入超类 ? 3、将超类抽象为更一般的超类,直到根类 ?如果超类不是抽象类,可将其表示为步骤1中的具体 概念 ?通过继承具体类以改变已有类的元素具有缺陷 ? 创建老类实例的代码需要修改才能达到改进的目的,比如 ArrayList和MyarrayList 抽象类 ?如果出现一个具体类Y继承于另一个具体类X,则由 于Y的工作方式与X不同,从而Y不是X的真正子类 ?此时,可将X转换为抽象超类X1(两个子类Y和X2) ?X和Y共同的知识和行为放到X1中,X有而Y没有的 知识放到X2中 方法重定义 ? 可以对继承来的元素重定义 ? 继承的内容重定义 ? 修改继承的方法 ? 提升消息在子类中的可见性 ? 改变属性的名称或类型 ? 继承的目的 ? 为继承的抽象方法写代码 ? 子类中的方法完成额外的工作,如toString方法 ? 为子类提供更高效和更准确的代码 ? 里氏代换原则 ? 如果调用的是父类的话,那么换成子类也完全可以运行 ? 重定义元素时,不要改变其含义 ? 比如,为LinkedList重定义contains方法,如果元素不存在,返回 True 方法重定义 栈类的实现 ? 栈的四个消息 ? ? ? ? push() peek():Object 返回栈顶对象 isEmpty():boolean pop():Object 返回栈顶对象并将其从栈顶删除 ? LinkedList类的消息 ? ? ? ? addElement():在List尾部加入元素 lastElement():Object numberOfEleme

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档