致读者 我从2002年7月开始翻译这本书,当时还是第二版。但是翻完前言和介绍部分 后, chinapub就登出广告,说要出版侯捷的译本。于是我中止了翻译,等着侯 先生的作品。 我是第一时间买的这本书,但是我失望了。比起第一版,我终于能看懂这本书 了,但是相比我的预期,它还是差一点。所以当 Bruce eckel在他的网站上公开 本书的第三版的时候,我决定把它翻译出来。 说说容易,做做难。一本1000多页的书不是那么容易翻的。期间我也曾打过退 堂鼓,但最终还是全部翻译出来了。从今年的两月初起,到7月底,我几乎放 弃了所有的业余时间,全身心地投入本书的翻译之中。应该说,这项工作的难 度超出了我的想像。 首先,读一本书和翻译一本书完全是两码事。英语与中文是两种不同的语言 用英语说得很畅的句子,翻成中文之后就完全破了相。有时我得花好几分钟, 用中文重述一句我能用几秒钟读懂的句子。更何况作为读者,一两句话没搞 懂,并不影响你理解整本书,但对译者来说,这就不一样了 其次,这是一本讲英语的人写给讲英语的人的书,所以同很多要照顾非英语读 者的技术文档不同,它在用词,句式方面非常随意。英语读者会很欣赏这 点,但是对外国读者来说,这就是负担了。 再有, Bruce eckel这样的大牛人,写了1000多页,如果都让你读懂,他岂不是 太没面子?所以,书里还有一些很有“禅意”的句子。比如那句著名的“The genesis of the computer revolution was in a machine. The genesis of our programming languages thus tends to look like that machine.”我就一直没吃准该怎 么翻译。我想大概没人能吃准,说不定 Bruce要的就是这个效果 这是一本公认的名著,作者在技术上的造诣无可挑剔。而作为译者,我的编程 能力差了很多。再加上上面讲的这些原因,使得我不得不格外的谨慎。当我重 读初稿的时候,我发现需要修改的地方实在太多了。因此,我不能现在就公开 全部译稿,我只能公开已经修改过的部分。不过这不是最终的版本,我还会继 续修订的。 本来,我准备到10月份,等我修改完前7章之后再公开。但是,我发现我又有 点要放弃了,因此我决定给自己一点压力,现在就公开。以后,我将修改完 章就公开一章,请关注www.wgqgh.com/shags/tii.html 如果你觉得好,请给告诉我,你的鼓励是我工作的动力;如果你觉得不好,那 就更应该告诉我了,我会参考你的意见作修改的。我希望能通过这种方法,译 出一本配得上原著的书。 2003年9月8日 第1页共34页
shhgs@wgqqh.com 1 ✁ ✂ 34 ✁ 1 2002 7 chinapub !"#$%!&'( )*+,-.& /0(12 345( 67,893:);8(?@AB3CDE Bruce Eckel FG(HIJK (L(MNOPA!Q $$RSTTU3 1000 VW(XYZRS(@4[\]^_ `ab:c!Q,d(ef9g 7 hijk l,Dm(no4cpqrst (u*vw$ xy1(U z{!,(|} ~/3 3 ce* eX( $(* uc,>mi * 3;i=(13e =X ¡¢£¤ ¥Q$ X3¦, §¨ 3 ©(ª«¬©(ª(DEV%®¯ (°± ²XAF³´µ¶¯·¸¹º»¼ 3 C¥½¾Q$ ¿À, ÁmBruce Eckel ¦(Âê«, 1000 VWÄÅÆÇ¡=GÈX ɶÊDEËm3ÌmÍ Î¹Ï(8ÄYÐÑ(Í The genesis of the computer revolution was in a machine. The genesis of our programming languages thus tends to look like that machine.Ï3ÒÓÔwÕ Z|ÂÖª;ÓÔ$XO Bruce %( ×ØÅ 3 KÙ(ÑÐ1F°±J(ÚÛÜÝÞßà1(áâ ;ãB,VÁäJJ¶©( ÌåæçXXè½(éê fë(Mìíî%ïð(rµñFÉV,æòX;íFK cëó;Kôõïð^(X^ Xb:( ºö ÷ïø( QÔùg 10 ú-ïð 7 ûuÁKìíüm C%kl,æòNO¬ýþ3CãíFKEïð3 ûK3û www.wgqqh.com/shhgs/tij.html ÄÅ¡¬#¡(ay1( ã ÄÅ¡XY vw#,º¡(¹ 1ïð(7;^ µ !3 JåÐ( shhgs 2003 9 8
1:对象简介 我们剖析事物的本质,从中形成概念,并根据需要赋予它重要性。这 切很大程度上是源于,我们所使用的语言已经在其形式中包含了一套为它 的使用者所完全接受的规范,而我们正属于接受这一规范的那群人.如果 我们拒不接受语言在数据的组织与分类方面的原则的话,那我们根本就没 法说话。” Benjamin Lee Whorf(1897-1941) 计算机革命的推动力在于机器。于是机器的发展也左右了编程语言发展。 然而真正被用作延伸智力的工具的计算机(就像 Steve jobs喜欢说的, “思想的自行车”)并不很多,它们更多的是被用来表达思想。所以结果 就是,它们看上去已经不那么像机器了,而更像我们思想的一部分。就像 文字,绘画,雕塑,动画以及电影一样,它已经成为一种新的媒体。而面 向对象的编程( object- oriented programming缩写是OOP)正是这 运动的一部分 本章会向你介绍OOP的基本概念和开发的方法。本章,以及本书都假设 你有过程语言的编程经验,虽然不一定是C的。如果你决定在继续本书之 前,要在编程和C的语法上作更为充分的准备,你可以去看看本书封底所 附的,名为 Foundations for Java的练习CD。 本章是一个背景介绍和补充材料。很多读者会觉得,在没理解大背景之前 就去编写面向对象的程序,会有点不舒服。因此这里会对很多概念做个介 绍,并且让你对OOP的概况有个清楚的了解。然而,有些人会认为在见 到具体的工作机制之前没必要了解整个大背景;这些人在还没有看到代码 之前就会被搞昏的。如果你属于后者,希望尽快进入这个语言的细节,没 关系,跳过这章就是了——跳过这章不会妨碍你写程序或者学语言。但是 最终你还是要回来补课的,因为只有这样你才会理解为什么对象很重要 而且该如何把它们用到设计中去 抽象的过程 所有的编程语言都提供抽象。甚至可以这么说,你能解决的问题的复杂程 度直接与抽象的种类与质量相关。我所说的“种类”是指,“你到底抽象 了些什么”。汇编语言是对计算机的抽象,随后许多所谓的“命令”语 (诸如 FORTRAN, BASIC和C)是对汇编语言的抽象。这些语言较汇编语 言有了巨大的进步,但这仍然是一种初级的抽象,仍然要求你从计算机的 角度,而不是从待解决的问题的角度来思考。程序员必须在机器模型(在 解决空间”,也就是你要对那个问题建模的地方,比如在计算机上)与 待解决的问题的模型(在“问题空间”,也就是有问题要解决的地方)之间 建立关联。处理这种映射所带来的压力,以及编程语言对此无能为力的现 第2页共34页
shhgs@wgqqh.com 2 ✁ ✂ 34 ✁ 2 1: Í ( *Öî%A% 3 ÂâzJ )Dç(ôõF§´*!",3#A (çDc$%(&'à())$% 3&'(Y*ª...ÄÅ +X$%F,(-./µ¶(å0(Y $Ï B en jam i n Lee Wh orf (1897-1941) 12345(6 ãF)37)37(ì8[9:,áâì8 ;à?@ã(yA(123 (} Steve Job s BC$( Í D|(ýEFÏ) XVAV(=QGHD|DEIÅ AD$(Í /ÏÍ ¡ghV ,ÌZÏá¥123(V¸VD(Í 5Ï (Ä FORTRAN , BASIC C)¥á(V Ìá m,Â(t ;3f(V;%¡123( zàX£N((zQDâhoF37(F Í £N4Ï[¡%¥Y×(rµ8ÄF123J) £N(((FÍ 4Ï[m%£N(rµ)u4 ¡¢¢ £¤D¥Q(ãEPáâ¥òÜ;ã(í