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