面向對象的設計原則之總結

總結自
 
   面向對象的設計原則(PDF -〉中科院軟件所互聯網軟件技術實驗室. 陳燁
 
OCP原則(開閉原則)
    
    模塊的代碼是可擴展的,可以通過繼承、組合等來擴展模塊的功能。
    模塊的代碼是不可以修改的,即不可以修改原來模塊中的代碼。
    符合OCP的程序只能通過增加代碼而不是更改現有代碼來變化。
 
    一種可變性不應當散落在代碼的各個角落,而應當被封裝在一個對象裏,
    同時,一種可變性不應當與另一種可變性混合起來。
 
    如果代碼中遇到很多instance of的判斷,而且當功能擴展時,可能還會
    增加類型,是否可以考慮更改原來的instance of結構(見原文OCP實例)
    這樣,當類型增加時,可以只需添加一個接口的實現。無需更改原來代碼。
 
LSP原則(LSP原則)
 
    什麼時候才能正確使用繼承?即S什麼時候纔是T的真正子類?LSP原則
    指出:
   
    若對於每一個類型S的對象s1,都存在一個T的類型t1,使得在所有針對
    T編寫的程序P中,用s1替換t1後,程序的行爲功能不變,則S是T的子類型。
 
    文中舉了一個矩形和正方形的例子,正方形繼承自矩形,但是,當使用正方
    形實例替換矩形之後,程序的行爲功能變掉了。即方法f(rectangle r)執行
    不再具有原來的行爲功能了。
 
    行爲功能纔是軟件關注所關注的問題,所有派生類的行爲功能必須和客戶程序
    對其基類期望的一致。
 
DIP原則(依賴倒置原則)
 
    糟糕的設計:很難添加新的功能,因爲每一處改動都會影響系統中過多的模塊
    當你做了一處改動,卻導致系統的另一模塊發生了問題,很難在別的應用程序
    重用現在的模塊,因爲他不能從現有的應用程序獨立的提取出來。
   
    糟糕的設計是因爲過強的耦合關係,解耦的方法就是使用依賴導置原則。
 
    依賴倒置的基本原則是這樣的:
        
            高層模塊不應該依賴於低層模塊,二層應該依賴於抽象。
            抽象不應該依賴於細節,細節應該依賴於抽象。
 
    在java中,面向接口編程就是依賴倒置的一個體現。
    實踐中,應該從問題的具體細節中分離出抽象,以抽象的方式對類進行耦合。
    依賴倒置的主要缺點就是導致大量的類的生成,由於系統中並不是每個類都會
    產生變化,明確確定不發生變化的東西可以不使用該原則。
 
ISP原則(接口隔離)
   
    這個容易理解,一個類對另一個類的依賴應當是建立在最小接口基礎上的,使用
    多個專門的接口比使用單一的總接口要好。
 
CARP(合成複用原則)
 
   在新對象裏面使用已有的一些對象,通過對已有對象的委派達到複用目的。
   一般認爲,合成優於繼承。
 
LoD (迪米特原則)
 
   “不要和陌生人說話”,即一個對象應當對其他對象有儘可能少的瞭解,這也是
    爲了減少耦合性。
    一個類儘量只於自己的朋友交談,朋友的條件是這樣的:
    (1)當前對象本身
    (2)當前對象的方法傳進來的參數變量
    (3)當前對象創建的對象
    (4)當前對象的實例變量如果是一個聚集,那麼聚集中的元素也都是朋友
 
     迪米特法則的主要用意是控制信息的過載。在將迪米特法則運用到系統
     設計中時,要注意下面的幾點:
     
     1)在類的劃分上,應當創建有弱耦合的類。
     2)在類的結構設計上,每一個類都應當儘量降低成員的訪問權限。
     3)在類的設計上,只要有可能,一個類應當設計成不變類。
     4)在對其他類的引用上,一個對象對其對象的引用應當降到最低。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章