在軟件開(kāi)發(fā)中倔韭,為了提高軟件系統(tǒng)的可維護(hù)性和可復(fù)用性,增加軟件的可擴(kuò)展性和靈活性虹菲,程序員要盡量根據(jù)6條原則來(lái)開(kāi)發(fā)程序,從而提高軟件開(kāi)發(fā)效率掉瞳、節(jié)約軟件開(kāi)發(fā)成本和維護(hù)成本届惋。
1. 開(kāi)閉原則
對(duì)外擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉菠赚。
在程序需要進(jìn)行拓展的時(shí)候脑豹,不去修改原有的代碼,實(shí)現(xiàn)一個(gè)熱插拔的效果衡查。簡(jiǎn)言之瘩欺,是為了使程序的擴(kuò)展性好,易于維護(hù)和升級(jí)。想要達(dá)到這樣的效果俱饿,我們需要使用
接口
和抽象類
歌粥。因?yàn)槌橄箪`活性好,適應(yīng)性廣拍埠,只要抽象的合理失驶,可以基本保持軟件架構(gòu)的穩(wěn)定。而軟件中易變的細(xì)節(jié)可以從抽象派生來(lái)的實(shí)現(xiàn)類來(lái)進(jìn)行擴(kuò)展枣购,當(dāng)軟件需要發(fā)生變化時(shí)嬉探,只需要根據(jù)需求重新派生一個(gè)實(shí)現(xiàn)類來(lái)擴(kuò)展就可以了。
2. 里氏代換原則
任何基類可以出現(xiàn)的地方棉圈,子類一定可以出現(xiàn)涩堤。
通俗理解:子類可以擴(kuò)展父類的功能,但不要改變父類原有的功能分瘾。換句話說(shuō)胎围,子類繼承父時(shí),除添加新的方法完成新增功能外德召,盡量不要重寫(xiě)父類的方法白魂。
如果通過(guò)重寫(xiě)父類的方法來(lái)完成新的功能,這樣寫(xiě)起來(lái)雖然簡(jiǎn)單上岗,但是整個(gè)繼承體系的可復(fù)用性會(huì)比較差碧聪,特別是運(yùn)用多態(tài)比較頻繁時(shí),程序運(yùn)行出錯(cuò)的概率會(huì)非常大液茎。
3. 依賴倒轉(zhuǎn)原則
高層模塊不應(yīng)該依賴低層模塊逞姿,兩者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié)捆等,細(xì)節(jié)應(yīng)該依賴抽象滞造。簡(jiǎn)單的說(shuō)就是要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程栋烤,這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合谒养。
4. 接口隔離原則
客戶端不應(yīng)該被迫依賴于它不使用的方法;一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上明郭。
5. 迪米特法則
迪米特法則又叫最少知識(shí)原則买窟。如果兩個(gè)軟件實(shí)體無(wú)須直接通信,那么就不應(yīng)當(dāng)發(fā)生直接的相互調(diào)用薯定,可以通過(guò)第三方轉(zhuǎn)發(fā)該調(diào)用始绍。其目的是降低類之間的耦合度,提高模塊的相對(duì)獨(dú)立性话侄。
只和你的直接朋友交談亏推,不跟“陌生人”說(shuō)話(Talk only to your immediate friends and not to strangers)学赛。迪米特法則中的“朋友”是指:當(dāng)前對(duì)象本身、當(dāng)前對(duì)象的成員對(duì)象吞杭、當(dāng)前對(duì)象所創(chuàng)建的對(duì)象盏浇、當(dāng)前對(duì)象的方法參數(shù)等,這些對(duì)象同當(dāng)前對(duì)象存在關(guān)聯(lián)芽狗、聚合或組合關(guān)系绢掰,可以直接訪問(wèn)這些對(duì)象的方法。
6. 合成復(fù)用原則
盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn)童擎,其次才考慮使用繼承關(guān)系來(lái)實(shí)現(xiàn)滴劲。
通常類的復(fù)用分為繼承復(fù)用和合成復(fù)用兩種。
繼承復(fù)用雖然有簡(jiǎn)單和易實(shí)現(xiàn)的優(yōu)點(diǎn)柔昼,但它也存在以下缺點(diǎn):
- 繼承復(fù)用破壞了類的封裝性哑芹。因?yàn)槔^承會(huì)將父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類炎辨,父類對(duì)子類是透明的捕透,所以這種復(fù)用又稱為“白箱”復(fù)用。
- 子類與父類的耦合度高碴萧。父類的實(shí)現(xiàn)的任何改變都會(huì)導(dǎo)致子類的實(shí)現(xiàn)發(fā)生變化乙嘀,這不利于類的擴(kuò)展與維護(hù)。
- 它限制了復(fù)用的靈活性破喻。從父類繼承而來(lái)的實(shí)現(xiàn)是靜態(tài)的虎谢,在編譯時(shí)已經(jīng)定義,所以在運(yùn)行時(shí)不可能發(fā)生變化曹质。
采用組合或聚合復(fù)用時(shí)婴噩,可以將已有對(duì)象納入新對(duì)象中,使之成為新對(duì)象的一部分羽德,新對(duì)象可以調(diào)用已有對(duì)象的功能几莽,它有以下優(yōu)點(diǎn):
- 它維持了類的封裝性。因?yàn)槌煞謱?duì)象的內(nèi)部細(xì)節(jié)是新對(duì)象看不見(jiàn)的宅静,所以該復(fù)用又稱“黑箱”復(fù)用章蚣。
- 對(duì)象間的耦合度低∫碳校可以在類的成員位置聲明抽象纤垂。
- 復(fù)用的靈活性高。這種復(fù)用可以在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行磷账,新對(duì)象可以動(dòng)態(tài)地引用與成分對(duì)象類型相同的對(duì)象峭沦。