- 相關(guān)推薦
java方案設(shè)計(jì)與論證
java方案設(shè)計(jì)與論證的相關(guān)文章就在下面,在不斷的學(xué)習(xí)java過(guò)程中,下面的問(wèn)題會(huì)一直存在,請(qǐng)看:
java方案設(shè)計(jì)與論證
類(lèi)似一些高內(nèi)聚、低耦合、java設(shè)計(jì)原則都要牢記,設(shè)計(jì)類(lèi)、抽象類(lèi)、接口的能力,鍛煉這種能力可以通過(guò)去查看eclipse里面的源代碼和自己多動(dòng)手設(shè)計(jì)體驗(yàn)一些經(jīng)典類(lèi)的設(shè)計(jì)過(guò)程,會(huì)有一部分的提升。當(dāng)然,前提是必須了解一些關(guān)于類(lèi)設(shè)計(jì)原則方面的知識(shí)。然后讓這些知識(shí)和實(shí)際代碼結(jié)合起來(lái),不停的去鍛煉這種能力,會(huì)提升比較迅速。堅(jiān)持!
類(lèi)的設(shè)計(jì)原則有助于設(shè)計(jì)出合理的類(lèi)。
內(nèi)聚性
類(lèi)應(yīng)該描述一個(gè)單一的實(shí)體,而所有的類(lèi)操作應(yīng)該在邏輯上相互配合,支持一個(gè)一致的目的。例如:可以設(shè)計(jì)一個(gè)類(lèi)用于學(xué)生,但不應(yīng)該將學(xué)生與教職工組合在一個(gè)類(lèi)中,因?yàn)閷W(xué)生和教職工是不同的實(shí)體。
如果一個(gè)實(shí)體擔(dān)負(fù)太多的職責(zé),就應(yīng)該按各自的職責(zé)分成幾個(gè)類(lèi)。例如:String類(lèi)、StringBuffer類(lèi)和 StringBuilder類(lèi)用于處理字符串,但是他們的職責(zé)不同。String類(lèi)處理不變的字符串,StringBuilder類(lèi)創(chuàng)建可變字符串, StringBuffer()
與 StringBuffer() 類(lèi)還包含更新字符串的同步方法。
一致性
遵循標(biāo)準(zhǔn)java程序設(shè)計(jì)風(fēng)格和命名習(xí)慣。為類(lèi)、數(shù)據(jù)域和方法選取具有信息的名字。通常的風(fēng)格是將數(shù)據(jù)聲明置于構(gòu)造方法之前,并且將構(gòu)造方法置于方法之前。
選擇名字要保持一致。給類(lèi)似的操作選擇不同的名字并非良好的實(shí)踐。例如:Length() 方法返回String、StringBuilder 和 StringBuffer 的大小。如果在這些類(lèi)中給這個(gè)方法用不同的名字就不一致了。
一般來(lái)說(shuō),應(yīng)該具有一致性地提供一個(gè)公共無(wú)參的構(gòu)造函數(shù),用于構(gòu)建默認(rèn)實(shí)例。如果一個(gè)類(lèi)不支持無(wú)參的構(gòu)造函數(shù),要用文檔寫(xiě)出原因。如果沒(méi)有顯示定義構(gòu)造方法,即假定有一個(gè)空方法體的公共默認(rèn)無(wú)參構(gòu)造方法。
如果不想讓用戶(hù)創(chuàng)建類(lèi)的對(duì)象,可以在類(lèi)中聲明一個(gè)私有的.構(gòu)造方法,Math類(lèi)就是如此。
封裝性
一個(gè)類(lèi)應(yīng)該使用private修飾符隱藏其數(shù)據(jù),以免用戶(hù)直接訪問(wèn)它。這使得類(lèi)更易于維護(hù)。只在希望數(shù)據(jù)域可讀的情況下,才提供get方法;也只在希望數(shù)據(jù)域可更新的情況下,才提供set方法。例如:Rational類(lèi)為numerator和denominator提供了get方法,但是沒(méi)有提供set方法,因?yàn)镽ational對(duì)象是不可改變的。
清晰性
為使設(shè)計(jì)清晰,內(nèi)聚性、一致性和封裝性都是很好的設(shè)計(jì)原則。除此之外,類(lèi)應(yīng)該有一個(gè)很清晰的合約,從而易于解釋和理解。
用戶(hù)可以以各種不同的組合、順序,以及在各種環(huán)境中結(jié)合使用多個(gè)類(lèi)。因此,在設(shè)計(jì)一個(gè)類(lèi)時(shí),這個(gè)類(lèi)不應(yīng)該限制用戶(hù)如何以及何時(shí)使用該類(lèi);以一種方式設(shè)計(jì)屬性,以允許用戶(hù)按值的任何順序和任何組合來(lái)設(shè)置;設(shè)計(jì)方法應(yīng)該使得實(shí)現(xiàn)的功能與他們出現(xiàn)的順序無(wú)關(guān)。例如:Loan類(lèi)包含屬性loanAmount、numberOfYears和annualIntereRate,這些屬性的值,可以按任何順序來(lái)設(shè)置。
方法應(yīng)在不生產(chǎn)混淆的情況下進(jìn)行直觀定義。例如:String類(lèi)中的substring(int beginIndex, int endIndex)方法就有一點(diǎn)混亂。這個(gè)方法返回從beginIndex到endIndex-1而不是endIndex的子串。該方法應(yīng)該返回從beginIndex到endIndex的子字符串,從而更加直觀。
不應(yīng)該聲明一個(gè)來(lái)自其他數(shù)據(jù)域的數(shù)據(jù)域。例如,下面的Person類(lèi)有兩個(gè)數(shù)據(jù)域:birthDate和age。由于age可以從birthDate導(dǎo)出,所以age不應(yīng)該聲明為數(shù)據(jù)域。
public class Person{
private java.util.Date.birthDate;
private int age;
}
完整性
類(lèi)是為許多不同用戶(hù)的使用而設(shè)計(jì)的。為了能在一個(gè)廣泛的應(yīng)用中使用,一個(gè)類(lèi)應(yīng)該通過(guò)屬性和方法提供多種方案以適應(yīng)用戶(hù)的不同需求。例如:為了滿(mǎn)足不同的應(yīng)用需求,String類(lèi)包含了40多種很實(shí)用的方法。
實(shí)例和靜態(tài)
依賴(lài)于類(lèi)的具體實(shí)例的變量或方法必須是一個(gè)實(shí)例變量或者方法。如果一個(gè)變量被類(lèi)的所有實(shí)例所共享,那就應(yīng)該將它聲明為靜態(tài)的。如果方法不依賴(lài)于某和具體的實(shí)例,那就應(yīng)該將他聲明為靜態(tài)方法。
應(yīng)該總是使用類(lèi)名(而不是引用變量)引用靜態(tài)變量和方法,以增強(qiáng)可讀性并避免錯(cuò)誤。
不要在構(gòu)造方法中傳入?yún)?shù)來(lái)初始化靜態(tài)數(shù)據(jù)域。最好使用set方法改變靜態(tài)數(shù)據(jù)域。
構(gòu)造方法永遠(yuǎn)都是實(shí)例方法,因?yàn)樗怯脕?lái)創(chuàng)建具體實(shí)例的。一個(gè)靜態(tài)變量或方法可以從實(shí)例方法中調(diào)用,但是不能從靜態(tài)方法中調(diào)用實(shí)例變量或方法。
繼承和聚合
繼承和聚合之間的差異,就是 is-a(是一種) 和 has-a(具有)之間的關(guān)系。例如,蘋(píng)果是一種水果;因此,可以使用繼承來(lái)對(duì)Apple類(lèi)和Fruit類(lèi)之間的關(guān)系進(jìn)行建模。人具有名字;因此,可以使用聚合來(lái)對(duì)Person類(lèi)和Name類(lèi)之間的關(guān)系建模。
接口和抽象類(lèi)
接口和抽象類(lèi)都可以用于為對(duì)象指定共同的行為。如何決定是采用接口還是類(lèi)呢》通常,比較強(qiáng)的is-a (是一種)關(guān)系清晰的描述了父子關(guān)系,應(yīng)該采用類(lèi)來(lái)建模。例如,因?yàn)殚僮邮且环N水果,他們的關(guān)系就應(yīng)該采用類(lèi)的繼承關(guān)系來(lái)建模。弱的is-a關(guān)系,也成為is-kind-of (是一類(lèi))關(guān)系,表示一個(gè)對(duì)象擁有某種屬性。弱的is-a關(guān)系可以使用接口建模。例如所有的字符串都是可以比較的,因此String類(lèi)實(shí)現(xiàn)了Comparable接口。圓或者矩形是一個(gè)幾何對(duì)象,因此Circle可以設(shè)計(jì)為GeometricObject的子類(lèi)。圓有不同的半徑,并且可以基于半徑比較,因此Circle可以實(shí)現(xiàn)Comparable接口。
接口比抽象類(lèi)更加靈活,因?yàn)橐粋(gè)子類(lèi)只能繼承一個(gè)父類(lèi),但是卻可以實(shí)現(xiàn)任意個(gè)數(shù)的接口。然而,接口不嗯能夠具有具體的方法?梢越Y(jié)合接口和抽象的優(yōu)點(diǎn),創(chuàng)建一個(gè)接口。使用一個(gè)抽象類(lèi)來(lái)實(shí)現(xiàn)它?梢砸暺浞奖闶褂媒涌诨蛘叱橄箢(lèi)。
【java方案設(shè)計(jì)與論證】相關(guān)文章:
mba論證分析寫(xiě)作范文07-02
mba論證分析寫(xiě)作方法07-02
法律論證咨詢(xún)服務(wù)合同07-02
專(zhuān)家論證會(huì)邀請(qǐng)函07-15
改進(jìn)方案設(shè)計(jì)07-04
課題方案設(shè)計(jì)07-04