第 22 課開啟 OOP 專題,確立「抽象思維」為程序員第一核心能力。從哲學定義(減法與除法)、數學本質(等價關係與商運算)、軟件工程四階段(參數抽象、規范抽象、過程抽象、數據抽象)層層遞進,並以最大公約數函數為例演示參數抽象與規范抽象的威力。
| 抽象類型 | 定義 | 關鍵作用 |
|---|---|---|
| 參數抽象 | 將特殊值參數化(函數參數、泛型) | 泛化算法,提升復用性 |
| 規范抽象 | 用先驗/後驗條件文檔化契約 | 分離接口與實現,使用者依賴規范,實現者滿足規范 |
| 過程抽象 | 封裝步驟序列為函數/方法 | 結構化編程基石,賦予命名復用能力 |
| 數據抽象 | 封裝數據與操作為 ADT/類 | OOP 起源,以數據為中心組織邏輯 |
int gcd(int a, int b) {
while (a != b) (a > b) ? (a -= b) : (b -= a);
return a;
}
參數抽象:a、b 代表任意正整數,函數具有普適性。
問題:無文檔時,調用者不知前置條件(正整數)、後置條件(最大公約數)、算法細節。
/**
* 計算最大公約數
* @param a 正整數
* @param b 正整數
* @return a、b 的最大公約數
* @pre a > 0 && b > 0
* @post result > 0 && a % result == 0 && b % result == 0
*/
int gcd(int a, int b) { ... }
有了規范,使用者無需讀源碼,實現者可重構算法(如改輾轉相除法)不影響客戶。
int gcd(int a, int b) {
return (b != 0) ? gcd(b, a % b) : a;
}
接口不變,實現大幅優化——這就是規范抽象的威力。
「如果一個程序員能合理設計參數、嚴格遵循規范、有效制定規范,便已是難得之才了。」
後續課程將以 OOP 為主線、Java 為主語言,融合 C/C++/C# 對比,聚焦「知識本源」而非枝葉,示例代碼顯著增加,爭取形神兼備。