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