多態與虛擬 : 物件導向的精髓 (侯捷在石器時代對OO的理解)


【自序】
慮而後能得(自序)
故事
接觸 C++ 大約是 1989 年的事。那時候的 PC 以現在的眼光看,除了「蠻荒」之外沒有更合適的形容詞了。橫掃千軍的 Windows 3.0 還沒有誕生,如今以 C++ 編譯器技術聞名於世的 Borland 公司那個時候也還沒有踏進 C++ 領域,遑論動作更慢的 Microsoft。當時我用的編譯器是 Zortech C++。
將近 10 年的歷史,並不表示我在 C++ 技術上就怎麽地超凡入聖了。事實上初期我很排斥這個語言。我沒有用心去體會,也就看不到其中的美好。我用數年的時間把心力全花在 Windows 技術的鑽研。那時候 C++ 風潮未開,我也不以為意。
決定好好研究 C++,不是為了要開發自己的 class library,而是為了要使用別人的 class library。92 年軟體界開始出現一些所謂的 application framework,是一種用來幫助程式員發展 Windows 應用軟體的大型 C++ class library(如今也有非 C++ 語言的類似產品)。為了運用這些有着巨大架構以及巨大能量的 C++ class library,我必須重拾 C++。然後,為了更能操控掌握那些復雜的架構,同時也因為對技術原理有一股強烈的好奇心,我開始看 Microsoft Foundation Class(MFC) 的原始碼。
這使我有了一種異於常人的學習經驗。我看的是行銷全世界、無數程式員使用、市場占有率最高的一套 C++ class library 的原始碼。從其中,我得到許多寶貴的知識與經驗。然後我慢慢體會了物件導向(Object Oriented)之美、多型(Polymorphism)之美、虛擬(Virtual)之美。
學習的路線,不一定每個人都相同。但是黑暗中摸索的日子,實在不必人人走一遭。對於位居物件導向精髓地位的「多型與虛擬」觀念有了深刻體會之後,我有一股強烈的欲望,要把心得寫下來。
於是我寫了這本書。
層次
一般而言,C++ 是一個難學易用的語言。
C++ 的難學,初始在於其重重的布幕,布幕之中編譯器對我們的程式碼做了太多的手腳,使我們慣於循序思考的工程腦袋一無所措。及長又面臨新的思維模式,使我們必須扭轉慣常的思考習慣。
C++ 的易用則在於其巨大的彈性,能夠以多型(polymorphism)、虛擬(virtual)、模板(template)等種種方式,讓現有的碼去處理未知的、未來的資料型態。
當然,易用必須先能用。用不好或不能用的話,「寫 C++ 程式」最後就成了只是「使用 C++ 編譯器」,這是大家常拿來彼此調侃的笑話。
在「難學」的背景下,「易用」是使我們依然前仆後繼的動力。愈來愈多的大學資訊科系把 C++ 開在大一課程,這雖然說明 C++ 是多麽地重要,可也苦了資訊新兵們。
其實「難學」的最大症結,在於很難得有一本書,能夠一針見血地指出多型與虛擬的重要性;在我們粗具語法基礎之後,直接把我們導引到最核心最重要的思想,並且在建立這個思想體系的過程中,提供足夠的必要基礎。
我希望這本書能夠做到這一點。
同樣是使用 C++ 語言,有人進入了物件導向的殿堂,有人只學到 C++ 的語法;
有人練書法;
有人寫毛筆字;
有人拿有毛的筆寫字。
我們要向書法的境界挑戰,不要只是拿有毛的筆寫字。
定位
講述 C++ 語法(syntax)的書籍很多,
講述 C++ 語意(semantics)的書籍很少,
講述 C++ 物件導向(object oriented)精神的書籍更少,
深入 C++ 物件模型(object model)的書籍則幾乎沒有。
這本書第一章對 C++ classes 的語法和語意做了一個梗概整理。第二章談 C++ 的物件模型,第三章談型別轉型(RTTI 的重要服務),第四章談多型與虛擬的精神,第五章實作一個大型例子,示范如何在一個 class library 中完成 RTTI、Dynamic Creation、Persistence 等基礎建設。第六章為 Component Object Model(COM)奠基。
很容易看得出來,你不能夠完全依賴這本書學習 C++ 語法(因為第一章不過才 96 頁)。但是在學習了 C++ 語法之後,你可以依賴這本書學習物件導向的精髓。
我自己一直存在一個疑惑。別人常認為我寫的是高階技術書籍,我卻認為我寫的是高階技術的入門書籍。也許我挖掘得很深很廣,但,不就是要徹底了解重要的基礎知識,才得登堂入室嗎?
這本書,我仍舊挖得很深,尤其是第二章和第五章。但是我想粗具 C++ 語言基礎的人應該都能循序接受。我渴望證明,C++ 的難學,問題不在學生,而在老師。
當然,本書的讀者,你,不能夠只是一位程式設計領域的全然新手。
厚薄
每次完成一本書,抱着厚厚的一疊完稿北上,父親看到堆起來有 10 公分高的雪銅紙,總是對我說:『這麽厚的書,怎麽看』?而我總要解釋『這是雪銅紙,比較厚。而且單面印刷,厚度加倍。經過雷射印表機的高溫,它又有點卷...』。
但是想想,1000 頁左右的書籍,再怎麽東折西扣也是厚得嚇人。
漸漸地父親不再問那個問題了,大概已經妥協於「電腦書都那麽厚」的印象之中。而我更是早就習慣看大部頭的書,寫大部頭的書。
大家都習慣了吧!這兩年 K 。
書籍的厚薄,是因於內容的選擇,與讀者群的界定。很難得有這麽一個題材,我以 340 頁的篇幅完成了它。
書籍很薄,又經過我精心的章節次序安排與起承轉合,您就不要跳着看了吧。耐着性子,一頁一頁,從頭到尾把它好好咀嚼消化一遍。然後,如果你願意,寫信給我,我希望聽到你的喜悅。
批評也是我所歡迎的。
侯俊傑 1998.07.02 於新竹

 

http://download.csdn.net/download/hychieftain/9510577


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com