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 inte***ce segregation principle,簡稱isp)
一、單一職責原則(srp)
就乙個類而言,應該僅有乙個引起它變化的原因。軟體設計真正要做的許多內容,就是發現職責並把那些職責相互分離。測試驅動的開發實踐常常會在設計出現臭味之前就迫使我們分離職責。
二、開閉原則(ocp)
軟體實體(類、模組、函式)應該是可擴充套件的,但是不可修改的。也就是說:對於擴充套件是開放的,對於更改是封閉的。怎樣可能在不改動模組源**的情況下去更改它的行為呢?怎樣才能在無需對模組進行改動的情況下就改變它的功能呢?關鍵是抽象!因此在進行物件導向設計時要盡量考慮介面封裝機制、抽象機制和多型技術。該原則同樣適合於非物件導向設計的方法,是軟體工程設計方法的重要原則之一。
三、替換原則(lsp)
子類應當可以替換父類並出現在父類能夠出現的任何地方。這個原則是liskov於2023年提出的設計原則。它同樣可以從bertrand meyer 的dbc (design by contract〔基於契約設計〕) 的概念推出。
四、依賴倒置原則(dip)
1、高層模組不應該依賴於低層模組。二者都應該依賴於抽象。2、抽象不應該依賴於細節。細節應該依賴於抽象。在進行業務設計時,與特定業務有關的依賴關係應該盡量依賴介面和抽象類,而不是依賴於具體類。具體類只負責相關業務的實現,修改具體類不影響與特定業務有關的依賴關係。在結構化設計中,我們可以看到底層的模組是對高層抽象模組的實現(高層抽象模組通過呼叫底層模組),這說明,抽象的模組要依賴具體實現相關的模組,底層模組的具體實現發生變動時將會嚴重影響高層抽象的模組,顯然這是結構化方法的乙個"硬傷"。物件導向方法的依賴關係剛好相反,具體實現類依賴於抽象類和介面。
五、介面分離原則(isp)
採用多個與特定客戶類有關的介面比採用乙個通用的涵蓋多個業務方法的介面要好。 isp原則是另外乙個支援諸如com等元件化的使能技術。缺少isp,元件、類的可用性和移植性將大打折扣。這個原則的本質相當簡單。如果你擁有乙個針對多個客戶的類,為每乙個客戶建立特定業務介面,然後使該客戶類繼承多個特定業務介面將比直接載入客戶所需所有方法有效。
以上五個原則是物件導向中常常用到的原則。此外,除上述五原則外,還有一些常用的經驗諸如類結構層次以三到四層為宜、類的職責明確化(乙個類對應乙個具體職責)等可供我們在進行物件導向設計參考。但就上面的幾個原則看來,我們看到這些類在幾何分布上呈現樹型拓撲的關係,這是一種良好、開放式的線性關係、具有較低的設計複雜度。一般說來,在軟體設計中我們應當盡量避免出現帶有閉包、迴圈的設計關係,它們反映的是較大的耦合度和設計複雜化。
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...
物件導向設計原則
物件設計原則 物件導向設計原則 物件導向設計的基石是 開 閉 原則。開一閉 原則講的是 乙個軟體實體應當對擴充套件開放,對修改關閉。這個規則說的是,在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。從另外乙個角度講,就是所謂的 對可變性封裝原則 對可變性封裝原則 意味著兩點 1 ...
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...