「面向對象編程映射到生活中就是站在指揮者的角度看問題,有些事情不想做直接讓別人去做,回到程序中,就是有些事你不用去做,只要找別人去做,但必須把做事情的方法給他,他根據你提供的方法去完成你想做的事。」
employee.doWork(),是傳遞訊息「請執行工作」。class Employee {
// 狀態
private String name;
private int skillLevel;
// 行為 (介面)
public void doWork(Task task) {
// 內部實作:根據 skillLevel 決定策略
if (skillLevel > 5) useAdvancedTool(task);
else useBasicTool(task);
}
}
呼叫者只關心 doWork 這個契約,不關心內部用何種工具。
interface Worker { void doWork(Task t); }
class SeniorEngineer implements Worker { ... }
class JuniorEngineer implements Worker { ... }
class Robot implements Worker { ... }
// 指揮者視角
List team = Arrays.asList(new SeniorEngineer(), new JuniorEngineer(), new Robot());
for (Worker w : team) {
w.doWork(task); // 同一訊息,三種截然不同的執行方式
}
| 支柱 | 程式意義 | 生活隱喻 |
|---|---|---|
| 封裝 | 隱藏內部實作,公開介面 | 遙控器:按鍵 (介面) 隱藏電路板 (實作) |
| 繼承 | 複用與擴充 | 「員工」是「人」的子類別,繼承姓名、年齡 |
| 多型 | 同一介面、多種實作 | 「做飯」:媽媽、外賣、機器人 各有做法 |
你的理解方向正確:OOP 是將問題分解為協作的物件網絡,透過訊息傳遞而非流程控制來驅動系統。關鍵補充: