封裝類要保證封裝內(nèi)容的高度統(tǒng)一性,這些方法都大大簡(jiǎn)化了類封裝的可維護(hù)性和重調(diào)用性。
可維護(hù)性
既然大家都知道重載是面向?qū)ο蟪绦蛟O(shè)計(jì)的很重要組成部分,那么你可以看出軟件的可維護(hù)性的重要性。如果能正確地封裝類,你就可以減少很多函數(shù)的更改。
在同一封裝里嚴(yán)密地聯(lián)結(jié)各個(gè)類
嚴(yán)密地聯(lián)結(jié)封裝中的各個(gè)類可以得到高凝聚的封裝。如果兩個(gè)類展示出很好的聯(lián)結(jié)性,那么這兩個(gè)類很有可能被經(jīng)常地調(diào)用以提供聯(lián)系方便的服務(wù)。所以當(dāng)在設(shè)計(jì)你的封裝時(shí),你可以最大限度地減小封裝之間的依靠性,以避免各個(gè)封裝的沖突。
在同一封裝里類要統(tǒng)一改變
顯然的,當(dāng)其他類改變時(shí),各個(gè)嚴(yán)密結(jié)合的類也同樣受到影響。任一個(gè)類的更改都會(huì)導(dǎo)致與這一類相關(guān)的類的相應(yīng)更改,至少,類中的函數(shù)必須更改。你可以通過在同一封裝里嚴(yán)密聯(lián)結(jié)類來避免這些風(fēng)險(xiǎn)。
然而,一些聯(lián)結(jié)不嚴(yán)密的類也被工程的其他改變而改變。在這樣的情況下,你應(yīng)該把這些類放在同一封裝。因?yàn)楠?dú)立的類改變時(shí),它們會(huì)產(chǎn)生其他的負(fù)影響。
在不同封裝里類不要一起調(diào)用
封裝啟發(fā)的可行性取決于是否封裝能提供真正的聯(lián)結(jié)。即使類能經(jīng)常地一起被調(diào)用,它們卻不能一起被改變。所認(rèn)你必須把這些類進(jìn)行獨(dú)立封裝。當(dāng)然,這就意味著引入多個(gè)封裝來調(diào)用獨(dú)立的類。這一方法的優(yōu)點(diǎn)是顯而易見的。
在一個(gè)封裝里對(duì)一個(gè)類的依賴也會(huì)產(chǎn)生對(duì)其他類的依賴,這是必然的。當(dāng)封裝中一個(gè)類改變時(shí),整個(gè)封裝都會(huì)發(fā)生變化。
在不同封裝里類不要一起重載
不幸的是,即使在初始化時(shí),一個(gè)類對(duì)象不能允許它自己去調(diào)用不同的類,就給軟件升級(jí)帶來不利,這樣軟件的可維護(hù)性就變得非常很重要。所以在不同的封裝里,獨(dú)立的類重載是一個(gè)最有效的方法。
關(guān)鍵的注意事項(xiàng)
在Java程序設(shè)計(jì)時(shí),你必須注意以下幾點(diǎn):
Containing Change ––––封裝各個(gè)類到一個(gè)單一的封裝里能減少很多更改,把所有改變都集中到一個(gè)封裝里有助于軟件的可維護(hù)性。
Class coupling –––––當(dāng)在同一封裝里聯(lián)結(jié)類時(shí),你應(yīng)該注意到其他類也有可能和這一個(gè)類有關(guān)。忽視這些聯(lián)系會(huì)產(chǎn)生很多不必要的關(guān)聯(lián)。
Contention ––––– 前兩個(gè)啟發(fā)產(chǎn)生比較大的封裝,目的是調(diào)用;后兩個(gè)啟發(fā)產(chǎn)生比較小的封裝,目的是可維護(hù)。這前后的封裝會(huì)發(fā)生沖突。在開發(fā)過程中,你必須在程序結(jié)構(gòu)上作出相應(yīng)的改變。在程序設(shè)計(jì)開發(fā)初期,你應(yīng)該選擇利于軟件可維護(hù)性的比較小的封裝;當(dāng)在開發(fā)后期,你應(yīng)該選擇利于軟件調(diào)用的比較大的封裝。
調(diào)用
當(dāng)設(shè)計(jì)程序框架時(shí),你應(yīng)該集中于封裝的調(diào)用,因?yàn)镴ava封裝的調(diào)用和可維護(hù)非常的重要。當(dāng)設(shè)計(jì)合理,程序就很容易的支持封裝的調(diào)用功能。