範式概論 | Clean Architecture 無瑕的程式碼:整潔的軟體設計與架構篇 閱讀筆記
02 Feb 2020本文為「Clean Architecture 無瑕的程式碼:整潔的軟體設計與架構篇」第 3 章「範式概論」的閱讀筆記。
範式(paradigm)是什麼?
- 範式是程式設計的方式,和語言無關。
- 範式可告知何時使用哪種設計架構。
- 範式共三種:結構化程式設計(structured programming)、物件導向程式設計(object-orient programming)、函數式程式設計(functional programming)。
結構化程式設計
- 結構化程式設計在直接的控制權轉移上加上規範。
- 由於無限制的跳耀(goto)是有害的,因此在結構化程式設計中,取而代之的是
if/then/else
和do/while/until
。- 這是因為 goto 的某些使用情境會導致模組無法切小,進而無法使用分而治之(divide-and-conquer)來分解程式碼為更小的單元;而扣除掉這些不好的情境,使用 goto 的控制邏輯可對應到
if/then/else
和do/while
(見第四章)。
- 這是因為 goto 的某些使用情境會導致模組無法切小,進而無法使用分而治之(divide-and-conquer)來分解程式碼為更小的單元;而扣除掉這些不好的情境,使用 goto 的控制邏輯可對應到
- 結構化程式設計是模組的基礎。
物件導向程式設計
- 物件導向程式設計在間接的控制權轉移上加上規範。
- 擁有類別(class)、建構子(constructor)、實例變數(instance variable)、方法(method)、多型(polymorphism)。
- 「多型」是跨越架構邊界的機制。
函數式程式設計
- 函數式程式設計在賦值上加上規範。
- 核心概念是不變性(immutability),因此函數式語言沒有賦值語句(assignment statement),或必須在嚴格的規範下進行。
- 「不變性」規範資料的位置和存取的機制。
注意
範式告知不可以做什麼,而不是可以做什麼;或說是範式移除了某些功能,而不是增加功能。
- 結構化程式設計移除「goto」。
- 物件導向程式設計移除「函式指標」。
- 函數式程式設計移除「賦值」。