OOD與OOP的思想的感悟


Walking on water and developing software from a specification are easy if both are frozen)

  -Edward V. Berard (當你掌握了這兩種思想,就算在水里行走(一片混沌的理解),從規范中開發軟件也是很容易的);

OOD:面向對象設計

面向對象設計(Object-Oriented Design,OOD)方法是OO方法中一個中間過渡環節。其主要作用是對OOA分析的結果作進一步的規范化整理,以便能夠被OOP直接接受。

OOP:面向對象編程

面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。OOP 達到了軟件工程的三個主要目標:重用性、靈活性和擴展性。為了實現整體運算,每個對象都能夠接收信息、處理數據和向其它對象發送信息。

如果你代碼能做到以下幾點,那么你就正在OOD:

  • 面向對象
  • 復用
  • 能以最小的代價滿足變化
  • 不用改變現有代碼滿足擴展

SOLID的5原則:

S = 單一職責原則 Single Responsibility Principle
O = 開放閉合原則 Opened Closed Principle 
L = Liscov替換原則 Liscov Substitution Principle
I = 接口隔離原則 Interface Segregation Principle
D = 依賴倒置原則 Dependency Inversion Principle

S:單一職責原則,"引起類變化的因素永遠不要多於一個。" 一個類,只做它的業務,不管其他類的事務;比如一個超市(項目),包含收銀員,只負責收銀,保安員,只負責維持秩序!等等
O:開放閉合原則::"軟件實體(類,模塊,函數等等)應當對擴展開放,對修改閉合。" 裝飾模式就是這個原則的實現, 可以動態的添加功能,但是不能修改主體代碼;  
          比如手機,可以貼膜,可以加保護蓋,但是不能拆里面的零件;
L:李氏替換原則:"子類型必須能夠替換它們基類型" ; 多態的思想; 策略模式就是這個原則的實現。 把會變化的方法封裝起來,方便不同的實現;
         比如鳥類,有的會飛,有的不會飛;那么就把飛的方法單獨設計成一個接口,雞就繼承不會飛的,燕子就繼承會飛的;
I:接口隔離原則 "客戶端不應該被迫依賴於它們不用的接口。" 把不必要的接口,不要設計在一起。也就是抽象類,只保留最核心的接口,其他的可以設計成擴展;
        比如鳥類,吃(),睡(),飛(); 因為飛的函數,對於一些實現類是沒有必要的,所以應該隔離掉;只保留核心部分;
D:依賴倒置原則 "高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象";
        比如車(項目),包含引擎和輪胎兩個屬性,那么它們就可以設計成接口,然后各自有不同的實現,而且引擎和輪胎還可以復用到飛機,自行車中去,達到代碼復用。

http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html 參考

C:"組合替代(優於)繼承" (Composite/Aggregate Reuse Principle,CARP)
這關系到 is a 是一個和 hava a 有一個; 比如一個輪胎類,一個車類,那么車需要使用輪胎,就必須要繼承輪胎這個類嗎? 代碼可以這樣寫,但是不符合邏輯;
  所以可以把輪胎類當做屬性,添加到車類中去,這就是組合,有繼承的優點,而沒有它的缺點,更加靈活。

"笛米特法則" (Law of Demeter LoD)"你的類對其它類知道的越少越好" 門面模式(Facade)和中介模式(Mediator) 不好意思,這兩個模式我還不知道,網上沒找到滿意的舉例理解。

"共同封閉原則":這是說"相關類應該打包在一起";

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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM