在這個章節中,我將介紹物件導向中常用的觀念,以及在面試中經常會碰到的主題。在本系列的第一集中,我們將先來探討物件導向的基本概念與特性。
物件導向 v.s. 程序導向
在一開始,我們來探討什麼是物件導向,以及它與我們偶爾聽到的程序導向之間的關係。這兩種模式的核心差異在於程式設計上的不同,而不僅僅是所使用的程式語言不同。
程序導向主要著重於流程的運作,例如在執行完 A 功能後接著執行 B 功能,這樣一步一步地進行,直到整個流程完成。由於每個環節高度相關,因此程序導向通常呈現出高耦合的狀態。
相對而言,物件導向則著重於單個物件的操作。我們的操作是針對物件進行,而非直接針對資料結構本身。這樣一來,我們可以透過修改原物件的方式,使相關函數一同調整,因此物件導向的耦合度通常較低[註1]。
考量到維護性和擴展性,現今大部分的設計都以物件導向為主流。
物件導向的五大原則 —— SOLID
在物件導向中,有五個重要原則,分別是單一功能原則、開放封閉原則、里氏替換原則、介面隔離原則和依賴反轉原則。以下將一一介紹這些原則:
- 單一功能原則(Single Responsibility Principle):每個類別應只負責一種功能。
- 舉例來說,如果一個類別同時具有增加序列、移除序列和複製序列等多種功能,則可以將其視為「變動序列」,並將複製序列的功能拆分至另一個新類別。
- 開放封閉原則(Open-Closed Principle):實體應對於擴充開放,但對於修改封閉。這意味著在進行調整時,應能擴充現有功能,而不需修改原有的程式碼。
- 里氏替換原則(Liskov Substitution Principle):子類別應能夠替換其父類別,而不影響程式的正確性,以確保繼承關係的一致性。
- 介面隔離原則(Interface Segregation Principle):每個介面應僅包含其必要的功能,並根據需要拆分介面,以避免不必要的依賴。
- 依賴反轉原則(Dependency Inversion Principle):模組應共同依賴於抽象,而非依賴於具體實例,以減少程式間的耦合。
此外,將這五個原則的首字母合併起來,就是我們常提到的 SOLID 原則!
[註1] 嚴格來說,物件導向下的耦合程度在很大程度上取決於設計的方式。
參考資料
- https://zxuanhong.medium.com/物件導向-vs-程序式導向-平庸與高級工程師開發速度差異的秘密-19e6357b54e6
- https://zh.wikipedia.org/wiki/SOLID_(面向对象设计)