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

使用環境

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

新增 UML 空白專案

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

  1. 選擇File > NewProject 。
  2. 在 “Select model(s)” 對話框中,選擇 “simple” 並勾選 Logical View。
  3. 圖1、新增 UML 空白專案

    (點擊圖片鏈接看原圖)圖1、新增 UML 空白專案

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

    (點擊圖片鏈接看原圖)圖2、新增 Class Diagram

使用 CoR 設計樣式

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

類別

屬性

操作

說明

TroubleHandler

successor: TroubleHandler

setSuccessor(TroubleHandler): void
handleTrouble(Trouble): 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)類別。

  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的畫面。
  5. 圖 3、新增 CoR Pattern 的對話框

    (點擊圖片鏈接看原圖)圖 3、新增 CoR Pattern 的對話框

    圖 4、出現 CoR Pattern 的類別圖

    (點擊圖片鏈接看原圖)圖 4、出現 CoR Pattern 的類別圖

修改與新增類別

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

    (點擊圖片鏈接看原圖)圖 5、修改後的 CoR 的類別圖

將模型(Model)轉換(Transform)為 Java 程式碼

在執行轉換至 Java 程式碼之前,請先準備兩個步驟:

  • 確認所有要轉換的類別(Class)要產出的程式碼為 Java。以滑鼠雙擊在 “Project Browser” 中的一個類別,會出現該類別的屬性(properties)對話框。在 [General] 標籤中,點選 [Language] 欄位內的值為 Java,如下圖所示。
  • 已新增好 Eclipse 的 Java 專案(其它 IDEs 亦然),並指定好專案中的 source 資料夾。
  • 圖 5、圖 6、選擇類別的 [Language] 為 Java

    (點擊圖片鏈接看原圖)圖 6、選擇類別的 [Language] 為 Java

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

    (點擊圖片鏈接看原圖)圖 7、在 Eclipse 中設定好專案的 src 資料夾

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

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

    (點擊圖片鏈接看原圖)圖 8、Generate Package Source Code 對話框

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

    (點擊圖片鏈接看原圖)圖 9、從 EA Model 轉換到 Eclipse 的 Java 程式碼

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

    (點擊圖片鏈接看原圖)圖 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。
  3. 圖 11、Import Source Directory 對話框

    (點擊圖片鏈接看原圖)圖 11、Import Source Directory 對話框

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

    (點擊圖片鏈接看原圖)圖 12、從 Java 程式碼反轉回 EA Model 的類別圖


延伸參考

文章導覽

   

共有 4 則迴響

  1. 版主您好~
    我是一個大學生。
    剛開始學習UML對EA這套工具蠻有興趣。
    請問版主有此軟體的簡單範例或教學呢!
    謝謝您。

發佈回覆給「」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *