六、 UML about Bowling
現在都準備好了,我們可以開始畫diagram了。我們畫什么diagram呢?你最近有去打過保齡球嗎?我非常享受我們公司前幾天舉辦的保齡球賽,我猜很多人都打過保齡球,所以我們就用保齡球來作為這個UML的主題吧。讓我們來畫一個保齡球的計分系統的UML。

這里有一些要求:
l 一旦比賽開始就顯示保齡球分數的跟蹤記錄;
l 選手每次扔出保齡球后就更新分數;
l 選手在比賽時能改變分數;
l 當有人發起攻擊時顯示一個動畫;
我們的目的是體驗使用UML建模工具去畫UML,diagram畫的是否完美并不重要。那么就讓我們開始吧。
七、 Draw a UseCase diagram
現在讓我們開始畫圖吧。我們以一個用例圖作為開始,我們畫一個下圖這樣的diagram。

打開一個用例圖將會伴隨打開一些默認的project文件。在結構樹視圖的Usecase Diagram上點右鍵,選擇[Open Diagram],或者雙擊在Diagram編輯器中打開。

在Diagram編輯器中,這里有一個工具按鈕面板可以編輯diagram。

如果你想知道每個按鈕的作用,你可以把鼠標放在這個按鈕上,懸浮的提示信息將會顯示對這個按鈕的描述。在Diagram編輯器中,你可以用這些按鈕切換畫圖的模式,比如:當你想在Diagram編輯器中移動一個元素,打開[select mode]你就可以選擇你想移動的元素執行移動操作了;如果你想連續的創建某個確定的元素,你可以切換模式到[Lock Selected Mode]等等。
Button
|
Description
|

|
Select Mode. 當這個模式打開時,你就可以對某個元素執行選擇、編輯、移動和改變大小的操作了。
|

|
Lock Selected Mode. 使你能夠連續的創建所選擇的元素。比如:你在打開Lock Selected Mode時創建一個Actor,一旦你在Diagram編輯器中添加了一個Actor,你就可以連續的創建更多的Actor。
|

|
Set Relation End to the center of the item. It places the ends of lines. (e.g. Associations, Generalizations, or Dependencies) at the center of Model Elements.
|
在工具面板上選擇Actor,然后在Diagram編輯器中的任何地方點擊后將創建一個Actor,輸入“Player”作為這個Actor的name。現在讓我們像創建Actor一樣再創建三個用例。你可以拖拽他們移動元素所在的位置,當你想重命名他們的時候,雙擊這個元素的名稱即可。
現在我們來畫Actor和三個用例之間的連線。每條線都有它們自己的意義,我們在這里需要一條稱作Association的線。在工具面板上選擇Association按鈕去創建一個Association,你有兩次點擊操作,分別是點擊開始目標和結束目標。首先,點擊“Player”這個Actor,然后在“Start the Game”這個用例上點擊,現在一條association線就畫在了“Player”和“Start the Game”之間了,然后再按這種方式創建兩條association線。現在再添加一個長方形,并寫上“Bowling Score System”就完成了這個diagram了!
小提示:取消association操作
當你在畫association線時點擊在了錯誤的目標上,按下[ESC]或者右鍵就可以重做,該方法適用于兩個元素之間的任何連線,比如:Generalizations、Generalizations和Dependencies。
你可能注意到當你在Diagram編輯器創建用例和Actor時也添加在了結構樹視圖中,同樣在Diagram編輯器或者結構樹視圖中選擇元素時,它們的property也顯示在了左下角的Property視圖中,你可以在這幾個地方修改數據:Diagram編輯器,結構樹視圖,Property視圖,選擇 使用對你來說最方便的一個。
讓我們使用Property視圖來更改用例圖的名稱,在結構樹視圖中選擇“UseCase Diagram”,它的property將會顯示在Property視圖中,將它的名稱改為“Bowling UseCase Diagram”再按下[Enter]就完成了。
小提示:刪除元素
要刪除Actor或者用例,從它們的彈出菜單中選擇[Delete from Model]或者[Delete from Diagram],提供兩種方式刪除元素是因為像Actor和用例這樣的元素可以和其它的diagram共享,也可被用于其它的diagram。
[Delete from Diagram]
Ctrl+D
|
僅從當前的diagram中刪除元素,在model中依然保留。
|
[Delete from Model]
Delete
|
從所有的diagram中完全刪除。
|
小提示:縮放和滾動
我將會給你介紹JUDE中用于查看操作的特性。如果我們只是畫較小比例的用例圖,那么在視圖中不需要用這個特性。當在處理較大比例的diagram時,特別是你需要在diagram的某些部分進行修改,JUDE的這個特性可以非常容易的進行該操作。希望顯示的區域可以在JUDE的Diagram編輯器中用右鍵拖拽,使你可以對角的移動它們,在主菜單中選擇[View]或者使用工具條可以進行放大或縮小,也可以使用Map視圖指定顯示你想看到的區域。
小提示:撤銷和重做
JUDE的撤銷和重做的特性可以讓你重復執行100次!如果你到現在為止都沒有用過撤銷,去嘗試一下看看它是怎么工作的!在你畫圖的時候不用擔心畫錯了,這是件多么舒心的事!
八、Draw an Activity Diagram
現在讓我們著重在“Display the Score”用例,在活動圖中畫出它的流程。首先,你需要在你的project文件中添加一個活動圖,選擇“Display the Score”用例,然后在彈出菜單中選擇[Create Diagram] - [Add Activity Diagram],一個新的活動圖將會被添加,并且在Diagram編輯器中打開。

把活動圖命名為“Behavior of displaying Scores”。活動圖在工具條中有下面這些按鈕:

現在讓我們來畫一個下面這樣的活動圖。

活動圖和流程圖非常相似,它描述了事件如何流動和連接到下個動作。在這個活動圖中,描述了在選手扔出保齡球后執行的事件,以及計算將要顯示的分數。從這個活動圖中,你將會得知在選手全中后會顯示一個動畫。
讓我們開始創建除箭頭外的所有元素,你可以像之前創建Actor和用例一樣去創建它們,從工具面板選擇元素,然后在Diagram編輯器中點擊創建它們。你可以在Diagram編輯器或者Property視圖中將EntryAction設置為ActionState。
調整大小
“Calculate numbers of knocked out pins”在ActionState中以一行顯示的話過長,所以讓我們調整一下這個ActionState的大小,讓它的名稱換行顯示。調整元素的大小只需要選擇元素的一個角進行拖拽。

現在讓我們添加元素之間的箭頭以顯示這些動作之間的流程,這個箭頭稱作Transition。要畫一條Transition,你可以像在用例圖中畫Association一樣點擊兩個目標進行連接,但是你需要小心創建時點擊的順序,我馬上會告訴你如何連續的創建T ansition。
小提示:連續的創建
l 方法1:在工具面板上打開[Selected Mode];
l 當創建元素的時候按住[Shift];
你能連續創建它們了嗎,這對你來說非常有用,也非常容易。[Strike]是Transition的guard的值,點擊Transition箭頭,然后在Property 視圖的Guard列中輸入“Strike”。

下面我將會介紹如何畫出清晰的diagram的三個技巧。
小提示:多選
這里有三種方式在Diagram編輯器中進行多選。
l 方法1:在多個元素上拖拽出一個長方形的選擇域,長方形中的所有元素都將被選中;
l 方法2:在diagram的彈出菜單中選擇[Select All];
l 方法3:在選擇多個元素時按住[Shif];
小提示:線性對齊
在JUDE中元素可以縱向和橫向對齊,使用[Align vertical center]讓左邊的元素垂直對齊(除了“Show an animation”),讓diagram看起來整齊一點,可以用鼠標拖出一個長方形包圍所有目標元素以選中它們,然后從主菜單選擇[Alignment] - [Align Vertically] - [Align Vertical Center]或者選擇主菜單下的工具條中的按鈕。
小提示:線條樣式
在JUDE中有兩種類型的線條。
Normal Line Style (Default):
|
用直線或多角折線連接diagram 中的元素
|
Right Angle Line Style:
|
使用直角線連接diagram中的元素
|
線條樣式默認設置為[Normal Line Stile],然而[Right Angle Line Style]有時看起來比較好,那么我們為什么在這個活動圖中不用[Right Angle Line Style]呢,選擇所有的線條,然后在它的彈出菜單中選擇[Line Style] - [Normal]或者在工具條中選擇按鈕。

[譯]Learn UML with JUDE(一)
[譯]Learn UML with JUDE(二)
[譯]Learn UML with JUDE(三)