IDEA如何快速構(gòu)建UML類圖
1 UML圖
統(tǒng)一建模語(yǔ)言(Unified Modeling Language,UML)是用來設(shè)計(jì)軟件的可視化建模語(yǔ)言。它的特點(diǎn)是簡(jiǎn)單、統(tǒng)一、圖形化、能表達(dá)軟件設(shè)計(jì)中的動(dòng)態(tài)與靜態(tài)信息。
UML 從目標(biāo)系統(tǒng)的不同角度出發(fā),定義了用例圖、類圖、對(duì)象圖、狀態(tài)圖、活動(dòng)圖、時(shí)序圖、協(xié)作圖、構(gòu)件圖、部署圖等 9 種圖。
1.1 類圖概述
類圖(Class diagram)是顯示了模型的靜態(tài)結(jié)構(gòu),特別是模型中存在的類、類的內(nèi)部結(jié)構(gòu)以及它們與其他類的關(guān)系等。類圖不顯示暫時(shí)性的信息。類圖是面向?qū)ο蠼5闹饕M成部分。
1.2 類圖的作用
- 在軟件工程中,類圖是一種靜態(tài)的結(jié)構(gòu)圖,描述了系統(tǒng)的類的集合,類的屬性和類之間的關(guān)系,可以簡(jiǎn)化了人們對(duì)系統(tǒng)的理解;
- 類圖是系統(tǒng)分析和設(shè)計(jì)階段的重要產(chǎn)物,是系統(tǒng)編碼和測(cè)試的重要模型。
1.3 類圖表示法
1.3.1 類的表示方式
在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來表示,比如下圖表示一個(gè)Employee類,它包含name,age和address這3個(gè)屬性,以及work()方法。

屬性/方法名稱前加的加號(hào)和減號(hào)表示了這個(gè)屬性/方法的可見性,UML類圖中表示可見性的符號(hào)有三種:
- +:表示public
- -:表示private
- #:表示protected
屬性的完整表示方式是: 可見性 名稱 :類型 [ = 缺省值]
方法的完整表示方式是: 可見性 名稱(參數(shù)列表) [ : 返回類型]
注意:
- 中括號(hào)中的內(nèi)容表示是可選的
- 也有將類型放在變量名前面,返回值類型放在方法名前面
舉個(gè)栗子:

上圖Demo類定義了三個(gè)方法:
- method()方法:修飾符為public,沒有參數(shù),沒有返回值。
- method1()方法:修飾符為private,沒有參數(shù),返回值類型為String。
- method2()方法:修飾符為protected,接收兩個(gè)參數(shù),第一個(gè)參數(shù)類型為int,第二個(gè)參數(shù)類型為String,返回值類型是int。
1.3.2 類與類之間關(guān)系的表示方式
1.3.2.1 關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系是對(duì)象之間的一種引用關(guān)系,用于表示一類對(duì)象與另一類對(duì)象之間的聯(lián)系,如老師和學(xué)生、師傅和徒弟、丈夫和妻子等。關(guān)聯(lián)關(guān)系是類與類之間最常用的一種關(guān)系,分為一般關(guān)聯(lián)關(guān)系、聚合關(guān)系和組合關(guān)系。我們先介紹一般關(guān)聯(lián)。
關(guān)聯(lián)又可以分為單向關(guān)聯(lián),雙向關(guān)聯(lián),自關(guān)聯(lián)。
1,單向關(guān)聯(lián)

在UML類圖中單向關(guān)聯(lián)用一個(gè)帶箭頭的實(shí)線表示。上圖表示每個(gè)顧客都有一個(gè)地址,這通過讓Customer類持有一個(gè)類型為Address的成員變量類實(shí)現(xiàn)。
2,雙向關(guān)聯(lián)

從上圖中我們很容易看出,所謂的雙向關(guān)聯(lián)就是雙方各自持有對(duì)方類型的成員變量。
在UML類圖中,雙向關(guān)聯(lián)用一個(gè)不帶箭頭的直線表示。上圖中在Customer類中維護(hù)一個(gè)List<Product>,表示一個(gè)顧客可以購(gòu)買多個(gè)商品;在Product類中維護(hù)一個(gè)Customer類型的成員變量表示這個(gè)產(chǎn)品被哪個(gè)顧客所購(gòu)買。
3,自關(guān)聯(lián)

自關(guān)聯(lián)在UML類圖中用一個(gè)帶有箭頭且指向自身的線表示。上圖的意思就是Node類包含類型為Node的成員變量,也就是“自己包含自己”。
1.3.2.2 聚合關(guān)系
聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)關(guān)聯(lián)關(guān)系,是整體和部分之間的關(guān)系。
聚合關(guān)系也是通過成員對(duì)象來實(shí)現(xiàn)的,其中成員對(duì)象是整體對(duì)象的一部分,但是成員對(duì)象可以脫離整體對(duì)象而獨(dú)立存在。例如,學(xué)校與老師的關(guān)系,學(xué)校包含老師,但如果學(xué)校停辦了,老師依然存在。
在 UML 類圖中,聚合關(guān)系可以用帶空心菱形的實(shí)線來表示,菱形指向整體。下圖所示是大學(xué)和教師的關(guān)系圖:

1.3.2.3 組合關(guān)系
組合表示類之間的整體與部分的關(guān)系,但它是一種更強(qiáng)烈的聚合關(guān)系。
在組合關(guān)系中,整體對(duì)象可以控制部分對(duì)象的生命周期,一旦整體對(duì)象不存在,部分對(duì)象也將不存在,部分對(duì)象不能脫離整體對(duì)象而存在。例如,頭和嘴的關(guān)系,沒有了頭,嘴也就不存在了。
在 UML 類圖中,組合關(guān)系用帶實(shí)心菱形的實(shí)線來表示,菱形指向整體。下圖所示是頭和嘴的關(guān)系圖:

1.3.2.4 依賴關(guān)系
依賴關(guān)系是一種使用關(guān)系,它是對(duì)象之間耦合度最弱的一種關(guān)聯(lián)方式,是臨時(shí)性的關(guān)聯(lián)。在代碼中,某個(gè)類的方法通過局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用來訪問另一個(gè)類(被依賴類)中的某些方法來完成一些職責(zé)。
在 UML 類圖中,依賴關(guān)系使用帶箭頭的虛線來表示,箭頭從使用類指向被依賴的類。下圖所示是司機(jī)和汽車的關(guān)系圖,司機(jī)駕駛汽車:

1.3.2.5 繼承關(guān)系
繼承關(guān)系是對(duì)象之間耦合度最大的一種關(guān)系,表示一般與特殊的關(guān)系,是父類與子類之間的關(guān)系,是一種繼承關(guān)系。
在 UML 類圖中,泛化關(guān)系用帶空心三角箭頭的實(shí)線來表示,箭頭從子類指向父類。在代碼實(shí)現(xiàn)時(shí),使用面向?qū)ο蟮睦^承機(jī)制來實(shí)現(xiàn)泛化關(guān)系。例如,Student 類和 Teacher 類都是 Person 類的子類,其類圖如下圖所示:

1.3.2.6 實(shí)現(xiàn)關(guān)系
實(shí)現(xiàn)關(guān)系是接口與實(shí)現(xiàn)類之間的關(guān)系。在這種關(guān)系中,類實(shí)現(xiàn)了接口,類中的操作實(shí)現(xiàn)了接口中所聲明的所有的抽象操作。
在 UML 類圖中,實(shí)現(xiàn)關(guān)系使用帶空心三角箭頭的虛線來表示,箭頭從實(shí)現(xiàn)類指向接口。例如,汽車和船實(shí)現(xiàn)了交通工具,其類圖如圖 9 所示。

2 IDEA快速構(gòu)建UML類圖
最近在開發(fā)的過程當(dāng)中,對(duì)于已有的代碼,想將相關(guān)類繪制成UML類圖,雖然現(xiàn)在有很多UML類圖的優(yōu)秀軟件,比如ProcessOn(可視化編輯)、draw.io(可視化編輯)、PlantUML(代碼生成)。
其實(shí)看到這里我就想IDEA中有沒有像PlantUML一樣的自動(dòng)生成的插件,本著懷疑的態(tài)度百度了一下,果然IDEA還是很強(qiáng)大的,這個(gè)插件都是自帶的,接下稍微講述如何利用IDEA生成UML類圖的教程。
說之前先說一下Diagram這個(gè)單詞,意思是圖表; 示意圖; 圖解; [數(shù)] 線圖的意思。
打開設(shè)置 File->Setting或windows下按Ctrl+Alt+S在搜索框中輸入``Diagram,如下圖:

如上所示,我們主要關(guān)心的只有Java Class Diagrams下面的幾個(gè)單選框,分別對(duì)應(yīng)紅字部分,一般的UML類圖只需要知道成員變量、構(gòu)造器和方法(前面三個(gè)),其他的隨意,設(shè)置好了之后我們就來演示一下,
選擇需要的類文件,在編輯器中打開它
按Ctrl + Shift + Alt + U或Ctrl + Alt + U或右鍵選擇,``生成類Uml關(guān)聯(lián)圖,如下圖:



上面的是類的UML圖,下面的support包的UML圖:

局限性:雖然這個(gè)很是方便,但是也有他自己的局限性。
首先這個(gè)功能只能是根據(jù)類來自動(dòng)生成的,所以對(duì)于設(shè)計(jì)類的時(shí)候就不行了,還是需要正規(guī)的UML圖軟件。
還有就是對(duì)于專業(yè)的UML軟件來說,這種自動(dòng)生成的東西可能表達(dá)并不是非常的準(zhǔn)確直觀,特別是對(duì)于UML圖有嚴(yán)格要求的人來說,顯得格外重要。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)文件上傳到服務(wù)器本地并通過url訪問的方法步驟
最近項(xiàng)目中使用到了文件上傳到服務(wù)器的功能,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)文件上傳到服務(wù)器本地并通過url訪問的方法步驟,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
Java基礎(chǔ)將Bean屬性值放入Map中的實(shí)例
這篇文章主要介紹了Java基礎(chǔ)將Bean屬性值放入Map中的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-07-07
AOP之事務(wù)管理<aop:advisor>的兩種配置方式
這篇文章主要介紹了AOP之事務(wù)管理<aop:advisor>的兩種配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringMVC核心DispatcherServlet處理流程分步詳解
這篇文章主要介紹了SpringMVC核心之中央調(diào)度器DispatcherServlet的相關(guān)知識(shí),包括SpringMVC請(qǐng)求處理過程及SrpingMVC容器和spring IOC容器關(guān)系,需要的朋友可以參考下2023-04-04
了解Maven的<relativePath/>標(biāo)簽用法
這篇文章主要介紹了了解Maven的<relativePath/>標(biāo)簽用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
教你怎么用java一鍵自動(dòng)生成數(shù)據(jù)庫(kù)文檔
最近小編也在找這樣的插件,就是不想寫文檔了,浪費(fèi)時(shí)間和心情啊,果然我找到一款比較好用,操作簡(jiǎn)單不復(fù)雜.screw 是一個(gè)簡(jiǎn)潔好用的數(shù)據(jù)庫(kù)表結(jié)構(gòu)文檔的生成工具,支持 MySQL、Oracle、PostgreSQL 等主流的關(guān)系數(shù)據(jù)庫(kù).需要的朋友可以參考下2021-05-05
spring boot 自定義規(guī)則訪問獲取內(nèi)部或者外部靜態(tài)資源圖片的方法
這篇文章主要介紹了spring boot 自定義規(guī)則訪問獲取內(nèi)部或者外部靜態(tài)資源圖片的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01

