2015-2023 歷屆試題深度分析與擴充
使用由下而上(Bottom-up)或由上而下(Top-down)的方法尋找共通點,建立 Generalization 關係。如果發現有幾種類別擁有相同的屬性(例如:工業機器人、服務機器人都有「型號」),應將共通屬性抽取出來建立一個父類別(如:Robot),並畫上繼承關係。
雖然歷屆 A1 試題通常會備註「不需要加入關聯類別(association classes)或限定詞(qualifications)」,且往往只要求畫出類別名稱和屬性,但為了觸類旁通並防範考題突襲,你必須背熟以下 UML 類別圖的所有語法、符號與隱藏考點:
一個標準的類別(Class)以矩形表示,並嚴格區分為三個區塊。以下示範歷屆必考的屬性與可見性標示:
<<interface>>
代表介面,或者畫成圓圈 (Lollipop notation)。
可見性 變數名: 型態。加上底線代表靜態變數 (Static/Class Scope)。可見性 方法名稱(參數名稱: 參數型態): 回傳型態。
_students.put(new Key(id), student);
A1 最容易失分的地方在於「箭頭畫錯」或「菱形畫反」。請牢記以下圖解與意義:
| 關係名稱 | UML 符號外觀 (文字模擬) | 考核點與解說 |
|---|---|---|
| 一般關聯 (Association) | ClassA ────▶ ClassB | 實線連接。可加上開口箭頭表示「單向導覽性(Navigability)」。必須標示多重性與關聯名稱。 |
| 導覽性 (Navigability) | User ────> Password | 限制了物件尋找的方向。舉例來說,「User(使用者)」指向「Password(密碼)」,這意味著可透過 User 物件找到對應的 Password 物件,但無法反向找到 User。 |
| 繼承 / 一般化 (Generalization) | SubClass ────▷ SuperClass | 實線 + 空心三角箭頭 指向父類別。表示「是一種 (Is-a)」關係。A1 題幾乎必考。 |
| 實現介面 (Realization) | Class - - - - ▷ Interface | 虛線 + 空心三角箭頭 指向介面。表示類別承諾實作該介面的所有方法。 |
| 聚合 (Aggregation) | 整體 ◇──── 部分 | 實線 + 空心菱形 (畫在「整體」那一端)。表示「擁有(Has-a)」關係,但部分可以獨立存在。 |
| 合成 (Composition) | 整體 ◆──── 部分 | 實線 + 實心菱形 (畫在「整體」那一端)。強烈的聚合關係,整體的消亡會連帶銷毀部分。 |
| 相依 (Dependency) | ClassA - - - - ▶ ClassB | 虛線 + 開口箭頭。表示 ClassA 的運作依賴於 ClassB 的變更。 |
{or} 表示互斥的關聯,或者
{persistent} 表示需要存入資料庫持久化。
總結備考策略: 在考場上面對 A1 時,「畫圖的符號精確度」是得分關鍵。你必須將類別矩形、關係線條種類、多重性位置當作數學公式一樣死背下來。任何箭頭畫錯都會導致嚴重失分。