利用 IBM RSA 實現 CoR 的塑模與產出程式碼

使用環境

  • IBM RSA(Rational Software Architect 6.0) Trial UML 工具
  • JDK 1.5

新增 UML 空白專案

首先開啟 Rational Software Architect(使用版本為 6.0),並切換 workspaces 至 \workspaces\GoFPatterns。

新增名為 CoRProject 的 UML 專案:

  1. 在工作區中,選擇File > New > Project > Other
  2. 選擇 UML Project 並選擇 Next
  3. 輸入 CoRProject 作為專案名稱,並選擇 Next
  4. 選擇範本為 “空白模型(Blank Model)”,檔名輸入為 CoRModel,然後在預設選項中勾選 在新模型中建立預設圖形,預設圖形選擇 開放式圖形(Freeform Diagram),選擇 Finish 完成。
  5. 圖1、新增 UML 空白專案

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

  6. 在 “模型瀏覽器(Model Explorer)” 視圖中,可以看到一個新增的 UML 空白專案。
  7. 圖2、Model Explorer 所顯示的空白 UML 專案

    (點擊圖片鏈接看原圖)圖2、Model Explorer 所顯示的空白 UML 專案

型樣瀏覽器(Pattern Explorer)

  1. 在 Windows Menu 中,選擇 顯示視圖 > Pattern Explorer (若沒有出現,則從 Other… 中選取。
  2. 在 Pattern Explorer 視圖中,展開 Design Patterns > Behavioral。
  3. 選擇 Chain of Responsibility Pattern。
  4. 要瞭解 Design Pattern 的結構圖與說明,在 Pattern Explore 視圖底部的 總覽 與 簡要說明 選項之間切換瀏覽。
  5. 圖3、Pattern Explorer 中所顯示的 CoR Pattern

    (點擊圖片鏈接看原圖)圖3、Pattern Explorer 中所顯示的 CoR Pattern

  6. 在 Pattern Explore 視圖中,將 CoR 拖曳到 Design Pattern 的空白編輯器中。
  7. 編輯器中會出現下圖的 CoR Pattern 的個體(instance)。
  8. 圖4、CoR Pattern 的個體(instance)

    (點擊圖片鏈接看原圖)圖4、CoR Pattern 的個體(instance)

使用 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. 在編輯器右側的 選用區(Palette) 中,點擊 Class Diagram 部分。
  2. 選擇 類別(Class) 並在編輯器中任意單擊,參考下圖 5 ,新增五個類別:”TroubleHandler”、”SmallTroubleHandler”、 ”MediumTroubleHandler”、 ”BigTroubleHandler”、 ”NullTroubleHandler”。
  3. 參考下圖 5 ,新增 “TroubleHandler” 類別的操作(operations): handleTrouble()。
  4. 將 “TroubleHandler” 拖曳到 CoR 個體中的 “Handler”,並同時將其操作(operations)拖曳到 “HandleRequest”。
  5. 將 ”SmallTroubleHandler”、 ”MediumTroubleHandler”、 ”BigTroubleHandler”、 ”NullTroubleHandler” 拖曳到 CoR 個體中的 “ConcreteHandler”。
  6. 在 CoR 個體的內容中顯示如下圖 5 。
  7. 圖 5、Composite Pattern 的個體(instance)內容

    (點擊圖片鏈接看原圖)圖 5、Composite Pattern 的個體(instance)內容

  8. 為了觀察 Developer 所新增的類別與 CoR Pattern 個體之間的關係,在編輯器中任一位置,右鍵選擇浮動功能表中的 過濾(Filter) > 顯示/隱藏關係 ,勾選列出所有的關係。
  9. 參考下圖,可以看到該設計樣式中的所有元素與其關係。
  10. 圖 6、CoR 設計樣式中的所有元素與其關係

    (點擊圖片鏈接看原圖)圖 6、CoR 設計樣式中的所有元素與其關係

 

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

  1. 在Model Explorer 中,展開 CoRProject。
  2. 同時點選Developer 所新增上述的五個類別。
  3. 右鍵單擊任一個所選擇的類別,並選擇 轉換(Transform) > 執行轉換 > UML至Java。
  4. 圖 7、執行轉換(Transform)至 Java 程式碼

    (點擊圖片鏈接看原圖)圖 7、執行轉換(Transform)至 Java 程式碼

  5. 在 執行轉換 視窗中,選擇 Target 標籤,單擊 建立新目標儲存器(Create new Target Container)。
  6. 輸入新增的專案名稱為 CoRTransformedJava,其餘相關設定參考下圖。
  7. 圖 8、新增 Java 專案

    (點擊圖片鏈接看原圖)圖 8、新增 Java 專案

  8. 執行轉換作業,此時 RSA 將模型轉換為 Java 程式碼,雙擊已轉換的 Java 檔名,可以查看已轉換的程式碼(將視圖切換至套件瀏覽器(package explorer)),參考如下圖。
  9. 圖 9、從模型轉換至 Java 的程式碼

    (點擊圖片鏈接看原圖)圖 9、從模型轉換至 Java 的程式碼

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

    (點擊圖片鏈接看原圖)圖 10、修正 Java 程式碼、補上實做細節、完成編譯並執行

     

反轉(Reverse) Java 程式碼至 RSA 的 Model

  1. 將視圖切換回模型瀏覽器(Model explorer)。
  2. 展開 CoRProject,在 CoRModel 套件(package)內滑鼠按右鍵新增一個類別圖,名稱為 ReversedJava。
  3. 將 CoRTransformedJava 專案 src 套件內所有的 Java 程式,全部拖曳至上述所新增的類別圖畫布內。
  4. 從 Java 程式碼反轉至 EA Model 的類別圖如下圖所示。

    圖 11、從Java程式碼反轉回 RSA 的 Model

    (點擊圖片鏈接看原圖)圖 11、從Java程式碼反轉回 RSA 的 Model


延伸參考

文章導覽

   

共有 6 則迴響

  1. 你好:
    我想把Class diagram轉成SQL statment的文字檔來creat table.
    目前只會用EA先轉成java code.接下來有什麼工具或步驟可以用呢?
    謝謝.

  2. 你好:
    我是義守資工碩士班的學生
    由於最近在研究關於UML及MDA
    剛好看您的文章
    讓我很容易了解MDA的架構以及lifecycle等問題
    覺得受用無窮
    很感謝您

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

發佈留言必須填寫的電子郵件地址不會公開。