简介UML类图
在文章中所涉及到的UML類圖是使用starUML工具創建,使用其他工具創建會有所不同。
總體印象
上面的UML類圖基本展示了UML類圖的大部分元素,以及類與類之間的關系,下面將對其一一進行解釋。
NOTE
UML類圖注解的表示方法,如上右半部所示。
類結構表示
類的表示方法如圖,一般分為三層,從上到下依次為類名、屬性和方法。接口表示和類的表示類似,只是在上面標明了是interface(這只是表示接口的一種方式,并且不同的工具展現方式可能不同,還有一種棒棒糖的形式,就是一個圓加一條豎線,并不常見,所以也不過多介紹),并且這里我隱藏了屬性層。如果是抽象類,在使用starUML工具創建的時候類名會以斜線表示。關于類的表示有以下幾點:
- +:public,-:private,#:protected
- 屬性冒號后的內容表示屬性的類型
- 方法冒號后的內容表示屬性的返回值
- 類型說明并不是必須的
類關系表示
實現
實現(Realization),用一個帶空心三角箭頭的虛線來表示。用來表示接口和實現類的關系。比如:Plane(飛機)和Car(汽車)都實現了接口IVehicle(交通工具)。
繼承
繼承(Generalization,也稱為泛化關系),用一個帶空心三角箭頭的實線來表示。表示父類與子類之間的關系。比如:Trunck(卡車)和Bus(公交車)都繼承自父類Car(汽車)。
關聯關系
關聯(Association),關聯關系分為以下幾種
- 自關聯:用一頭帶箭頭的實線表示,自己指向自己
- 單向關聯:用一頭帶箭頭的實線表示,箭頭指向被關聯類
- 雙向關聯:用一條實線表示,或者使用雙箭頭
關聯關系表示類與類之間的聯系,是同一層次上的關系,它不像依賴關系具有偶然性和臨時性。一般情況是關聯類引用被關聯類作為全局變量。如下Human持有Name。
大多數的關聯關系都是單向的。
聚合關系
聚合(Aggregation),用一頭是空心菱形的直線表示(有些時候是一頭為空心菱形,一頭為箭頭的實線)。聚合也是關聯關系的一種,是整體和部分之間的關系,也就是has-a的關系(很多地方has-a,contains-a已經比較混亂,我理解上來看是has-a),整體包含部分,但是部分脫離整體后依然可以單獨存在。如上:Car(汽車)包含Engine(引擎),但是Engine脫離了Car依然可以獨立存在。
組合關系
組合(Composition),用一頭是實心菱形的直線表示(有些時候是一頭為實心菱形,一頭為箭頭的實線)。組合同樣是一種關聯關系,也同樣是整體和部分之間的關系,我把它理解為contains-a的關系。**和聚合的區別在于,部分脫離整體和無法單獨存在,整體和部分具有相同的生命周期,整體不存在了,部分也就消失了。**如上:Human(人類)包含Head(頭)和Body(身體),頭和身體并不能單獨存在。
依賴關系
依賴(Dependency),用一頭帶箭頭的虛線表示。表示類與類之間,一個類依賴于另一個類的定義。被依賴類的變化將會引起依賴類的變化。在java中依賴關系通常體現為,一個類使用另一個類作為局部變量,方法參數或靜態方法調用,表示為use-a。如上,Engine的方法startEngine()方法使用Gasoline(汽油)作為參數,可能是調用了Gasoline中的burn()方法。
轉載于:https://juejin.im/post/5add8e9ff265da0b92653178
總結
- 上一篇: 央行官员:强化虚拟货币监管 遏制境外发币
- 下一篇: centos7安装mongodb3.6