面向物件 = 物件 + 類別 + 繼承 + 通訊
若軟體系統使用這四個概念設計實現,即為面向物件系統。
物件
- 基本構成單元,由一組屬性 (狀態) + 一組操作 (行為) 定義。
- 可為現實實體 (汽車、人、書) 或概念實體 (語言、圖形、管理方式)。
- 分析/設計視角:物件將現實實體模型化,封裝描述 (屬性) 與可執行操作。
- 範例:汽車物件 — 屬性: 重量/顏色/引擎型號;操作: 行駛/鳴笛/煞車/加速。
類別
- 具有相同資料結構與操作 的物件集合。
- 對一系列同質物件的抽象,描述共同特徵的模板。
- 每個物件是類別的實例,可使用類別定義的方法。
- 建立實例操作:C#
new 運算子 (比 C++ 更安全,保證記憶體初始化)。
繼承
- 使用既有定義為基礎建立新定義 的技術。
- 新類別 = 基類別宣告的資料/操作 + 新增宣告,復用不修改 基類別。
- 術語:基類別 (Base Class) / 派生類別 (Derived Class)。
- 範例:卡車 繼承 汽車 — 共享 顏色/重量/行駛/鳴笛,新增 載貨/卸貨/貨箱尺寸。
- 效益:大幅降低開發成本、支援多態、開放封閉原則基石。
通訊
- 物件間透過訊息傳遞 協作:發送訊息 (呼叫方法) → 接收物件執行對應操作 → 回傳結果。
- C# 實現:方法呼叫、委派/事件 (非同步/解耦)、介面契約 (多態)、async/await (非同步協調)。
- 訊息包含:操作名稱、參數、回傳值、例外狀況。
C# 關鍵字映射表
| 概念 | C# 關鍵字/機制 | 備註 |
| 物件 | class/struct 實例、new、this | 實例化、身分識別 |
| 類別 | class、struct、record、interface | 定義模板、合約 |
| 繼承 | : Base、virtual/override/abstract/sealed/base | 單一繼承 + 多介面 |
| 通訊 | 方法呼叫、delegate/event、interface、async/await | 同步/非同步、耦合/解耦 |
面向物件 vs 面向過程 關鍵差異
| 維度 | 面向過程 (C) | 面向物件 (C#) |
| 核心單元 | 函式 | 類別/物件 |
| 資料與操作 | 分離 (結構體 + 函式) | 封裝 (類別內部) |
| 分解策略 | 自頂向下功能分解 | 識別物件與協作 |
| 擴充方式 | 修改現有函式/新增函式 | 繼承/組合/介面實作 |
| 全域狀態 | 全域變數普遍 | 無全域變數 (static 類別受控) |
方法論選擇指南 (重申)
- 工程計算/演算法密集 → 面向過程/函數式/資料導向 (DOD) 更適合。
- 邏輯推理/機器證明/AI 符號系統 → 面向邏輯程式設計 (Prolog)。
- 知識庫/專家系統/規則引擎 → 面向規則程式設計 (Drools/NRules)。
- 複雜業務系統/長期演進/團隊協作 → 面向物件 (配合 DDD/微服務) 優勢最大。