看懂类图——UML类图基础
類圖
要學(xué)懂設(shè)計模式,就需要先看得懂類圖,類與類之間的關(guān)系是學(xué)習(xí)設(shè)計模式的基礎(chǔ),而在軟件工程中,類與類之間的關(guān)系是通過UML中的類圖來體現(xiàn)。
這篇筆記包含的不會是類圖的所有東西,包含的只是各個類之間的關(guān)系,包括線條,圖形,箭頭的含義,熟悉了這些基礎(chǔ),對于設(shè)計模式的學(xué)習(xí)的障礙就會大大降低了
通過實例來學(xué)習(xí):
上面的類圖就體現(xiàn)了所需要了解的類的6個基本關(guān)系
該類圖中車是一個抽象類
- 車有兩個繼承,小汽車和自行車,他們和車之間是實現(xiàn)關(guān)系,使用帶空心箭頭的虛線表示
- 小汽車與SUV之間也是集成關(guān)系,他們之間是泛化關(guān)系,使用帶空心箭頭的實線表示
- 小汽車與發(fā)動機(jī),輪胎間是組合關(guān)系,使用帶菱形的實線表示
- 學(xué)生與班級之間是聚合關(guān)系,使用的是帶空心菱形的實線表示
- 學(xué)生與身份證之間是關(guān)聯(lián)關(guān)系,使用一根實線表示
- 學(xué)生上學(xué)需要使用自行車,與自行車之間是一種依賴關(guān)系,使用帶箭頭的虛線表示
這六種關(guān)系的類圖需要掌握并熟練的運用,
_ _ _
類的繼承在UML中表現(xiàn)為實現(xiàn)(realize)和泛化(generalize)
實現(xiàn)關(guān)系
實現(xiàn)關(guān)系使用的是一個帶空心箭頭的虛線表示。
上述類圖我們可以說A實現(xiàn)了B,B是一個抽象概念,在現(xiàn)實中無法直接用來定義對象,只有指明具體的子類,才能用來定義對象.
就像車和小汽車、自行車的關(guān)系一樣,“車”這個類在C++中用抽象類表示,在Java中大部分情況下用接口表示
泛化關(guān)系
泛化關(guān)系實際上是對類的一個細(xì)分,
最終代碼中,泛化關(guān)系表現(xiàn)為繼承非抽象類;
聚合關(guān)系
聚合關(guān)系中整體與部分之間是若依賴關(guān)系,整體不存在了,部分依然可以獨立存在,也就是說部分和整體的生命周期是獨立的。
聚合關(guān)系在UML中使用帶空心菱形的實線表示
例如班級不存在了,學(xué)生仍然能夠單獨存在
組合關(guān)系
組合關(guān)系中的整體與部分之間是強(qiáng)依賴關(guān)系,整體不存在了,部分也就不存在了。例如公司與部門之間的關(guān)系,部門是公司的下屬機(jī)構(gòu),如果公司不存在了的話
部門也就沒辦法獨立存在。
組合關(guān)系在UML中使用實心菱形的實線表示
關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系是用一條直線表示的;它描述不同類的對象之間的結(jié)構(gòu)關(guān)系;它是一種靜態(tài)關(guān)系, 通常與運行狀態(tài)無關(guān),一般由常識等因素決定的。
它一般用來定義對象之間靜態(tài)的、天然的結(jié)構(gòu)。 所以,關(guān)聯(lián)關(guān)系是一種“強(qiáng)關(guān)聯(lián)”的關(guān)系;
比如,乘車人和車票之間就是一種關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系默認(rèn)不強(qiáng)調(diào)方向,表示對象間相互知道;如果特別強(qiáng)調(diào)方向,如下圖,表示A知道B,但 B不知道A,如下圖
注:在最終代碼中,關(guān)聯(lián)對象通常是以成員變量的形式實現(xiàn)的;
依賴關(guān)系
依賴關(guān)系是用一套帶箭頭的虛線表示的
如下圖表示A依賴于B;它描述一個對象在運行期間會用到另一個對象的關(guān)系;
顯然,依賴也有方向,雙向依賴是一種非常糟糕的結(jié)構(gòu),我們總是應(yīng)該保持單向依賴,杜絕雙向依賴的產(chǎn)生.
在最終代碼中,依賴關(guān)系體現(xiàn)為類構(gòu)造方法及類方法的傳入?yún)?shù),箭頭的指向為調(diào)用關(guān)系;依賴關(guān)系除了臨時知道對方外,還“使用”對方的方法和屬性.
小結(jié)
上述的6中類之間的關(guān)系是類圖中最基礎(chǔ)的部分,總結(jié)如下
- 泛化: 帶空心箭頭的實線
- 實現(xiàn): 帶空心箭頭的虛線
- 聚合: 帶空心菱形的實線
- 組合: 帶實心菱形的實線
- 關(guān)聯(lián): 一條實線(表示二者相互知道)帶箭頭實線(一方只知道另一方)
- 依賴: 帶箭頭的虛線
轉(zhuǎn)載于:https://www.cnblogs.com/pluviophile/p/7542017.html
總結(jié)
以上是生活随笔為你收集整理的看懂类图——UML类图基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Net基础篇_学习笔记_第十一天_面向对
- 下一篇: Linux下磁盘监控及系统版本-CPU-