使用環境
- EA ( Enterprise Architect 6.5) UML 工具
- Eclipse 3.2
- JDK 1.5
新增 UML 空白專案
新增 UML 空白專案
首先新增名為 CoRProject 的 UML 專案:
- 選擇File > NewProject 。
- 在 “Select model(s)” 對話框中,選擇 “simple” 並勾選 Logical View。
- 在 “Project Browser” 中,點擊 “Logical View” 並按滑鼠右鍵選擇 Add>Add Diagram… ,在 “New Diagram” 對話框中,”Diagram Types” 選擇 “Class”,並輸入名稱為 CoR Class Diagram。
使用 CoR 設計樣式
為完成範例中實做,我們需要實現下表中會使用到的類別,並列出主要的屬性與操作名稱。
類別 |
屬性 |
操作 |
說明 |
TroubleHandler |
successor: TroubleHandler |
setSuccessor(TroubleHandler): void |
處理麻煩(trouble)的抽象類別。
|
TroubleMaker |
name: String |
getName(): String |
麻煩製造者(代表 Client 端) |
Trouble |
grade: String |
getGrade(): String |
發生麻煩時的類別,被當作參數,由 TroubleMaker 傳送至 TroubleHandler。 |
SmallTrouble_Handler |
|
handleTrouble(Trouble): void |
處理「小麻煩」的具體(concrete)類別。 |
MediumTrouble_Handler |
|
handleTrouble(Trouble): void |
處理「中麻煩」的具體(concrete)類別。 |
BigTrouble_Handler |
|
handleTrouble(Trouble): void |
處理「大麻煩」的具體(concrete)類別。 |
NullTrouble_Handler |
|
handleTrouble(Trouble): void |
沒有任有處理(視而不見)的具體(concrete)類別。 |
- 將同一視圖下列的標籤切換至 “Resource Explorer”。
- 點選 UML Patterns > GoF Behavioral Patterns > Chain of Responsibility。
- 按滑鼠右鍵,選擇 “Add Pattern to Diagram”,此時會出現新增 CoR Pattern 的對話框,如下圖 3。
- 在 Pattern Element Pane 中,若按下每一行最右邊的 … ,則可以選擇修改類別名稱,我們可以延至在類別圖中來修改,所以在此略過此種方式,直接選擇 OK 完成即可。此時在類別圖的畫布中,會出現如下圖 4的畫面。
修改與新增類別
- 我們需要將上圖內的類別修改類別名稱,並新增原來在 CoR Pattern 所沒有的類別,包括 Trouble、兩個具體類別(原來只有兩個具體類別,而在本範例中,需要四個),同時,依照上表 1 所列,我們也需要新增或修改各個類別的屬性與操作名稱。
- 如何新增與修改類別,請參考 EA Help 內建文檔。修改之後的類別圖如下所示。
將模型(Model)轉換(Transform)為 Java 程式碼
在執行轉換至 Java 程式碼之前,請先準備兩個步驟:
- 確認所有要轉換的類別(Class)要產出的程式碼為 Java。以滑鼠雙擊在 “Project Browser” 中的一個類別,會出現該類別的屬性(properties)對話框。在 [General] 標籤中,點選 [Language] 欄位內的值為 Java,如下圖所示。
- 已新增好 Eclipse 的 Java 專案(其它 IDEs 亦然),並指定好專案中的 source 資料夾。
接著返回 EA 繼續下述步驟…
- 在 “Project Browser” 中,點選 “Logical View” package,按滑鼠右鍵選擇 Code Engineering > Generate Source Code。此時會顯示對話框,請勾選 Auto Generate Files,以及在 Root Directory 的目錄中,選擇上述在 Eclipse 新增專案的 src 目錄夾。
- 切換到 Eclipse IDE 環境中,Refresh 原先所新增的專案,即可以看到 src 資料夾內已出現從 Model 檔所轉換(transform)過來的程式碼。
- 轉換之後,不可避免會有一些錯誤發生,例如型別(Type)、該被匯入(import)的參考類別、回傳值 …等。修正錯誤並補充細節,填上該實做每一個 method 的演算邏輯。修正之後的 Java 程式碼可以正確完成編譯(compile)。
- 為測試 CoR 的結構性,我們在 Eclipse 中新增一個測試類別: CoRAppMain,可以在 Console 下顯示測試結果。該測試類別首先利用亂數模擬產生從 “小、中、大” 與 “NULL” 的各類麻煩,然後新增四個麻煩處理者,專責來處理名為 “敗家子” 的 TroubleMaker 所製造的麻煩,並且將其四個處理者串鍊(chain)在一起,分門別類來處理各類的麻煩。
(點擊圖片鏈接看原圖)圖 8、Generate Package Source Code 對話框
(點擊圖片鏈接看原圖)圖 9、從 EA Model 轉換到 Eclipse 的 Java 程式碼
反轉(Reverse) Java 程式碼回 Model
- 我們當然可以再將其修正過後的程式碼反轉(reverse)回 EA 的Model檔,先切換回 EA 的環境。為比較反轉回來的 Model 與 原先在 EA所設計的 Model 之間的差異,我們需要另外新增反轉回來後 Model 所在的 package(當然,也可以選擇反轉回原來 Model 所在位置,如此則可以保持 Model 與 程式碼的同步)。
- 在 “Project Browser” 中,新增一個 package 名為 “ReverseJava”,點選該資料夾,滑鼠按右鍵,選擇 Code Engineering > Import Source Directory…,在所出現的對話框中,在 “Root Directory” 選擇 Source code 所在目錄;在 “Source Type” 中選擇 Java。
- 從 Java 程式碼反轉至 EA Model 的類別圖如下圖所示。
- 關於 C#.NET 轉換步驟幾與轉換 Java 的步驟一樣,在此省略。關於程式碼,請參考附件檔。
(點擊圖片鏈接看原圖)圖 11、Import Source Directory 對話框
※ 延伸參考
- 包括 EA Model 範例檔、Java/C#.NET 原始程式碼,請至「HSDc—檔案下載區」下載。
- 【設計樣式】「Chain of Responsibility」的範例與說明
版主您好~
我是一個大學生。
剛開始學習UML對EA這套工具蠻有興趣。
請問版主有此軟體的簡單範例或教學呢!
謝謝您。
Hi, 可以至 http://www.hsdc.com.tw 看相關軟體的範例與教學文件。
Hello Mr. Chang:
我相信若能善用工具,均能協助開發效率的。
請問若用coldfusion,此工具可以協助開發?增進生產力嗎?