九、 Draw a Class Diagram
現在我們來畫一個類圖。類圖和序列圖是UML中最常用的兩種diagram,所以我們要比之前的學習多花點時間。
這個類圖著重在分析保齡球比賽和它的分數上,描述了一個保齡球比賽由10個Frame構成,除了最后一個Frame有三次擲球外,其它的每個Frame都只有兩次擲球。首先,我們把類圖的名字更改為“Analysis Class diagram”。
類圖的工具條中有下面這些按鈕。
現在讓我們先畫出輪廓,然后再添加詳細的信息。首先需要創建六個類,你可以像創建Actor和用例一樣去創建它們。從關聯的兩個類中下面那個類開始的箭頭稱作“Generalization”,當創建Generalizations的時候,需要先在開始目標上點擊一下。
上面這個類圖中的關聯除了Generations外,還有一種虛線被稱作“Associations”,現在讓我們開始畫這些Associations。在Game類和Frame類之間這種線被稱作“Composition”,表明是Game是由Frame組成的,如果沒有Frame,那也就不存在Game。
如何設置Association的Property
Association有很多property可以設置,比如:Aggregation、Composition、Multiplicity等等。在這個case中,你需要設置Game類的Composition。
- 方法1:拖拽工具面板上的Association按鈕;
- 方法2:在Association的彈出菜單中設置;
- 方法3:在Association的Property視圖中設置;
現在我們采用第二種方法,從彈出菜單中設置Association。
選擇不同的association顯示的彈出菜單也是不同的,點擊結束于Game類的association連線,你就可以設置Game類的property了。
現在讓我們在Property視圖中設置Multiplicity,當在Diagram編輯器中選擇Association時,這個Association的property就會顯示在Property視圖中(看下面的圖例),然后你就可以修改Multiplicity了。
當你設置multiplicity時要注意這里針對association的不同目標顯示了兩個role選項卡,請確保你選擇的是正確的。在這個case中,選擇Target為“Frame”的選項卡,然后設置multiplicity為10。
現在讓我們來給這些類添加屬性和方法吧。
添加類屬性
現在讓我們給Frame類添加三個屬性,我們可以通過三種方法執行該操作。
- 方法1:在Diagram編輯器中使用彈出菜單;
- 方法2:在project視圖中使用彈出菜單;
- 方法3:使用這個類的Property視圖;
在Diagram編輯器中選擇Frame類,并且在它的彈出菜單中選擇[Add Attribute],然后輸入“Pin numbers on 1st throw”作為屬性的名稱,你可以使用同樣方式添加更多的屬性,也可以嘗試使用另外兩種方法作為練習。如果你想刪除一個屬性,你可以從Property視圖或者結構樹視圖中去刪除它們。屬性的可見性默認為private,類型默認為void,你可以使用Property視圖去改變他們。你還可以使用快捷鍵“Ctrl+F”添加屬性(添加操作的快捷鍵是“Ctrl+M”)。
添加類方法
你可以像操作屬性一樣去添加或者編輯類的方法,也可以在Property視圖中添加類的方法。
在Property視圖中按下[Add]按鈕即可添加方法,要編輯所添加方法的信息,可以使用Property視圖或者選中所添加的方法點擊[Edit]按鈕,你就會看到非常詳細的Property視圖,可以編輯其中所有的信息,比如這個方法的參數。當選中某個方法時,按下[Delete]按鈕就可以執行刪除操作,按下[Edit]按鈕就會打開一個編輯該方法所有Propety的對話框。使用[Up]和[Down]按鈕可以調整方法顯示的順序。
當你添加完“Calculate knocked down pins”方法和“Pin numbers : int”屬性后,該類圖就完成了。到目前為止感覺如何?我們主要的目的是學習使用JUDE去畫UML的diagram,所以不要擔心技術細節,繼續下個章節吧。
十、 Draw a Sequence diagram
現在讓我們畫一個序列圖,顯示組成Game類的“Calculate knocked down pin numbers”對象的操作時序。序列圖可以在結構樹視圖中添加在用例或者操作的下面,選擇“Calculate knocked down pin numbers”方法,然后在彈出菜單中選擇[Add Sequence diagram]。
這個diagram描述了當“Player”擲出保齡球后一系列操作的時序。“Ball Throw Checker”對象首先計算擊中了多少個保齡球,然后去“Game”對象進行登記,如果全部被擊中的話,“Display the Score”對象就會顯示一個動畫。如果是畫一個類似的活動圖會有一些不同,在序列圖中,是按時間順序進行顯示的,以豎坐標表示時間,橫坐標表示不同的對象。
序列圖的工具面板如下圖:
序列圖的工具面板中的按鈕和我們之前看過的其它圖的有一些不同,所以操作的元素也會和之前的圖有所不同。
首先,按上圖創建五個對象,先不要急于完成,我還想告訴你一些事情:我們可以像之前一樣選擇工具面板上的按鈕去創建對象,但是在序列圖中創建這些對象有更簡便的方法,使用結構樹視圖!在結構樹視圖中選擇基類,然后拖入Diagram編輯器中的序列圖。
你也可以在結構樹視圖中選擇多個類一次全部拖入Diagram編輯器中。
現在我們開始創建消息,從“Player”到“Ball Throw Checker”的消息是個異步消息,在工具面板上選擇從左數第四個按鈕,然后在“Player”的生命線上點擊一下,再點擊一下“Ball Checker”,消息就畫出來了!雙擊名稱“message0”將其更改為“Throw”,接下來創建消息“1.1 Count number of knocked down pins”,和創建“Throw”類似,我們選擇工具面板上左數第三個按鈕創建一個從“Ball Throw Checker”發往自己的同步消息(稱作SelfMessage)。當你創建異步消息的時候,是點擊在生命線上,但是創建同步消息時是點擊在Activation上。
關聯消息和操作
操作可以關聯消息,例如,當一個操作的名稱在類圖中被更改時,如果該操作有被關聯的消息,則消息也將自動被更改。要在消息和操作之間進行關聯,選擇消息后,在Property視圖中設置操作。我們現在創建一個“Calculate numbers of knocked out pins”消息和操作之間的關聯。
如果有些操作已經被關聯到了發送消息的基類“Ball Throw Checker”,這些操作將會顯示在Operation欄中,如果消息沒有可關聯的操作,你可以用Property視圖中的[New]按鈕添加一個目標操作,按下[Property]按鈕將會顯示出你所選擇的操作的所有property,你可以修改它的名稱和參數。你不需要總是對操作和消息進行關聯,只要遵照其它圖去確定操作和消息間的關聯就可以了。現在讓我們去創建其它的消息。
小提示:Activation的尺寸
你可能注意到每次添加或移動一個新消息時,Activation都變長了,這是因為在UML規范中要求原始Activation需要比接受消息的目標Activation要長,所以你每次添加了新消息時,JUDE都會自動進行調整。JUDE建議增長Activation而不讓他們變短,你可以自己將它們變得短一點,你可以像在活動圖中調整ActionState那樣去改變Activation的大小,選擇Activation,然后拖住它的一個角進行調整,這個方法適用于除異步外所有消息的Activation。
十一、Other Diagrams
這里有關于保齡球的協作圖和狀態圖。
協作圖
這個協作圖表達了你之前畫的序列圖中的相互動作。
協作圖工具面板
狀態圖
這個狀態圖顯示了比賽是如何進行的。
狀態圖工具面板
十二、 Features of JUDE
JUDE有很多在這里沒有介紹的特性,去嘗試下面的這些特性:
- 導出Java骨架代碼
- 導入Java源文件
- Java源文件生成模板
- 在結構樹視圖中拖拽替換Model
- Boundary、Control和Entity Classes的符號標記
- 設置元素的默認顏色
- 設置模式的默認顏色,可能在JUDE的系統屬性中。
- 通過拖拽Association線的角改變Association的目標。
- 向Microsoft Office中貼圖
- 導入JUDE的model。
《Learn UML with JUDE》系列文章到此就結束了,由于時間關系,有些地方翻譯的還不夠準確,有空的時候再來潤色一下。JUDE當前最新的版本是5.5B1,但本文中所使用的版本是3.2,所以有些按鈕或操作會和文中的描述有些出入,但也很容易對號入座。在翻譯這篇文章的同時,也讓我了解了JUDE的使用,確實是款出色的建模工具,推薦大家使用。
[譯]Learn UML with JUDE(一)
[譯]Learn UML with JUDE(二)
[譯]Learn UML with JUDE(三)