
1>繼承/泛化(Generalization)
  【泛化關(guān)系】:是一種繼承關(guān)系,表示一般與特殊的關(guān)系,它指定了子類如何獲得父類的所有特征和行為。在java中此類關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí)。    關(guān)系圖如下:  
2>實(shí)現(xiàn)(Realization)
【實(shí)現(xiàn)關(guān)系】:是一種類與接口的關(guān)系,表示類是接口所有特征和行為的實(shí)現(xiàn). 一個(gè)class類實(shí)現(xiàn)interface接口(可以是多個(gè))的功能,在Java中此類關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí)。
關(guān)系圖如下: 
3>依賴(Dependency)
【依賴關(guān)系】:是一種使用的關(guān)系,即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助,所以要盡量不使用雙向的互相依賴. 一個(gè)類A使用到了另一個(gè)類B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是B類的變化會(huì)影響到A。在java中的代碼表現(xiàn)為局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用。 關(guān)系圖如下:

4>關(guān)聯(lián)(Association)
【關(guān)聯(lián)關(guān)系】:是類與類之間的聯(lián)接,它使一個(gè)類知道另一個(gè)類的屬性和方法。兩個(gè)類或者類與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴關(guān)系,這種關(guān)系比依賴更強(qiáng),一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的。
關(guān)系圖如下:
 5>聚合(Aggregation)   【聚合關(guān)系】:關(guān)聯(lián)關(guān)系的一種特例, 是強(qiáng)的關(guān)聯(lián)關(guān)系. 聚合是整體與部分的關(guān)系,且部分可以離開(kāi)整體而單獨(dú)存在,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享。
 5>聚合(Aggregation)   【聚合關(guān)系】:關(guān)聯(lián)關(guān)系的一種特例, 是強(qiáng)的關(guān)聯(lián)關(guān)系. 聚合是整體與部分的關(guān)系,且部分可以離開(kāi)整體而單獨(dú)存在,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享。
聚合關(guān)系也是使用實(shí)例變量實(shí)現(xiàn)的. 從java 語(yǔ)法上是分不出關(guān)聯(lián)和聚合的. 關(guān)聯(lián)關(guān)系中兩個(gè)類是處于相同的層次, 而聚合關(guān)系中兩不類是處于不平等的層次, 一個(gè)表示整體, 一個(gè)表示部分,在java中的代碼體現(xiàn)為成員變量/全局變量。
關(guān)系圖如下:  6>組合(Composition)   【組合關(guān)系】:也是關(guān)聯(lián)關(guān)系的一種特例,是比聚合關(guān)系還要強(qiáng)的關(guān)系,也稱為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束。 組合跟聚合幾乎相同,唯一的區(qū)別就是”部分”不能脫離”整體”單獨(dú)存在,就是說(shuō),”部分”的生命期不能比”整體”還要長(zhǎng)。在java中的代碼體現(xiàn)為成員變量/全局變量。
 6>組合(Composition)   【組合關(guān)系】:也是關(guān)聯(lián)關(guān)系的一種特例,是比聚合關(guān)系還要強(qiáng)的關(guān)系,也稱為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束。 組合跟聚合幾乎相同,唯一的區(qū)別就是”部分”不能脫離”整體”單獨(dú)存在,就是說(shuō),”部分”的生命期不能比”整體”還要長(zhǎng)。在java中的代碼體現(xiàn)為成員變量/全局變量。
關(guān)系圖如下:  以上幾種關(guān)系的強(qiáng)弱順序: 泛化=實(shí)現(xiàn)>組合>聚合>關(guān)聯(lián)>依賴 關(guān)系圖如下:
 以上幾種關(guān)系的強(qiáng)弱順序: 泛化=實(shí)現(xiàn)>組合>聚合>關(guān)聯(lián)>依賴 關(guān)系圖如下: 
*依賴關(guān)系比較好區(qū)分,它是耦合度最弱的一種,在java中表現(xiàn)為局域變量、方法的形參,或者對(duì)靜態(tài)方法的調(diào)用,如下面的例子:Driver類依賴于Car類,Driver的三個(gè)方法分別演示了依賴關(guān)系的三種不同形式。
class Car { public static void run(){ System.out.關(guān)聯(lián)關(guān)系在java中一般使用成員變量來(lái)實(shí)現(xiàn),有時(shí)也用方法形參的形式實(shí)現(xiàn)。依然使用Driver和Car的例子,使用方法參數(shù)形式可以表示依賴關(guān)系,也可以表示關(guān)聯(lián)關(guān)系,畢竟我們無(wú)法在程序中太準(zhǔn)確的表達(dá)語(yǔ)義。在本例中,使用成員變量表達(dá)這個(gè)意思:車是我自己的車,我“擁有”這個(gè)車。使用方法參數(shù)表達(dá):車不是我的,我只是個(gè)司機(jī),別人給我什么車我就開(kāi)什么車,我使用這個(gè)車。 class Driver { //使用成員變量形式實(shí)現(xiàn)關(guān)聯(lián) Car mycar; public void drive(){ mycar.run(); } ... //使用方法參數(shù)形式實(shí)現(xiàn)關(guān)聯(lián) public void drive(Car car){ car.run(); } }聚合關(guān)系是是一種比較強(qiáng)的關(guān)聯(lián)關(guān)系,java中一般使用成員變量形式實(shí)現(xiàn)。對(duì)象之間存在著整體與部分的關(guān)系。例如上例中
class Driver { //使用成員變量形式實(shí)現(xiàn)聚合關(guān)系 Car mycar; public void drive(){ mycar.run(); } }假如給上面代碼賦予如下語(yǔ)義:車是一輛私家車,是司機(jī)財(cái)產(chǎn)的一部分。則相同的代碼即表示聚合關(guān)系了。聚合關(guān)系一般使用setter方法給成員變量賦值。
假如賦予如下語(yǔ)義:車是司機(jī)的必須有的財(cái)產(chǎn),要想成為一個(gè)司機(jī)必須要先有輛車,車要是沒(méi)了,司機(jī)也不想活了。而且司機(jī)要是不干司機(jī)了,這個(gè)車就砸了,別人誰(shuí)也別想用。那就表示組合關(guān)系了。一般來(lái)說(shuō),為了表示組合關(guān)系,常常會(huì)使用構(gòu)造方法來(lái)達(dá)到初始化的目的,例如上例中,加上一個(gè)以Car為參數(shù)的構(gòu)造方法
public Driver(Car car){ mycar = car; }所以,關(guān)聯(lián)、聚合、組合只能配合語(yǔ)義,結(jié)合上下文才能夠判斷出來(lái),而只給出一段代碼讓我們判斷是關(guān)聯(lián),聚合,還是組合關(guān)系,則是無(wú)法判斷的。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注