關(guān)于UML規(guī)定的類之間的關(guān)系網(wǎng)上查到的說(shuō)法不一,但都說(shuō)是5種:
版本一:
泛化、關(guān)聯(lián)、聚合、合成、依賴
版本二:
關(guān)聯(lián)、依賴、聚集、泛化、實(shí)現(xiàn)
那我們就都拿來(lái)說(shuō)一下吧!每個(gè)人心中都有一種屬于自己的類關(guān)系分類。
1、泛化關(guān)系:類之間或接口之間的繼承關(guān)系。(一種說(shuō)法說(shuō)它包含了實(shí)現(xiàn)關(guān)系)
代碼:
public class CA
{
......
}
public class CAS extends CA
{
......
}
2、實(shí)現(xiàn)關(guān)系:實(shí)體類實(shí)現(xiàn)接口叫做實(shí)現(xiàn)關(guān)系。
代碼:
public interface A{
public void methodA();
}
public class B implements A
{
public void methodA()
{...}
...
}
3、關(guān)聯(lián)關(guān)系:類之間的聯(lián)接。比較寬泛的一種關(guān)系,分為聚集和合成(有的版本將這兩種關(guān)系合并成了聚合)。
按照類之間的數(shù)量對(duì)比,關(guān)聯(lián)關(guān)系分為:
一對(duì)一關(guān)聯(lián)
一對(duì)多關(guān)聯(lián)
多對(duì)多關(guān)聯(lián)
按照方向,關(guān)聯(lián)關(guān)系分為:
單向關(guān)聯(lián)
雙向關(guān)聯(lián)
4、聚集關(guān)系:是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合是整體與個(gè)體之間的關(guān)系。聚合關(guān)系是通過(guò)實(shí)例變量來(lái)實(shí)現(xiàn)的。
5、合成(組合)關(guān)系:是關(guān)聯(lián)關(guān)系的一種,是比聚集關(guān)系強(qiáng)的關(guān)聯(lián)關(guān)系。它要求普通的聚合關(guān)系中代表的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期,合成關(guān)系是不能共享的。
對(duì)比4和5舉例子
聚集關(guān)系中,子系統(tǒng)允許被拆卸和替換。例如:電燈和燈泡
Bulb bulb1 = new Bulb(); //創(chuàng)建第一個(gè)燈泡
Bulb bulb2 = new Bulb(); //創(chuàng)建第二個(gè)燈泡
ReadingLamp lamp = new ReadingLamp(bulb1); //創(chuàng)建的時(shí)候使用第一個(gè)燈泡
lamp.setBulb(bulb2); //創(chuàng)建以后還可以換成第二個(gè)燈泡
合成關(guān)系中,子系統(tǒng)不允許被拆卸和替換。例如:Windows的窗口和窗口上的菜單就是組合關(guān)系。生命周期一致指的是部分必須在組合創(chuàng)建的同時(shí)或者之后創(chuàng)建,在組合銷毀之前或者同時(shí)銷毀,部分的生命周期不會(huì)超出組合的生命周期。
【聚集和合成在代碼實(shí)現(xiàn)上的主要差別在于生命周期的實(shí)現(xiàn)上,合成需要負(fù)責(zé)其部分的創(chuàng)建和銷毀;聚集則不然,部分可以在整體之前創(chuàng)建也可以在整體銷毀之后再銷毀或者一直不銷毀】
6、依賴關(guān)系:是類與類之間的連接,依賴總是單向的。依賴關(guān)系代表一個(gè)類依賴于另一個(gè)類的定義。一般而言,依賴關(guān)系在Java語(yǔ)言中體現(xiàn)為局部變量,以及一個(gè)方法的參數(shù)。
【區(qū)分幾種關(guān)系】
依賴、關(guān)聯(lián)、聚集、合成看起來(lái)都很象,一個(gè)類里面出現(xiàn)了其他類的影子。
關(guān)聯(lián)、聚集、合成都可以說(shuō)是一種依賴,只是它們有比較強(qiáng)的語(yǔ)義和其他作用。在實(shí)際使用的時(shí)候類之間的關(guān)系確定了關(guān)聯(lián)、聚集、合成以后,剩下的就可以叫做依賴了。
聚集、合成又是一種關(guān)聯(lián)。關(guān)聯(lián)關(guān)系中兩個(gè)類是平級(jí)的,當(dāng)出現(xiàn)整體和個(gè)體的跡象時(shí)就變成了聚集,個(gè)體的生命周期需要被整體嚴(yán)格控制時(shí)又變成了合成。