面向對象的設計原則

1) 單一職責原則 (The Single Responsiblity Principle,簡稱SRP)

 

2) 開放-封閉原則 (The Open-Close Principle,簡稱OCP)

 

3) Liskov 替換原則(The Liskov Substitution Principle,簡稱LSP)

 

4) 依賴倒置原則(The Dependency Inversion Pricinple,簡稱DIP)

 

5) 接口隔離原則 (The Interface Segregation Principle,簡稱ISP)

 

一、單一職責原則(SRP)

就一個類而言,應該僅有一個引起它變化的原因。軟件設計真正要做的許多內容,就是發現職責並把那些職責相互分離。測試驅動的開發實踐常常會在設計出現臭味之前就迫使我們分離職責。

二、開閉原則(OCP)

軟件實體(類、模塊、函數)應該是可擴展的,但是不可修改的。也就是說:對於擴展是開放的,對於更改是封閉的。怎樣可能在不改動模塊源代碼的情況下去更改它的行爲呢?怎樣才能在無需對模塊進行改動的情況下就改變它的功能呢?關鍵是抽象!因此在進行面向對象設計時要儘量考慮接口封裝機制、抽象機制和多態技術。該原則同樣適合於非面向對象設計的方法,是軟件工程設計方法的重要原則之一。

三、替換原則(LSP)

子類應當可以替換父類並出現在父類能夠出現的任何地方。這個原則是Liskov於1987年提出的設計原則。它同樣可以從Bertrand Meyer 的DBC (Design by Contract〔基於契約設計〕) 的概念推出。

四、依賴倒置原則(DIP)

1、高層模塊不應該依賴於低層模塊。二者都應該依賴於抽象。2、抽象不應該依賴於細節。細節應該依賴於抽象。在進行業務設計時,與特定業務有關的依賴關係應該儘量依賴接口和抽象類,而不是依賴於具體類。具體類只負責相關業務的實現,修改具體類不影響與特定業務有關的依賴關係。在結構化設計中,我們可以看到底層的模塊是對高層抽象模塊的實現(高層抽象模塊通過調用底層模塊),這說明,抽象的模塊要依賴具體實現相關的模塊,底層模塊的具體實現發生變動時將會嚴重影響高層抽象的模塊,顯然這是結構化方法的一個"硬傷"。面向對象方法的依賴關係剛好相反,具體實現類依賴於抽象類和接口。

五、接口分離原則(ISP)

採用多個與特定客戶類有關的接口比採用一個通用的涵蓋多個業務方法的接口要好。  ISP原則是另外一個支持諸如COM等組件化的使能技術。缺少ISP,組件、類的可用性和移植性將大打折扣。這個原則的本質相當簡單。如果你擁有一個針對多個客戶的類,爲每一個客戶創建特定業務接口,然後使該客戶類繼承多個特定業務接口將比直接加載客戶所需所有方法有效。

以上五個原則是面向對象中常常用到的原則。此外,除上述五原則外,還有一些常用的經驗諸如類結構層次以三到四層爲宜、類的職責明確化(一個類對應一個具體職責)等可供我們在進行面向對象設計參考。但就上面的幾個原則看來,我們看到這些類在幾何分佈上呈現樹型拓撲的關係,這是一種良好、開放式的線性關係、具有較低的設計複雜度。一般說來,在軟件設計中我們應當儘量避免出現帶有閉包、循環的設計關係,它們反映的是較大的耦合度和設計複雜化。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章