Walking on water and developing software from a specification are easy if both are frozen)html
-Edward V. Berard (當你掌握了這兩種思想,就算在水裏行走(一片混沌的理解),從規範中開發軟件也是很容易的);編程
面向對象設計(Object-Oriented Design,OOD)方法是OO方法中一箇中間過渡環節。其主要做用是對OOA分析的結果做進一步的規範化整理,以便可以被OOP直接接受。架構
面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是計算機程序是由單個可以起到子程序做用的單元或對象組合而成。OOP 達到了軟件工程的三個主要目標:重用性、靈活性和擴展性。爲了實現總體運算,每一個對象都可以接收信息、處理數據和向其它對象發送信息。函數
若是你代碼能作到如下幾點,那麼你就正在OOD:spa
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) 很差意思,這兩個模式我還不知道,網上沒找到滿意的舉例理解。
"共同封閉原則":這是說"相關類應該打包在一塊兒";設計
"穩定抽象原則":這是說"類越穩定,越應該由抽象類組成";htm