| 維度 | 面向過程 | 面向物件 |
|---|---|---|
| 核心關注 | 「什麼正在發生」(步驟/流程) | 「誰受影響」(物件/資料) |
| 組織方式 | 線性步驟序列,代碼作用於資料 | 資料控制代碼存取,物件自包含 |
| 代表語言 | C、Pascal、Fortran | Java、C++、C#、Python |
| 優勢 | 簡單、直觀、適合小規模邏輯 | 抽象、封裝、繼承、多態管理複雜度 |
將現實實體提煉為本質特徵,忽略非本質細節。有效方法:層次分類。
// 現實:電腦系統
// 第一層:Computer(整體)
// 第二層:Display, Keyboard, HDD, DVD, Audio(子系統)
// 第三層:GPU, VRAM, Panel(顯示器內部零件)
// ...
// 關鍵:每層只關注該層職責,透過介面與相鄰層互動
物件本質:具體實體,響應訊息。如 computer.input(keyboard).display(screen),無需知曉內部處理細節。
class。private 欄位 + public 方法(介面)。draw(String), draw(Rect), draw(Circle)。Animal a = new Dog(); a.makeSound() → 呼叫 Dog 版本。| 原則 | 汽車場景 | 代碼體現 |
|---|---|---|
| 繼承 | 駕駛員依賴「車」的共同介面(方向盤、煞車、換檔),可開轎車/卡車、賓士/飛雅特 | class Sedan extends Car, class Truck extends Car |
| 封裝 | 煞車踏板隱藏液壓/電子系統複雜性,腳一踩即生效 | class Brake { void pedal() { /* 內部複雜邏輯 */ } } |
| 多態 | 煞車系統有 ABS/非 ABS,駕駛員同樣踩踏板,底層實現不同 | interface BrakeSystem { void apply(); } class ABS implements BrakeSystem... |
結果:各獨立構件組合成一致、健壯、可維護的「汽車」物件。軟體設計同理。
面向物件非銀彈,但經過驗證的工程學方法論。深度理解四大支柱本質,並在實戰中不斷重構、內化,是成為資深工程師的核心競爭力。