首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

冒號和他的學生們(連載 22)——抽象思維:程序員最核心能力的數學本質與工程實踐

     編輯:Java 相關知識

第 22 課開啟 OOP 專題,確立「抽象思維」為程序員第一核心能力。從哲學定義(減法與除法)、數學本質(等價關係與商運算)、軟件工程四階段(參數抽象、規范抽象、過程抽象、數據抽象)層層遞進,並以最大公約數函數為例演示參數抽象與規范抽象的威力。

抽象的數學本質

  • 減法:去粗取精,剔除非本質細節
  • 除法:異中求同,同類歸並形成等價類
  • 離散數學視角:抽象 = 定義等價關係 → 產生等價類 → 集合商運算
  • 角度與程度:同一實體不同角度得不同模型;抽象程度越高,細節越少,普適性越強

軟件工程四大抽象機制

抽象類型定義關鍵作用
參數抽象將特殊值參數化(函數參數、泛型)泛化算法,提升復用性
規范抽象用先驗/後驗條件文檔化契約分離接口與實現,使用者依賴規范,實現者滿足規范
過程抽象封裝步驟序列為函數/方法結構化編程基石,賦予命名復用能力
數據抽象封裝數據與操作為 ADT/類OOP 起源,以數據為中心組織邏輯

案例:gcd 函數的參數抽象與規范抽象

輾轉相減版

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# 對比,聚焦「知識本源」而非枝葉,示例代碼顯著增加,爭取形神兼備。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved