第一章对象入门1.7(java编程思想第四版)

上传人:oq****t 文档编号:1981892 上传时间:2017-07-18 格式:TXT 页数:5 大小:11.23KB
返回 下载 相关 举报
第一章对象入门1.7(java编程思想第四版)_第1页
第1页 / 共5页
第一章对象入门1.7(java编程思想第四版)_第2页
第2页 / 共5页
第一章对象入门1.7(java编程思想第四版)_第3页
第3页 / 共5页
第一章对象入门1.7(java编程思想第四版)_第4页
第4页 / 共5页
第一章对象入门1.7(java编程思想第四版)_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《第一章对象入门1.7(java编程思想第四版)》由会员分享,可在线阅读,更多相关《第一章对象入门1.7(java编程思想第四版)(5页珍藏版)》请在金锄头文库上搜索。

1、1.7.1 集合与继承器1.7.2 单根结构1.7.3 集合库与方便使用集合1.7.4 清除时的困境:由谁负责清除?1.7.1 集合与继承器针对一个特定问题的解决,如果事先不知道需要多少个对象,或者它们的持续时间有多长,那么也不知道如何保存那些对象。既然如此,怎样才能知道那些对象要求多少空间呢?事先上根本无法提前知道,除非进入运行期。在面向对象的设计中,大多数问题的解决办法似乎都有些轻率只是简单地创建另一种类型的对象。用于解决特定问题的新型对象容纳了指向其他对象的句柄。当然,也可以用数 样的事 ,那是大多数 都有的一种 能。 不能只 一 。 种新对象 集合 一个 容器 , AWT在不的 合 用

2、了 个 , 以本 一 用 集合 的 。在需要的时 ,集合,以便 currency1们在其中入的“何。 以currency1们事先不知道要在一个集合fi容fl多少。只需创建一个集合,以 的 它负责了。运的是,设计 的OOP 都提了一”集合。在C+中,它们是以 库 STL 的提的。Object Pascal用的 可 库 VCL 提集合。Smalltalk提了一非 的集合。Java也用的库提了集合。在些库中,一个 集合便可 们的大多数要求在另一些库中 特是C+的库 ,面向不 的需求提了不 类型的集合。如,可以用一个 一对有 的 问方一个 用于保 有 的 入 一。 以currency1们能根 的需要

3、当的类型。其中 集 。有集合都提了 的 能。 样入集合时,用的方是 的。有一个 Push Add 或其他类似 的数用于 事 。 数 集合中 的时 ,方不是那么 。如果是一个数 的 , 如一个 Vector ,那么也 能用索引运算符或数。 在 多 况fl, 样 往往无 返。此外,单 定数的 能是非 有限的。如果想对集合中的一” 进行操纵或 较,不是仅仅面向一个, 时又该怎么办呢?办法就是使用一个 继续器 Iterator ,它属于一种对象,负责 集合内的 ,把它们提给继承器的用户。 为一个类,它也提了一级抽象。利用 一级抽象,可 集合细节与用于 问那个集合的代码隔离开。 过继承器的 用,集合被抽

4、象成一个简单的序。继承器允 currency1们遍历那个序, 时毋需关心基础结构是什么换 之,不管它是一个 一个 一个 ,还是其他什么。 样一 ,currency1们就可以灵活地改变基础数 ,不对程序fi的代码造成干扰。Java最开始 在1.0和1.1版中 提的是一个继承器, 为Enumeration 枚举 ,为它的 有集合类提服务。Java 1.2新增一个更复杂的集合库,其中 含了一个 为Iterator的继承器,可以 老的Enumeration更多的事 。设计角度发,currency1们需要的是一个全 能的序。 过对它的操纵, 该能解决的问题。如果一种类型的序即可currency1们的 有

5、要求,那么全没有要再换用不 的类型。有两方面的原因促使currency1们需要对集合 。首先,集合提了不 的 口类型以及外部行为。 的 口与行为与 的不 , 的 口与行为又与一个集 Set 或 的不 。利用 个特征,currency1们解决问题时便有更大的灵活性。其次,不 的集合在进行特定操 时往往有不 的效率。最的子便是 Vector 和 List 的区。它们都属于简单的序,拥有全一致的 口和外部行为。 在执行一些特定的“务时,需要的开销是全不 的。对 内的 进行的随机 问 存 是一种 时操 无论currency1们 的 是什么,需要的时间 都是 的。 在一个 中,若想 处移,随机挑 一个

6、,就需付 惨重 的代价。且假设个 位于 较远的地方,找 它 需的时间也长 多。 在另一方面,如果想在序中部 入一个 ,用 就 用 划算得多。 些以及其他操 都有不 的执行效率, 决于序的基础结构是什么。在设计阶段,currency1们可以先 一个 开始。最 调性能的时 ,再根 况把它换成 。由于抽象是 过继承器进行的, 以能在两者方便地切换,对代码的影响 得微不道。最 ,记住集合只是一个用 放对象的储藏 。如果那个储藏 能currency1们的 有需要,就全没要关心它 是如何 的 是大多数类型对象的一个基本 。如果在一个 程 境中 ,它由于其他因 如在Windowsfl运行,或者由 集器 了开

7、销 了内在的开销,那么 和 之间在” 开销上的 就或 不是一个大问题。currency1们可能只需要一种类型的序。 可以想象有一个 的集合抽象,它能根 的使用方改变基 的 方。1.7.2 单根结构在面向对象的程序设计中,由于C+的引入 得 为 的一个问题是: 有类最 是 都 单 一个基础类继承。在Java中 与其他 乎 有OOP 一样 ,对 个问题的 都是 定的,且 个 级基础类的 简单,就是一个 Object”。 种 单根结构 有 多方面的 。单根结构中的 有对象都有一个 用 口, 以它们最 都属于 的类型。另一种方 就象C+那样 是currency1们不能保 有都属于 的基本类型。 向 容

8、的角度 , 一方 可与C 型更地合,且可以 为它的限 更少一些。 假期currency1们想进行 的面向对象 程,那么 构建的结构,以期得与内建 其他OOP fi的 样的便利。需 currency1们要用 的种新类库,还要使用另一些不 容的 口。当然地, 也需要付外的使新 口与的设计方 合 可能还需要多重继承 。为得 C+外的 灵活性 ,付 样的代价得currency1?当然,如果的需要如果“是C,如果对C有fifl的 结那么就的 得。 假如 是一 新,首次 类设计,象Java那样的换方 也 更事一些。单根结构中的 有对象 如 有Java对象 都可以保 拥有一些特定的 能。在的” 中,curr

9、ency1们知道对 个对象都能进行一些基本操 。一个单根结构, 上 有对象都在内存 中创建,可以大简数的” 在C+fi是一个复杂的 。利用单根结构,currency1们可以更方便地 一个 集器。与此有关的要持可于基础类中, 集器可 当的 发给” 内的“何对象。如果没有 种单根结构,且” 过一个句柄 操纵对象,那么集器的 有 大的不 ,且面 多。由于运行期的类型 定存在于 有对象中, 以远不 不一个对象的类型的 况。 对” 级的操 得特重要, 如 且也能在程序设计时得更大的灵活性。大也可能 问,既然 把处得 么 ,为什么C+没有用单根结构呢?事 上, 是“期在效率与 上 的一种结果。单根结构 程

10、序设计上的一些限 。且更重要的是,它 大了新程序与原有C代码 容的fi度。 管 些限 仅在特定的 合的造成问题, 为了得最大的灵活程度,C+最 决定放 用单根结构 一 法。Java不存在上 的问题,它是全新设计的一种 ,不与 有的 保持 的 向 容 。 以 然地,与其他大多数面向对象的程序设计 一样,单根结构在Java的设计方 中 就 fl 。1.7.3 集合库与方便使用集合由于集合是currency1们 都要用 的一种 , 以一个集合库是 要的,它 该可以方便地重复使用。 样一 ,currency1们就可以方便地 用种集合, 其 入的程序。Java提了 样的一个库, 管它在Java 1.0和

11、1.1中都 得非 有限 Java 1.2的集合库无是一个 。1. fl 造型与 用性为了使 些集合能 重复使用,或者 再 ,Java提了一种 用类型,以前 把它 Object”。单根结构 有根结 都是一个对象 以容纳了Object的一个集合 可以容纳“何。使currency1们对它的重复使用变得非 简便。为使用 样的一个集合,只需 指向它的对象句柄即可,以 可以 过句柄重新使用对象。 由于集合只能容纳Object, 以在currency1们向集合fi 对象句柄时,它上 造型成Object, 样便 了它的或者。再次使用它的时 ,得 一个Object句柄,非指向currency1们“先入的那个类型

12、的句柄。 以怎样才能还它的本 面 ,调用“先入集合的那个对象的有用 口呢?在 fi,currency1们再次用 了造型 Cast 。 一次不是在 级结构中上 造型成一种更 用 的类型。是fl 造型成一种更 特 的类型。 种造型方法 fl 造型 Downcasting 。举个子 ,currency1们知道在上 造型的时 ,Circle 属于Shape 何 的一种类型, 以上 造型是全的。currency1们不知道一个Object 是Circle还是Shape, 以 fi保 fl 造型的全进行,除非 切地知道要操 的是什么。也不是对 的,因为假如fl 造型成 的,得 currency1们 为 Ex

13、ception 的一种运行期 。currency1们 即对此进行解 。 在 一个集合提 对象句柄时, 用种方 地记住它们是什么,以保 fl 造型的 进行。fl 造型和运行期都要求外的时间 运行程序,且程序 付外的。既然如此,currency1们能不能创建一个 能 集合, 其知道容纳的类型呢? 样 可 除fl 造型的要以及 在的 。 是 定的,currency1们可以用 数类型 ,它们是 器能定 的类,可与特定的类型合。如, 过使用一个数集合, 器可对那个集合进行定 ,使其只 受Shape,且只提 Shape。数类型是C+一个重要的 成部 , 部 是C+没有单根结构的缘故。在C+中,用于 数类型

14、的关键 是template 。Java目前尚未提数类型,因为由于使用的是单根结构, 以使用它得有些笨拙。 不能保 以 的版本不 ,因为 generic” 个词被Java“保留 在Ada 中, generic”被用 它的 。Java 的 种关键 保留机 其 摸不 头脑, fi 定以 发 什么事 。1.7.4 清除时的困境:由谁负责清除?个对象都要求资源才能 存 ,其中最 注目的资源是内存。如果不再需要使用一个对象,就 其清除,以便 放 些资源,以便其他对象使用。如果要解决的是非 简单的问题,如何清除对象 个问题不得 :currency1们创建对象,在需要的时 调用它,然 其清除或者 破坏 。 在另一方面,currency1们平时的问题往往要 复杂得多。举个子 ,假设currency1们要设计一” ,用它管一个机 的空中交 样的 型也可能于管一个仓库的货柜或者一影 租” 或者宠物店的宠物房。 初 似乎 简单:构造一个集合用 容纳飞机,然 创建一架新飞机, 其入集合。对进入空中交 管 区的 有飞机都如此处。 于清除,在一架飞机离开 个区域的时 把它简单地删去即可。事 没有 么简单,可能还需要另一

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

当前位置:首页 > 行业资料 > 其它行业文档

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