UML 轉 Java (A2) 完整實作筆記

將設計模型落地為實際程式碼的關鍵指南

綜合歷屆試卷(2016至2023年)的分析,A2 試題的考核核心已完全固定為「將 UML 結構模型(類別圖)轉換為程式碼」。題型統一為:給定一張 UML 類別圖與一段 Java 測試程式(Test.java),要求學生以 Java 語言實作指定的類別(Classes),並寫出該測試程式的預期輸出(Expected output)。

這是在考核學生是否具備將高階的物件導向設計(OOAD)「落地」為實際程式碼的能力。

一、 學生應如何解題(標準解題步驟)

  1. 剖析類別圖的三層結構: 第一層決定名稱與繼承(extends/implements),第二層決定屬性,第三層決定操作。
  2. 辨識並實作關聯關係(Associations): 觀察多重性。若為一對多 (1..*),必須在「一」端宣告集合物件 (如 Vector) 並實作 add() 與 Enumeration 方法。
  3. 從 Test.java 中「挖寶(逆向工程)」:
    • 看到 new ClassName(a, b, c) ➜ 補上對應建構子。
    • 看到 setSomething/getSomething ➜ 補上 Getter/Setter。
  4. 處理多型(Polymorphism)與轉型: 注意父類別陣列裝載子類別物件,以及強制轉型與 instanceof 判斷。
  5. 追蹤數據並寫出預期輸出: 在紙上畫表記錄物件屬性值,跟著迴圈與數學運算,精準推導 println 的結果。

二、 需要背誦的知識與「觸類旁通」全面擴充考點

1. 類別與介面的定義

2. 屬性與可見性

3. 建構子與繼承

4. 關聯關係的全面實作 (絕對重點 🔥)

一對多 (1..*) 實作:

// 在「一」的一方
private Vector _modules;
public ClassName() { _modules = new Vector(); }
public void addModule(Module m) { _modules.add(m); }
public Enumeration getModules() { return _modules.elements(); }

5. 測試程式解讀與輸出