在軟件設計與開發(fā)的過程中,使用各種圖來表示軟件的結(jié)構(gòu)或者執(zhí)行流程等等,是非常重要的。
如今絕大多數(shù)的編程語言是以面向?qū)ο?/span>為基礎的,以類和對象為核心思想表達計算機中的一切數(shù)據(jù),亦或是和現(xiàn)實生活中的概念相對應。因此,我們常常會繪制類圖來表示不同類型的對象的組成以及它們之間的關(guān)系。
類圖是屬于UML(Unified modeling language,統(tǒng)一建模語言)中的一種圖,是面向?qū)ο笤O計中非常重要的圖之一,在我們平時閱讀一些書籍或者博客的時候,也常常能夠看到作者使用UML類圖表達一些對象的組成以及對象之間的關(guān)系。
今天就來總結(jié)一下UML類圖是如何表達類和對象的。
1,一個類的基本表達
(1) 字段與方法表示
一個類通常由字段和方法組成,例如下面是一個Java的類:
?public class Cat {
private int id;
private String name;
public void run() {
}
public void eat(Food food) {
}
}
可見這個Cat
類有下列字段和方法:
上述類我們畫UML類圖如下:

可見在UML類圖中,字段和方法通常使用一根橫線分隔,每一個字段和方法表示如下形式:
訪問修飾符位于最前,不同的訪問修飾符對應的符號如下:
-
表示private
字段/方法
+
表示public
字段/方法
#
表示protected
字段/方法
在Java中,還有default
這種訪問修飾符,通??梢杂?code style="font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;font-size: 0.87em;border-radius: 2px;overflow-x: auto;background-color: rgb(255, 245, 245);color: rgb(255, 80, 44);padding: 0.065em 0.4em">~或者*
表示。
此外,如果方法參數(shù)太多,導致一個類圖框太長了,可以省略參數(shù)名稱,即寫成訪問修飾符 方法名(參數(shù)1類型, 參數(shù)2類型, ...): 返回值類型
形式,例如:

表示方法eat
中的兩個參數(shù)分別是Food
和Drink
類型。
(2) 抽象類和接口
一般來說,如果一個類是抽象類,我們通常使用斜體字來表示這個類的名稱,例如:

對于接口,我們需要在名字上面一行加上<<interface>>
標明其為接口類型:

2,類圖中的關(guān)系表示
在許多情況下,類和類之間都是有一定的關(guān)系的,在UML類圖中定義了6
種關(guān)系的表達:
關(guān)聯(lián)(Association):表示類之間的結(jié)構(gòu)性關(guān)系
聚合(Aggregation):表示整體與部分之間的關(guān)系,部分可以獨立于整體存在
組合(Composition):表示整體與部分之間的關(guān)系,部分不能獨立于整體存在
依賴(Dependency):表示一個類依賴于另一個類的變化,例如類A
的某個方法使用了類B
的對象,那么A
依賴于B
泛化(Generalization):表示類之間的繼承關(guān)系,子類繼承父類的屬性和方法
實現(xiàn)(Realization):表示一個類實現(xiàn)一個接口的關(guān)系
通常使用不同形狀的箭頭來連接兩個存在一定關(guān)系的類,每種關(guān)系對象的箭頭是不一樣的:

下面,就來單獨講解一下每種關(guān)系的表示。
(1) 關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系通常使用實線和箭頭表示,如果一個類型和一個類型雙向關(guān)聯(lián)(例如多對多關(guān)系),那么直接使用實線連接兩個類即可。
例如在一個游戲中,一個角色屬于一個國家,國家與角色是一對多關(guān)系,一個角色關(guān)聯(lián)一個國家;此外一個角色可以參與多個劇情,而一個劇情也包含多個角色,因此角色和劇情是多對多關(guān)系,角色與劇情則是雙向關(guān)聯(lián)的,表示如下:

(2) 依賴關(guān)系
依賴關(guān)系通常使用虛線和箭頭表示,箭頭指向被依賴的類,通常一個類的方法如果以另一個類為參數(shù),或者使用了另一個類,那么說明這個類依賴于另一個類。
比如電腦Computer
類的print
方法需要傳入一個可用的打印機Printer
類對象作為參數(shù),那就說明電腦類依賴于打印機類,表示如下:

(3) 聚合關(guān)系
聚合關(guān)系通常使用實線和空心菱形箭頭表示,是一種整體和部分的關(guān)系,箭頭指向表示整體的類,但是部分可以離開整體單獨存在,是一種弱擁有關(guān)系。
例如一個學校中有許多學生,但是學生可以離開學校單獨存在,這就說明學生與學校聚合關(guān)系,表示如下:

(4) 組合關(guān)系
組合關(guān)系通常使用實線和實心菱形箭頭表示,也是一直整體和部分的關(guān)系,箭頭指向表示整體的類,只不過部分離開了整體是不能單獨存在的,是一種強擁有的關(guān)系。
例如一臺電腦通常由CPU、內(nèi)存、硬盤等部件組成,但是這些部件離開了電腦就不能單獨運作了,這就說明這些電腦配件和電腦是組合關(guān)系,表示如下:

(5) 泛化關(guān)系
泛化關(guān)系通常使用實線和空心三角箭頭表示,也就是類之間的繼承關(guān)系,箭頭指向父類。
例如動物類是一個抽象類,它被具體的動物類型例如貓類、兔子類、魚類等繼承,則表示如下:

(6) 實現(xiàn)關(guān)系
實現(xiàn)關(guān)系通常使用虛線和空心三角箭頭表示,通常是類實現(xiàn)接口的關(guān)系,箭頭指向被實現(xiàn)的接口。
例如USB
類是一個接口,定義了USB
接口的抽象傳輸規(guī)范,而具體的U盤類型例如金士頓、閃迪等U盤類型實現(xiàn)了這個USB
接口中的方法,則表示如下:

3,畫圖軟件推薦 - Draw.io
工欲善其事,必先利其器。一個好用的畫圖軟件在我們開發(fā)的過程中也是必不可少的。
這里推薦使用Draw.io
這個畫圖軟件,該軟件是一款免費開源的畫圖軟件,除了可以繪制類圖之外,還可以繪制其它各種類型的圖例如流程圖、時序圖等等。
該軟件可以直接在線使用,也可以下載客戶端:
這里就來簡單講解一下怎么使用Draw.io
軟件繪制UML類圖。
(1) 畫布設定
打開軟件后新建一個空白圖,我們就能夠看到畫布了,我們可以在右側(cè)繪圖選項中調(diào)整畫布:

建議可以先關(guān)閉網(wǎng)格和頁面視圖這兩個選項,這樣頁面就顯示為無限大的畫布了,且背景不再顯示網(wǎng)格。此外,還可以勾選背景色選項,并自定義背景顏色。
在一個Draw.io
工程文件中,可以存放多個頁面,和Excel的Sheet類似,在下邊可以管理多個頁面:

(2) 畫一個類
在左側(cè)欄可見有非常多的現(xiàn)成的圖形模板,我們展開UML類別,拖一個類圖模板到畫布即可:

(3) 編輯類名和字段方法名
雙擊類圖框上面部分,即可編輯類名,此外每個字段和方法也是一個無邊框的格子,點擊對應部分編輯即可:

此外,如果需要增加字段與方法,建議直接復制對應的字段/方法格子即可,這樣我們只需要修改內(nèi)容。鼠標選中對應的字段/方法格子后,按住Ctrl
鍵并拖拽、放到類圖框中,最后再松開Ctrl
鍵即可復制一個字段/方法格子:

如果一個類只有字段或者方法,那么可以選中其中的橫線并按下Del
鍵刪除。
(4) 顏色調(diào)整
我們也可以修改類圖框的顏色,使得我們的類圖更加的“豐富多彩”。
選中類圖,在右側(cè)欄樣式部分可以快捷地選擇一些配色:

此外,我們還可以選中其中的字段格子,設定其顏色或者給其增加邊框:

按住Ctrl
鍵點按鼠標可以多選,樣式一欄我們可以設定配色,也可以單獨設定邊框與填充顏色。
(5) 字體與對齊
當我們選中一整個類圖框,或者一個字段/方法格子時,可以在右側(cè)文本選項部分,調(diào)整其字體、字號、上下和左右對齊方式:

當我們選中整個類圖框時,調(diào)整的字體和顏色對應的是類圖名字部分樣式;而我們選擇字段或者方法格子時,則調(diào)整的是這個選中的字段或者方法格子的樣式。
此外,拖拽類名下面的黃色菱形按鈕可以調(diào)整類名部分的高度,例如我們聲明一個接口,在文字超出類名部分之后,即可使用這種方式調(diào)整:

(6) 箭頭的創(chuàng)建
對于兩個類圖框,當我們選中一個類圖框后,可以看到每個方向都顯示了透明的箭頭按鈕,點擊一個箭頭按鈕并拖拽到另一個類圖框上面即可:

當然,拖拽到一個字段格子上也可以:

可以注意觀察我們拖拽到目標對象時,目標對象圖框會顯示一圈藍色透明指示。
此外,選擇箭頭后就可以在右側(cè)欄樣式部分設定箭頭樣式,包括起始和終止箭頭樣式,線的樣式等等:

(7) 雙擊創(chuàng)建文字
在任意位置雙擊即可創(chuàng)建新的元素,包括文字:

(8) 導出圖片
點擊左上角文件 - 導出為 - 高級,即可導出為圖片:

建議將DPI
調(diào)整為300
,并保留一定的邊框?qū)挾?/span>,這樣導出的圖片清晰度就比較好,且會保留一部分邊緣:

可見Draw.io
是一個非常強大的畫圖工具,非常推薦大家使用。
本文的示例類圖矢量文件:傳送門
作者:守望時空33
鏈接:https://juejin.cn/post/7425985792161005577
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
該文章在 2024/10/22 10:09:11 編輯過