基本信息
- 原书名:An Introduction to Object-Oriented Programming(Third Edition)
- 原出版社: Addison Wesley/Pearson
- 作者: (美)Timothy A.Budd
- 译者: 黄明军 李桂杰
- 丛书名: 软件工程技术丛书/对象技术系列
- 出版社:机械工业出版社
- ISBN:9787111126669
- 上架时间:2003-9-15
- 出版日期:2003 年9月
- 开本:16开
- 页码:465
- 版次:2-1
- 所属分类:计算机 > 软件工程及软件方法学 > 面向对象
教材 > 计算机教材 > 本科/研究生 > 计算机专业教材 > 计算机专业课程 > 软件工程

内容简介
计算机书籍
本书通过对象、方法、继承(包括多重继承)和多态等概念,以独立于编程语言的方式介绍了面向对象编程的原理。书中所列举的实例涉及多种编程语言,其中包括Java、C++、C#、Delphi、Python、CIDS、Eiffel、Objective-C、Smalltalk等。通过研究这些编程语言,读者可以更好地理解隐藏在各种语言语法之后的基本原理。此外,作者还从面向对象的角度对这些语言进行了分析比较。 本书内容全面,特别适合作为计算机专业本科高年级和研究生一年级的教材,同时也可以供那些从传统的面向过程编程转向面向对象编程、想要了解面向对象基本概念的初学者使用。
本书是经典面向对象技术教材的最新版,原版己被哥伦比亚大学、佛罗里达大学、南非大学、罗马大学等众多世界名校用做教材。书中通过对象、方法、继承(包括多重继承)和多态等概念,以独立于编程语言的方式介绍了面向对象的原理。书中所列举的实例涉及多种编程语言,其中包括Java、C++、C#、Delphi、Python,CLOS、Eiffel、Objective—C、Smalltalk等。通过研究这些编程语言,读者可以更好地理解隐藏在各种语言语法之后的基本原理。
定义了面向对象编程术语
提供了Java、C++和C#语言之间的大量比较
通过案例研究,讨论了面向对象语言是如何应用各种多态技术的,并说明了如何使用多态来建立软件框架
深入研究了多种面向对象语言中的多重继承技术,包括多重接口和嵌套类
介绍了子类/子类型之间的差异
集成并使用了UML表示法和图表
涵盖了设计模式、反射和内省、网络编程以及面向对象语言的实现技术等高级主题
教辅材料、样章、勘误表可通过下列网址下载:
ftp.cs.orst.edu/pub/budd/oopintro/3rdEdition/info.html
[font color="#FF0000">作者简介:[/font>
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 inC++、Multiparadigm Programming in Leda和A Little Smalltalk,所有这些书都是由Addison-Wesley出版的。
目录
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 一段简史
小结
译者序
本书最重要的特点就是没有针对某种特定的编程语言来讨论面向对象技术,而是介绍了对所有语言都通用的面向对象思想。书中的实例涉及C++、Java、DelphiPascal、Python、C#等各种面向对象编程语言。通过这些具体实例,读者可以更好地理解隐藏于各种语言语法之后的、也是更加重要的面向对象原理。此外,作者还从面向对象的角度对这些语言进行了分析比较。
本书主要包括以下几部分内容:
· 面向对象概念和面向对象设计。
· 类、方法和消息。
· 继承和软件复用。
· 继承的细节。
· 多态。
· 多态的应用。
· 对象互连。
· 高级主题。
本书首先围绕着面向对象所涉及的各种技术进行了全面的讨论。然后,介绍了设计模式、反射和内省、网络编程、面向对象语言的实现等高级技术,虽然篇幅短小,但却是本书的一个亮点。作者通过简要的文字将这些高级晦涩的技术讲解得简单易懂,可以使读者迅速地掌握其骨架。
本书既可以作为面向对象编程的教材,也可以供那些从传统的面向过程编程转向面向对象编程、想要了解面向对象基本概念的初学者使用。本书的读者应该至少具有一种传统语言(如C、Pascal等语言)的编程经验, 当然,如果读者具有面向对象编程语言的经验,将会更容易理解本书的内容。
本书已经根据英文原版的最新勘误表(最近更新日期为2003年5月18日)进行了修正。
本书由黄明军、李桂杰共同翻译而成,由于水平有限,错误在所难免,恳请广大读者批评指正。
译 者
2003年5月
前言
在这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章更容易理解。如果需要,这两章在讲解时都可以简化。
许多章节都用星号(*)进行了标识,这表示该章节为可选内容。这些章节可能会很有趣,但并不是本书想主要讨论的。它们通常是与特定的面向对象语言相关的,而不是所有面向对象编程都普遍具有的一些内容。可以根据教师和学生的兴趣,以及授课进度的安排,权衡是包含还是省略这些内容。