面向對象的幾個原則

http://joard.iteye.com/blog/168069

開-閉原則 Open-Closed Principle OCP
里氏代換原則 Liskov Substitution Principle LSP
依賴倒轉原則 Dependency Inversion Principle DIP
接口隔離原則 Interface Segregation Principle ISP
組合/聚合複用原則 Composition/Aggregation Principle CARP
迪米特法則 Law of Demeter LoD
可擴展性:OCP, LSP, DIP,CARP
靈活性:OCP, ISP,LoD

1.開閉原則 OCP
一個軟件的實體應當對擴展開放,對修改關閉。
Software entities should be open for extension,but closed for modification.

對可變性的封裝原則 Principle of Encapsulation of Variation EVP
EVP實際上是設計模式的主題,換言之,所有的設計模式都是對不同的可變性的封裝,從而使系統在不同的角度上達到OCP要求。

2.里氏代換原則 LSP
如果對每一個類型爲T1的對象o1,都有類型爲T2的對象o2,使得以T1定義的所有程序P在所有對象o1都代換成o2時,程序P的行爲沒有變化,那麼類型T2是T1的子類型。
LSP要求凡是基類使用的地方,子類型一定適用。
LSP是一條非常嚴格的原則,要求基類變爲子類的時候,其程序行爲不發生改變。在oop時並沒有嚴格按照LSP來做。

3.依賴倒轉原則 DIP
表述1:抽象不應當依賴於細節,細節應當依賴於抽象。
Abstractions should not depend upon details, details should depend upon abstractions.
表述2:要針對接口編程,不要針對實現編程。
Program to an interface, not an implementation.

4.接口隔離原則 ISP
使用多個專門的接口比使用單一的總接口要好。
一個類對另一個類的依賴性應當是建立在最小接口上的(LoD)。

5.合成/聚合複用原則 CARP
= 合成複用原則 Composite Reuse Principle CRP
要儘量使用合成/聚合,儘量不要使用繼承。
繼承的優點:①新類易實現. ②易修改或擴展
缺點:①繼承複用破環包裝,白箱複用.
②超類發生變化,子類不得不改變.
③繼承的實現是靜態的,不能在運行時改變.
優缺點的②是相互對應的。

6.迪米特法則 LoD
= 最少知識原則 Least Konwledge Principle
一個對象應當對其他對象有儘可能少的瞭解。
表述:
①只與你直接的朋友們通信 Only talk to your immediate friends
②不要跟陌生人說話 Don's talk to strangers
③每一個軟件單位對其他的單位都只有最少的知識,而且侷限於那些與本單位密切相關的軟件單位。
LoD的實質是控制對象之間的信息流量,流向及信息的影響。
①優先考慮將一個類設置成不變類.
②儘量降低類/成員的訪問權限.

要想恰到好處地在一個系統裏面使用設計模式,必須做到以下幾點:
①完全瞭解面臨的問題,這就是說要完全瞭解具體情況。如果不完全瞭解所面臨的難題,怎麼能談得上解決問題呢?
②完全瞭解模式,這就是說要十分懂得理論。如果不完全懂得所使用的理論,怎麼能夠正確地應用這一理論呢?
③非常瞭解怎樣使用設計模式解決實際的問題,這就是說要將模式理論與具體系統需求情況相結合。如果設計師不知道一個設計模式怎樣對系統設計有幫組的話,最好不要使用這個模式。不要只是因爲想在簡歷上寫上設計模式方面的經驗就盲目地使用模式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章