类和类之间的关系
一、類和類之間的關系
UML類圖中,常見以下幾種關系:
1、泛化(Generalization)
?是一種繼承關系,比如動物類和老虎類,老虎繼承動物,子類如何特化父類的所有特征和行為
?箭頭指向:帶三角箭頭的實線,箭頭指向父類
?我們使用類圖如下
代碼表示如下
Class Animal {} Class Tiger extends Animal {}?
?
?
2、實現(Realization)
?類與接口的關系,類是接口所有特征和行為的實現
?箭頭指向:帶三角箭頭的虛線,箭頭指向接口
?我們使用類圖如下
? 代碼表示如下
interface A {} class B implement A {}?
?
?
3、關聯(Association)
是一種擁有(has)的關系,一個類的成員變量是另一個類的實例對象,可以雙向的也可以是單向
箭頭指向:帶普通箭頭的實心線,指向被擁有者?
類圖如下,表示A類關聯B類
代碼表示如下
class B {} class A {private B b; }?
?
?
4、依賴(Dependency)
是一種使用(use)的關系,即一個類的實現需要另一個類的協助,一般不使用雙向的互相依賴.
箭頭及指向:帶箭頭的虛線,指向被使用者
類圖如下,這里表示A依賴于B
? ?但是這里需要注意,依賴一般可以通過形式參數、局部變量、靜態方法的調用、返回值來表示
- 形式參數代碼如下 class B {} class A {public A() {}public void method(B b) {} }
- 局部變量代碼如下,一般指方法里面的局部變量 class B {} class A {public A() {}public void method() {B b = new B();} }
- 靜態方法的調用代碼如下 class B {public static void staticMethod() {} } class A {public A() {}public void method() {B.staticMethod();} }
- 返回值代碼如下 class B {} class A {public A() {}public B method() {return null;} }
?
5、聚合(Aggregation)
?整體與部分的關系,表示聚合在一起,部分可以離開整體而單獨存在,車和輪胎是整體和部分的關系,輪胎離開車仍然可以存在。
聚合關系是關聯關系的一種,是強的關聯關系,關聯和聚合在語法一樣,須考察具體的邏輯關系。
箭頭及指向:帶空心菱形的實心線,菱形指向整體
代碼實現和上面的關聯是一樣的。
?
?
6、組合(Composition)
是整體與部分的關系,但部分不能離開整體而單獨存,比如人的肺和人體,肺不能離開人單獨存在,有人肺在人體才能存活
箭頭指向:帶實心菱形的實線,菱形指向整體
組合關系是關聯關系的一種,是比聚合關系還要強的關系
類圖如下
代碼實現和上面的關聯是一樣的。
?
?
?
二、依賴和關聯之間的區別
關聯是“HAS”關系,依賴是“USE”關系
A類關聯B類,指的是B類對象作為A類的屬性存在,稱為“has”關系。
A類依賴B類,指的是B的對象作為A類的方法形式參數存在,稱為“use”關系。一般也包括函數參數、局部變量、返回值類型和靜態方法調用這四種場景。
生命周期不同
如果A類關聯B類,那么創建A類的對象時實例化B類的對象,直到A類對象被銷毀,所關聯的B類對象也被銷毀。即只要A類對象存在,B類對象就存在。
如果A類依賴B類,那么只有當A類對象調用到相應方法時,B類對象才被臨時創建,方法執行結束,B類對象即被回收,A類和B類之間的依賴關系是一種瞬時的關系。
?
?
三、關聯和組合和聚合之間的關系
組合和聚合都是關聯關系的一種,只不夠 組合 > 聚合 > 關聯
?
?
?
?
四、各種關系的強弱順序
依賴 <?關聯 <?聚合 <?組合 <??實現 =?泛化(繼承)
?
?
總結
- 上一篇: TCP协议之如何保证传输的可靠性
- 下一篇: Android之在笔记本电脑adb de