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