面向?qū)ο蟮脑O(shè)計與分析

 “系統(tǒng)越復(fù)雜,越容易全面崩潰”。建筑師一般不會想要為一幢100層的大樓添加一個新的地下室,因為這樣做成本會很高,無疑將失敗,但讓人吃驚的是,軟件系統(tǒng)的用戶提出類似的改動時,都不會多想一下,相反,他們會說,這是一個簡單地編程問題。
對象是數(shù)據(jù)和允許的操作組成的包,面向?qū)ο蟮脑瓌t:

一、開放關(guān)閉原則
很多教程都把[開閉原則]作為這六大原則中最基本的原則,也就是說他是各個原則的核心。開閉原則指的是,一個軟件實體如類、模塊和函數(shù)應(yīng)該對擴(kuò)展開放,對修改關(guān)閉

二、單一職責(zé)原則(Single Responsibility Principle)
指每個類都應(yīng)該專注于做一件事情,而不是分散地同時做好幾件事。
因為一個類只負(fù)責(zé)一項任務(wù),其可以降低類的復(fù)雜度;提高類的可讀性,提高系統(tǒng)的可維護(hù)性。

三、依賴倒置原則
這個原則也是講究解耦,他指的是讓高層模塊不要依賴低層模塊。這是個純粹的面向接口,面向模塊開發(fā)思路了,因為面向?qū)ο蠖?,各個對象自己的東西和外界是解耦的,因為封裝特性把它們自己的屬性都封裝起來了,所以是不會和其他對象有耦合關(guān)系的(如c++的友元除外);但是各個對象仍然是相互耦合的,最強(qiáng)的耦合就屬于繼承耦合了,對象組合起碼還是輕耦合,繼承是個高耦合呀。依賴倒置就是讓各個對象耦合度降低,高層模塊不能繼承底層模塊,需要底層的東西也是外界注入而不是自己創(chuàng)建得到;同時調(diào)用的時候也是使用接口調(diào)用,而不是依賴具體實現(xiàn),并且因為是接口調(diào)用,具體實現(xiàn)模塊可以被任意替換了。
 依賴倒置原則(Dependence Inversion Principle)是程序要依賴于抽象接口,不要依賴于具體實現(xiàn)。簡單的說就是要求對抽象進(jìn)行編程,不要對實現(xiàn)進(jìn)行編程,這樣就降低了客戶與實現(xiàn)模塊間的耦合。
  面向過程的開發(fā),上層調(diào)用下層,上層依賴于下層,當(dāng)下層劇烈變動時上層也要跟著變動,這就會導(dǎo)致模塊的復(fù)用性降低而且大大提高了開發(fā)的成本。
  面向?qū)ο蟮拈_發(fā)很好的解決了這個問題,一般情況下抽象的變化概率很小,讓用戶程序依賴于抽象,實現(xiàn)的細(xì)節(jié)也依賴于抽象。即使實現(xiàn)細(xì)節(jié)不斷變動,只要抽象不變,客戶程序就不需要變化。這大大降低了客戶程序與實現(xiàn)細(xì)節(jié)的耦合度。
這樣做就可以降低各個模塊的耦合,也可以確保里氏替換原則的實現(xiàn)。實現(xiàn)里氏替換原則有什么用?當(dāng)然是可以方便擴(kuò)展了。

四、里氏替換原則(Liskov Substitution Principle)
即超類存在的地方,子類是可以替換的。
里氏替換原則是實現(xiàn)開閉原則的重要方式之一,由于使用基類對象的地方都可以使用子類對象,因此在程序中盡量使用基類類型來對對象進(jìn)行定義,而在運行時再確定其子類類型,用子類對象來替換父類對象。

五、接口隔離原則(Interface Segregation Principle)
即應(yīng)當(dāng)為客戶端提供盡可能小的單獨的接口。
也就是要為各個類建立專用的接口,而不要試圖去建立一個很龐大的接口供所有依賴它的類去調(diào)用。依賴幾個專用的接口要比依賴一個綜合的接口更靈活。

六、迪米特法則(Law Of Demeter)
即一個軟件實體應(yīng)當(dāng)盡可能少的與其他實體發(fā)生相互作用。
一個對象對另一個對象知道的越少越好,即一個軟件實體應(yīng)當(dāng)盡可能少的與其他實體發(fā)生相互作用,在一個類里能少用多少其他類就少用多少,尤其是局部變量的依賴類,能省略盡量省略。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容