面向物件程式的設計原則
1. 單一職責原則(SRP):就一個類而言,應該僅有一個引起它變化的原因。
由此可以推匯出:一個函式甚至一個變數僅表示一個含義,不能表示多餘一個的含義,否則就會在使用過程中出現歧義。
如果一個類承擔的職責過多,就等於把這些職責耦合在一起了。一個職責的變化可能會削弱這個類完成其他職責的能力。
如何理解“職責”:可以把軟體的職責看成變化的原因。如果有多種原因可以引起這個類發生變化,那麼這個類就有多個職責。
一個DLL中的所有類對於同一類性質的變化應該是共同封閉的。一個變化若對一個DLL產生影響,則將對該DLL中的所有類差生影響,而對它的的DLL不造成任何影響。
2. 開放-封閉原則(OCP):軟體應該對擴充套件開放,對修改封閉。
這個原則要求當軟甲需要修改時,可以對模組進行擴充套件來滿足要求,而不是修改原來的原始碼。
開閉原則的關鍵是抽象。創建出一組描述可能行為的抽象基類。任何一個修改都是通過繼承這個基類來實現擴充套件的。
3. 里氏替代原則(LSP):子型別必須能夠替換掉它們的基型別。
也就是說任何一個基型別物件都可以直接替換成子型別物件而不用做任何的修改。
這個原則強調子類必須繼承基類的所有方法,並且可以公開訪問這些方法。子類物件替換掉基類物件後可以無差別的使用基類的所有函式。
子類對於基類是is-a關係,更是contains-a的關係。
4.依賴倒置原則(DIP):高層模組不應該依賴於底層模組,二者都應該依賴於抽象;抽象不應該依賴於細節,細節應該依賴於抽象。
在設計程式中通常會遇到這樣的問題,建立一些高層模組依賴於底層模組、具體實現依賴於細節。這樣就會造成問題,當底層模組的改動就會直接影響到高層模組,從而迫使依賴於它的高層做出相應的改動。
高層模組不應該依賴於底層模組,這種依賴結構相對於傳統的依賴結構而言就是被“倒置”了。
本來是高層模組去影響底層的細節實現。包含於高層業務規則的模組應該優先獨立於包含細節的底層模組。
高層模組獨立於底層模組,那麼高層模組就可以非常容易地被複用,這也是框架設計的基本原則。
抽象和細節被隔離,程式碼也非常容易維護。
5.介面隔離原則(ISP):如果類的介面不是內聚的,就表示該類具有“胖”介面,需要把多個介面分成多組方法。
這個原則要求不應該強迫客戶依賴於它們不用的方法。
一般通過多繼承的方式分離介面。
把“胖類”介面分解成多個特定於客戶的介面,是每組介面僅僅被繼承於需要繼承這些介面的類。解除了客戶端和它們沒有呼叫的方法間的依賴關係,並且使客戶之間互不依賴。