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)文章
mybatis-plus攔截器、字段填充器、類型處理器、表名替換、SqlInjector(聯(lián)合主鍵處理)
本文主要介紹了mybatis-plus攔截器、字段填充器、類型處理器、表名替換、SqlInjector(聯(lián)合主鍵處理),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Spring 實(shí)現(xiàn)自定義監(jiān)聽器案例
這篇文章主要介紹了Spring 實(shí)現(xiàn)自定義監(jiān)聽器案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01SpringBoot中使用Redisson的實(shí)現(xiàn)示例
Redission是一個(gè)強(qiáng)大的Java庫(kù),用于構(gòu)建和管理分布式系統(tǒng)中的緩存和任務(wù)調(diào)度,本文主要介紹了SpringBoot中使用Redisson的實(shí)現(xiàn)示例,感興趣的可以了解一下2023-12-12java(包括springboot)讀取resources下文件方式實(shí)現(xiàn)
這篇文章主要介紹了java(包括springboot)讀取resources下文件方式實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09談?wù)凧ava類型中ParameterizedType,GenericArrayType,TypeVariabl,Wild
這篇文章主要介紹Java類型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType的相關(guān)資料,需要的朋友可以參考下2015-10-10java連接hdfs ha和調(diào)用mapreduce jar示例
這篇文章主要介紹了Java API連接HDFS HA和調(diào)用MapReduce jar包,需要的朋友可以參考下2014-03-03