簡介StartUML
??StarUML是一種生成類圖和其他類型的UML圖表的工具恳守。本文是一個使用StarUML創(chuàng)建類圖(Java語言描述)的簡明手冊。
??StarUML,是一種創(chuàng)建UML類圖,并能夠自動生成Java的“stub code” 的工具顷歌。StarUML也可以做JAVA逆向工程,以產(chǎn)生相應(yīng)的UML圖表幔睬。
??在本教程中眯漩,我們將使用StarUML設(shè)計一個pizza餅。執(zhí)行后續(xù)步驟麻顶,可以創(chuàng)建如下面所示的UML圖赦抖。StarUML可以生成反映類結(jié)構(gòu)的代碼,而不是任何對象的具體實現(xiàn)辅肾。因此队萤,在使用StarUML創(chuàng)建圖表后,你還應(yīng)該為此stub code添加剩余的功能性代碼矫钓,填寫每種方法本來應(yīng)該做的事要尔。
原文鏈接:https://www.flyne.org/article/379
StartUML具體實現(xiàn)
-
新建工程
1. 添加新工程
??啟動StarUML舍杜,然后一個名叫“New Project By Approach”的對話框會彈出,選擇“Empty Project”赵辕,在右邊的“Model Explorer”面板中可以看到新建的“Untitled”工程既绩,工程的屬性可以在下方的Properties面板中修改(工程名、作者等)还惠。
2. 添加模型
??通過“Model”主菜單饲握,或者在Model Explorer面板的工程上右擊,依次” Add — Model ”
3. 添加類圖
??通過“Model”主菜單蚕键,或右擊選定模型救欧,依次“Add Diagram — Class Diagram”。
4. 設(shè)置profile(UML輪廓)
??通過“Model — Profile…”菜單去設(shè)置工程所需的profile锣光。這決定了工程所使用的規(guī)則和約定笆怠。一定要包含”JAVA Porfile”這一項目。
5. 保存工程
??立即就保存工程誊爹,這樣在出現(xiàn)問題的時候骑疆,就不會丟失信息。
從“File ”菜單替废,選擇“Save” ,并選擇一個地方以保存工程泊柬。你的StarUML項目現(xiàn)在應(yīng)該看起來的是這樣的:
-
開始畫圖
1. 創(chuàng)造圖表
??現(xiàn)在椎镣,開始真正創(chuàng)造圖表,從默認(rèn)就在屏幕的左邊的“Toolbox”面板選擇“類”圖標(biāo)兽赁,然后左鍵單擊diagram窗口的某處状答。這樣就使用通用名字創(chuàng)造了一個新的類。雙擊刀崖,將類改名為Circle惊科。2. 添加屬性
??右擊圖中的目標(biāo),在彈出菜單中選擇“Add”中的“Attribute”(被標(biāo)示為綠色)亮钦,為其添加一個屬性(或者域)馆截,填入期望的名字“_radius”。
在窗體右下邊的Properties面板中蜂莉,找到“Type”輸入框蜡娶,輸入double作為_radius屬性的類型。
類的內(nèi)部數(shù)據(jù)(域/屬性)都是私有的映穗,因為他們是嚴(yán)格由類內(nèi)部使用的窖张。所以,在Properties面板中將_radius設(shè)置為“私有”蚁滋。
3. 繼續(xù)進(jìn)行設(shè)計
??重復(fù)同樣的過程宿接,添加名為Rectangle的類和double型的私有成員_width和_height赘淮。 (下面這段話是使用方面的注意事項,總感覺翻譯不太好睦霎,就原文搬上來了)
You may notice using the “Model Explorer” on the right is faster to add these, but do however note that adding the classes and interfaces themselves in this toolbox (instead of using the toolbox on the left and clicking on the palette to create the object) will not create the objects in the diagram.
4. 創(chuàng)造 IShape interface
??從toolbox中梢卸,選擇“Interface”,并點擊圖表的某處碎赢。將其改名為IShape低剔。創(chuàng)建以后,選中它肮塞。在頂部工具欄襟齿,選擇 “Stereotype Display” 下拉按鈕,將值改變?yōu)椤癗one”枕赵。
這將改變默認(rèn)的圓形形狀猜欺,使其變?yōu)槌砷L方形。還是在頂部工具欄拷窜,取消選中” Suppress Operations “开皿。這將使我們能夠看到接口所擁有的方法。
-
向IShape 接口添加返回值為double的getArea方法篮昧。
??設(shè)定返回值類型(☆)赋荆。在“Model Explorer”中展開IShape節(jié)點,右擊你剛剛創(chuàng)建的getArea方法懊昨,并選擇“Add Parameter”窄潭。在“Properties”框中,將參數(shù)的名子變?yōu)榭战桶洌瑢ⅰ癉irectionKind”變?yōu)椤癛ETURN”嫉你,將“Type”變?yōu)閐ouble。
??將IShape和getArea的IsAbstract屬性框打上勾躏惋,他們在圖標(biāo)上的名字將變?yōu)樾斌w幽污。這是UML的標(biāo)準(zhǔn),表示這是接口或者其他抽象實體簿姨。
5. 添加類和接口的關(guān)系
??可以通過從toolbox中選擇表示“Realization”的箭頭距误,并從Circle拖拽向IShape,使Circle實現(xiàn)接口IShape款熬。重復(fù)同樣的過程深寥,為Rectangle添加實現(xiàn)關(guān)系。這是添加了Circle 和 Rectangle對于IShape接口的實現(xiàn)關(guān)系贤牛。
??小技巧:如果想使連接線表現(xiàn)為直角的方式惋鹅,右擊連接線,并選擇” Format — Line Style — Rectilinear”菜單殉簸。你通過這種方式闰集,使箭頭重疊在一起沽讹,可以使你的圖看起來更整潔。
6. 添加類基于接口的行為
??由于Circle和Rectangle類都實現(xiàn)了IShape接口武鲁,就必須有同樣的行為(方法)爽雄。在“Model Explorer”面板中,復(fù)制getArea方法(按Ctrl-C或者右鍵點擊并選擇Copy菜單)沐鼠,并粘貼到Circle和Rectangle類挚瘟。
??注意:這些實現(xiàn)了的方法在Circle和Rectangle類中都不是抽象的,而是具體的饲梭,所以取消勾選IsAbstract框乘盖。
-
現(xiàn)在的類圖看起來應(yīng)該是這樣的:
7. 添加Pizza類
??向Pizza添加double型的私有域_price,添加返回double類型的公有操作getPrice憔涉。
8. 為Pizza類添加IShape 的引用
??從toolbox中選擇” DirectedAssociation “箭頭订框,點擊Pizza類,并向IShape拖拽 兜叨。
選中箭頭穿扳,在右邊的“Properties”框上,將name一欄改為“hasa”国旷,
“End1.Aggregation” 一欄改為“AGGREGATE”(這個圖示說明Pizza和shape對象是“聚合“的關(guān)系)矛物。將“End2.Name”一欄改為_shape,將“End2.Visibility”改為私有跪但。
這樣就自動為Pizz添加一個名字為_shape泽谨,使用IShape接口的私有域。
??為_shape創(chuàng)建一個“獲得者”方法特漩,名字叫做getShape,返回IShape 骨杂。這就是創(chuàng)建一個行為涂身,名字是getShape,返回IShape 搓蚪。
9. 添加構(gòu)造函數(shù)
1.為Pizza添加構(gòu)造函數(shù)蛤售,右擊,在彈出的“Add” 菜單中選擇“Operation”妒潭。從這里悴能,增加一個普通的帶有dboule型price參數(shù)和IShape類型shape參數(shù)的操作。
2.為Circle增加一個帶有double型的radius參數(shù)的構(gòu)造函數(shù)雳灾。
3.為Rectangle增加一個帶有double型width和height參數(shù)的構(gòu)造函數(shù)漠酿。
-
你的圖現(xiàn)在應(yīng)該是這樣的:
10. 添加Test_Pizza類
??為了說明UML類圖更多的功能,又增加了一個叫做“Test_Pizza”的類谎亩,它用作測試目的炒嘲,并使用到Pizza和IShape類宇姚。
??通過從toolbox中選擇“Dependency”箭頭,從一個類拖向他所以來的類夫凸,來添加不通類之間的依賴關(guān)系浑劳。在這個例子中, Test_Pizza 依賴于Pizza夭拌、Circle和Rectangle類魔熏,因為它實例化了它們。
??從Properties box選擇name屬性鸽扁,或者雙擊圖表上的“依賴線”蒜绽,可以為依賴關(guān)系添加標(biāo)簽。特別的是献烦,當(dāng)一類實例化另一個類滓窍,我們會把依賴線叫做“instantiates”。 你可以選中并拖動依賴線的標(biāo)簽巩那,以達(dá)到更美觀的效果吏夯。
??依賴關(guān)系不會影響代碼生成。
??現(xiàn)在的圖應(yīng)該像本文最開始所示即横。
11. 保存&導(dǎo)出項目
??保存:在“File”菜單中噪生,選擇“Save”。 StarUML的所有資料只有一個單一的項目文件东囚,所以你目前應(yīng)該只有一個文件生成跺嗽。
StartUML高級應(yīng)用
1. 生成Java stub代碼:
??在菜單中依次選擇“Tools — Java — Generate Code”。
從對話框中選擇你的模塊(這里可能Model1),點擊“Next”页藻。
為了使你的模塊或者圖標(biāo)的所有類都生成stub code桨嫁,選擇“Select All”然后按“Next”。
選擇一個有效的輸出目錄份帐,“Next”璃吧。
在“Options Setup” ,請務(wù)必選中“Generate the Documentation by JavaDoc”废境,“Generate empty JavaDoc”畜挨,所有其他復(fù)選框不選中,“Next”噩凹。
現(xiàn)在StarUML將從你的圖產(chǎn)生代碼巴元,點擊“Finish”退出對話框。
-
現(xiàn)在驮宴,您可以編輯生成的代碼逮刨,以增加應(yīng)用。
2. 添加實現(xiàn)代碼
??正如開頭所說的:StarUML可以生成反映類結(jié)構(gòu)的代碼堵泽,而不是任何對象的具體行動禀忆。因此臊旭,在使用StarUML創(chuàng)建圖表后,你還應(yīng)該為此stub code添加剩余的功能性代碼箩退,填寫每種方法本來應(yīng)該做的事离熏。
3. 逆向工程
??StarUML還可以從現(xiàn)有的Java代碼創(chuàng)建一個類圖,這被稱為“reverse engineering”戴涝。當(dāng)你想從現(xiàn)有的代碼生成圖表滋戳,或者你修改了StarUML生成的代碼,并且想在圖表中反應(yīng)出來的時候啥刻,逆向工程功能就非常有用了奸鸯。
到主菜單欄中選擇“Tools — Java — Reverse Engineer…”,可以將現(xiàn)有的代碼逆向工程可帽。