面向对象编程导论(原书第3版)
作者 : (美)Timothy A.Budd
译者 : 黄明军 李桂杰
出版日期 : 2003-09-01
ISBN : 7-111-12666-1
定价 : 45.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 465
开本 : 16开
原书名 : An Introduction To Object-Oriented Programming
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书通过对象、方法、继承(包括多重继承)和多态等概念,以独立于编程语言的方式介绍了面向对象编程的原理。书中所列举的实例涉及多种编程语言,其中包括Java、C++、C#、Delphi、Python、CIDS、Eiffel、Objective-C、Smalltalk等。通过研究这些编程语言,读者可以更好地理解隐藏在各种语言语法之后的基本原理。此外,作者还从面向对象的角度对这些语言进行了分析比较。
本书内容全面,特别适合作为计算机专业本科高年级和研究生一年级的教材,同时也可以供那些从传统的面向过程编程转向面向对象编程、想要了解面向对象基本概念的初学者使用。

  本书是经典面向对象技术教材的最新版,原版己被哥伦比亚大学、佛罗里达大学、南非大学、罗马大学等众多世界名校用做教材。书中通过对象、方法、继承(包括多重继承)和多态等概念,以独立于编程语言的方式介绍了面向对象的原理。书中所列举的实例涉及多种编程语言,其中包括Java、C++、C#、Delphi、Python,CLOS、Eiffel、Objective—C、Smalltalk等。通过研究这些编程语言,读者可以更好地理解隐藏在各种语言语法之后的基本原理。
  定义了面向对象编程术语
  提供了Java、C++和C#语言之间的大量比较
  通过案例研究,讨论了面向对象语言是如何应用各种多态技术的,并说明了如何使用多态来建立软件框架
  深入研究了多种面向对象语言中的多重继承技术,包括多重接口和嵌套类
  介绍了子类/子类型之间的差异
  集成并使用了UML表示法和图表
  涵盖了设计模式、反射和内省、网络编程以及面向对象语言的实现技术等高级主题

  作者简介:
  Timothy Budd是美国俄勒冈州立大学计算机科学系的副教授。许多程序员都受益于他所著的书籍,除本书外,他还撰写了Classic Data Structures in Java、Understanding Object-Oriented Programming with Java、C++ for Java Programmers、Data Structures in C++ Using the Standard Template Library、Classic Data Structures in C++、Multiparadigm Programming in Leda和A Little Smalltalk,所有这些书都是由Addison-Wesley出版的。

图书前言

当我于1983年在Smalltalk上开始编写第一本书的时候,我清楚地记得,必须尽快地完成这本书,不要错过面向对象编程最热的时机。谁会想到20年之后,面向对象编程似乎仍然很热,它经历了。一个多么长的、神奇的旅程啊!
  在这20年中,人们对面向对象编程进行了全面的研究,它已经成为编程领域的范例。在这个过程中,它几乎改变了计算机科学的每个方面。并且我发现,与本书的第1版相比,我编写本书第3版的目的依然没变。我仍然希望学生们甚至读者们,能够理解基于一般原则的面向对象编程思想,而不是针对特定语言的细节。
  在编程这一领域,各种语言来去匆匆,令人眼花缭乱。在本书的第1版中,我讨论了Ob—jeetive-C语言和Object Pascal的Apple版本,当时这两种语言的使用都很广泛。虽然这两种语言现在仍然存在,但是都已经不再占统治地位了(然而,从语言的角度来看,Obieetive-C语言具有很多有趣且独特的特性,因此在第3版中,我还是对其进行了讨论)。在出版本书第1版和第3版之间,许多语言都已经消失了(例如Actor语言和Turing语言), 同时又产生了一些新的语言(例如Java、Eiffel和Serf语言)。许多原来就存在的语言也增加了对象扩展(例如Common Lisp语言和Object Perl语言),也有一些语言突然出现在人们的视野之内,又很快地消失了(例
如Sather语言和Dylan语言)。还有Beta语言,这种语言通过简单的语法揭示了非常有趣的思想。很难对各种语言未来的前景做出预言。刚刚出现的语言,例如Ruby,是否会继续强大呢 会不会走Dylan语言的老路呢 C#语言又如何呢 很难想像微软公司所发明的语言不会成功,但是,奇怪的事情总是会发生的(我个人认为,由于C#语言为原来的Visual Basic程序员提供了一种更好的语言,因此会得以延续,但是Java程序员或者C++程序员几乎不会迁移到这种新语言上来。时间会告诉我们,我的预言是否要比他人的预言更加准确)。
  在这一版中,我们扩大了用于举例的语言的数目,但是也减少了很多针对特定语言的长篇叙述。关于各种技术的描述通常都是通过表格或者更短小的形式给出的。本书的前两个版本,并没有作为任何语言的参考手册,想要使用我所举例的语言来编写程序的学生或读者,最好使用与特定语言相关的参考书籍。
  但是,在第3版中,我还是尽量保持前两版的整体结构。本书结构包含如下各个主题。
  I.简介和设计。第1章介绍了面向对象编程的基本概念。第2章讨论了计算机科学家所使用的各种处理复杂问题的工具,以及面向对象技术是如何适应这种框架的。第3章通过介绍责任引入了设计原则。前面这三章内容是本书的基础,非常重要。为了增强对概念的理解,我强烈地建议读者能够以多个小组(至少是一个小组)的方式通过讨论CRC卡(在第3章中介绍)是如何解决问题来理解面向对象编程的概念的。通过小组程序操纵CRC卡,是我所遇到的研究和理解行为、责任和封装等概念的最好方法。
  近十年来,面向对象设计所涉及的领域越来越大。对于很多读者来说,第3章的内容可能会显得太少或者太多——对于那些已经具有大量面向对象建模语言和设计经验的读者来说可能是太多了,对于那些从未听说过这些概念的读者来说可能又太少了。但是,我会尽量平衡。虽然有很多可以替代责任驱动设计的面向对象设计技术,但由于这种设计方法是我认为的对于初学者最简单的设计技术,因此还是对其进行了讨论。
  II.类、方法和消息。第4章和第5章介绍了我们的实例所使用的编程语言(Smalltalk、C++、Java、Objective-C、ObiectPascal、DelphiPascal和其他几种编程语言)的语法,并建立了类和方法,发送了消息。第4章主要关注的是编译时特征(类和方法),第5章讨论了动态行为(创建对象和发送消息)。第6章和第7章通过一系列的案例进一步讨论了这些思想,这些使用面向对象技术开发的案例程序说明了面向对象技术的各种特征。
  III.继承和软件复用。虽然第1章就引入了继承,但直到第8章才主要讨论这个概念。继承和多态替换都是作为软件复用的主要技术进行讨论的。第9章中的案例研究是使用新引入的语言C#来编写的。这两个案例都说明了继承的应用和标准APl(应用程序编程接口)的使用。
  IV.继承的细节。第10章至第13章深入地研究了继承和替换的细节。一种编程语言如果引入继承的特性,几乎会影响这种语言的所有方面,并且这种影响对于初学者来说很难察觉。第10章讨论了子类(subclass)和子类型(subtype)之间的细微差异。第11章讨论了各种不同的语言是如何支持静态和动态特征的。第12章说明了语言引入继承和多态替换特性之后所产生的一些奇怪的现象。第13章讨论了关于多重继承的常见的误解。
  V.多态。面向对象编程的许多强大功能都来自于对各种形式的多态的应用。第14章介绍了面向对象语言用于实现多态的基本机制。之后的四章非常详细地研究了多态的基本形式。
  VI.多态的应用。第19章研究了多态最常见的应用之一,即用于公共数据结构抽象的类的开发。第20章也是一个案例研究,讨论了C++语言新增的STL技术。第21章介绍了框架(framework)的思想,这是软件复用常用的一种非常成功的手段,它也是基于多态技术来实现的。第22章描述了一种著名的框架,即Java抽象窗口化工具包(AWT)。
  VII.对象交互。从第23章开始,我们提升了抽象的层次,开始考虑类的更一般的关系,而不仅仅是父子关系。第23章讨论了两个或更多个类(或者对象)相互作用的方式。其中的很多相互作用都通过一种称为设计模式(design pattern)的形式来描述和定义。第24章讨论了设计模式的概念,并介绍了一些最常见的设计模式。
  VIII.高级主题。最后三章讨论了一些对于这样一本介绍性书籍来说很高级的主题。其中包括:反射和内省技术(第25章)、网络编程(第26章)和面向对象语言的实现技术(第27章)。
  我在俄勒冈州立大学教学这一门课需要十个星期的课时,上面描述的每个主题都大约需要一周的时间。这一课程的主要学生是高年级的大学生和一年级的研究生。通过这门课的学习,学生可以使用他所选择的面向对象语言来完成多个大小适中的项目,在一学期结束的时候,每个学生都可以完成多个项目的设计和编码工作。
  介绍任何一个纷繁复杂的主题都会遇到如何对这些内容进行排序的问题,本书也不例外。通常,我的方法是尽早地介绍这种技术思想,然后在后面的章节中再对其深入研究,这样做的结果是在读者第一次遇到这些概念时无法对其完全领会。虽然我比较倾向于这种排序方式,但是我也发觉,其他人可能更想使用另外的排序方式。尤其是某些教师认为关于软件工程的内容非常重要,并将其放到前面,与关于设计的章节(第3章)一起来介绍,而我却将其推迟到第23章。类似地,虽然多重继承也是一种继承形式,应该归类到继承部分,但是由于多重继承很难与多态一起讨论,因此当读者学习完多态部分后再来学习多重继承可能效果会更好。因此,教师在使用本书时可以自由地选择各个主题,并根据具体情况安排讲解顺序。
  对读者的要求
  我曾经声明过,本书的内容只适合那些已经了解某种传统编程语言(例如Pascal或C语言)的读者。在我的课程中,这些内容对于高年级的大学生(三年级或四年级)和一年级的研究生都取得了成功。对于某些内容(尤其是本书的后四分之一),如果读者有更深入的知识将会更好,但并不是必须的。例如,如果一个学生学习过关于软件工程的课程,将会发现第23章中的某些内容与其相关。如果学习过编译器结构的课程,将会发现第27章更容易理解。如果需要,这两章在讲解时都可以简化。
  许多章节都用星号(*)进行了标识,这表示该章节为可选内容。这些章节可能会很有趣,但并不是本书想主要讨论的。它们通常是与特定的面向对象语言相关的,而不是所有面向对象编程都普遍具有的一些内容。可以根据教师和学生的兴趣,以及授课进度的安排,权衡是包含还是省略这些内容。
  获取源代码
  关于本书所列举的案例的源代码,可以通过匿名卸从ftp.cs.orst.edu的/pub/budd/oopintro
目录下获取。该目录下还包含其他内容,例如勘误表、各章的学习问题以及我在授课时所使用的关于该书籍的幻灯片。这些信息也可以通过我的个人主页http://www.cs.orst.edu/-budd来获取。如果还有其他要求,可以通过电子邮件budd@cs.orst.edu或者通信地址Professor Timothy A.Budd,Department of Computer Science,Oregon State University,Corvallis,Oregon 97331与我取得联系。
致谢
  这里,我要感谢那些在1989年秋季使用本教材第1版、听取我在俄勒冈州立大学所开设的CS589课程的65个学生。他们通常都是在每次讲课的前一两天才收到相关章节的教学材料。他们的耐心令人钦佩,他们所提出的很多具体的建议、错误、批评、评论都非常有价值。这里尤其要感谢Thnomas Amoth、Kim Drongesen、Frank Griswold、Rajeev Pandey和PhilRuder等人所提出的详细的建议。
  第9章中讨论的纸牌游戏是受到了Kim Drongesen所完成的项目的启发。第7章中讨论的台球游戏是基于Guenter Mamier和Dietrich Wettschereck的项目实现的。但是,我对这两个案例的所有代码都进行了重新编写。实际上,为了实现演示的目的,这两个案例的代码都被裁剪得非常少,根本无法与那些学生原来所完成的项目的规模相比。
  对于一个作者来说,能够获得别人对其作品的独立的评价,是非常幸运的一件事。在这方面,位于比勒陀利亚”的南非大学的计算机科学与信息系统系的Arina Brintz、Louise Leenen、TommieMeyer、Helene Rosenblatt和And Viiioen等人为本书第1版准备的学习指导材料提供了很多有价值的观点。
  对于本书的第1版和第2版,无数的读者指出了错误或遗漏之处,并提出了改进的建议,为我提供了大量的帮助。在这里,非常感谢他们,并非常抱歉,无法将他们的姓名一一列举。
  我非常感谢为本书第3版草稿提供建议的几个读者。他们是Ali Behforooz(陶森大学)、Hang Lau(康考迪亚大学,加拿大)、Blayne Mayfield(俄克拉何马州立大学)、Robert Morse(艾文斯维尔大学)、Roberto Ordonez(安佐斯大学)、Shon Vick(马里兰大学,巴尔的摩县分校)和Conrad Weisert(Information Disciplines,Inc.)。根据他们的建议,我做了大量的修正,因此本书如果还存在错误都是因为我的原因,与他们没有任何关系。
  Addison-Wesley出版社的Susan Hartman-Sullivan是本书第3版的编辑,他和他的助手Elinor,Actipis都非常有能力,工作高效,而且很有耐心。DianeFreed协调完成了本书的最后一份拷贝。Paul Anagnostopoulos和Windfall软件公司的Jacqui Searlott负责本书的排版和印刷。到目前为止,我已经与Paul和Jacqui合作出版了多本书籍,结果都令人非常满意,我对他们的感激之情无法言表。

译者简介

黄明军 李桂杰:暂无简介

译者序

本书介绍了面向对象编程和面向对象设计的基本概念,如对象、方法、封装、继承、多态等。
  本书最重要的特点就是没有针对某种特定的编程语言来讨论面向对象技术,而是介绍了对所有语言都通用的面向对象思想。书中的实例涉及C++、Java、DelphiPascal、Python、C#等各种面向对象编程语言。通过这些具体实例,读者可以更好地理解隐藏于各种语言语法之后的、也是更加重要的面向对象原理。此外,作者还从面向对象的角度对这些语言进行了分析比较。
  本书主要包括以下几部分内容:
  · 面向对象概念和面向对象设计。
  · 类、方法和消息。
  · 继承和软件复用。
  · 继承的细节。
  · 多态。
  · 多态的应用。
  · 对象互连。
  · 高级主题。
  本书首先围绕着面向对象所涉及的各种技术进行了全面的讨论。然后,介绍了设计模式、反射和内省、网络编程、面向对象语言的实现等高级技术,虽然篇幅短小,但却是本书的一个亮点。作者通过简要的文字将这些高级晦涩的技术讲解得简单易懂,可以使读者迅速地掌握其骨架。
  本书既可以作为面向对象编程的教材,也可以供那些从传统的面向过程编程转向面向对象编程、想要了解面向对象基本概念的初学者使用。本书的读者应该至少具有一种传统语言(如C、Pascal等语言)的编程经验, 当然,如果读者具有面向对象编程语言的经验,将会更容易理解本书的内容。
  本书已经根据英文原版的最新勘误表(最近更新日期为2003年5月18日)进行了修正。
  本书由黄明军、李桂杰共同翻译而成,由于水平有限,错误在所难免,恳请广大读者批评指正。

                                     译 者
                                     2003年5月

图书目录

第1章 面向对象思想
1.1 为什么OOP这么流行
1.2 语言和思维
1.2.1 爱斯基摩人和雪
1.2.2 关于计算机语言的一个例子
1.2.3 丘奇猜想和沃夫假说
1.3 一个新的范例
1.4 一种观察世界的方式
1.4.1 代理和团体
1.4.2 消息和方法
1.4.3 责任
1.4.4 类和实例
1.4.5 类的层次--继承
1.4.6 方法绑定与改写
1.4.7 面向对象概念总结
1.5 模拟计算
1.5.1 隐喻的力量
1.5.2 避免无限回归
1.6 一段简史
小结
进一步阅读材料
自学提问
练习

第2章 抽象
2.1 抽象层次
2.2 抽象的其他形式
2.2.1 部分分化
2.2.2 封装和互换性
2.2.3 接口和实现
2.2.4 服务视角
2.2.5 复合法
2.2.6 特化分层
2.2.7 模式
2.3 抽象机制的发展简史
2.3.1 汇编语言
2.3.2 过程
2.3.3 模块
2.3.4 抽象数据类型
2.3.5 以服务为中心的观点
2.3.6 消息、继承和多态
小结
进一步阅读材料
自学提问
练习

第3章 面向对象设计
3.1 责任意味着无干扰
3.2 小项目编程与大项目编程
3.3 为什么从行为开始
3.4 一个RDD实例
3.4.1 交互式智能厨房助手
3.4.2 通过场景工作
3.4.3 组件的标识
3.5 CRC卡--记录责任
3.5.1 给组件一个物理表示
3.5.2 "什么/谁"循环
3.5.3 文档
3.6 组件和行为
3.6.1 延迟决定
3.6.2 为变化做准备
3.6.3 继续场景
3.6.4 交互图表
3.7 软件组件
3.7.1 行为和状态
3.7.2 实例和类
3.7.3 耦合性和内聚性
3.7.4 接口和实现--Parnas原则
3.8 形式化接口
3.9 设计表现
3.10 实现组件
3.11 组件集成
3.12 维护和升级
小结
进一步阅读材料
自学提问
练习

第4章 类和方法
4.1 封装
4.2 类定义
4.2.1 C++、Java和C#语言
4.2.2 Apple Object Pascal和Delphi Pascal语言
4.2.3 Smalltalk语言
4.2.4 其他语言
4.3 方法
4.3.1 类中方法的声明次序
4.3.2 常量或不可变数据字段
4.3.3 定义和实现的分离
4.4 关于类主题的变化
4.4.1 Oberon语言中不属于类的方法
4.4.2 接口
4.4.3 属性
4.4.4 向前定义
4.4.5 内部类(或嵌套类)
4.4.6 类的数据字段
4.4.7 作为对象的类
小结
进一步阅读材料
自学提问
练习

第5章 消息、实例和初始化
5.1 消息传递语法
5.2 静态类型语言和动态类型语言
5.3 从方法内部存取接收器
5.4 对象的创建
5.5 指针和内存分配
5.6 构造函数
5.6.1 正统规范的类形式
5.6.2 常数值
5.7 析构函数和终止器
5.8 Smalltalk语言中的元类
小结
进一步阅读材料
自学提问
练习

第6章 案例研究:八皇后问题
6.1 八皇后问题
6.2 使用生成器
6.2.1 初始化
6.2.2 找到解决方案
6.2.3 前进到下一位置
6.3 用几种语言实现八皇后问题
6.3.1 用Object Pascal语言实现八皇后问题
6.3.2 用C++语言实现八皇后问题
6.3.3 用Java语言实现八皇后问题
6.3.4 用Obieetive-C语言实现八皇后问题
6.3.5 用Smalltalk语言实现八皇后问题
6.3.6 用Ruby语言实现八皇后问题
小结
进一步阅读材料
自学提问
练习

第7章 案例研究:台球游戏
7.1 台球元素
7.2 图形对象
7.2.1 桌壁图形对象
7.2.2 洞口图形对象
7.2.3 球图形对象
7.3 主程序
7.4 使用继承
小结
进一步阅读材料
自学提问
练习

第8章 继承与替换
8.1 关于继承的直观描述
8.1.1 "是一个"检验
8.1.2 使用继承的原因
8.2 不同语言中的继承
8.3 子类、子类型和替换
8.4 改写和虚拟方法
8.5 接口和抽象类
8.6 继承的形式
8.6.1 特化子类化(子类型化)
8.6.2 规范子类化
8.6.3 构造子类化
8.6.4 泛化子类化
8.6.5 扩展子类化
8.6.6 限制子类化
8.6.7 变体子类化
8.6.8 结合子类化
8.6.9 各种继承形式小结
8.7 关于继承的变体
8.7.1 Java语言中的匿名类
8.7.2 继承和构造函数
8.7.3 虚拟析构函数
8.8 继承的优点
8.8.1 软件可复用性
8.8.2 代码共享
8.8.3 接口的一致性
8.8.4 软件组件
8.8.5 快速原型法
8.8.6 多态和框架
8.8.7 信息隐藏
8.9 继承的代价
8.9.1 程序执行速度
8.9.2 程序大小
8.9.3 消息传递的开销
8.9.4 程序复杂性
小结
进一步阅读材料
自学提问
练习

第9章 案例研究:纸牌游戏
9.1 PlayingCard类
9.2 数据类和视图类
9.3 游戏
9.4 牌堆--使用继承
9.4.1 缺省牌堆
9.4.2 花色堆
9.4.3 待用堆
9.4.4 丢弃堆
9.4.5 桌面堆
9.5 多种形式的游戏
9.6 图形用户界面
小结
进一步阅读材料
自学提问
练习

第10章 子类和子类型
10.1 可替换性
10.2 子类型
10.3 可替换性悖论
10.4 构造子类化
10.5 动态类型语言
10.6 前置条件和后置条件
10.7 改进语义
小结
进一步阅读材料
自学提问
练习

第11章 静态行为和动态行为
11.1 静态类型化和动态类型化
11.2 静态类和动态类
11.2.1 运行时类型决定
11.2.2 向下造型(反多态)
11.2.3 非语言支持的运行时测试
11.2.4 检验是否理解消息
11.3 静态方法绑定和动态方法绑定
小结
进一步阅读材料
自学提问
练习

第12章 替换的本质
12.1 内存布局
12.1.1 最小静态空间分配
12.1.2 最大静态空间分配
12.1.3 动态内存分配
12.2 赋值
12.3 复制和克隆
12.3.1 Smalltalk语言和Objective-C语言中的复制
12.3.2 C++语言中的拷贝构造函数
12.3.3 Java语言中的克隆
12.4 相同
12.4.1 相同和同一
12.4.2 相同检验的悖论
小结
进一步阅读材料
自学提问
练习

第13章 多重继承,
13.1 分类化继承
13.2 多重继承带来的问题
13.2.1 名称歧义
13.2.2 对替换的影响
13.2.3 Eiffel语言中的重定义
13.2.4 CLOS语言的类排序解决方案
13.3 接口的多重继承
13.4 继承于公共祖先
13.5 内部类
小结
进一步阅读材料
自学提问
练习

第14章 多态及软件复用
14.1 编程语言中的多态
14.2 软件复用机制
14.2.1 使用组合
14.2.2 使用继承
14.2.3 组合和继承的比较
14.3 效率和多态
14.4 软件复用的普及会成为现实吗
小结
进一步阅读材料
自学提问
练习

第15章 重载
15.1 类型签名和范畴
15.2 基于范畴的重载
15.3 基于类型签名的重载
15.4 重定义
15.5 多价
15.6 多方法
小结
进一步阅读材料
自学提问
练习

第16章 改写
16.1 标识改写
16.2 代替与改进
16.2.1 Smalltalk语言中的代替
16.2.2 Beta语言中的改进
16.2.3 改进与子类/子类型之间的差异
16.2.4 CADS语言中的封装
16.3 延迟方法
16.4 改写与遮蔽
16.5 协方差与反协方差
16.6 改写的变体
16.6.1 Java语言中的final方法
16.6.2 C#语言中的版本化
小结
进一步阅读材料
自学提问
练习

第17章 多态变量
17.1 简单多态变量
17.2 接收器变量
17.2.1 多态变量在框架中的作用
17.2.2 Smalltalk语言中的端点比较
17.2.3 self和super
17.3 向下造型
17.4 纯多态
小结
进一步阅读材料
自学提问
练习

第18章 泛型
18.1 模板函数
18.2 模板类
18.3 模板参数中的继承
18.4 案例研究:结合分离的类
小结
进一步阅读材料
自学提问
练习

第19章 容器类
19.1 动态类型语言中的容器
19.2 静态类型语言中的容器
19.2.1 类型化和复用之间的关系
19.2.2 替换和向下造型
19.2.3 使用替换和改写
19.2.4 参数化类
19.3 限制元素类型
19.4 元素遍历
19.4.1 迭代器循环
19.4.2 访问器方法
小结
进一步阅读材料
自学提问
练习

第20章 案例研究:标准模板库
20.1 迭代器
20.2 函数对象
20.3 样例程序--库存系统
20.4 样例程序--图表
20.4.1 最短路径算法
20.4.2 开发数据结构
20.5 词汇索引
20.6 OOP的未来
小结
进一步阅读材料
自学提问
练习

第21章 框架
21.1 复用和特化
21.1.1 高级抽象和低级抽象
21.1.2 倒置库
21.2 样例框架
21.2.1 Java Applet APl
21.2.2 模拟框架
21.2.3 事件驱动的模拟框架
小结
进一步阅读材料
自学提问
练习

第22章 框架实例:AWT和Swing
22.1 AWT的类继承层次
22.2 布局管理器
22.3 监听器
22.4 用户界面组件
22.5 案例研究:颜色显示
22.6 Swing组件库
22.6.1 导入库
22.6.2 不同的组件
22.6.3 不同的绘制协议
22.6.4 为窗口增加组件
小结
进一步阅读材料
自学提问
练习

第23章 对象互连
23.1 耦合和内聚
23.1.1 耦合的种类
23.1.2 内聚的种类
23.1.3 德墨特尔法则
23.1.4 类级别可视性与对象级别可视性
23.1.5 活动值
23.2 子类客户和用户客户
23.3 存取控制和可视性
23.3.1 Smalltalk语言中的可视性
23.3.2 ObiectPascal语言中的可视性
23.3.3 C++语言中的可视性
23.3.4 Java语言中的可视性
23.3.5 Obiective-C语言中的可视性
23.4 有意依赖性
小结
进一步阅读材料
自学提问
练习

第24章 设计模式
24.1 控制信息流
24.2 描述模式
24.3 迭代器
24.4 软件工厂
24.5 策略
24.6 单件
24.7 组合
24.8 装饰器
24.9 双调度模式
24.10 享元
24.11 代理
24.12 外观
24.13 观察者
小结
进一步阅读材料
自学提问
练习

第25章 反射和内省
25.1 理解机制
25.1.1 类对象
25.1.2 字符串形式的类名称
25.1.3 检测对象类
25.1.4 通过类建立实例
25.1.5 检测对象是否理解消息
25.1.6 类行为
25.2 作为对象的方法
25.3 修改机制
25.3.1 Smalltalk语言中的方法编辑,
25.3.2 Java语言中的动态类加载
25.4 元类
小结
进一步阅读材料
自学提问

第26章 分布式对象
26.1 地址、端口和套接字
26.2 一个简单的客户朋艮务器程序
26.3 多客户端
26.4 通过网络传输对象
26.5 更复杂的技术
小结
进一步阅读材料
自学提问
练习

第27章 实现
27.1 编译器和解释器
27.2 作为参数的接收器
27.3 继承方法
27.3.1 多重继承的问题
27.3.2 裁剪问题
27.4 改写方法
27.5 名称编码
27.6 分派表
27.7 字节码解释器
27.8 即时编译
小结
进一步阅读材料
自学提问
练习
附录A 八皇后问题的源代码
附录B 台球游戏的源代码
附录C 纸牌游戏的源代码
术语表
参考文献

教学资源推荐
作者: 窦万峰 主编 杨俊 蒋锁良 等参编
作者: [美]居瓦·洛瑞(Juval Löwy)著
参考读物推荐
作者: 美国太阳微系统公司
作者: [美]詹姆斯·肖尔(James Shore) [美]黛安娜·拉森(Diana Larsen) [丹]吉特·克里特加德(Gitte Klitgaard) [美]谢恩·瓦尔登(Shane Warden) 著
作者: Steven John Metsker