程式設計範式全景 (Programming Paradigms)

★★★★Studied

From程式設計範式與物件導向思維

📚 From the Books

程式設計範式全景 (Programming Paradigms)ConceptParadigms

範式是「把輸入轉成輸出」的不同思維框架。命令式問「怎麼做(How)」、宣告式問「做什麼(What)」;OOP 把系統看成一群協作的物件。理解每種範式的本質與擅長的問題,才知道一個 GoF 模式在補哪個範式的缺口——這是整個 paradigms 類別的地圖。

🧠 When to Use

TIP

訊號:你在爭論「這段該寫成物件還是函數管線」——先退一步看範式本質:這個問題是「設計指令」「設計函數」還是「設計協作的物件」比較自然?

⚖️ Structure & Variants

三大核心範式的本質
範式程式本質輸入 → 輸出設計重點運行機制
命令式自動機初始狀態 → 最終狀態設計指令執行命令
函數式數學函數自變數 → 應變數設計函數運算式變換
邏輯式邏輯證明假設 → 結論設計命題邏輯推理
  • 命令式問「怎麼做(How)」:變數是可變的記憶體、有賦值、邏輯路徑顯性可見(C、早期 Java)。其骨架是結構化定理——任何邏輯都能由循序 / 選擇 / 迴圈組成,並摒棄 goto
  • 宣告式問「做什麼(What)」:變數像數學常數(不可變)、演算法隱含在引擎裡、程式碼即規格(SQL、HTML、Haskell)。它分兩支:函數式(運算式變換求值)與邏輯式(事實 + 規則推導)。
OOP:把系統看成協作的物件

三大支柱:

  • 封裝=個體的邊界:隱藏內部、只經公開方法溝通,保護狀態不被外力篡改。
  • 繼承=血緣傳承:承接父類特徵,達成重用(但注意過度繼承的代價,見組合優於繼承)。
  • 多型=角色扮演:同一介面依實際物件展現不同行為,是絕大多數 GoF 模式的支點。

程序式 vs 物件式,是「君主制 vs 民主制」:

  • 程序式(Top-Down):邏輯凌駕一切,資料是被動臣民;主流程一變,全局脆弱。
  • 物件式(Bottom-Up):資料與行為封裝於個體,局部變動由個體吸收,整體較強韌、易橫向擴展。

觀念導正:OOP 並非萬能、不能脫離其他範式;它的真正優勢與其說是「重用性」,不如說是**「易用性」**。

常用衍生範式 —— 都對應到某些設計模式
  • 泛型(Generic):分離演算法與資料結構,在不犧牲效率下確保型別安全與重用(對應 Iterator、Template)。
  • 元程式(Meta / 超級範式):把程式碼當資料操縱(JSP→Java、註解生成樣板)。
  • 切面(AOP):抽出橫切關注點(log、安全、交易),主邏輯保持純粹——橫向重用,與 OOP 沿繼承樹的縱向重用互補。
  • 事件驅動:被動等待通知而非主動輪詢;核心機制是 callback + IoC/DI(先註冊後呼叫,低層透過主框架回呼高層)。Observer(發行/訂閱)正是事件驅動思想的簡化實現,也是 MVC 的基礎。

⚠️ Misuse & Anti-patterns

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading