方法論定位
Coad-Yourdon 方法建立在資訊模型化、面向物件程式設計、知識庫系統基礎上,分為 OOA (分析) 與 OOD (設計) 兩階段。分析階段輸出概念模型,由相關類別組成,採自頂向下分解或自底向上構造。
OOA 兩大核心任務
- 形式化說明應用問題 → 識別軟體系統基本構成物件、規則與約束。
- 明確規定物件如何協作完成指定功能 → 定義訊息流、協作契約。
五層次詳細步驟與產出 (共 15 步驟)
層次 1:類別與物件識別 (3 步驟)
- 從應用領域出發:逐步確定形成整個應用基礎的類別與物件。
- 分析目標系統責任:系統必須做什麼、負責什麼業務結果。
- 調查系統環境:外部介面、使用者角色、法規約束、技術平台,確定有用的類別/物件。
層次 2:結構識別 (3 步驟)
- 識別一般-特殊結構:基類別 (一般) → 衍生類別 (特殊),is-a 關係。
- 識別整體-部分結構:聚合 (整體-部分,生命週期獨立) / 組合 (強擁有,生命週期綁定)。
- 繪製結構圖:UML 類別圖呈現繼承與聚合/組合關係。
層次 3:屬性識別 (4 步驟)
- 對每個物件識別所需屬性:狀態資訊、業務意義。
- 安排屬性至適當類別:避免重複、確保內聚。
- 識別實例連接:物件間導航路徑 (如 Order → Customer)。
- 檢查與定義限制:唯讀、值域、格式、單位、預設值、衍生屬性。
層次 4:服務識別 (3 步驟)
- 識別物件狀態:生命週期狀態 (新建/啟用/暫停/關閉)。
- 識別必要服務:狀態轉換觸發操作、查詢、計算、外部整合。
- 識別訊息連接與描述服務:參數、回傳、前置/後置條件、例外、序列圖雛形。
層次 5:主題識別 (2 步驟)
- 識別主題:大型模型劃分邊界、提供整體框架。方法論未給具體識別技巧,建議依業務能力/子領域/團隊所有權劃分。
- 改進細化並加入模型:迭代調整主題邊界、確保涵蓋所有類別。
結構圖示範 (UML 符號)
一般-特殊 (繼承):
[Vehicle] ← [Car]、[Truck]、[Motorcycle]
▲
│
整體-部分 (聚合/組合):
[Order] ◆——— [OrderItem] (組合:訂單消失,明細消失)
[Department] ◇——— [Employee] (聚合:部門消失,員工可轉移)
屬性定義範本
| 欄位 | 說明 | 範例 |
| 名稱 | 業務術語 | TotalAmount |
| 型別 | 資料型別 | decimal |
| 可見性 | public/protected/private | public |
| 限制 | 唯讀/範圍/格式 | >= 0, 小數 2 位 |
| 描述 | 業務含義說明 | 訂單總金額,含稅 |
| 衍生規則 | 是否計算而來 | Sum(OrderItem.Subtotal) |
服務描述範本
| 欄位 | 說明 | 範例 |
| 名稱 | 動詞短語 | CalculateTotal |
| 觸發事件 | 訊息/狀態變更 | OrderItemAdded |
| 前置條件 | 執行前必須滿足 | Order.Status == Draft |
| 後置條件 | 執行後保證成立 | TotalAmount 更新 |
| 參數/回傳 | 簽章 | void CalculateTotal() |
| 例外 | 可能拋出 | InvalidOperationException |
主題劃分實務建議
- 依業務能力 (Business Capability) 劃分:訂單管理、庫存管理、客戶管理、帳務管理。
- 依子領域 (DDD Subdomain) 劃分:核心域、支援域、通用域。
- 依團隊所有權 劃分:單一團隊端到端負責的主題。
- 主題非任意概念,必須對應真實業務邊界。