物件導向設計的原則

2021-09-24 23:46:01 字數 1624 閱讀 1221

摘自:《敏捷軟體開發:原則、模式與實踐》 robert c.martin【著】,鄧輝【譯】

類設計原則:

(1) srp,單一職責原則(the single responsibility priciple):

就乙個類而言,應該僅有乙個引起它變化的原因。

(2) ocp,開放封閉原則(the open-close priciple):

軟體實體(類、模組、函式等)應該是可以擴充套件的,但是不可修改;封閉是建立在抽象的基礎上的,我們應該只對程式中頻繁變化的部分進行抽象,拒絕不成熟的抽象與抽象本身一樣重要!ocp背後的主要機制是抽象、多型和繼承。

(3) lsp,liskov替換原則(the liskov substitution priciple):

子型別必須能夠替換掉它們的基型別。對於lsp的違反常常會導致使用執行時型別識別(rtti)(使用乙個顯式的if語句或者if/else鏈來確定乙個物件的型別)。

(4) dip,依賴倒置原則(the dependency inversion priciple):

高層模組不應該依賴於底層模組,二者都應該依賴於抽象;抽象不應該依賴於細節;細節應該依賴於抽象。事實上,使用new來建立物件的任何時候,我們都違反了dip;但有時,這種違反是無害的,例如依賴於穩定不變的具體類。

(5) isp,介面隔離原則(the inte***ce segregation inte***ce):

不應該強迫客戶依賴於他們不用的方法。介面屬於客戶,不屬於它們所在的類層次結構。

胖類(fat class)會導致它們的客戶程式之間產生不正常的並且有害的耦合關係。當乙個客戶程式要求該胖類進行乙個改動時,會影響到所有其他的客戶程式。因此,客戶程式應該僅僅依賴於它們實際呼叫的方法。通過把胖類的介面分解為多個特定與客戶程式的介面,可以實現這個目標,每個特定於客戶程式的介面僅僅宣告它的特定客戶或者客戶組呼叫的那些函式。接著,該胖類就可以繼承所有特定於客戶的介面,並實現它們。這就解除了客戶程式和它們沒有呼叫的方法間的依賴關係,使得客戶程式之間互不依賴。分離客戶就是分離介面!

包設計-內聚原則:

(1) rep,重用發布等價原則:

重用的粒度就是發布的粒度。

(2) ccp,共同封閉原則:

包中的所有類對於同一類性質的變化應該是共同封閉的。 乙個變化若對乙個包產生影響,則將對該包中的所有類產生影響,而對於其他的包不造成任何影響。

(3) crp,共同重用原則:

乙個包中的所有類應該是共同重用的。如果重用了包中的乙個類,就應該重用包中的所有類。

包設計-耦合原則:

(1) adp,無環依賴原則:

在包的依賴關係圖中不允許存在環。

(2) sdp,穩定依賴原則:

朝著穩定的方向進行依賴。

(3) sap,穩定抽象原則:

包的抽象程度應該和其穩定程度一致。  

物件導向設計原則

oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...

物件導向設計原則

物件設計原則 物件導向設計原則 物件導向設計的基石是 開 閉 原則。開一閉 原則講的是 乙個軟體實體應當對擴充套件開放,對修改關閉。這個規則說的是,在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。從另外乙個角度講,就是所謂的 對可變性封裝原則 對可變性封裝原則 意味著兩點 1 ...

物件導向設計原則

oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...