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,第四五章也可以稍加斟酌。

2 則留言:

  1. 请问这本书还有吗?
    我想买一本。

    回覆刪除
  2. No marvel casino.edu.kg most players nonetheless choose to play via their favourite on line casino website. More and extra players are switching to mobile phones and tablets. This second provoked the launch of recent online casinos and bookmakers formats. Customers can guess on sports activities and spin their favourite slots instantly from their cell wherever. Almost all providers and playing establishments have tailored their websites to cell standards.

    回覆刪除