本章主軸#
本章描述一個真實案例:作者要為某設計中心撰寫一個「資訊萃取工具」,將 CAD/CAM 系統中的鈑金件資料餵給專家系統(expert system)。困難之處在於 CAD/CAM 系統本身會持續演進,因此程式碼必須具備高度彈性。
CAD = Computer Aided Drafting(電腦輔助繪圖),CAM = Computer Aided Manufacturing(電腦輔助製造)。
業務背景#
- 工程師使用 CAD/CAM 系統繪製鈑金件
- 專家系統需要這些幾何資訊來決定製造程序,控制數值控制機台(NC machine)
- 專家系統開發昂貴、不易修改,預期壽命長於任何單一版本的 CAD/CAM 系統
- 因此資訊萃取工具必須能輕易適配未來新版的 CAD/CAM 系統
專家系統的核心是把「人類專家的決策規則」搬進電腦。建立規則模型才是真正困難的工作;實作只是後續步驟。

Figure 3-1: 一片鈑金件範例——上面有 slot、hole、cutout、special 與 irregular 等特徵
領域詞彙#
鈑金特徵(features)#
| 名稱 | 描述 |
|---|---|
| 槽(Slot) | 等寬直線切口,端點可方為圓,由銑刀加工 |
| 孔(Hole) | 圓形切孔,由鑽頭加工 |
| 切口(Cutout) | 方形切口,由高功率沖頭打出 |
| 特殊形(Special) | 預製的非標準形狀,由專用沖頭一次成型,例如電源插座孔 |
| 不規則形(Irregular) | 上述以外的所有形狀,需多種工具組合加工 |
其他術語#
- 幾何(geometry):鈑金件外觀、特徵位置與尺寸的描述
- 零件(part):鈑金件本體
- 資料集/模型(dataset / model):CAD/CAM 資料庫中儲存幾何的記錄集合
- NC 機台與 NC 集(NC set):餵給數控機台的指令集合
系統要做什麼#
- 分析鈑金件的幾何
- 根據其特徵決定製造程序
- 產生 NC 集指令
- 將指令送給製造設備執行
為何難寫?特徵之間有順序限制#
不能單純地對每個特徵獨立產生 NC 指令再串起來。特徵的順序往往會決定加工成敗。
書中以「一個切口加上兩條穿過它的槽」為例:

Figure 3-2: 一個 cutout 與兩個 slots——左為成品外觀,右為實際由三個特徵組成
- 若先做槽再做切口,沖頭撞下去時會把已被槽弱化的金屬撞彎

Figure 3-3: 錯誤順序——先做槽再撞 cutout,鈑金被弱化而彎曲
- 必須先做切口、再做槽,因為銑刀施的是側向壓力,不會造成形變

Figure 3-4: 正確順序——先打 cutout,再用銑刀切槽,避免變形
幸好作者的工作只負責萃取資訊,這些順序規則由專家系統處理。
真正的挑戰:應對 CAD/CAM 的變動#
- 公司目前使用 V1,新版 V2 即將推出,兩者不相容
- 因技術與行政原因,無法把模型從一版轉換到另一版
- 專家系統必須同時支援 V1 與 V2
- 而且 V3 也已知會出現,但時程與內容皆未定
軟體架構的角色之一,就是隔離高變動風險的部分,保護其他部分不受波及。
高層架構與類別圖#
- 應用程式負責初始化,告訴專家系統使用哪一版 CAD/CAM
- 專家系統透過共同的
Model類別與 V1 / V2 溝通 Main類別實例化正確版本的Model(V1Model或V2Model)

Figure 3-5: 整體解法的高層架構圖

Figure 3-6: ExpertSystem 透過 Model 類別與 V1Model/V2Model 互動的類別圖
在「幾何萃取(geometry-extractor)」這層需要多型;但在「特徵層」不需要——因為專家系統需要知道每個特徵的具體型別來決定加工順序。
兩種版本的本質差異#
V1:函式庫式#
V1 是一堆子程式集,呼叫流程冗長:
- 開啟模型 XYZ → 取得 handle
H - 查詢模型
H的特徵數量N - 對每一個特徵
i:- 取得 ID
- 查詢特徵類型
- 依類型再呼叫對應子程式取得 X、Y 等資訊
V1 完全不是物件導向:呼叫者必須手動維護所有上下文,每個查詢都要記住自己面對的是哪種特徵。
V2:物件導向式#
- V2 採物件導向設計,模型本身是一個物件
- 模型物件中包含一組特徵物件(slot、hole、cutout、special、irregular 各對應一個類別)
- 命名前綴
OOG代表 object-oriented geometry

Figure 3-7: V2 系統的特徵類別——OOGFeature 衍生出 OOGSlot、OOGHole 等
本章重點#
- 真實世界的軟體常常需要在持續演進的外部系統間扮演橋樑
- 領域詞彙必須先釐清,否則設計討論會失準
- 變動點(這裡是 CAD/CAM 版本)是架構決策的核心驅動因素
- 同樣的資訊以截然不同的方式儲存於 V1 與 V2,是後續引入設計模式的關鍵伏筆