B3 題型分析:動態行為塑模與 MVC 架構設計詳解
歷屆 B3 試題的考核核心固定為「將系統的需求(What)轉換為實作(How)」的關鍵橋樑。考題通常要求從文字描述推演到高階設計,最後建立低階 MVC 框架互動模型。
一、標準解題 3 步驟 (逐步精煉 Refinement)
Step 1: 撰寫事件流程 (Flow of Events)
將情境拆解為「參與者輸入 (Actor Input)」與「系統回應 (System Response)」交替的對話式敘述。
解題關鍵:只描述系統「做什麼(What)」,絕對不要寫出系統「如何做(How)」(如存入資料庫、呼叫某函數),必須保持外部使用者的黑箱視角。
Step 2: 繪製系統層級循序圖 (System-level Sequence Diagram)
左側畫上 Actor 的生命線,右側畫上單一個代表系統的方塊 :System。將 Step 1 的事件流程一條一條轉化為兩者之間的訊息傳遞 (Messages) 箭頭。
Step 3: 繪製三層式/MVC 循序圖 (3-Tier Sequence Diagram)
將系統黑箱打開,在頂部畫出 Actor、<<Boundary>>、<<Control>> 與 <<Entity>> 物件。
解題關鍵:Actor 絕對不能直接連線到 Control 或 Entity,必須透過 Boundary 傳遞;Boundary 通常也不會直接連線到 Entity,必須透過 Control 來協調。
二、MVC 四大物件圖示與定義 (Object Stereotypes)
考試若不使用 <<stereotype>> 文字標籤,必須畫出或認得以下專屬符號:
🚶
Actor (參與者)
獨立於系統之外,啟動使用案例的外部實體。
Boundary (邊界/View)
負責處理使用者互動、接收 Actor 輸入並顯示系統回應給 Actor。
Control (控制/Controller)
作為大腦,接收邊界物件的請求,指揮實體物件,管理控制流與交易。
Entity (實體/Model)
代表問題領域中的資料,儲存系統核心資料,接受控制物件的更新。
⚠️ 擴充考點警告: 設計 Controller 時,切忌創造「巨大的控制物件(Giant control objects)」包辦所有事情,這會降低系統的內聚力(Cohesion)。
三、循序圖進階語法與控制結構 (Advanced Syntax)
B3 常考直線互動,但必須準備好處理「分支」、「迴圈」與「物件生死」的進階語法:
- 同步呼叫 (Procedure call): 發送者等待接收者完成。實線 + 實心箭頭。
- 非同步通訊 (Asynchronous): 發送者不等待,繼續下一步(如寄Email)。實線 + 開口箭頭 (V型)。
- 回傳訊息 (Return message): 虛線 + 開口箭頭。
- 耗時訊息 (Travel delay): 箭頭線是斜的(往下傾斜),表示傳遞需要時間。
★ 物件的創建與銷毀 (Object Lifecycle)
- 建立 (Create): 畫一條虛線箭頭標註
<<create>>,箭頭必須直接指向被創建的物件方塊 (Object box) 本身,而非生命線。
- 銷毀 (Destroy): 標註
<<destroy>>,並在該物件生命線盡頭畫上一個大叉叉(X)。此類物件稱為「短暫物件 (Transient Object)」。
★ 邏輯框架 (Fragments / Frames)
alt
[enoughQty = true]
─── 執行庫存扣除與交易 ───▶
[else]
─── 顯示「庫存不足」訊息 ───▶
loop
[more item]
─── 掃描商品並加入購物車 ───▶
四、完整使用案例描述格式 (Use Case Description)
歷年通常只考寫 Flow of events,但若考題要求撰寫「完整描述」,必須背出以下欄位:
| 欄位名稱 | 意義與擴充考點 |
| Use case name & ID | 使用案例的名稱(動詞+名詞)與編號。 |
| Actor(s) | 參與此案例的外部實體。 |
| Brief description | 簡介此案例如何為組織帶來價值。 |
| Pre-Conditions | 觸發此案例前「必須滿足」的狀態(例如:使用者必須已登入)。 |
| Post-Conditions | 案例完成後系統的狀態變化。 |
| Flow of events | 正常的互動步驟(B3a 必考題)。 |
| Alternative flows & exceptions | 觸類旁通必背:處理錯誤或不同選擇的流程。記住,替代流程執行完通常不返回原流程,例外流程可能直接結束,這與 <<extend>> 不同。 |
五、終極擴充:溝通圖 (Communication Diagrams)
溝通圖與循序圖在 UML 中完全對等(循序圖看重時間,溝通圖看重結構連結)。若要求將 B3 情境畫成溝通圖,需知道:
- 不畫生命線,將物件方塊散佈在圖中,並用實線連接它們。
- 利用小箭頭與數字編號來表示時間順序(例如:
1: insert card, 2: ask password)。
- 條件與迴圈寫法:迴圈在數字旁加星號
1.1: *[condition] iterated message();條件判斷為 1.2: [condition] message()。