第4章数据抽象.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章数据抽象

封面 第4章 数据抽象 章引言 4.1数据抽象的含义 4.1.1 基本类型的实现 boolean类型的接口和实现 4.1.2 类的接口 类的API 2. 类和类型 4.1.3 String 字符串需要的最小接口集 基于最小接口集 2. String与基本数据类型 4.2 抽象类 4.2.1 不能够实例化的类 4.2.2子类的占位符 4.2.3 接口继承 Vs. 实现继承 实现继承拥有诸多的风险 1. 复用父类代码的形式 2. 改写能否遵循父类的接口 Point2D 很容易 … 三维点Point3D或有色点ColorPoint2D 结论 : 应对方案 : 2.脆弱的基类 3.多继承的复杂性 4.3 Java接口 4.3.1 接口与实现类 2. 接口的实现类 4.3.2 多重继承问题 1. 对多继承的需求 2. 多继承的复杂性 简单的合并 3. 问题仍然存在 4.4依赖于抽象类型 4.4.1 开放封闭原则 1. 依赖与需求变化 设计 “坏味道” 如何使程序在需求变化面前保持稳定呢 2. 开放封闭的含义 Open vs. closed 理想主义的原则 3. 案例:抽象类型Openable 接口Openable 4.4.2 创建对象的技术 创建并初始化的对象有3种技术 1. 通过new表达式创建类的对象 2. 通过Class类的newInstance()方法 3. 对象工厂(object factory) 4.4.3 启发式条例 1. 依赖倒置原则 DIP 从企业应用的分层角度看 2. 针对接口编程,而不是针对实现编程。 3. 更为针对性的启发式条例 4. 小结 子类型继承多个父类型。Java对于多重继承作出如下规定: 类只能继承一个父类,同时 一个类可以实现(使用关键字implements)多个接口。 一个接口可以继承(使用关键字extends)多个接口。 接口能够多继承,并不意味着Java是为了解决多继承问题而引入接口机制,也不意味着接口机制能够解决程序设计对多继承的需求。事实上,有人把Java的内部类誉为多继承问题的彻底解决方案。 假定“武汉的男大学生”简称X是对象x的类型,则X与许多的概念/类之间存在Is-A关系,而且这些父类彼此并没有必然联系,每一个父类仅仅描述X的一个方面 . As-A关系 假设“人”有一个方法say(),子类“武汉人”改写后说武汉话,“教师”改写后说普通话。“武汉教师”继承武汉人和教师两个父类后,他们说什么话呢?他们的类体中如何override方法say()? 按照WH和Teacher中say()的协议,实现类WHer应该在不同的场合说应该说的话,然而在一般情况下,单一的方法体很难、或者说不可能满足这一需求。从设计的角度看,Java接口放弃了多继承的内在/固有目标,而显得是一个权宜之计。 接口的多继承虽然不会引起语法问题,但是,一般而言它并不能够满足方法在协议/接口上的差别。 多继承会出现这样的问题:如果(第三方库中的)两个接口,它们的某个方法的方法名、参数表相同(即方法签名相同)而返回值类型不同(兼容此外),Java中子类就无法同时继承两者,否则将编译报错。 在命名常量的继承与隐藏基础上,如果Me无法确定使用的是哪一个NAME,Java采用了回避策略 抽象类和Java接口,合称为抽象类型(不可实例化的类型),可实例化的类称为具体类。 本节将说明抽象类和Java接口在程序设计中的重要作用。在代码中要尽可能地使用(依赖)抽象类型,而非具体类。 Bertrand Meyer(伯特兰·梅尔):法国工程院院士,名著作者,对象技术大师 《Object Oriented Software Construction, Bertrand Meyer》,Prentice Hall, 1988, [中文书名《面向对象的软件结构》《面向对象软件构造》(最好阅读1997第2版), 按契约设计(Design by Contract) 发明了Eiffel (埃菲尔铁塔)语言。 所谓依赖(dependence),是指类A的正常编译、运行都取决于类B的存在,即A依赖于B。 BlueJ图示了两种依赖: 1、使用关系,客户程序依赖服务类,用带箭头的线连接; 2、继承关系,子类依赖父类,用带三角形的线连接。不在一个包中的类,虽然不能够直观的看到但是依赖关系相同。 软件开发的目标是获得有弹性(flexible)、鲁棒的(robust)、可复用(reuse)的软件。整个软件中,各个类之间必然存在相互依赖。然而,模块之间严重的相互依赖(interdependence),常常使软件的设计发出“坏味道”,如僵硬(Rigidity 刚性、无弹性)——程序A的

您可能关注的文档

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档