您好,登錄后才能下訂單哦!
首先看一看書上對這四種關系的定義:
——摘自《Java面向對象編程》
以上關系的耦合度依次增強(關于耦合度的概念將在以后具體討論,這里可以暫時理解為當一個類發生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強)。由定義我們已經知道,依賴關系實際上是一種比較弱的關聯,聚合是一種比較強的關聯,而組合則是一種更強的關聯,所以籠統的來區分的話,實際上這四種關系、都是關聯關系。
依賴關系比較好區分,它是耦合度最弱的一種,在java中表現為局域變量、方法的形參,或者對靜態方法的調用,如下面的例子:Driver類依賴于Car類,Driver的三個方法分別演示了依賴關系的三種不同形式。
class Car { public static void run(){ System.out.println("汽車在奔跑"); } } class Driver { //使用形參方式發生依賴關系 public void drive1(Car car){ car.run(); } //使用局部變量發生依賴關系 public void drive2(){ Car car = new Car(); car.run(); } //使用靜態變量發生依賴關系 public void drive3(){ Car.run(); } }
關聯關系在java中一般使用成員變量來實現,有時也用方法形參的形式實現。依然使用Driver和Car的例子,使用方法參數形式可以表示依賴關系,也可以表示關聯關系,畢竟我們無法在程序中太準確的表達語義。在本例中,使用成員變量表達這個意思:車是我自己的車,我“擁有”這個車。使用方法參數表達:車不是我的,我只是個司機,別人給我什么車我就開什么車,我使用這個車。
class Driver { //使用成員變量形式實現關聯 Car mycar; public void drive(){ mycar.run(); } ... //使用方法參數形式實現關聯 public void drive(Car car){ car.run(); } }
聚合關系是是一種比較強的關聯關系,java中一般使用成員變量形式實現。對象之間存在著整體與部分的關系。例如上例中
class Driver { //使用成員變量形式實現聚合關系 Car mycar; public void drive(){ mycar.run(); } }
假如給上面代碼賦予如下語義:車是一輛私家車,是司機財產的一部分。則相同的代碼即表示聚合關系了。聚合關系一般使用setter方法給成員變量賦值。
假如賦予如下語義:車是司機的必須有的財產,要想成為一個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不干司機了,這個車就砸了,別人誰也別想用。那就表示組合關系了。一般來說,為了表示組合關系,常常會使用構造方法來達到初始化的目的,例如上例中,加上一個以Car為參數的構造方法
public Driver(Car car){ mycar = car; }
所以,關聯、聚合、組合只能配合語義,結合上下文才能夠判斷出來,而只給出一段代碼讓我們判斷是關聯,聚合,還是組合關系,則是無法判斷的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。