面向對象的五大基本原理
1.單一職責原則(SRP)
-
類的功能要單一,不能包羅萬象,跟雜貨鋪似的。
-
核心思想為:一個類,最好只做一件事,只有一個引起它的變化。
2.開放封閉原則(OCP)
-
對象或實體應該對擴展開放,對修改封閉。
-
更改封閉即是在我們對模塊進行擴展時,勿需對源有程序代碼和DLL進行修改或重新編譯文件!這個原則對我們在設計類的時候很有助,
-
堅持這個原則就必須盡量考慮接口封裝,抽象機制和多態技術!
-
核心思想是:軟件實體應該是可擴展的,而不可修改的。也就是,對擴展開放,對修改封閉。
-
總結:“需求總是變化”沒有不變的軟件,所以就需要用封閉開放原則來封閉變化滿足需求,同時還能保持軟件內部的封裝體系穩定,不被
-
需求的變化影響。
3.里氏替換原則(LSP)
-
在對象 x 為類型 T 時 q(x) 成立,那么當 S 是 T 的子類時,對象 y 為類型 S 時 q(y) 也應成立。(即對父類的調用同樣適用於子類)
-
核心思想是:子類對象能夠替換父類對象,而程序邏輯不變。
-
總結:里氏替換原則能夠保證系統具有良好的拓展性,同時實現基於多態的抽象機制,能夠減少代碼冗余,避免運行期的類型判別
4.依賴倒置原則(DIP)
-
高層次的模塊不應該依賴於低層次的模塊,他們都應該依賴於抽象。具體實現應該依賴於抽象,而不是抽象依賴於實現。
-
我們不應該讓子類依賴於實體,不應該讓父類模塊依賴於子類模塊。所以我們需要將食草動物設計為抽象類,即抽象類或接口。這樣下層只需要實現相應的細節而不會影響父類。
-
其核心思想是:依賴於抽象。
-
將耦合緊密的兩個模塊進行分離接口和實現,主要依賴於接口編程。
-
總結:依賴於抽象,就是對接口編程,不要對實現編程。
5.接口隔離原則(ISP)
-
不應強迫客戶端實現一個它用不上的接口,或是說客戶端不應該被迫依賴它們不使用的方法,使用多個專門的接口比使用單個接口要好的多!
-
核心思想是:使用多個小的專門的接口,而不要使用一個大的總接口。
-
使用臃腫的接口,會造成實現類實現接口的所有方法,不管是它需要的還是不需要的,造成接口污染。
-
接口污染是指把接口做的過於“胖”,派生類必須實現某些它用不到的功能,這樣不僅加大了接口間的耦合,而且帶來不必要的復雜性,造成接口污染。
-
總結:遵守接口隔離原則,將“胖”接口拆分為獨立的幾個接口,各實現類分別與需要的接口類來建立依賴關系。