面向對象設計的原則

面向對象設計的原則

對待原則的態度:
如果我們將這些原則奉爲聖經、天條,用共產黨的話來說是教條主義,
那麼還是沒學過這些原則好一點,因爲封閉了我們的思想。這些原則
是大師們總結OO設計經驗,提煉出來的一些精髓,沒事老是想着去打倒它們,
好象是屬於沒事找抽型:)。如果在能承擔失敗後果的前提下,有充足的理由,
我會嘗試一下違揹他們,既使失敗了,也能更深刻地理解這些原則。
如果成功,嘿嘿,YYing。

SRP 單一職責原則
就一個類而言,應該僅有一個引起它變化的原因。
理解:前兩天在CSDN中看到一個網友提出PetShop4.0中將實體類(Model項目中的類)和操作類(BLL
項目中的類)合併,這樣有利於簡化程序結構。我覺得有悖於這條原則。

OCP 開放-封閉原則
軟件實體(類、模塊、函數等)應該是可以擴展的,但是不可修改。
理解:面向對象設計是要成本,代碼比結構化程序多而且犧牲一定的效率,所獲得的收益是代碼複用,應付多變的需求。
修改軟件實體將影響到已有的客戶程序,等於沒有複用,這種做法屬於只有投入沒有產出的,只幹活不拿錢的事,
我們千萬不能幹。

LSP Liskov 替換原則
子類型必須能夠替換掉它們的基類型。
理解:子類型無法替換基類型,將會導致在派生類對象作爲基類對象進行傳值時的錯誤。
這樣多態機制處於癱瘓狀態了。封裝是面向對象的基礎,繼承可以算是實現手段,
多態是面向對象的核心。頭可斷,血可流,小JJ不可切。

DIP 依賴倒置原則
抽象不應該依賴於細節,細節應該依賴於抽象。
理解:這可能是程序員違反最多的原則,Gof23種設計模式,
好象沒幾個是和這條原則沒關係的。
把程序比做建築,細節是房子的地基,抽象是房子的裝璜。
扒地基搞裝修的,我這輩子都沒見過。
往事不堪回首,翻開我的代碼,發現我也是有錢人啊,搞裝修算什麼,偶扒地基搞裝修,抽象依賴於細節的地方多得海了去了。
不知者不爲過,我很大度地原諒了自己。

ISP 接口隔離原剛
不應該強迫客戶依賴於他們不用的方法。接口屬於客戶,不屬於它所在的類層次結構。
理解:接口是客戶程序和類庫交流的一個通道。不同的客戶程序可能用到類庫的不同方法,
因此對不同的客戶程序要設計一套不同的接口。類庫恆久遠,接口天天變啊。類庫是老婆,
要保持穩定,接口是哄老婆的花言巧語,要在不同的場合,隨時進行切換。

REP 重用發佈等價原則
重用的粒度就是發佈的粒度。

CCP 共同封閉原則
包中的所有類對於同一類性質的變化應該是共同封閉的。一個變化若對一個包產生影響,
則將對該包中的所有類產生影響,而對於其他的包不造成任何影響。

CRP 共同重用原則
一個包的所有類應該是共同重用的。如果重用了包的一個類,那麼就要重用包中的所有類。

ADP 無環依賴原則
在包的依賴關係圖中不允許存在環。

SDP 穩定依賴原則
朝着穩定的方向進行依賴。

SAP 穩定抽象原則
包的抽象程度應該和其穩定程度一致。

PS:增加ing

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章