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