在軟件設(shè)計(jì)與開發(fā)的過程中,使用各種圖來表示軟件的結(jié)構(gòu)或者執(zhí)行流程等等,是非常重要的。
如今絕大多數(shù)的編程語(yǔ)言是以面向?qū)ο?/span>為基礎(chǔ)的,以類和對(duì)象為核心思想表達(dá)計(jì)算機(jī)中的一切數(shù)據(jù),亦或是和現(xiàn)實(shí)生活中的概念相對(duì)應(yīng)。因此,我們常常會(huì)繪制類圖來表示不同類型的對(duì)象的組成以及它們之間的關(guān)系。
類圖是屬于UML(Unified modeling language,統(tǒng)一建模語(yǔ)言)中的一種圖,是面向?qū)ο笤O(shè)計(jì)中非常重要的圖之一,在我們平時(shí)閱讀一些書籍或者博客的時(shí)候,也常常能夠看到作者使用UML類圖表達(dá)一些對(duì)象的組成以及對(duì)象之間的關(guān)系。
今天就來總結(jié)一下UML類圖是如何表達(dá)類和對(duì)象的。
1,一個(gè)類的基本表達(dá)
(1) 字段與方法表示
一個(gè)類通常由字段和方法組成,例如下面是一個(gè)Java的類:
?public class Cat {
private int id;
private String name;
public void run() {
}
public void eat(Food food) {
}
}
可見這個(gè)Cat
類有下列字段和方法:
上述類我們畫UML類圖如下:
可見在UML類圖中,字段和方法通常使用一根橫線分隔,每一個(gè)字段和方法表示如下形式:
訪問修飾符位于最前,不同的訪問修飾符對(duì)應(yīng)的符號(hào)如下:
-
表示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ù)太多,導(dǎo)致一個(gè)類圖框太長(zhǎng)了,可以省略參數(shù)名稱,即寫成訪問修飾符 方法名(參數(shù)1類型, 參數(shù)2類型, ...): 返回值類型
形式,例如:
表示方法eat
中的兩個(gè)參數(shù)分別是Food
和Drink
類型。
(2) 抽象類和接口
一般來說,如果一個(gè)類是抽象類,我們通常使用斜體字來表示這個(gè)類的名稱,例如:
對(duì)于接口,我們需要在名字上面一行加上<<interface>>
標(biāo)明其為接口類型:
2,類圖中的關(guān)系表示
在許多情況下,類和類之間都是有一定的關(guān)系的,在UML類圖中定義了6
種關(guān)系的表達(dá):
關(guān)聯(lián)(Association):表示類之間的結(jié)構(gòu)性關(guān)系
聚合(Aggregation):表示整體與部分之間的關(guān)系,部分可以獨(dú)立于整體存在
組合(Composition):表示整體與部分之間的關(guān)系,部分不能獨(dú)立于整體存在
依賴(Dependency):表示一個(gè)類依賴于另一個(gè)類的變化,例如類A
的某個(gè)方法使用了類B
的對(duì)象,那么A
依賴于B
泛化(Generalization):表示類之間的繼承關(guān)系,子類繼承父類的屬性和方法
實(shí)現(xiàn)(Realization):表示一個(gè)類實(shí)現(xiàn)一個(gè)接口的關(guān)系
通常使用不同形狀的箭頭來連接兩個(gè)存在一定關(guān)系的類,每種關(guān)系對(duì)象的箭頭是不一樣的:
下面,就來單獨(dú)講解一下每種關(guān)系的表示。
(1) 關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系通常使用實(shí)線和箭頭表示,如果一個(gè)類型和一個(gè)類型雙向關(guān)聯(lián)(例如多對(duì)多關(guān)系),那么直接使用實(shí)線連接兩個(gè)類即可。
例如在一個(gè)游戲中,一個(gè)角色屬于一個(gè)國(guó)家,國(guó)家與角色是一對(duì)多關(guān)系,一個(gè)角色關(guān)聯(lián)一個(gè)國(guó)家;此外一個(gè)角色可以參與多個(gè)劇情,而一個(gè)劇情也包含多個(gè)角色,因此角色和劇情是多對(duì)多關(guān)系,角色與劇情則是雙向關(guān)聯(lián)的,表示如下:
(2) 依賴關(guān)系
依賴關(guān)系通常使用虛線和箭頭表示,箭頭指向被依賴的類,通常一個(gè)類的方法如果以另一個(gè)類為參數(shù),或者使用了另一個(gè)類,那么說明這個(gè)類依賴于另一個(gè)類。
比如電腦Computer
類的print
方法需要傳入一個(gè)可用的打印機(jī)Printer
類對(duì)象作為參數(shù),那就說明電腦類依賴于打印機(jī)類,表示如下:
(3) 聚合關(guān)系
聚合關(guān)系通常使用實(shí)線和空心菱形箭頭表示,是一種整體和部分的關(guān)系,箭頭指向表示整體的類,但是部分可以離開整體單獨(dú)存在,是一種弱擁有關(guān)系。
例如一個(gè)學(xué)校中有許多學(xué)生,但是學(xué)生可以離開學(xué)校單獨(dú)存在,這就說明學(xué)生與學(xué)校聚合關(guān)系,表示如下:
(4) 組合關(guān)系
組合關(guān)系通常使用實(shí)線和實(shí)心菱形箭頭表示,也是一直整體和部分的關(guān)系,箭頭指向表示整體的類,只不過部分離開了整體是不能單獨(dú)存在的,是一種強(qiáng)擁有的關(guān)系。
例如一臺(tái)電腦通常由CPU、內(nèi)存、硬盤等部件組成,但是這些部件離開了電腦就不能單獨(dú)運(yùn)作了,這就說明這些電腦配件和電腦是組合關(guān)系,表示如下:
(5) 泛化關(guān)系
泛化關(guān)系通常使用實(shí)線和空心三角箭頭表示,也就是類之間的繼承關(guān)系,箭頭指向父類。
例如動(dòng)物類是一個(gè)抽象類,它被具體的動(dòng)物類型例如貓類、兔子類、魚類等繼承,則表示如下:
(6) 實(shí)現(xiàn)關(guān)系
實(shí)現(xiàn)關(guān)系通常使用虛線和空心三角箭頭表示,通常是類實(shí)現(xiàn)接口的關(guān)系,箭頭指向被實(shí)現(xiàn)的接口。
例如USB
類是一個(gè)接口,定義了USB
接口的抽象傳輸規(guī)范,而具體的U盤類型例如金士頓、閃迪等U盤類型實(shí)現(xiàn)了這個(gè)USB
接口中的方法,則表示如下:
3,畫圖軟件推薦 - Draw.io
工欲善其事,必先利其器。一個(gè)好用的畫圖軟件在我們開發(fā)的過程中也是必不可少的。
這里推薦使用Draw.io
這個(gè)畫圖軟件,該軟件是一款免費(fèi)開源的畫圖軟件,除了可以繪制類圖之外,還可以繪制其它各種類型的圖例如流程圖、時(shí)序圖等等。
該軟件可以直接在線使用,也可以下載客戶端:
這里就來簡(jiǎn)單講解一下怎么使用Draw.io
軟件繪制UML類圖。
(1) 畫布設(shè)定
打開軟件后新建一個(gè)空白圖,我們就能夠看到畫布了,我們可以在右側(cè)繪圖選項(xiàng)中調(diào)整畫布:
建議可以先關(guān)閉網(wǎng)格和頁(yè)面視圖這兩個(gè)選項(xiàng),這樣頁(yè)面就顯示為無限大的畫布了,且背景不再顯示網(wǎng)格。此外,還可以勾選背景色選項(xiàng),并自定義背景顏色。
在一個(gè)Draw.io
工程文件中,可以存放多個(gè)頁(yè)面,和Excel的Sheet類似,在下邊可以管理多個(gè)頁(yè)面:
(2) 畫一個(gè)類
在左側(cè)欄可見有非常多的現(xiàn)成的圖形模板,我們展開UML類別,拖一個(gè)類圖模板到畫布即可:
(3) 編輯類名和字段方法名
雙擊類圖框上面部分,即可編輯類名,此外每個(gè)字段和方法也是一個(gè)無邊框的格子,點(diǎn)擊對(duì)應(yīng)部分編輯即可:
此外,如果需要增加字段與方法,建議直接復(fù)制對(duì)應(yīng)的字段/方法格子即可,這樣我們只需要修改內(nèi)容。鼠標(biāo)選中對(duì)應(yīng)的字段/方法格子后,按住Ctrl
鍵并拖拽、放到類圖框中,最后再松開Ctrl
鍵即可復(fù)制一個(gè)字段/方法格子:
如果一個(gè)類只有字段或者方法,那么可以選中其中的橫線并按下Del
鍵刪除。
(4) 顏色調(diào)整
我們也可以修改類圖框的顏色,使得我們的類圖更加的“豐富多彩”。
選中類圖,在右側(cè)欄樣式部分可以快捷地選擇一些配色:
此外,我們還可以選中其中的字段格子,設(shè)定其顏色或者給其增加邊框:
按住Ctrl
鍵點(diǎn)按鼠標(biāo)可以多選,樣式一欄我們可以設(shè)定配色,也可以單獨(dú)設(shè)定邊框與填充顏色。
(5) 字體與對(duì)齊
當(dāng)我們選中一整個(gè)類圖框,或者一個(gè)字段/方法格子時(shí),可以在右側(cè)文本選項(xiàng)部分,調(diào)整其字體、字號(hào)、上下和左右對(duì)齊方式:
當(dāng)我們選中整個(gè)類圖框時(shí),調(diào)整的字體和顏色對(duì)應(yīng)的是類圖名字部分樣式;而我們選擇字段或者方法格子時(shí),則調(diào)整的是這個(gè)選中的字段或者方法格子的樣式。
此外,拖拽類名下面的黃色菱形按鈕可以調(diào)整類名部分的高度,例如我們聲明一個(gè)接口,在文字超出類名部分之后,即可使用這種方式調(diào)整:
(6) 箭頭的創(chuàng)建
對(duì)于兩個(gè)類圖框,當(dāng)我們選中一個(gè)類圖框后,可以看到每個(gè)方向都顯示了透明的箭頭按鈕,點(diǎn)擊一個(gè)箭頭按鈕并拖拽到另一個(gè)類圖框上面即可:
當(dāng)然,拖拽到一個(gè)字段格子上也可以:
可以注意觀察我們拖拽到目標(biāo)對(duì)象時(shí),目標(biāo)對(duì)象圖框會(huì)顯示一圈藍(lán)色透明指示。
此外,選擇箭頭后就可以在右側(cè)欄樣式部分設(shè)定箭頭樣式,包括起始和終止箭頭樣式,線的樣式等等:
(7) 雙擊創(chuàng)建文字
在任意位置雙擊即可創(chuàng)建新的元素,包括文字:
(8) 導(dǎo)出圖片
點(diǎn)擊左上角文件 - 導(dǎo)出為 - 高級(jí),即可導(dǎo)出為圖片:
建議將DPI
調(diào)整為300
,并保留一定的邊框?qū)挾?/span>,這樣導(dǎo)出的圖片清晰度就比較好,且會(huì)保留一部分邊緣:
可見Draw.io
是一個(gè)非常強(qiáng)大的畫圖工具,非常推薦大家使用。
本文的示例類圖矢量文件:傳送門
作者:守望時(shí)空33
鏈接:https://juejin.cn/post/7425985792161005577
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
該文章在 2024/10/22 10:09:11 編輯過