java方案設計與論證

時(shí)間:2022-07-02 11:21:40 設計 我要投稿
  • 相關(guān)推薦

java方案設計與論證

  java方案設計與論證的相關(guān)文章就在下面,在不斷的學(xué)習java過(guò)程中,下面的問(wèn)題會(huì )一直存在,請看:

java方案設計與論證

  java方案設計與論證

  類(lèi)似一些高內聚、低耦合、java設計原則都要牢記,設計類(lèi)、抽象類(lèi)、接口的能力,鍛煉這種能力可以通過(guò)去查看eclipse里面的源代碼和自己多動(dòng)手設計體驗一些經(jīng)典類(lèi)的設計過(guò)程,會(huì )有一部分的提升。當然,前提是必須了解一些關(guān)于類(lèi)設計原則方面的知識。然后讓這些知識和實(shí)際代碼結合起來(lái),不停的去鍛煉這種能力,會(huì )提升比較迅速。堅持!

  類(lèi)的設計原則有助于設計出合理的類(lèi)。

  內聚性

  類(lèi)應該描述一個(gè)單一的實(shí)體,而所有的類(lèi)操作應該在邏輯上相互配合,支持一個(gè)一致的目的。例如:可以設計一個(gè)類(lèi)用于學(xué)生,但不應該將學(xué)生與教職工組合在一個(gè)類(lèi)中,因為學(xué)生和教職工是不同的實(shí)體。

  如果一個(gè)實(shí)體擔負太多的職責,就應該按各自的職責分成幾個(gè)類(lèi)。例如:String類(lèi)、StringBuffer類(lèi)和 StringBuilder類(lèi)用于處理字符串,但是他們的職責不同。String類(lèi)處理不變的字符串,StringBuilder類(lèi)創(chuàng )建可變字符串, StringBuffer()

  與 StringBuffer() 類(lèi)還包含更新字符串的同步方法。

  一致性

  遵循標準java程序設計風(fēng)格和命名習慣。為類(lèi)、數據域和方法選取具有信息的名字。通常的風(fēng)格是將數據聲明置于構造方法之前,并且將構造方法置于方法之前。

  選擇名字要保持一致。給類(lèi)似的操作選擇不同的名字并非良好的實(shí)踐。例如:Length() 方法返回String、StringBuilder 和 StringBuffer 的大小。如果在這些類(lèi)中給這個(gè)方法用不同的名字就不一致了。

  一般來(lái)說(shuō),應該具有一致性地提供一個(gè)公共無(wú)參的構造函數,用于構建默認實(shí)例。如果一個(gè)類(lèi)不支持無(wú)參的構造函數,要用文檔寫(xiě)出原因。如果沒(méi)有顯示定義構造方法,即假定有一個(gè)空方法體的公共默認無(wú)參構造方法。

  如果不想讓用戶(hù)創(chuàng )建類(lèi)的對象,可以在類(lèi)中聲明一個(gè)私有的.構造方法,Math類(lèi)就是如此。

  封裝性

  一個(gè)類(lèi)應該使用private修飾符隱藏其數據,以免用戶(hù)直接訪(fǎng)問(wèn)它。這使得類(lèi)更易于維護。只在希望數據域可讀的情況下,才提供get方法;也只在希望數據域可更新的情況下,才提供set方法。例如:Rational類(lèi)為numerator和denominator提供了get方法,但是沒(méi)有提供set方法,因為Rational對象是不可改變的。

  清晰性

  為使設計清晰,內聚性、一致性和封裝性都是很好的設計原則。除此之外,類(lèi)應該有一個(gè)很清晰的合約,從而易于解釋和理解。

  用戶(hù)可以以各種不同的組合、順序,以及在各種環(huán)境中結合使用多個(gè)類(lèi)。因此,在設計一個(gè)類(lèi)時(shí),這個(gè)類(lèi)不應該限制用戶(hù)如何以及何時(shí)使用該類(lèi);以一種方式設計屬性,以允許用戶(hù)按值的任何順序和任何組合來(lái)設置;設計方法應該使得實(shí)現的功能與他們出現的順序無(wú)關(guān)。例如:Loan類(lèi)包含屬性loanAmount、numberOfYears和annualIntereRate,這些屬性的值,可以按任何順序來(lái)設置。

  方法應在不生產(chǎn)混淆的情況下進(jìn)行直觀(guān)定義。例如:String類(lèi)中的substring(int beginIndex, int endIndex)方法就有一點(diǎn)混亂。這個(gè)方法返回從beginIndex到endIndex-1而不是endIndex的子串。該方法應該返回從beginIndex到endIndex的子字符串,從而更加直觀(guān)。

  不應該聲明一個(gè)來(lái)自其他數據域的數據域。例如,下面的Person類(lèi)有兩個(gè)數據域:birthDate和age。由于age可以從birthDate導出,所以age不應該聲明為數據域。

  public class Person{

  private java.util.Date.birthDate;

  private int age;

  }

  完整性

  類(lèi)是為許多不同用戶(hù)的使用而設計的。為了能在一個(gè)廣泛的應用中使用,一個(gè)類(lèi)應該通過(guò)屬性和方法提供多種方案以適應用戶(hù)的不同需求。例如:為了滿(mǎn)足不同的應用需求,String類(lèi)包含了40多種很實(shí)用的方法。

  實(shí)例和靜態(tài)

  依賴(lài)于類(lèi)的具體實(shí)例的變量或方法必須是一個(gè)實(shí)例變量或者方法。如果一個(gè)變量被類(lèi)的所有實(shí)例所共享,那就應該將它聲明為靜態(tài)的。如果方法不依賴(lài)于某和具體的實(shí)例,那就應該將他聲明為靜態(tài)方法。

  應該總是使用類(lèi)名(而不是引用變量)引用靜態(tài)變量和方法,以增強可讀性并避免錯誤。

  不要在構造方法中傳入參數來(lái)初始化靜態(tài)數據域。最好使用set方法改變靜態(tài)數據域。

  構造方法永遠都是實(shí)例方法,因為它是用來(lái)創(chuàng )建具體實(shí)例的。一個(gè)靜態(tài)變量或方法可以從實(shí)例方法中調用,但是不能從靜態(tài)方法中調用實(shí)例變量或方法。

  繼承和聚合

  繼承和聚合之間的差異,就是 is-a(是一種) 和 has-a(具有)之間的關(guān)系。例如,蘋(píng)果是一種水果;因此,可以使用繼承來(lái)對Apple類(lèi)和Fruit類(lèi)之間的關(guān)系進(jìn)行建模。人具有名字;因此,可以使用聚合來(lái)對Person類(lèi)和Name類(lèi)之間的關(guān)系建模。

  接口和抽象類(lèi)

  接口和抽象類(lèi)都可以用于為對象指定共同的行為。如何決定是采用接口還是類(lèi)呢》通常,比較強的is-a (是一種)關(guān)系清晰的描述了父子關(guān)系,應該采用類(lèi)來(lái)建模。例如,因為橘子是一種水果,他們的關(guān)系就應該采用類(lèi)的繼承關(guān)系來(lái)建模。弱的is-a關(guān)系,也成為is-kind-of (是一類(lèi))關(guān)系,表示一個(gè)對象擁有某種屬性。弱的is-a關(guān)系可以使用接口建模。例如所有的字符串都是可以比較的,因此String類(lèi)實(shí)現了Comparable接口。圓或者矩形是一個(gè)幾何對象,因此Circle可以設計為GeometricObject的子類(lèi)。圓有不同的半徑,并且可以基于半徑比較,因此Circle可以實(shí)現Comparable接口。

  接口比抽象類(lèi)更加靈活,因為一個(gè)子類(lèi)只能繼承一個(gè)父類(lèi),但是卻可以實(shí)現任意個(gè)數的接口。然而,接口不嗯能夠具有具體的方法?梢越Y合接口和抽象的優(yōu)點(diǎn),創(chuàng )建一個(gè)接口。使用一個(gè)抽象類(lèi)來(lái)實(shí)現它?梢砸暺浞奖闶褂媒涌诨蛘叱橄箢(lèi)。

【java方案設計與論證】相關(guān)文章:

mba論證分析寫(xiě)作范文07-02

mba論證分析寫(xiě)作方法07-02

畢業(yè)論文必會(huì )的論證方法?07-10

mba論證分析寫(xiě)作范文怎么寫(xiě)07-02

JAVA題庫:JAVA面試題目整理07-11

Java實(shí)習報告09-20

法律論證咨詢(xún)服務(wù)合同07-02

專(zhuān)家論證會(huì )邀請函07-15

改進(jìn)方案設計07-04

課題方案設計07-04

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆