1. 什么是UML
定義:
統(tǒng)一建模語言(英語:Unified Modeling Language耻姥,縮寫 UML)是非專利的第三代建模和規(guī)約語言匆光。UML是一種開放的方法采转,用于說明堡纬、可視化、構(gòu)建和編寫一個(gè)正在開發(fā)的试幽、面向?qū)ο蟮捏莶稀④浖芗到y(tǒng)的制品的開放方法。UML展現(xiàn)了一系列最佳工程實(shí)踐铺坞,這些最佳實(shí)踐在對(duì)大規(guī)模起宽,復(fù)雜系統(tǒng)進(jìn)行建模方面,特別是在軟件架構(gòu)層次已經(jīng)被驗(yàn)證有效济榨。wiki
關(guān)系分類
-
泛化關(guān)系 generalization (繼承非抽象類)
-
實(shí)現(xiàn)關(guān)系 realize (實(shí)現(xiàn)接口)
-
聚合關(guān)系 aggregation 整體和部分不是強(qiáng)依賴的坯沪,即使整體不存在了
-
組合關(guān)系 composition 組合關(guān)系是一種強(qiáng)依賴的特殊聚合關(guān)系,如果整體不存在了擒滑,則部分也不存在了
-
關(guān)聯(lián)關(guān)系 association (在最終代碼中腐晾,關(guān)聯(lián)對(duì)象通常是以成員變量的形式實(shí)現(xiàn)的;)
-
依賴關(guān)系 dependency 臨時(shí)性
2. 生成UML
使用Amateras[失敗]
參考博客, 使用amaterasUML
因?yàn)闆]有安裝GEF, 所以需要先安裝 GEF.
參考博客, 在線安裝方法
按照教程把jar包復(fù)制到plugins目錄里面了, 但是就是用不了, 奇怪. 于是打算使用papyrus
使用papyrus[半成品]
安裝Papyrus
在線安裝網(wǎng)址 http://download.eclipse.org/modeling/mdt/papyrus/updates/releases/oxygen/
主頁
論壇
然后參考這個(gè)網(wǎng)站
- 根據(jù)網(wǎng)站指導(dǎo)更新好pypas
(http://download.eclipse.org/modeling/mdt/papyrus/components/designer/)
(https://hudson.eclipse.org/papyrus/view/Designer/job/papyrus-designer-oxygen/lastSuccessfulBuild/artifact/releng/org.eclipse.papyrus.designer.p2/target/repository/)
選擇其中一個(gè)就行了
生成UML圖
- 新建一個(gè) papyras Model, 就會(huì)得到一個(gè) class diagram
- 將想要逆向的package直接用鼠標(biāo)拖到 class diagram中就可以得到各個(gè)class的塊, 不過類之間的關(guān)系看不見, 如下:
顯示類之間的關(guān)系: 右鍵 / Filters/showAllRealatedLinks, 不過只能看到realize關(guān)系......
發(fā)現(xiàn)一片文章講的非常清楚查看原文
-
根據(jù)上面的文章總結(jié)一些常用的功能:
-
CTRL+A
: 全選 - 全選后
CTRL+F5
: show/hide comparts. - 全選后
F4
: 設(shè)置class/interface 對(duì)應(yīng)的圖顯示內(nèi)容(field and methods)
-
找到了一個(gè)SO 題主和我有相似的需求. 有空再看看吧
使用class visualizer[成功]
參考上面的Stack Overflow, 嘗試使用class visualizer, 發(fā)現(xiàn)可以滿足我的需求.
使用步驟
- 下載軟件解壓, 在cmd中cd到對(duì)應(yīng)目錄
- 由于我的是maven project, 所以只需要執(zhí)行如下指令即可:
clsvis.bat -cp "C:\Users\[USER]\.m2\repository" "[MAVEN_PROJECT_PATH]\target\classes"
-
然后就可以進(jìn)入如下界面, 可以查看各個(gè)類/接口之間的關(guān)系.
如果不是mavenproject也可以參考網(wǎng)站指導(dǎo)
- 可以考錄寫個(gè)bat腳本, 以后想看UML圖的時(shí)候直接雙擊就行了. 對(duì)于不同的lab也只要簡單的改一下路徑就行了. (只用
call
指令就夠了)