java中的聚集和組合的區別與聯系

聚合(Aggregation) 關系是關聯關系的一種,是強的關聯關系。聚合是整體和個體之間的關系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關系便整體和個體的關系。與關聯關系一樣,聚合關系也是通過實例變數實現的。但是關聯關系所涉及的兩個類是處在同一層次上的,而在聚合關系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分
組合(Composition) 關系是關聯關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,組合關系是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由後者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發生組合關系,由後者排他地負責生命周期。部分和整體的生命周期一樣。
以上關系的耦合度依次增強(關於耦合度的概念將在以後具體討論,這里可以暫時理解為當一個類發生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強)。由定義我們已經知道,依賴關系實際上是一種比較弱的關聯,聚合是一種比較強的關聯,而組合則是一種更強的關聯,所以籠統的來區分的話,實際上這四種關系、都是關聯關系。

聚合關系是是一種比較強的關聯關系,java中一般使用成員變數形式實現。對象之間存在著整體與部分的關系。例如上例中
<pre t="code" l="java">class Driver {
//使用成員變數形式實現聚合關系
Car mycar;
public void drive(){
mycar.run();
}
}假如給上面代碼賦予如下語義:車是一輛私家車,是司機財產的一部分。則相同的代碼即表示聚合關系了。聚合關系一般使用setter方法給成員變數賦值。

假如賦予如下語義:車是司機的必須有的財產,要想成為一個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不幹司機了,這個車就砸了,別人誰也別想用。那就表示組合關系了。一般來說,為了表示組合關系,常常會使用構造方法來達到初始化的目的,例如上例中,加上一個以Car為參數的構造方法 <pre t="code" l="java">public Driver(Car car){
mycar = car;
}所以,關聯、聚合、組合只能配合語義,結合上下文才能夠判斷出來,而只給出一段代碼讓我們判斷是關聯,聚合,還是組合關系,則是無法判斷的。</ol>

⑵ java 里聚合到底什麼意思啊和類比有什麼好處和壞處啊望高手指點。急急急!!!

聚合 簡單的理解 是一個類里包含其他的類
舉例
圖書館
圖書館的類里有書,目錄,借書記錄等類

⑶ java中的組合與聚合,區別。。。詳細點

組成就是強聚合,比如班級和學生間的關系應該是聚合,學生和學號的關系就應該是組成版
班級、學生權都是有獨立意義的對象,但是學號要是沒有學生就沒什麼意義了
組成要求整體和組成部分共存亡,他們的生命期相同,誰也離不開誰。
圖上的時候聚合貌似是空心的零菱形,組成是實心的。

⑷ java 聚合和組合的區別

組合和聚合是有很大區別的,這個區別不是在形式上,而是在本質上:
比如A類中包含B類的一個引用b,當A類的一個對象消亡時,b這個引用所指向的對象也同時消亡(沒有任何一個引用指向它,成了垃圾對象),這種情況叫做組合,反之b所指向的對象還會有另外的引用指向它,這種情況叫聚合。
在實際寫代碼時組合方式一般會這樣寫:
A類的構造方法里創建B類的對象,也就是說,當A類的一個對象產生時,B類的對象隨之產生,當A類的這個對象消亡時,它所包含的B類的對象也隨之消亡。
聚合方式則是這樣:
A類的對象在創建時不會立即創建B類的對象,而是等待一個外界的對象傳給它
傳給它的這個對象不是A類創建的。
現實生活中:
人和人和手,腳是組合關系,因為當人死亡後人的手也就不復存在了。人和他的電腦是聚合關系。 class Hand{ } class Computer{ } 組合: class Person{ private Hand hand; public Person(){ hand = new Hand(); } } 聚合: class Person{ private Computer computer; public setComputer(){ computer = new Computer(); } }

⑸ 深入理解JAVA中的聚集和組合的區別與聯系

深圳遠標為你解答
組合實際上是聚集關系的一種特殊形式。聚集模擬了具有(has-a)關系,表示兩個對象之間的歸屬關系。歸屬關系中的所有者對象稱為聚集對象(aggregation object),而它的類稱為聚集類(aggregating class)。歸屬關系中的從屬對象稱為被聚集類(aggregated object),而它的類被稱為被聚集類(aggregated class)。
一個對象可以被幾個其他聚集對象所擁有。如果一個對象只歸屬於一個聚集對象,那麼它和聚集對象之間的關系就稱為組合(composition)。例如:「一個學生有一個名字」就是組合關系,「一個學生有一個地址」就是聚集關系,因為一個地址可以被幾個學生所共享。
UML中,實心菱形表示組合關系,空心菱形表示聚集關系
聚集關系通常被表示為聚集類中的一個數據域
聚集還可以存在於同一類的多個對象之間。例如:一個人可能有一個管理者或者多個管理者。一個管理者可用變數表示,多個則可使用數組
到這里,基本上聚集和組合的關系就不言自明了。

⑹ JAVA中的聚集和組合的區別和聯系

組合實際上是聚集關系的一種特殊形式。聚集模擬了具有(has-a)關系,表示兩個對象之間的歸屬關系。歸屬關系中的所有者對象稱為聚集對象(aggregation object),而它的類稱為聚集類(aggregating class)。歸屬關系中的從屬對象稱為被聚集類(aggregated object),而它的類被稱為被聚集類(aggregated class)。
一個對象可以被幾個其他聚集對象所擁有。如果一個對象只歸屬於一個聚集對象,那麼它和聚集對象之間的關系就稱為組合(composition)。例如:「一個學生有一個名字」就是組合關系,「一個學生有一個地址」就是聚集關系,因為一個地址可以被幾個學生所共享。

⑺ 請問JAVA高內聚,低耦和的概念是什麼

內聚:一個模塊內各個元素彼此結合的緊密程度

耦合:一個軟體結構內不同模塊之間互連程度的度量

最近編碼的時候,總是在猶豫是把某個方法封裝在一個類里,還是單獨的封裝成一個類。這讓我突然想起內聚耦合這兩個名詞。

我們一直追求著,高內聚,低耦合。

對於低耦合,我粗淺的理解是:

一個完整的系統,模塊與模塊之間,盡可能的使其獨立存在。

也就是說,讓每個模塊,盡可能的獨立完成某個特定的子功能。

模塊與模塊之間的介面,盡量的少而簡單。

如果某兩個模塊間的關系比較復雜的話,最好首先考慮進一步的模塊劃分。

這樣有利於修改和組合。

對於低耦合,我粗淺的理解是:

在一個模塊內,讓每個元素之間都盡可能的緊密相連。

也就是充分利用每一個元素的功能,各施所能,以最終實現某個功能。

如果某個元素與該模塊的關系比較疏鬆的話,可能該模塊的結構還不夠完善,或者是該元素是多餘的。

內聚和耦合,包含了橫向和縱向的關系。功能內聚和數據耦合,是我們需要達成的目標。橫向的內聚和耦合,通常體現在系統的各個模塊、類之間的關系,而縱向的耦合,體現在系統的各個層次之間的關系。

對於我在編碼中的困惑,我是這樣想的,用面向對象的思想去考慮一個類的封裝。
一個方法,如何封裝,拿到現實生活中來看,看這種能力(方法)是否是屬於這類事物(類)的本能。
如果是,就封裝在這個類里。
如果不是,則考慮封裝在其它類里。
如果這種能力,很多事物都具有,則一定要封裝在這類事物的總類里。
如果這種能力,很多事物都會經常用到,則可以封裝成一個總類的靜態方法。

⑻ Java 聚集 組合

聚合和組合的區別在於:聚合關系是「has-a」關系,組合關系是「contains-a」關系;聚合關系表示整體與部分的關系比較弱,而組合比較強;聚合關系中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。

我們用淺顯的例子來說明聚合和組合的區別。「國破家亡」,國滅了,家自然也沒有了,「國」和「家」顯然也是組合關系。而相反的,計算機和它的外設之間就是聚合關系,因為它們之間的關系相對鬆散,計算機沒了,外設還可以獨立存在,還可以接在別的計算機上。在聚合關系中,部分可以獨立於聚合而存在,部分的所有權也可以由幾個聚合來共享,比如列印機就可以在辦公室內被廣大同事共用。

聚合則一般不是平等的,例如一個公司包含了很多員工,其實現上是差不多的。聚合和組合的區別則在語義和實現上都有差別,組合的兩個對象之間其生命期有很大的關聯,被組合的對象是在組合對象創建的同時或者創建之後創建,在組合對象銷毀之前銷毀。一般來說被組合對象不能脫離組合對象獨立存在,而且也只能屬於一個組合對象,例如一個文檔的版本,必須依賴於文檔的存在,也只能屬於一個文檔。聚合則不一樣,被聚合的對象可以屬於多個聚合對象,例如一個員工可能可以屬於多個公司。

⑼ java聚合怎麼使用,詳細點的。。。謝謝

組合和聚合是有很大區別的,這個區別不是在形式上,而是在本質上:
比如A類中包含B類的一個引用b,當A類的一個對象消亡時,b這個引用所指向的對象也同時消亡(沒有任何一個引用指向它,成了垃圾對象),這種情況叫做組合,

反之b所指向的對象還會有另外的引用指向它,這種情況叫聚合。

在實際寫代碼時組合方式一般會這樣寫:
A類的構造方法里創建B類的對象,也就是說,當A類的一個對象產生時,B類的對象隨之產生,當A類的這個對象消亡時,它所包含的B類的對象也隨之消亡。

聚合方式則是這樣:
A類的對象在創建時不會立即創建B類的對象,而是等待一個外界的對象傳給它
傳給它的這個對象不是A類創建的。

現實生活中:
人和人和手,腳是組合關系,因為當人死亡後人的手也就不復存在了。
人和他的電腦是聚合關系。

class Hand{ }

class Computer{ }

組合:
class Person{
private Hand hand;
public Person(){
hand = new Hand();
}
}

聚合:
class Person{
private Computer computer;
public setComputer(){
computer = new Computer();
}
}