一、面向?qū)ο?OO)原則
面向?qū)ο驩O七大原則為:
1.單一職責(zé)原則(Single Responsibility Principle)
- 一個(gè)類或者方法只負(fù)責(zé)一個(gè)功能點(diǎn)
- 對(duì)一個(gè)類來(lái)說(shuō)裁替,應(yīng)該僅有一個(gè)引起它變化的原因
- 單一職責(zé)原則既簡(jiǎn)單也難運(yùn)用,簡(jiǎn)單是它易于理解摧玫,一個(gè)類(大到模塊,小到方法)承擔(dān)的職責(zé)越多蚊伞,被復(fù)用的可能性就越低席赂,耦合度就高,一個(gè)職責(zé)變化會(huì)影響其它職責(zé)时迫。難運(yùn)用因?yàn)槁氊?zé)的界限比較難劃分,跟實(shí)際所處環(huán)境和背景相關(guān)谓晌。
2.開(kāi)閉原則(Open Close Principle)
對(duì)擴(kuò)展開(kāi)放掠拳,對(duì)修改關(guān)閉; 系統(tǒng)中的模塊纸肉、類或者方法對(duì)提供者(開(kāi)發(fā)者)是開(kāi)放的溺欧,可以對(duì)現(xiàn)有系統(tǒng)功能進(jìn)行擴(kuò)展(新增)功能, 系統(tǒng)中的模塊柏肪、類或者方法對(duì)使用者(調(diào)用者)是關(guān)閉的姐刁,使用者不用因?yàn)樘峁┓叫略龉δ芏鴮?dǎo)致使用者要跟著修改,擴(kuò)展和新增功能不直接修改已有代碼
當(dāng)需求發(fā)生變化時(shí)烦味,應(yīng)該通過(guò)增加新的代碼來(lái)擴(kuò)展現(xiàn)有功能聂使,而不是直接修改已有代碼
3.里氏替換原則(Liskov Substitution Principle)
- 將一個(gè)父類對(duì)象替換成它的子類對(duì)象后,不會(huì)影響程序的執(zhí)行結(jié)果
- 簡(jiǎn)單來(lái)說(shuō)谬俄,子類可以擴(kuò)展父類的功能柏靶,但不能改變父類的原來(lái)的功能(盡量不要重寫父類方法)
(1)優(yōu)點(diǎn)
- 代碼復(fù)用,子類擁有父類的方法和屬性
(2)缺點(diǎn)
- 繼承是侵入性溃论,降低代碼靈活性屎蜓,一旦繼承,子類就擁有父類的方法和屬性钥勋,多一份約束
- 增加耦合性炬转,當(dāng)父類屬性和方法被修改時(shí),需要考慮子類的修改
- 一個(gè)類只能繼承一個(gè)父類(java)
- 要真正做到不重寫父類方法是一種理想狀態(tài)
里氏替換原則最初由Barbara Liskov在1987年的一次學(xué)術(shù)會(huì)議中提出算灸,而真正正式發(fā)表是在1994年扼劈,Barbara Liskov 和 Jeannette Wing發(fā)表的一篇學(xué)術(shù)論文《A behavioral notion of subtyping》, Liskov是美國(guó)第一個(gè)計(jì)算機(jī)科學(xué)女博士
4.依賴倒置原則(Interface Segregation Principle)
- 不要依賴具體,要依賴抽象(接口)
- 抽象不應(yīng)該依賴實(shí)現(xiàn)乎婿,實(shí)現(xiàn)應(yīng)該抽象
- 面向接口編程测僵,不要面向?qū)崿F(xiàn)編程
降低類間的耦合性,提高代碼的可讀性和可維護(hù)性
5.接口隔離原則(Dependence Inversion Principle)
- 提供單一接口,不要提供臃腫龐大的接口
- 盡量將臃腫龐大的接口拆分成更小的和更具體的接口捍靠,讓接口中只包含客戶感興趣的方法
接口隔離能有效降低類對(duì)接口的依賴性沐旨,從而降低耦合性,同時(shí)也應(yīng)該避免盲目過(guò)度拆分接口榨婆,造成接口類冗余磁携。
6.合成/聚合復(fù)用原則(Composite/Aggregate Reuse Principle CARP)
- 盡量使用對(duì)象組合取代繼承來(lái)達(dá)到復(fù)用的目的
(1) 組合復(fù)用(Has-A)
在新類中通過(guò)組合關(guān)系來(lái)使用已有的類,使其成為新類的一部分良风,新類可以委派調(diào)用已有類的方法達(dá)到功能復(fù)用的目的谊迄,已有類內(nèi)部實(shí)現(xiàn)細(xì)節(jié)對(duì)于新類不可以見(jiàn),所以又稱“黑箱”復(fù)用.
(2) 繼承復(fù)用(Is-A)
通過(guò)繼承已有類烟央,讓新類擁有已有類(父類)的方法和屬性以達(dá)到復(fù)用功能的目的, 繼承會(huì)把父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類统诺,所以又稱“白箱”復(fù)用.
組合復(fù)用和繼承復(fù)用都能達(dá)到復(fù)用的目的,但是繼承復(fù)用會(huì)破壞系統(tǒng)的封裝性疑俭,父類發(fā)生變化粮呢,子類需要相應(yīng)發(fā)生變化,而合同復(fù)用更加靈活钞艇,耦合度更低
7.迪米特法則(Law Of Demeter)
盡量降低類與類之間的耦合啄寡,一個(gè)類依賴的類越少越好。
該法則也叫最少知道原則哩照, 一個(gè)類對(duì)于其他類知道的越少越好挺物,就是說(shuō)一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少的了解,只和朋友類通信,對(duì)于出現(xiàn)在成員變量飘弧、方法的輸入和輸出參數(shù)中的類都可以被稱為直接朋友识藤,而出現(xiàn)在方法體內(nèi)部的類不屬于朋友類即陌生人
比如有三個(gè)類A、B眯牧、C蹋岩,現(xiàn)在A類只需要調(diào)用B類的方法,B類則去調(diào)用C類的屬性学少,如果此時(shí)A類中出現(xiàn)了C類的對(duì)象剪个,就相當(dāng)于A類和C類發(fā)生了耦合關(guān)系,但實(shí)際上兩者并不相關(guān)版确,并沒(méi)有聯(lián)系扣囊。此時(shí)B類應(yīng)該完成處理C類的屬性以及方法再將結(jié)果返回給A類,而A類也不需要出現(xiàn)C類即可
OO七大原則是包含Solid原則的绒疗,Solid原則是七大原則中前5個(gè)的首寫字母侵歇, 軟件編程總原則:低耦合,高內(nèi)聚