五分鐘讀懂UML類圖

lotus_ruan發表於2021-09-09

相信各位同學在閱讀一些原始碼分析類文章或是設計應用架構時沒少與UML類圖打交道。實際上,UML類圖中最常用到的元素五分鐘就能掌握,經常看到UML類圖但還不太熟悉的小夥伴趕緊來一起認識一下它吧:)


類的屬性的表示方式

在UML類圖中,類使用包含類名、屬性(field)和方法(method)且帶有分隔線的矩形來表示,比如下圖表示一個Employee類,它包含name、age和email這3個屬性,以及modifyInfo()方法。


圖片描述


那麼屬性/方法名稱前的加號和減號是什麼意思呢?它們表示了這個屬性或方法的可見性,UML類圖中表示可見性的符號有三種:

  • +: 表示public

  • -: 表示private

  • #: 表示protected(friendly也歸入這類)

因此,上圖中的Employee類具有3個私有屬性和一個公有方法。

實際上,屬性的完整表示方式是這樣的:

可見性 名稱:型別 [ = 預設值 ]

中括號中的內容表示是可選的。

類的方法的表示方式

上圖中我們已經看到了方法的表現形式。實際上,方法的完整表示方式如下:

可見性 名稱(引數列表) [ : 返回型別]

同樣,中括號中的內容是可選的。

比如在下圖的Demo類中,定義了3個方法:

圖片描述

Demo.png

  • public方法method1接受一個型別為Object的引數,返回值型別為void。

  • protected方法method2無引數,返回值型別為String。

  • private方法method3接收型別分別為int、int[]的引數,返回值型別為int。

類與類之間關係的表示方式

關聯關係

關聯關係又可進一步分為單向關聯、雙向關聯和自關聯。

單向關聯

圖片描述

single.png


我們可以看到,在UML類圖中單向關聯用一個帶箭頭的直線表示。上圖表示每個顧客都有一個地址,這透過讓Customer類持有一個型別為Address的成員變數來實現。

雙向關聯

圖片描述

double.png

從上圖中我們很容易看出,所謂的雙向關聯就是雙方各自持有對方型別的成員變數。在UML類圖中,雙向關聯用一個不帶箭頭的直線來表示。上圖中在Customer類中維護一個Product[]陣列表示一個顧客購買了哪些產品;在Product類中維護一個Customer型別的成員變數表示這個產品被那個顧客所購買。

自關聯

圖片描述

self.png


自關聯在UML類圖中用一個帶有箭頭且指向自身的直線表示。上圖的意思就是Node類包含型別為Node的成員變數,也就是“自己包含自己”。

聚合關係

圖片描述

poly.png


上圖中的Car類與Engine類就是聚合關係(Car類中包含一個Engine型別的成員變數)。由上圖我們可以看到,UML中聚合關係用帶空心菱形和箭頭的直線表示。聚合關係強調是“整體”包含“部分”,但是“部分”可以脫離“整體”而單獨存在。比如上圖中汽車包含了發動機,而發動機脫離了汽車也能夠單獨存在。

組合關係

組合關係與聚合關係間的最大不同在於:這裡的“部分”脫離了“整體”便不復存在。比如下圖:

圖片描述

comp.png


顯然,嘴是頭的一部分且不能脫離了頭而單獨存在。在UML類圖中,組合關係用一個帶實心菱形和箭頭的直線表示。

依賴關係

圖片描述

rely.png


從上圖中我們可以看到,Driver的drive方法只有傳入了一個Car物件才能發揮作用,因此我們說Driver類依賴於Car類。在UML類圖中,依賴關係用一條帶有箭頭的虛線表示。

繼承關係

繼承關係對應的是extend關鍵字,在UML類圖中用帶空心三角形的直線表示,如下圖所示中,Student類與Teacher類繼承了Person類。

圖片描述

extend.png

介面實現關係

這種關係對應implements關鍵字,比如下圖中,Car類與Ship類都實現了Vehicle介面。

圖片描述

impl.png


到了這裡,UML類圖中最常見的表示方式我們就介紹完了,有了這些我們就能讀懂常見的UML類圖了,剩下的遇到時再查即可。

參考資料

作者:absfree
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1762/viewspace-2809495/,如需轉載,請註明出處,否則將追究法律責任。

相關文章