OO的設計原則

從網上找了一些資料覺得這個還可以:)

面向對象設計原則
面向對象設計的基石是“開—閉”原則。
   “開一閉”原則講的是:一個軟件實體應當對擴展開放,對修改關閉。
    這個規則說的是,在設計一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展。
    從另外一個角度講,就是所謂的“對可變性封裝原則”。“對可變性封裝原則”意味着兩點:
    1 .一種可變性不應當散落在代碼的很多角落裏,而應當被封裝到一個對象裏面。同一種可變性的不同表象意味着同一個繼承等級結構中的具體子類。
    2.一種可變性不應當與另一種可變性混合在一起。即類圖的繼承結構一般不應超過兩層。
    做到“開—閉”原則不是一件容易的事,但是也有很多規律可循,這些規律同樣也是設計原則,它們是實現開—閉原則的工具。


里氏代換原則
    里氏代換原則:如果對每一個類型爲T1的對象o1,都有類型爲T2的對象o2,使得以T1定義的所有程序P在所有對象o1都換成o2時,程序P的行爲沒有變化,那麼類型T2是T1的子類型。
    即如果一個軟件實體使用的是基類的話那麼也一定適用於子類。但反過來的代換不成立。
    如果有兩個具體類A和B之間的關係違反了里氏代換原則,可以在以下兩種重構方案中選擇一種:
    1 .創建一個新的抽象類C,作爲兩個具體類的超類,將A和B共同的行爲移動到C中,從而解決A和B行爲不完全一致的問題。
    2 .從B到A的繼承關係改寫爲委派關係。

依賴倒轉原則
    依賴倒轉原則講的是:要依賴於抽象,不要依賴於具體。即針對接口編程,不要針對實現編程。針對接口編程的意思是,應當使用接口和抽象類進行變量的類型聲明、參量的類型聲明,方法的返還類型聲明,以及數據類型的轉換等。不要針對實現編程的意思就是說,不應當使用具體類進行變量的類型聲明、參量的類型聲明,方法的返還類型聲明,以及數據類型的轉換等。
    依賴倒轉原則雖然強大,但卻不易實現,因爲依賴倒轉的緣故,對象的創建很可能要使用對象工廠,以避免對具體類的直接引用,此原則的使用還會導致大量的類。維護這樣的系統需要較好的面向對象的設計知識。
    此外,依賴倒轉原則假定所有的具體類都是變化的,這也不總是正確的。有一些具體類可能是相當穩定、不會發生變化的,消費這個具體類實例的客戶端完全可以依賴於這個具體類。

接口隔離原則
    接口隔離原則講的是:使用多個專門的接口比使用單一的接口要好。從客戶的角度來說:一個類對另外一個類的依賴性應當是建立在最小的接口上的。如果客戶端只需要某一些方法的話,那麼就應當向客戶端提供這些需要的方法,而不要提供不需要的方法。提供接口意味着向客戶端作出承諾,過多的承諾會給系統的維護造成不必要的負擔。

合成、聚合複用原則
    合成、聚合複用原則就是在一個新的對象裏面使用一些已有的對象,使之成爲新對象的一部份,新的對象通過向這些對象的委派達到複用已有功能的目的。這個原則有一個簡短的描述:要儘量使用合成、聚合,儘量不要使用繼承。
合成、聚合有如下好處:
新對象存取成分對象的唯一方法是通過成分對象的接口。

這種複用是黑箱複用,因爲成分對象的內部細節是新對象所看不到的。

這種複用可以在運行時間內動態進行,新對象可以動態的引用與成分對象類型相同的對象。
合成、聚合可以應用到任何環境中去,而繼承只能應用到一些有限環境中去。
    導致錯誤的使用合成、聚合與繼承的一個常見原因是錯誤的把“Has-a”關係當作“Is-a”關係。如果兩個類是“Has-a”關係那麼應使用合成、聚合,如果是“Is-a”關係那麼可使用繼承。

迪米特法則
    迪米特法則說的是一個對象應該對其它對象有儘可能少的瞭解。即只與你直接的朋友通信,不要跟陌生人說話。如果需要和陌生人通話,而你的朋友與陌生人是朋友,那麼可以將你對陌生人的調用由你的朋友轉發,使得某人只知道朋友,不知道陌生人。換言之,某人會認爲他所調用的是朋友的方法。
以下條件稱爲朋友的條件:
     當前對象本身。
     以參量的形式傳入到當前對象方法中的對象。
     當前對象的實例變量直接引用的對象。
     當前對象的實例變量如果是一個聚集,那麼聚集中的元素也都是朋友。
     當前對象所創建的對象。
     任何一個對象,如果滿足上面的條件之一,就是當前對象的朋友,否則就是陌生人。

迪米特法則的主要用意是控制信息的過載,在將其運用到系統設計中應注意以下幾點:
    在類的劃分上,應當創建有弱耦合的類。類之間的耦合越弱,就越有利於複用。
    在類的結構設計上,每一個類都應當儘量降低成員的訪問權限。一個類不應當public自己的屬性,而應當提供取值和賦值的方法讓外界間接訪問自己的屬性。
    在類的設計上,只要有可能,一個類應當設計成不變類。
    在對其它對象的引用上,一個類對其它對象的引用應該降到最低。

發佈了15 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章