Bruce Eckel:thinking In C++@2000 (第2版 第1卷)
《Thinking in C++ 第一卷 第二版》核心論點闡述
根據提供的資料,本書《Thinking in C++ 第一卷 第二版》的核心論點圍繞在 C++ 作為一種物件導向程式設計語言,如何有效地解決傳統程序式語言(特別是 C 語言)在處理日益複雜的軟體專案時所面臨的挑戰,並透過循序漸進的方式引導讀者從程序式思維轉變為物件導向思維,以提升程式設計的效率、可維護性及安全性。
以下為主要論點及其詳細解釋:
-
C++ 旨在解決傳統程序式語言在複雜專案中的不足:
本書開宗明義指出,傳統程序式語言(如 C)在處理大型和複雜的軟體專案時,難以有效地管理程式碼的複雜度,導致了所謂的「軟體危機」。這些語言主要以電腦的結構為抽象基礎,要求程式設計師在「問題空間」(實際問題存在的領域)和「解決方案空間」(電腦中的模型)之間進行手動映射。這種映射的困難度和與語言的非內在性,使得程式難以編寫且維護成本高昂。C++ 作為一種物件導向語言,提供了更高級別的抽象,允許程式設計師直接在解決方案空間中以接近問題空間的方式來表達概念,從而降低了這種映射的複雜性。 -
物件導向程式設計 (OOP) 的核心思想及其解決方案:
本書介紹了 OOP 的基本概念,將程式的組成視為一系列相互協作的「物件」。每個物件都有其自身的狀態(記憶)和行為(方法),並且可以透過「傳送訊息」或「發出請求」來與其他物件互動。OOP 的主要支柱包括:- 抽象 (Abstraction) 與封裝 (Encapsulation): 將資料(特性)和處理資料的函數(行為)綑綁在一起,形成一個新的資料型別,即「類別」。這使得程式碼更模組化,易於理解和管理。
-
實作隱藏 (Implementation Hiding) 與存取控制 (Access Control): 透過
private、protected、public等關鍵字限制對類別內部成員的直接存取。這允許類別設計者修改內部實作細節而不影響使用該類別的客戶端程式碼,降低了程式錯誤的可能性並提高了靈活性。 - 組合 (Composition): 透過在一個新類別中包含現有類別的物件來實現程式碼複用。這是一種「擁有」(has-a)的關係,是構建複雜物件的簡單且靈活的方式,本書建議在需要複用時應首先考慮組合。
- 繼承 (Inheritance): 允許從現有類別(基底類別)建立新類別(衍生類別)。衍生類別繼承了基底類別的特性和行為,並可以添加新的成員或修改(覆寫)現有成員的行為。這是一種「是一種」(is-a)或「類似於」(is-like-a)的關係,用於表達類別之間的相似性和差異性,並支援多型。
- 多型 (Polymorphism) 與虛擬函數 (Virtual Functions): 允許透過基底類別的指標或引用來操作衍生類別的物件,並在執行時確定呼叫哪個版本的函數。這透過「後期繫結」(late binding)機制實現,使得程式碼可以處理一系列相關型別的物件,而無需在編譯時知道確切的型別,大大提高了程式的擴展性和可維護性。
-
C++ 相較於 C 的優勢與過渡策略:
本書強調 C++ 的成功在很大程度上歸功於其對 C 的繼承和改進。這使得 C 程式設計師能夠在保留現有知識和程式碼的基礎上逐步過渡到 C++。C++ 提供了許多 C 中沒有或有缺陷的特性:- 更好的 C: 引入了函數原型(function prototyping)、const 關鍵字、引用(references)、函數重載(function overloading)、命名空間(namespaces)等,增強了型別檢查和程式碼安全性,減少了預處理器宏的濫用。
- 效率: C++ 在設計上注重效率,與 C 相比,物件導向的 C++ 程式在執行時間和空間上的開銷通常非常接近。
- 易於表達和理解: 透過類別來模擬問題空間中的實體,使得程式碼更接近自然語言描述,提高了可讀性和可維護性。
- 庫的強大利用: C++ 的類別和命名空間特性使得使用和整合第三方庫變得更容易,程式設計師可以站在巨人的肩膀上。
- 原始碼複用(範本 Templates): 範本機制允許在不犧牲效率和型別安全的情況下實現程式碼的通用化,特別適用於容器類別。
- 錯誤處理(異常 Exceptions): C++ 內建的異常處理機制提供了比 C 更健壯和一致的錯誤報告和恢復方式。
-
大型程式設計: C++ 的特性旨在幫助管理大型複雜專案,避免了 C 中常見的名稱衝突等問題。
本書也提供了向 C++ 過渡的建議,包括逐步學習、從小規模專案開始、利用現有庫以及避免直接將現有 C 程式碼重寫為 C++(除非需要大幅修改)。
-
本書的教學方法與目標:
本書的設計理念是循序漸進地介紹 C++ 特性,每次只引入一個或一小組相關的概念,並提供簡單的範例和練習,幫助讀者消化和理解。作者基於多年的教學經驗,力求讓讀者建立一個清晰的 C++ 心智模型,能夠理解語言的底層機制以及每個特性「為什麼」存在。本書強調透過解決問題來學習語言特性,而非僅僅羅列語法規則。隨書附帶的 CD 更是提供了 C 語言基礎的入門課程,為零 C 背景的讀者做好準備。
總結來說,《Thinking in C++ 第一卷 第二版》不僅教授 C++ 語言的語法和特性,更重要的是傳達物件導向的思維方式,解釋 C++ 設計背後的原理和其相對於 C 的優勢,並透過精心組織的內容和實踐範例,幫助讀者建立紮實的基礎,為解決複雜的軟體工程問題做好準備。
comments
comments for this post are closed