OODP 物件導向的設計原則

2021-08-31 12:30:45 字數 1630 閱讀 5063

oop指的是物件導向程式設計的基本原則和核心思路。

oop教你在**中構造類,並在類裡封裝屬性和方法,同時構造他們之間的層次關係。

乙個設計敏捷的軟體能輕鬆應對變化,能被擴充套件,並且能被復用。

物件導向設計是做到敏捷設計的關鍵:

物件導向

復用能以最小的代價滿足變化

不用改變現有**滿足擴充套件

ood最基本5原則:

s = 單一職責原則 single responsibility principle

o = 開放閉合原則 opened closed principle

l = liscov替換原則 liscov substitution principle

i = 介面隔離原則 inte***ce segregation principle

d = 依賴倒置原則 dependency inversion principle

s:並不是因為你能,你就應該做。

引起類變化的因素永遠不要多於乙個。

乙個類有且只有乙個職責。

如果類有多於乙個原因會導致它變化(或者多於乙個職責),需要依據它們的職責把這個類拆分為多個類。

每個職責是軸向變化的; 如果類包含多個職責,**會變得耦合。

o:軟體實體(類,模組,函式等等)應當對擴充套件開放,對修改閉合。

在不修改類的前提下擴充套件乙個類的行為。

對擴充套件開放意味著類或模組的行為能夠改變,在需求變化時我們能以新的,不同的方式讓模組改變,或者在新的應用中滿足需求。

抽象是關鍵,抽象的東西是系統的核心內容,如果抽象的好,很可能在擴充套件功能時它不需要任何修改。

l:子型別必須能夠替換它們的基型別。

使用基類引用的函式必須能使用繼承類的物件而不必知道它。

在基本的物件導向原則裡,"繼承"通常是"is a"的關係。如果"son" 是乙個"person",那麼"son"類應當繼承"person"類。liskov替換原則正是保證繼承能夠被正確使用的方法。

如果沒有lsp,類繼承就會混亂;如果子類作為乙個引數傳遞給方法,將會出現未知行為;如果沒有lsp,適用於基類的單元測試將不能成功用於測試子類;使用lsp做為乙個檢查工作來測試繼承是否正確。

i:客戶端不應該被迫依賴於它們不用的介面。

如果介面太大,包含很多暴露的方法,在外界看來會很混亂。介面包含太多的方法也使其可用性降低,包含了無用方法的"胖介面"會增加類之間的耦合。如果乙個類想實現該介面,那麼它需要實現所有的方法,儘管有些對它來說可能完全沒用。

介面隔離原則確保實現的介面有他們共同的職責,它們是明確的,易理解的,可復用的。

d:高層模組不應該依賴底層模組,兩者都應該依賴其抽象。

如果**中不用依賴倒置,我們將面臨如下風險:

使用低階類會破壞高階**;

當低階類變化時需要很多時間和代價來修改高階**;

產生低復用的**;

除solid原則外還有很多其它的物件導向原則。如:

"組合替代繼承":這是說相對於繼承,要更傾向於使用組合;

"笛公尺特法則":這是說"你的類對其它類知道的越少越好";

"穩定抽象原則":這是說"類越穩定,越應該由抽象類組成";

設計模式只是對一些經常出現的場景的一些通用設計建議。這些靈感主要來自於物件導向原則。你可以把設計模式看作"框架",把ood原則看作"規範"。

出處[url]

物件導向設計原則

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

物件導向設計原則

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

物件導向設計原則

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