使用環境
- IBM RSA(Rational Software Architect 6.0) Trial UML 工具
- JDK 1.5
新增 UML 空白專案
首先開啟 Rational Software Architect(使用版本為 6.0),並切換 workspaces 至 \workspaces\GoFPatterns。
新增名為 CoRProject 的 UML 專案:
- 在工作區中,選擇File > New > Project > Other。
- 選擇 UML Project 並選擇 Next。
- 輸入 CoRProject 作為專案名稱,並選擇 Next。
- 選擇範本為 “空白模型(Blank Model)”,檔名輸入為 CoRModel,然後在預設選項中勾選 在新模型中建立預設圖形,預設圖形選擇 開放式圖形(Freeform Diagram),選擇 Finish 完成。
- 在 “模型瀏覽器(Model Explorer)” 視圖中,可以看到一個新增的 UML 空白專案。
型樣瀏覽器(Pattern Explorer)
- 在 Windows Menu 中,選擇 顯示視圖 > Pattern Explorer (若沒有出現,則從 Other… 中選取。
- 在 Pattern Explorer 視圖中,展開 Design Patterns > Behavioral。
- 選擇 Chain of Responsibility Pattern。
- 要瞭解 Design Pattern 的結構圖與說明,在 Pattern Explore 視圖底部的 總覽 與 簡要說明 選項之間切換瀏覽。
- 在 Pattern Explore 視圖中,將 CoR 拖曳到 Design Pattern 的空白編輯器中。
- 編輯器中會出現下圖的 CoR Pattern 的個體(instance)。
(點擊圖片鏈接看原圖)圖3、Pattern Explorer 中所顯示的 CoR Pattern
(點擊圖片鏈接看原圖)圖4、CoR Pattern 的個體(instance)
>
使用 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)類別。 |
- 在編輯器右側的 選用區(Palette) 中,點擊 Class Diagram 部分。
- 選擇 類別(Class) 並在編輯器中任意單擊,參考下圖 5 ,新增五個類別:”TroubleHandler”、”SmallTroubleHandler”、 ”MediumTroubleHandler”、 ”BigTroubleHandler”、 ”NullTroubleHandler”。
- 參考下圖 5 ,新增 “TroubleHandler” 類別的操作(operations): handleTrouble()。
- 將 “TroubleHandler” 拖曳到 CoR 個體中的 “Handler”,並同時將其操作(operations)拖曳到 “HandleRequest”。
- 將 ”SmallTroubleHandler”、 ”MediumTroubleHandler”、 ”BigTroubleHandler”、 ”NullTroubleHandler” 拖曳到 CoR 個體中的 “ConcreteHandler”。
- 在 CoR 個體的內容中顯示如下圖 5 。
- 為了觀察 Developer 所新增的類別與 CoR Pattern 個體之間的關係,在編輯器中任一位置,右鍵選擇浮動功能表中的 過濾(Filter) > 顯示/隱藏關係 ,勾選列出所有的關係。
- 參考下圖,可以看到該設計樣式中的所有元素與其關係。
(點擊圖片鏈接看原圖)圖 5、Composite Pattern 的個體(instance)內容
將模型(Model)轉換(Transform)為 Java 程式碼
- 在Model Explorer 中,展開 CoRProject。
- 同時點選Developer 所新增上述的五個類別。
- 右鍵單擊任一個所選擇的類別,並選擇 轉換(Transform) > 執行轉換 > UML至Java。
- 在 執行轉換 視窗中,選擇 Target 標籤,單擊 建立新目標儲存器(Create new Target Container)。
- 輸入新增的專案名稱為 CoRTransformedJava,其餘相關設定參考下圖。
- 執行轉換作業,此時 RSA 將模型轉換為 Java 程式碼,雙擊已轉換的 Java 檔名,可以查看已轉換的程式碼(將視圖切換至套件瀏覽器(package explorer)),參考如下圖。
- 轉換之後,不可避免會有一些錯誤發生,例如型別(Type)、該被匯入(import)的參考類別、回傳值 …等。修正錯誤並補充細節,填上該實做每一個 method 的演算邏輯。修正之後的 Java 程式碼可以正確完成編譯(compile)。
- 新增原來在 CoR Pattern 所沒有的類別,包括 Trouble, TroubleMaker,以及新增一個測試類別: CoRAppMain,可以在 Console 下顯示測試結果。該測試類別首先利用亂數模擬產生從 “小、中、大” 與 “NULL” 的各類麻煩,然後新增四個麻煩處理者,專責來處理名為 “敗家子” 的 TroubleMaker 所製造的麻煩,並且將其四個處理者串鍊(chain)在一起,分門別類來處理各類的麻煩。
(點擊圖片鏈接看原圖)圖 7、執行轉換(Transform)至 Java 程式碼
(點擊圖片鏈接看原圖)圖 9、從模型轉換至 Java 的程式碼
反轉(Reverse) Java 程式碼至 RSA 的 Model
- 將視圖切換回模型瀏覽器(Model explorer)。
- 展開 CoRProject,在 CoRModel 套件(package)內滑鼠按右鍵新增一個類別圖,名稱為 ReversedJava。
- 將 CoRTransformedJava 專案 src 套件內所有的 Java 程式,全部拖曳至上述所新增的類別圖畫布內。
- 從 Java 程式碼反轉至 EA Model 的類別圖如下圖所示。
※ 延伸參考
- 關於 RSA Model 與 Java 原始程式碼,請至「HSDc—檔案下載區」下載。
- 【設計樣式】「Chain of Responsibility」的範例與說明
Hi Peter Hu:
EA 也可以從 Class 圖轉 SQL DDL 的。
參考一下其附帶文件,不難的。
你好:
我想把Class diagram轉成SQL statment的文字檔來creat table.
目前只會用EA先轉成java code.接下來有什麼工具或步驟可以用呢?
謝謝.
Hi 510:
能對您的研究有幫助,我也很欣慰。 ^^
你好:
我是義守資工碩士班的學生
由於最近在研究關於UML及MDA
剛好看您的文章
讓我很容易了解MDA的架構以及lifecycle等問題
覺得受用無窮
很感謝您
Hi jack:
“號稱” 四段。 !^^
1/20演講很精彩 想知道老師圍棋的段數