- 依賴(lài) --- 局部變量,方法的形參,靜態(tài)方法
- 關(guān)聯(lián) ,聚合,組合--- 成員變量
聚合和組合都是關(guān)聯(lián)的一種
聚合和組合的區(qū)別:
聚合是個(gè)體離開(kāi)了整體,依然可以存在. 組合是個(gè)體和整體不可以分開(kāi)似踱,個(gè)體不能離開(kāi)整體單獨(dú)存在.
依賴(lài)想许,關(guān)聯(lián) 和聚合亮蛔,組合的區(qū)別:
依賴(lài)变擒,關(guān)聯(lián) : 類(lèi)之間的關(guān)系是在同一層次上. 聚合,組合: 類(lèi)之間的關(guān)系表現(xiàn)為整體和部分.
依賴(lài)(Dependency)
是類(lèi)于類(lèi)之間的聯(lián)接,表示一個(gè)類(lèi)依賴(lài)于另一個(gè)類(lèi)的定義;依賴(lài)關(guān)系僅僅描述了類(lèi)與類(lèi)之間的一種使用與被使用的關(guān)系;
例如八千,一個(gè)人(Person)可以買(mǎi)車(chē)(car)和房子(House)慷吊,Person類(lèi)依賴(lài)于Car類(lèi)和House類(lèi)的定義袖裕,因?yàn)镻erson類(lèi)引用了Car和House。與關(guān)聯(lián)不同的是溉瓶,Person類(lèi)里并沒(méi)有Car和House類(lèi)型的屬性急鳄,Car和House的實(shí)例是以參量的方式傳入到buy()方法中去的。一般而言嚷闭,依賴(lài)關(guān)系在Java語(yǔ)言中體現(xiàn)為局域變量、方法的形參赖临,或者對(duì)靜態(tài)方法的調(diào)用胞锰。
例如 ,我要過(guò)河,沒(méi)有橋怎么辦兢榨,我就去借來(lái)一條小船渡過(guò)去嗅榕。我與小船的關(guān)系僅僅是使用(借用)的關(guān)系顺饮。表現(xiàn)在代碼上,為依賴(lài)的類(lèi)的某個(gè)方法以被依賴(lài)的類(lèi)作為其參數(shù)凌那〖嫘郏或者是class A 的某個(gè)方法創(chuàng)造了 class B 的實(shí)例抑或?qū)lass B的靜態(tài)方法的調(diào)用。如果A依賴(lài)于B帽蝶,那意味著B(niǎo)的變化可能要求A也發(fā)生變化赦肋;
class Person{ //person依賴(lài)于boat
public void crossRiver(Boat boat){
boat.row() ;
}
public void fishing(){
Boat boat = new Boat() ;
boat.row() ;
}
public void patrol(){
Boat.row() ;
}
}
關(guān)聯(lián)(Association)
含義:類(lèi)于類(lèi)之間的連接,關(guān)聯(lián)關(guān)系使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法;通常含有"知道","了解"的含義.關(guān)聯(lián)可以是單向的,也可以是雙向的,關(guān)聯(lián)關(guān)系在java上是通過(guò)成員變量來(lái)體現(xiàn)的
例如:客戶(hù)和訂單的關(guān)系以及公司和員工的關(guān)系,都是關(guān)聯(lián)關(guān)系励稳。還有就是我和我的單車(chē)的例子佃乘,他們都是一種“擁有”的關(guān)系。表現(xiàn)在代碼上驹尼,就是一個(gè)類(lèi)包含另一個(gè)類(lèi)的實(shí)例趣避,通常表現(xiàn)為被關(guān)聯(lián)類(lèi)以類(lèi)屬性的形式出現(xiàn)在關(guān)聯(lián)類(lèi)的類(lèi)定義中,也可以表現(xiàn)為關(guān)聯(lián)類(lèi)引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)的全局變量新翎。關(guān)聯(lián)可以使單向的程帕,也可以使雙向的。
依賴(lài)和關(guān)聯(lián)的區(qū)別在于依賴(lài)是使用地啰,關(guān)聯(lián)是擁有.
聚合(Aggregation) 關(guān)系是關(guān)聯(lián)關(guān)系的一種愁拭,是強(qiáng)的關(guān)聯(lián)關(guān)系(has-a)。聚合是整體和個(gè)體之間的關(guān)系髓绽。例如敛苇,汽車(chē)類(lèi)與引擎類(lèi)、輪胎類(lèi)顺呕,以及其它的零件類(lèi)之間的關(guān)系便整體和個(gè)體的關(guān)系枫攀。與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過(guò)實(shí)例變量實(shí)現(xiàn)的株茶。但是關(guān)聯(lián)關(guān)系所涉及的兩個(gè)類(lèi)是處在同一層次上的来涨,而在聚合關(guān)系中,兩個(gè)類(lèi)是處在不平等層次上的启盛,一個(gè)代表整體蹦掐,另一個(gè)代表部分。
圖示:空心菱形 + 實(shí)線(xiàn) + 箭頭;箭頭指向被聚合的類(lèi),也就是說(shuō),箭頭指向個(gè)體/部分;
組合(Composition):
含義:它也是關(guān)聯(lián)關(guān)系的一種(is-a),但它是比聚合關(guān)系更強(qiáng)的關(guān)系.組合關(guān)系要求聚合關(guān)系中代表整體的對(duì)象要負(fù)責(zé)代表個(gè)體/部分的對(duì)象的整個(gè)生命周期;組合關(guān)系不能共享;在組合關(guān)系中,如果代表整體的對(duì)象被銷(xiāo)毀或破壞,那么代表個(gè)體/部分的對(duì)象也一定會(huì)被銷(xiāo)毀或破壞,而聚在合關(guān)系中,代表個(gè)體/部分的對(duì)象則有可能被多個(gè)代表整體的對(duì)象所共享,而不一定會(huì)隨著某個(gè)代表整體的對(duì)象被銷(xiāo)毀或破壞而被銷(xiāo)毀或破壞;
體現(xiàn):在Java組合關(guān)系是通過(guò)成員變量來(lái)實(shí)現(xiàn)的;
圖示:實(shí)心菱形 + 實(shí)線(xiàn) + 箭頭;箭頭指向代表個(gè)體/部分的對(duì)象,也就是被合成/組合的類(lèi)的對(duì)象;
舉例:一個(gè)人由頭僵闯、四肢卧抗、等各種器官組成,因?yàn)槿伺c這些器官具有相同的生命周期鳖粟,人死了社裆,這些器官也掛了;房子和房間的關(guān)系,當(dāng)房子沒(méi)有了向图,房間同樣不可能單獨(dú)存在泳秀。
UML圖表示的組合關(guān)系: