作者從抽象角度闡述程式語言演進:組合語言抽象機器底層,過程式語言再抽象組合語言,兩者皆為描述機器,程式設計師須自行建立問題空間與解空間的橋樑。為直接在機器上建模問題空間,面向物件語言應運而生——用物件模擬現實事物,賦予其特性與行為。
在此脈絡下,類別概念引入,物件透過類別的函式(介面)與外界互動;為控制建立者與使用者的耦合、提高模組獨立性,封裝不可或缺。程式碼重用是核心課題:組合重用實作、繼承重用介面、多態重用客戶端代碼。
物件的建構與銷毀關係生存期與儲存區,C++ 以效率優先,靈活但複雜的記憶體管理機制順理成章。異常處理是實務大患,標準 C++ 在語言層面大幅增強,保證錯誤被處理且可恢復。
現成方法針對最複雜情況設計,我們只需取用夠用的部分。提倡儘快讓程式跑起來,經簡要分析優先處理核心與高風險部分,盡早產出測試版——非直接編碼,但不可過早陷入細節。分析程度對 OOP 而言,即搞清有哪些物件、各自介面為何,不多不少。整個過程約分五步:
最突出的方法是極限程式設計(XP),核心是「先寫測試」與「結對程式設計」。先寫測試強迫給出完整清晰的類別介面,並能在每次建置時自動測試。從檢測角度看,程式語言進步即檢測進步:組合語言只查語法錯誤,C++ 可查語義錯誤,OOP 語言檢查更嚴格。仍有錯誤只在運行時發現,需加入測試代碼保證正確性。結對程式設計讓一人寫碼、一人思考全局,卡住可換人或集體討論。