Unified Modeling Language (UML)又稱統一建模語言,類圖是使用頻率最高的UML圖之一
一、類在類圖中的表示方式
在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且帶有分割線的矩形來表示,比如下圖表示一個Employee類,它包含name,age和email這3個屬性,以及modifyInfo()方法。
對應代碼:
public class Employee { private String name; private int age; private String email; public void modifyInfo() { ...... } }
1)UML類圖中表示可見性的符號有三種,用來表示屬性或方法的可見性:
- + :表示public
- - :表示private
- #:表示protected(friendly也歸入這類)
2)屬性的完整表示方式是這樣的:
可見性 名稱 :類型 [ = 缺省值]
中括號中的內容表示是可選的
3)方法的完整表示方式如下:
可見性 名稱(參數列表) [ : 返回類型]
同樣,中括號中的內容是可選的。
再來個只有方法沒有屬性的例子:
- public方法method1接收一個類型為Object的參數,返回值類型為void
- protected方法method2無參數,返回值類型為String
- private方法method3接收類型分別為int、int[]的參數,返回值類型為int
二、類與類之間關系的表示方式
1、依賴關系
依賴(Dependency)關系是一種使用關系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關系。大多數情況下,依賴關系體現在某個類的方法使用另一個類的對象作為參數。
從上圖我們可以看到,Driver的drive方法只有傳入了一個Car對象才能發揮作用,因此我們說Driver類依賴於Car類。在UML類圖中,依賴關系用一條帶有箭頭的虛線表示。
2. 泛化關系(繼承關系)
泛化(Generalization)關系也就是繼承關系,用於描述父類與子類之間的關系,父類又稱作基類或超類,子類又稱作派生類。繼承關系對應的是extend關鍵字,在UML類圖中用帶空心三角形的直線表示,如下圖所示中,Student類與Teacher類繼承了Person類。
3. 接口實現關系
接口之間也可以有與類之間關系類似的繼承關系和依賴關系,但是接口和類之間還存在一種實現(Realization)關系。這種關系對應implement關鍵字,在UML類圖中用帶空心三角形的虛線表示。如下圖中,Car類與Ship類都實現了Vehicle接口。
4. 關聯關系
關聯關系又可進一步分為單向關聯、雙向關聯和自關聯。
4.1單向關聯
我們可以看到,在UML類圖中單向關聯用一個帶箭頭的直線表示。上圖表示每個顧客都有一個地址,這通過讓Customer類持有一個類型為Address的成員變量類實現。
4.2雙向關聯
從上圖中我們很容易看出,所謂的雙向關聯就是雙方各自持有對方類型的成員變量。在UML類圖中,雙向關聯用一個不帶箭頭的直線表示。上圖中在Customer類中維護一個Product[]數組,表示一個顧客購買了那些產品;在Product類中維護一個Customer類型的成員變量表示這個產品被哪個顧客所購買。
4.3自關聯
自關聯在UML類圖中用一個帶有箭頭且指向自身的直線表示。上圖的意思就是Node類包含類型為Node的成員變量,也就是“自己包含自己”。
5. 聚合關系
上圖中的Car類與Engine類就是聚合關系(Car類中包含一個Engine類型的成員變量)。由上圖我們可以看到,UML中聚合關系用帶空心菱形和箭頭的直線表示。聚合關系強調是“整體”包含“部分”,但是“部分”可以脫離“整體”而單獨存在。比如上圖中汽車包含了發動機,而發動機脫離了汽車也能單獨存在。
6. 組合關系
組合關系與聚合關系見得最大不同在於:這里的“部分”脫離了“整體”便不復存在。比如下圖:
顯然,嘴是頭的一部分且不能脫離了頭而單獨存在。在UML類圖中,組合關系用一個帶實心菱形和箭頭的直線表示。
說明:
實現關系(is a)是最強的
依賴關系(has a)是最弱的關系
所以Spring中用DI依賴注入是松耦合的。
參考:
http://www.uml.org.cn/oobject/201211231.asp