從最基礎的命令式,到抽象的宣告式,再到模擬現實社會的物件導向與並行設計,不同範式代表不同的思維模式與解決問題的途徑。

1. 命令範式:一切行動聽指揮#

命令式程式設計(Imperative Programming)是電腦科學中最基礎的範式,其核心精神在於由程式設計師明確指定電腦執行的每步驟

結構化定理#

任何程式邏輯,無論多複雜,都可透過以下三種基本控制結構表示:

邏輯描述
循序 (Concatenation)指令按照先後順序依序執行
選擇 (Selection)根據條件判斷結果決定執行的路徑
迴圈 (Repetition)在滿足特定條件下重複執行特定代碼區塊
關於結構化流程圖的演進
  • 非嚴格的結構化流程圖:早期流程圖無法單純用上述三種基本結構組合,導致邏輯混亂
  • 嚴格的結構化流程圖:引入 Quit 標誌來保證迴圈完整性,確保程式流程的可預測性
維度設計原則
宏觀策略採用「Top-Down」設計,由上而下拆解問題
微觀實踐嚴格遵守循序、選擇和迴圈結構
結構禁令摒棄或嚴格限制 Goto 語句,以換取清晰結構與易於除錯、維護的特性

2. 宣告範式:目標決定行動#

與命令式不同,宣告式程式設計(Declarative Programming)強調 「做什麼(What)」而非「如何做(How)」。 它是 Goal-Driven(目標驅動)的,演算法由隱性機制處理,程式設計師只需定義目標。

命令式 vs. 宣告式#

維度命令式 (Imperative / Action-Oriented)宣告式 (Declarative / Goal-Driven)
核心思維如何做 (How):詳細描述步驟與狀態轉移做什麼 (What):描述期望結果或邏輯關係
變數本質抽象化的記憶體:內容可變 (Mutable),存在賦值操作抽象化符號:內容不變 (Immutable),類似數學常數
演算法特徵顯性:循環、條件判斷等邏輯路徑清晰可見隱性:封裝在表達式或引擎中,程式碼即規格
狀態管理頻繁改變狀態,易產生副作用 (Side Effect)傾向無狀態或狀態隔離,降低系統複雜度
代表語言C, C++, Java (早期), AssemblySQL, HTML, CSS, Haskell, React (UI 層)

宣告式的兩大分支#

  1. 函數式程式設計 (Functional):透過數學函數的運算式變換與計算來求值
  2. 邏輯式程式設計 (Logical):透過事實(Facts)和規則(Rules),利用數理邏輯進行推導與論證

三大核心範式比較表#

範式程式本質輸入輸出設計重點運行機制
命令式自動機初始狀態最終狀態設計指令執行命令
函數式數學函數自變數應變數設計函數運算式變換
邏輯式邏輯證明假設結論設計命題邏輯推理

3. 物件範式:民主制社會的法則#

物件導向程式設計(OOP)將系統視為一組相互作用的「物件」集合。 雖然 OOP 大多基於命令式語言,但它也可以融合函數式或邏輯式的特性。

OOP 的三大支柱與身份隱喻#

OO 原則社會學隱喻 (身分認同)技術層面的實踐價值與目的
封裝 (Encapsulation)個體身分 (Privacy/Boundary)隱藏內部屬性,僅透過 Public 方法溝通保護主權:確保個體狀態不被外力非法篡改,維持自主性
繼承 (Inheritance)家庭身分 (Lineage/Legacy)子類別承接父類別的特徵與行為。承襲資源:建立層級與血緣,達成程式碼重用與文化傳承
多型 (Polymorphism)社會身分 (Roleplay/Contract)同個介面,依據執行物件展現不同結果適應環境:讓物件在不同社交場景(Context)中展現多元行為
維度程序式設計 (君主制)物件式設計 (民主制)
權力中心程序 (Procedure/Function):邏輯凌駕於一切物件 (Object/Data):資料與行為封裝於個體
設計哲學Top-Down (自上而下):君主發號施令,逐層拆解任務Bottom-Up (自下而上):定義個體行為,透過協作達成目標
資料關係資料是被動的臣民,等待被程序處理資料是主動的公民,擁有自己的狀態與能力
應對變革脆弱:君主決策錯誤或主流程變動,全局崩潰強韌 (Robust):局部變動由個體吸收,社會整體架構穩定
擴張性隨著複雜度增加,中央管理的成本呈指數級成長適合大型系統,透過增加物件與介面來橫向擴展

觀念導正

  • OOP 並非萬能,不能脫離其他範式存在
  • 可維護性、擴充性是所有範式的共同目標,非 OOP 獨有
  • OOP 的優勢與其說是「重用性」,不如說是 「易用性」

4. 並行範式:合作與競爭#

並行式程式設計(Concurrent Programming)是為了更真實地模擬現實世界並提升效率。

  • 特徵:以處理程序(Process)為導向,以任務為中心。主線在於資源的分享與競爭
  • 優勢:提高執行效率、改善使用者體驗(回應力)、保證公平競爭
  • 設計目標
    1. 軟體易於重用、維護和測試
    2. 有效利用資源,最佳化性能
    3. 保障處理程序的安全(Safety)活性(Liveness)

總結:五大範式體系對照#

最後,我們將上述提到的範式進行一次宏觀的體系比較:

範式體系隱喻核心模組模組關係
程序式君主程序 (Procedure)授命與聽命
函數式數學函數 (Function)替換與合成
邏輯式邏輯斷言 (Assertion)歸納與演繹
物件式民主物件 (Object)交流與服務
並行式生產處理程序 (Process)競爭與合作