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