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 ;à<(=1>?@ã(yA(123 (} Steve Job s BC$( Í D|(ýEFÏ) XVAV(=QGHD|DEIÅ A<JJôõXYZ}37,à}D|(3}
KLMNO MEPQ3¦Aôõ3R(STචU¥V(áâ(Ob ject-ori en ted p rog ram m i n g W« OOP )( 3 X (3 ûºU¡ OOP (Y Öì(µ ûEP ÆZ[ ¡m^â(áâõ\];X3O C (ÄÅ¡NOFö÷ u %Fáâ C (J1^(Ôù¡ÝEJ<< _hD `(Ñ Foundations for Java (ab CD û3×cde^fgVºF¢£Âcdu J᫶U¥V(âhºmCXijæò ˺¥VÖT× kÇ¡¥ OOP (Öm×lm(,£;àm̪ºÙF gAT(y13nuo%,£¤×Âcd ̪Fm<gp uº=q(ÄÅ¡))7rstt ×(uv wx^ û,yyx^ ûXºz{¡«âh|} b:¡%~Qe(æóm ¦¡º¢£Z¥V% àkwÄPAg[1*J Dm(áâÆV
ÝE Z$¡;£N((â zÒ$V(/>D$(Í /ÏÍ ¡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áâ¥òÜ;ã(í