OOT (ITP4909) 終極考試重點筆記
A1: 結構塑模 - UML 類別圖 (Class Diagram)
考核重點:根據情境描述繪製詳細的類別圖,包含類別、屬性、方法、關聯與繼承結構。
標準解題步驟 (文本分析法)
1. 圈出名詞 (Nouns)區分「獨立實體 (Class)」與「特徵 (Attribute)」。
2. 圈出動詞 (Verbs)尋找實體間的動作,轉化為「關聯名稱 (Association Name)」。
3. 決定多重性 (Multiplicities)如 1..* (一個或多個)、0..* (零個或多個)、1 (剛好一個)。
4. 建立繼承 (Inheritance)尋找「是一種 (is-a)」的關係,抽出共通屬性建構父類別。
類別方塊 (Class Box) 必背定義
- modelNumber: String
+ totalCount: int
# status: String
+ calculateSpecs(): void
+ getModel(): String
+ getLimit(): int
- 頂層 (Name):斜體代表抽象類別;標註
<<interface>> 代表介面。
- 中層 (Attributes):格式為
可見性 變數名: 型態。
- 底層 (Operations):格式為
可見性 方法名(參數): 回傳型態。若為斜體代表抽象方法。
- 可見性:
+ (Public), - (Private), # (Protected), ~ (Package)
- 靜態 (Static):屬性或方法加上底線代表類別層級 (Class Scope / Shared)。
必背關係線條與符號
| 關係 | 符號外觀 | 說明 |
| 一般關聯 (Association) | A ────▶ B | 實線連接。開口箭頭代表單向導覽性 (Navigability),箭頭指的方向是尋找的方向。 |
| 一般化/繼承 (Generalization) | Sub ────▷ Super | 實線 + 空心三角箭頭指向父類別。 |
| 實現介面 (Realization) | Class - - - - ▷ Interface | 虛線 + 空心三角箭頭指向介面。 |
| 聚合 (Aggregation) | 整體 ◇──── 部分 | 實線 + 空心菱形畫在「整體」端。(Has-a,部分可獨立存活) |
| 合成 (Composition) | 整體 ◆──── 部分 | 實線 + 實心菱形畫在「整體」端。(強烈依存,部分隨整體死亡) |
| 相依 (Dependency) | A - - - - ▶ B | 虛線 + 開口箭頭。A 的運作依賴 B 的變更。 |
A2: 實作模型 - UML 轉 Java 程式碼
考核重點:將 UML 類別圖(包含繼承、一對多關聯)轉寫為 Java 程式碼,並寫出 Test.java 的輸出。
一對多關聯 (1..*) 標準實作公式 (絕對必考)
public class Restaurant {
private Vector _menus;
public Restaurant() {
_menus = new Vector();
}
public void addMenu(Menu menu) {
_menus.add(menu);
}
public Enumeration getMenus() {
return _menus.elements();
}
}
Test.java 逆向工程與預期輸出考點
- Enumeration 走訪轉型:
while (e.hasMoreElements()) { Module m = (Module) e.nextElement(); }
- 多型判斷 (instanceof):
遇到 if (module instanceof EnrichmentModule) 表示只過濾出特定的子類別進行處理。
- 隱藏建構子:看到
Test.java 裡寫 new Class("A", 123),就要在答案的 Class 中補上對應參數的 Constructor。
- toString() 覆寫:如果
System.out.println(obj) 直接印物件,記得在類別中加上 public String toString() { return ...; }。
A3: 行為塑模 - 活動圖與狀態機圖
考核重點:將操作流程轉化為「注重動作先後」的活動圖,與「注重系統狀態」的狀態機圖。
活動圖 (Activity Diagram) 語法
- 起始/結束:實心黑點 (Initial) ➔ 同心圓 (Final)。
- 動作節點 (Action):圓角矩形,命名為動詞+名詞 (如: enter password)。
- 分支/決策 (Decision):空心菱形,所有離開的箭頭必須附帶 [條件 Guard],如
[correct] 或 [else]。
- 迴圈 (Loop):將帶有
[錯誤條件] 的箭頭拉回先前的動作節點(如密碼錯誤退回)。
- 並行 (Concurrency) (擴充):使用粗黑線表示分岔 (Fork) 或會合 (Join)。
★ 狀態機圖 (State Machine) 致命考點 ★
狀態命名必須是形容詞或 V-ing (如 Waiting for login, Processing)。
箭頭上的轉換標籤 (Transition) 必須嚴格遵守黃金公式:
Event [Guard Condition] / Action
(觸發事件 [防衛條件] / 系統反應動作)
範例:press button [cancel button pressed] / display login screen
擴充考點 (內部動作):若題目描述進入狀態時會做某事,須在狀態框內寫:
entry / 動作 (進入時執行一次)
do / 動作 (停留時持續執行)
exit / 動作 (離開時執行一次)
B1: 需求塑模 - 使用案例圖 (Use Case Diagram)
必背名詞定義
- 基礎使用案例 (Base Use Case):能獨立存在,由參與者直接觸發以達成完整目標(如: Make booking)。
- 抽象使用案例 (Abstract Use Case):無法獨立存在,專門被其他案例呼叫,本身不是完整目標(如: Login)。
- 主要參與者 (Primary Actor):為達成自身目標主動使用系統的外部實體(如: Customer)。
- 次要參與者 (Secondary Actor):扮演支援角色,協助系統達成目標的外部系統(如: Payment Gateway)。
箭頭與關係語法 (最易失分區)
| 關係名稱 | 畫法與方向 | 說明 |
| 包含 (Include) |
Base - - <<include>> - - ▷ Included |
虛線+開口箭頭。方向:主要動作 ➔ 共用/必定執行的動作。 |
| 擴充 (Extend) |
Extending - - <<extend>> - - ▷ Base |
虛線+開口箭頭。方向:附加的選擇性動作 ➔ 主要動作。 |
| 系統邊界 (Boundary) |
大矩形框 |
Actor 絕對不能畫在框內!Use Case 全在框內。 |
B2: 領域塑模 - 文本分析與初步類別圖
(B2a) 候選類別 6 大合法分類 (必須死背英文)
- Tangible things (實體事物):看得見摸得著 (如 Classroom, Coffee)
- Conceptual things (概念事物):非物理存在的概念 (如 Course, Subscription)
- Events / Transactions (事件/交易):發生在特定時間 (如 Booking, Payment)
- Roles played (扮演角色):人或組織扮演的角色 (如 Customer, Manager)
- Outside organizations (外部組織):外部機構 (如 Supplier, Publisher)
- Other systems (其他系統):互動的外部電腦系統 (如 Payment Gateway)
(擴充考點) 應被排除的名詞與 7 大理由 (Reasons for Omission)
若被問「為何某名詞不能當類別」,請寫:
- Redundant classes (重複/同義):與其他詞同義。
- Irrelevant classes (不相關):超出系統範圍。
- Vague classes (模糊):定義不清 (如 information)。
- Attributes (屬性):只是別人物件的特徵 (如 ID, address)。
- Operations (操作):實際上是動作 (如 process)。
- Implementation constructs (實作細節):技術名詞 (如 database)。
- Instances (實例):具體的資料內容而非藍圖 (如 Hong Kong Bank)。
★ B2b 初步類別圖陷阱 ★
題目通常要求 NOT required to show attributes/operations。請只畫最簡單的空矩形(只有類別名稱)。寫出屬性不但沒分,還可能因為寫錯被扣分!記得補上動詞(關聯名稱)與連線即可。
B3: 架構設計 - MVC 循序圖與溝通圖
考核重點:事件流程 (Flow of events) 與 三層式 (3-Tier) 循序圖設計。
解題守則與 MVC 圖示
- 事件流程 (Flow of events):寫出「參與者輸入」與「系統回應」。只寫 What,不寫 How(不要寫存入資料庫等實作細節)。
- Boundary (邊界物件):負責接收 Actor 輸入並顯示回應(畫法:圓圈左側連著 T 型線)。
- Control (控制物件):作為大腦,協調流程(畫法:圓圈頂部帶箭頭)。切忌設計出包辦所有的巨大控制物件 (Giant control object)。
- Entity (實體物件):儲存資料(畫法:圓圈底部帶底線)。
- 連線規則:Actor 必須透過 Boundary 傳遞;Boundary 必須透過 Control 協調 Entity。
循序圖 (Sequence Diagram) 進階語法
- 同步呼叫:實線 + 實心箭頭。
- 非同步 (Asynchronous):實線 + 開口 V 型箭頭(發送後不等待)。
- 回傳訊息:虛線 + 開口箭頭。
- 物件建立與銷毀:虛線標註
<<create>> 且箭頭直指物件方塊本身。銷毀時標註 <<destroy>> 並在生命線末端打 X。
- 邏輯框架 (Fragments):
alt (條件分支):大方框內用虛線分隔,標示防衛條件 [condition] 與 [else]。
loop (迴圈):大方框包圍,標示繼續的條件 [more item]。