2009年9月9日 星期三

書評: 多型與虛擬

多型與虛擬: 物件導向的精髓
侯俊傑
1998

--

今天在圖書館看書的時候,不小心把這本書拿起來看。因為看得很順,所以大概四個小時就看完了。結果正事都沒有做...。(話說有點奇怪的是總圖的二本明明就被借走了,為什麼我在架上還看得到書呢?)

--

這本書很大一部分是取材自 Inside C++ Object Model深入淺出 MFC。前者侯俊傑為該書的譯者,後者為侯捷(侯俊傑的另一筆名)的作品。

本書在第一章花了不少篇幅用以講解 C++ 中 class 的語意,第二章則用以講述 class 的佈局(在記憶體中的 layout),第三章是在說明轉型的語意(semantics)。這三章的內容大多與 Inside C++ Object Model 的內容重疊,惟作者所使用的 C++ 實作(編譯器)不同,故研究之方法與得出的結論有些許差異,然而其中心思想是雷同的。

第四章與第五章則是介紹 RTTI(Runtime Type Information執行期型別資訊),與動態物件生成(Unserialize)。這二章我相信是取材自深入淺出 MFC 一書,範例的設計與 MFC 的設計如出一轍。只不過範例程式碼已經大量簡化以方便理解。

第六章則是介紹 COM,這個 COM 並非 C++ Object Model 的縮寫,而是 Component Object Model 的縮寫。Component Object Model 是微軟提出來的一個技術,用以讓 C++ 的 class 變成一個 library 讓多數程式可以共享同一個類別庫(Class Library)。然而要把 class 匯出為一個介面不是易事,撇開 C++ 標準沒有限制 binary 的設計,C++ 本身的 Object Model 很大的程度就限制了類別庫的「重用性」。本章提出了一些解法,用以作為學習 COM 的墊腳石。

--

我個人覺得這本書的定位很特別,他前三章的內容不若 Inside C++ Object Model 詳細,而第四五章則不若 深入淺出 MFC 詳儘。不過就「多型與虛擬」這個主題而言,這樣的剪裁恰到好處。對於一個只是想要簡單地了解 Visual C++ 如何實作各種 C++ class 的語義的人,這樣的一本書已經足夠。而且這本書和侯俊傑譯得《C++ 物件模型》相比好讀許多,至少這本書是原文書,自然也不會有誤譯。第二三章的範例也多出自 Inside C++ Object Model 一書,不過大部分都有再做修改並附上 Visual C++ 編譯後的數據。而第四五章則把心力放在 RTTI 與物件動態生成上,展示了 MFC 在處理物件執行期型別資訊(RTTI)、儲存(Persistence)的方法。即使時至今日 C++ 早已有許多改變,但我認為了解 RTTI 與 Persistance 的實作方法仍是相當重要的。想想看你還有多少的 *.doc?而最後一章的可以當作學習 COM 的「導論」(如果你對 COM 還是很有興趣的話),它簡單的說明了為什麼以 C++ 設計類別庫是如此的困難,以及當時流行的一些 Work Around。

總體來說,如果你想要了解 Visual C++ 對 class 所施加的黑魔法,這本書是一門不錯的入門書,雖然年代久遠,仍有其參考價值。不過如果你已經讀過 Inside C++ Object Model (你的功力已經很強了),就不要把時間浪費在第一二三章;如果已經讀過 深入淺出 MFC,第四五章也可以稍加斟酌。

1 則留言: