利用 EA(Enterprise Architect) 實現 CoR Pattern 的塑模與產出程式碼

 

使用環境

 o EA ( Enterprise Architect 6.5) UML 工具
 o Eclipse 3.2
 o JDK 1.5

新增 UML 空白專案
首先新增名為 CoRProject 的 UML 專案:

1. 選擇File > NewProject 。
2. 在 “Select model(s)” 對話框中,選擇 “simple” 並勾選 Logical View。

 2008312124858481.jpg 
圖1、新增 UML 空白專案


3. 在 “Project Browser” 中,點擊 “Logical View” 並按滑鼠右鍵選擇 Add>Add Diagram… ,在 “New Diagram” 對話框中,”Diagram Types” 選擇 “Class”,並輸入名稱為 CoR Class Diagram。

 2008312124915151.jpg

 
圖2、新增 Class Diagram


使用 CoR 設計樣式

為完成範例中實做,我們需要實現下表中會使用到的類別,並列出主要的屬性與操作名稱。

類別, 屬性, 操作, 說明
---------------------------------------------------------------------------------
TroubleHandler (處理麻煩(trouble)的抽象類別。)
-successor: TroubleHandler
+setSuccessor(TroubleHandler): void
+handleTrouble(Trouble): void

TroubleMaker (麻煩製造者(代表 Client 端))
-name: String
-getName(): String

Trouble (發生麻煩時的類別,被當作參數,由 TroubleMaker 傳送至 TroubleHandler。)
-grade: String
+getGrade(): String

SmallTrouble_Handler (處理「小麻煩」的具體(concrete)類別。)
+handleTrouble(Trouble): void

MediumTrouble_Handler (處理「中麻煩」的具體(concrete)類別。)
+handleTrouble(Trouble): void

BigTrouble_Handler (處理「大麻煩」的具體(concrete)類別。)
+handleTrouble(Trouble): void

NullTrouble_Handler (沒有任有處理(視而不見)的具體(concrete)類別。)
+handleTrouble(Trouble): void
---------------------------------------------------------------------------------

1. 將同一視圖下列的標籤切換至 “Resource Explorer”。
2. 點選 UML Patterns > GoF Behavioral Patterns > Chain of Responsibility。
3. 按滑鼠右鍵,選擇 “Add Pattern to Diagram”,此時會出現新增 CoR Pattern 的對話框,如下圖 3。
4. 在 Pattern Element Pane 中,若按下每一行最右邊的 … ,則可以選擇修改類別名稱,我們可以延至在類別圖中來修改,所以在此略過此種方式,直接選擇 OK 完成即可。此時在類別圖的畫布中,會出現如下圖 4的畫面。

 2008312124936427.jpg

 
圖 3、新增 CoR Pattern 的對話框

 

2008312124948216.jpg
 
圖 4、出現 CoR Pattern 的類別圖


修改與新增類別
1. 我們需要將上圖內的類別修改類別名稱,並新增原來在 CoR Pattern 所沒有的類別,包括 Trouble、兩個具體類別(原來只有兩個具體類別,而在本範例中,需要四個),同時,依照上表 1 所列,我們也需要新增或修改各個類別的屬性與操作名稱。
2. 如何新增與修改類別,請參考 EA Help 內建文檔。修改之後的類別圖如下所示。

 2008312125023363.jpg

 
圖 5、修改後的 CoR 的類別圖


將模型(Model)轉換(Transform)為 Java 程式碼
在執行轉換至 Java 程式碼之前,請先準備兩個步驟:
  o 確認所有要轉換的類別(Class)要產出的程式碼為 Java。以滑鼠雙擊在 “Project Browser” 中的一個類別,會出現該類別的屬性(properties)對話框。在 [General] 標籤中,點選 [Language] 欄位內的值為 Java,如下圖所示。
 o 已新增好 Eclipse 的 Java 專案(其它 IDEs 亦然),並指定好專案中的 source 資料夾。

 2008312125037171.jpg

 
圖 6、選擇類別的 [Language] 為 Java

 2008312125049638.jpg


 
圖 7、在 Eclipse 中設定好專案的 src 資料夾


接著返回 EA 繼續下述步驟…

1. 在 “Project Browser” 中,點選 “Logical View” package,按滑鼠右鍵選擇 Code Engineering > Generate Source Code。此時會顯示對話框,請勾選 Auto Generate Files,以及在 Root Directory 的目錄中,選擇上述在 Eclipse 新增專案的 src 目錄夾。

 2008312125115792.jpg

 
圖 8、Generate Package Source Code 對話框


2. 切換到 Eclipse IDE 環境中,Refresh 原先所新增的專案,即可以看到 src 資料夾內已出現從 Model 檔所轉換(transform)過來的程式碼。

 

 2008312125144481.jpg
圖 9、從 EA Model 轉換到 Eclipse 的 Java 程式碼


3. 轉換之後,不可避免會有一些錯誤發生,例如型別(Type)、該被匯入(import)的參考類別、回傳值 ...等。修正錯誤並補充細節,填上該實做每一個 method 的演算邏輯。修正之後的 Java 程式碼可以正確完成編譯(compile)。
4. 為測試 CoR 的結構性,我們在 Eclipse 中新增一個測試類別: CoRAppMain,可以在 Console 下顯示測試結果。該測試類別首先利用亂數模擬產生從 “小、中、大” 與 “NULL” 的各類麻煩,然後新增四個麻煩處理者,專責來處理名為 “敗家子” 的 TroubleMaker 所製造的麻煩,並且將其四個處理者串鍊(chain)在一起,分門別類來處理各類的麻煩。

 200831212526325.jpg

 
圖 10、在 Eclipse 新增 Console 測試類別


反轉(Reverse) Java 程式碼回 Model
1. 我們當然可以再將其修正過後的程式碼反轉(reverse)回 EA 的Model檔,先切換回 EA 的環境。為比較反轉回來的 Model 與 原先在 EA所設計的 Model 之間的差異,我們需要另外新增反轉回來後 Model 所在的 package(當然,也可以選擇反轉回原來 Model 所在位置,如此則可以保持 Model 與 程式碼的同步)。

2. 在 “Project Browser” 中,新增一個 package 名為 “ReverseJava”,點選該資料夾,滑鼠按右鍵,選擇 Code Engineering > Import Source Directory…,在所出現的對話框中,在 “Root Directory” 選擇 Source code 所在目錄;在 “Source Type” 中選擇 Java。

 2008312125226489.jpg

 
圖 11、Import Source Directory 對話框


3. 從 Java 程式碼反轉至 EA Model 的類別圖如下圖所示。
4. 關於 C#.NET 轉換步驟幾與轉換 Java 的步驟一樣,在此省略。關於程式碼,請參考附件檔。

 2008312125242548.jpg

 
圖 12、從 Java 程式碼反轉回 EA Model 的類別圖


※ 延伸參考
 o 包括 EA Model 範例檔、Java/C#.NET 原始程式碼,請至「HSDc—檔案下載區」下載。
  http://www.hsdc.com.tw/modules/wfdownloads
 o 【設計樣式】「Chain of Responsibility」的範例與說明
  http://www.kenming.idv.tw/index.php?title=a_euseu_aupaf_a_a_chain_of_responsibilit&more=1&c=1&tb=1&pb=1



轉載自: http://www.javaworld.com.tw/jute/post/view?bid=44&id=181336&sty=1&tpg=1&age=0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章