四、表達使用案例與實作的實現關係 (Use Case Realization)
(點擊圖片鏈接看原圖)圖 3、表達使用案例與實作的實現關係
- 若以物件導向的觀念實現使用案例,則系統內部的設計當以物件互動的合作 (collaboration),如 UML 循序圖 (sequence diagram)、溝通 (communication)圖等來表達。其作用為突顯該使用案例的功能,由 1 到 多個物件 (一般指位於中間層, middleware 內的物件),在系統執行期間 (run-time),透過訊息 (message)的傳遞,來達成功能的實現。
五、為每一個使用案例,設計並配置一個功能性的控制類別
(點擊圖片鏈接看原圖)圖 4、為每一個使用案例配置控制類別
- 控制類別在本例係使用 pure Java 撰寫。被部署 (deploy)於中間層 (middle-tier),擔任 MVC 架構中控制者 (controller)的角色。
- 控制類別的命名建議: 「使用案例名稱」+「_Control」。
- 以「訂購烏龜」使用案例為例,其控制類別的命名為「訂購烏龜_Control」。
- 控制類別內的操作 (operation)、在 Java 語言則稱為方法 (method),為來自於使用案例敘述的動作步驟說明。
- 在「訂購烏龜」UC 的動作步驟分析中,得以發掘出 "訂購烏龜_Control" 類別與參與者 (actor, 在本例為客戶)的互動次數共有三個:「列出烏龜清單()」、「結帳()」、「SaveOrder()」。
- 至於「計算訂購金額()」則為該物件內的私有方法 (private method),並不需要讓外界物件來操使用。
- 每一次的互動,即為系統的"代理人",也就是控制類別會提供讓參與者來呼叫 (call)的方法;另外也可以透過觀察在設計循序圖時,參與者與控制物件互動的過程中,其訊息 (message)的互動傳遞情形,再由其定義出控制類別的"方法"、"參數"、"回傳值"等。
(一般而言,這兩種方法會在設計過程中交替運用,並沒有絕對的先後關係。)
- 若為了要能確實將在 UML 表達的設計類別,與實作的程式碼同步,則同時需要設定控制類別未來要"code-gen"的程式語言,以及控制類別所在的命名空間 (name space)。
在本例中,控制類別要"code-gen"為 [Java], 命名空間 (name space) 則置於「com.order.control」package 內。
- 在 EA 的工具中,還需要指定"code-gen"時的 "name space" 根目錄為"com"。設定方式為在 [Project Browser] 視窗中,滑鼠右鍵點擊 [Logical View] → "com",選擇 [Code Engineering] → [Set as Namespace Root]。
- UML 類別與程式碼的直接對應,並期望藉由工具能達成一致性的同步關係,稱為軟體的正反向工程 (software forward/reverse engineering)。
- 建議中小型且開發人數不多的專案,不要為維護正反向工程 (保持一致性關係)耗費太多精力與時間。寧願將 UML 的設計圖,包括類別與循序圖,比較偏向是草稿式 (draft)的作法 (如此才能專注發揮腦力激盪的設計工作)。
而相關於精確性的細節 (例如類別的參數、回傳值等資料型態),則直接落實於程式碼的實作即可。
- 在本例中,只利用 EA 工具所設計的控制類別,只包括類別名稱與操作方法名稱。至於參數與回傳值等資料型態等,則直接在程式碼內實作即可。