激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java依賴-關聯-聚合-組合之間區別_動力節點Java學院整理

Java依賴-關聯-聚合-組合之間區別_動力節點Java學院整理

2020-12-13 20:22動力節點 Java教程

這篇文章主要介紹了Java依賴-關聯-聚合-組合之間區別理解,依賴關系比較好區分,它是耦合度最弱的一種,下文給大家介紹的非常詳細,感興趣的朋友一起看看吧

首先看一看書上對這四種關系的定義:

  • 依賴(Dependency)關系是類與類之間的聯接。依賴關系表示一個類依賴于另一個類的定義。例如,一個人(Person)可以買車(car)和房子(House),Person類依賴于Car類和House類的定義,因為Person類引用了Car和House。與關聯不同的是,Person類里并沒有Car和House類型的屬性,Car和House的實例是以參量的方式傳入到buy()方法中去的。一般而言,依賴關系在Java語言中體現為局域變量、方法的形參,或者對靜態方法的調用。
  • 關聯(Association)關系是類與類之間的聯接,它使一個類知道另一個類的屬性和方法。關聯可以是雙向的,也可以是單向的。在Java語言中,關聯關系一般使用成員變量來實現。
  •  聚合(Aggregation) 關系是關聯關系的一種,是強的關聯關系。聚合是整體和個體之間的關系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關系便整體和個體的關系。與關聯關系一樣,聚合關系也是通過實例變量實現的。但是關聯關系所涉及的兩個類是處在同一層次上的,而在聚合關系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。
  •  組合(Composition) 關系是關聯關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,組合關系是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發生組合關系,由后者排他地負責生命周期。部分和整體的生命周期一樣。

——摘自《Java面向對象編程》

       以上關系的耦合度依次增強(關于耦合度的概念將在以后具體討論,這里可以暫時理解為當一個類發生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強)。由定義我們已經知道,依賴關系實際上是一種比較弱的關聯,聚合是一種比較強的關聯,而組合則是一種更強的關聯,所以籠統的來區分的話,實際上這四種關系、都是關聯關系。

        依賴關系比較好區分,它是耦合度最弱的一種,在java中表現為局域變量、方法的形參,或者對靜態方法的調用,如下面的例子:Driver類依賴于Car類,Driver的三個方法分別演示了依賴關系的三種不同形式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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的例子,使用方法參數形式可以表示依賴關系,也可以表示關聯關系,畢竟我們無法在程序中太準確的表達語義。在本例中,使用成員變量表達這個意思:車是我自己的車,我“擁有”這個車。使用方法參數表達:車不是我的,我只是個司機,別人給我什么車我就開什么車,我使用這個車。

?
1
2
3
4
5
6
7
8
9
10
11
12
class Driver {
  //使用成員變量形式實現關聯
  Car mycar;
  public void drive(){
    mycar.run();
  }
  ...
  //使用方法參數形式實現關聯
  public void drive(Car car){
    car.run();
  }
}

        聚合關系是是一種比較強的關聯關系,java中一般使用成員變量形式實現。對象之間存在著整體與部分的關系。例如上例中

?
1
2
3
4
5
6
7
class Driver {
  //使用成員變量形式實現聚合關系
  Car mycar;
  public void drive(){
    mycar.run();
  }
}

        假如給上面代碼賦予如下語義:車是一輛私家車,是司機財產的一部分。則相同的代碼即表示聚合關系了。聚合關系一般使用setter方法給成員變量賦值。

假如賦予如下語義:車是司機的必須有的財產,要想成為一個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不干司機了,這個車就砸了,別人誰也別想用。那就表示組合關系了。一般來說,為了表示組合關系,常常會使用構造方法來達到初始化的目的,例如上例中,加上一個以Car為參數的構造方法

?
1
2
3
public Driver(Car car){
  mycar = car;
}

        所以,關聯、聚合、組合只能配合語義,結合上下文才能夠判斷出來,而只給出一段代碼讓我們判斷是關聯,聚合,還是組合關系,則是無法判斷的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本精品中文字幕 | 毛片福利 | 欧美视频在线一区二区三区 | 国产精品手机在线亚洲 | 国产亚洲网 | 国产精品伊人久久 | 欧美综合成人 | www.guochan| 精品一区二区三区电影 | 国产精品99久久久久久久女警 | 欧美不卡三区 | 19禁国产精品福利视频 | 天天撸日日夜夜 | 日日爱影院| 久久免费视频3 | 一级免费在线视频 | 国产在线午夜 | 日本成人二区 | 激情欧美在线 | 国产黄色毛片 | 九艹在线 | 天天色人人爱 | 毛片大全免费看 | 久久大陆| 亚洲精品一区中文字幕 | 视频h在线| av影片在线观看 | 激情久久免费视频 | 免费在线观看午夜视频 | 毛片免费观看视频 | 欧美黄色免费视频 | 久久逼逼 | 免费国产人成网站 | 99re色| 99精品视频一区二区 | 新久草在线视频 | 91毛片网站 | 欧洲性xxxxx| 亚洲网站在线观看视频 | 欧美激情综合网 | 国产精品久久久久久久久久三级 |