物件資料結構塑模
內容大綱 導論 類別圖與物件圖 物件資料結構塑模 類別圖建構案例一 類別圖建構案例二 結論
導論 物件資料結構塑模是以類別圖與物件圖表達系統之物件靜態的資料結構,但以類別圖為主。 由於在真實世界裡,物件的數量相當的龐大,為降低問題的複雜度,在系統分析時大多採用類別,而較少用物件。
導論 (c.2) 類別圖是用來描述系統中物件的類型(Type),以及類型間與子類型(Subtype)間之靜態關係。 此外,類別圖還需表示類別的屬性(Attributes)、操作(Operations)、以及物件連結所應遵守的限制等。 物件圖是用於描述一系統於某一時間點的系統影像(Snapshot),也就是靜態資料結構。 可藉由一時間序列的物件圖來表達系統的行為。
類別圖與物件圖 類別圖包含五種元件: 類別(Class) 屬性(Attribute) 操作(Operation) 關係(Relationship) 基數(Multiplicity)
類別圖與物件圖(c.2) 物件、類別與屬性 一個物件是問題領域(Problem Domain)中某個東西的實體或抽象概念,例如某一門課程、某位老師或某位學生等都是一個物件。 物件是一個封包(Package),它有名稱、屬性與操作。名稱是唯一的識別(Identity)或辨識值(Identifier Value) 。
類別圖與物件圖(c.3) 屬性表達物件之狀態、性質或特徵,而操作表達物件之行為。例如,某一課程是一個物件,它有課程編號與修課人數為其屬性,且有計算成績方式為該物件的操作。 物件之操作不能單獨存在,必須與一個物件封裝在一起。 一個物件可能有限制條件或商業規則(Business rules),以限定物件屬性的值或行為。
類別圖與物件圖(c.4) 一群相關物件的定義、描述或樣板(Definition, Description或 Template)稱為一個類別,類別具有名稱、屬性與操作,同一類別之物件具有相同屬性與操作。類別常由矩形表示。 物件亦常用矩形表示,名稱下加底線。
類別圖與物件圖(c.5) 類別間之關係與表示符號 相依(Dependency) 一般化(Generalization) 關聯(Association) 實現化(Realization)
類別圖與物件圖(c.6) 通常物件間並非完全獨立,彼此間需知道(Know)對方才能解決某一工作。 物件間之關係可分成兩種:靜態(Static)與動態(Dynamic)關係,前者意味著一物件知道另一物件之存在,此種關係並不給予權限去改變另一物件之資訊;而後者意味著兩物件間有相互溝通。
類別圖與物件圖(c.7) 相依關係是一種「使用」的關係(Using Relationship)。 其表達一類別會用到其他類別,且被用類別的改變可能會影響到使用它的類別,但反之不必然。 關係之箭頭是由使用類別指向被使用類別。
類別圖與物件圖(c.8) 一般化關係指的是一般性類別(稱超類別或父類別)與僅具有其某些特定性質之類別(稱次類別或子類別)間的關係。 一般化乃是類別間繼承的特性,其相反的特性即是特殊化(Specialization) 。 一般化意味著子類別繼承其父類別的特性, 尤其是父類別的屬性與操作。
類別圖與物件圖(c.9) “客戶”與二子類別“公司客戶”和“個人客戶”間之關係
類別圖與物件圖(c.10) 關聯關係是一種類別間之靜態結構關係, 描述類別與類別間之連結。 關聯關係意味著: 一類別之物件知道另一類別之物件的存在(Jacobson, et al., 1996)或 一類別之物件使用到另一類別之物件的服務, 但不是擁有此服務(Douglass, 1999)。
類別圖與物件圖(c.11) 關聯關係如同實體關係圖(Entity-Relation Diagram)上之關係,可以有兩個類別參與稱二元關聯(Binary Association),也可以有兩個以上的類別參與稱多元關聯(n-ary Association)。 一般關聯若沒有箭號即表示雙向關係,若在類別間之關聯加上箭頭便表示具有適航性(Navigability),表示可以依箭頭方向,由一個物件航向另一個物件,找到另一端之資訊。
類別圖與物件圖(c.12)
類別圖與物件圖(c.13) 類別間之關聯關係不見得一定要給予名稱, 但若覺得必要,常被採用的命名有兩種方式: 描述關係的本質(Nature of Relationship) 可用動詞或動詞片語表達 描述關係的角色(Role) 可用名詞或名詞片語表達
類別圖與物件圖(c.14)
類別圖與物件圖(c.15)
類別圖與物件圖(c.16) 在一個關聯關係中,常須表達有多少物件參與此關係,此種資訊與實體關係圖中之基數的表達相同。 基數(Multiplicity)表示有多少個物件參與該關聯, 這裡的“多少”稱為關聯角色的基數。 有三種可能,分別為一對一(1:1)、一對多(1:N)或多對多(M:N),其中以阿拉伯數字1表示一,以英文字母N或M表示多,或用“*”表示多。
類別圖與物件圖(c.17)
類別圖與物件圖(c.18) 聚集(Aggregation)關係與組合(Composition)關係均是關聯關係的一種特例。 兩者相同點是均描述整體(Whole)與其組件(Parts)之關係,也就是均表達一個“較大”類別之物件(整體)是由另一些“較小”類別之物件(組件)組成。 組合又是聚集的一種特例,組合有較強的限制,例如整體存在組件就存在,整體消失組件就消失,也就是,組件不能單獨存在。
類別圖與物件圖(c.19) 聚集與組合的表達符號相同處是兩者均在整體端加一個菱形,不同的是聚集用空心的菱形,而組合用的是實心的菱形。
類別圖與物件圖(c.20) 實現化(Realization)關係表達某一類別之行為是由另一類別來描述。 物件導向之領域中可允許某類別實現其他類別之行為,表示該實現類別必須順從某介面(Interface),但不需用繼承。
類別圖與物件圖(c.21)
類別圖與物件圖(c.22) 物件圖中有兩個主要元件 物件圖所表達的資訊主要以類別圖為基礎。 連結線 物件圖所表達的資訊主要以類別圖為基礎。 表現系統在某一時間點上各物件合作關係, 但不表達物件間之訊息傳遞等其他資訊,可以把物件圖想成沒有訊息傳遞的合作圖。
類別圖與物件圖(c.23) 物件圖
類別圖與物件圖(c.24) 客戶 客戶 訂單 商品 1 * * * 類別圖
物件資料結構塑模 物件資料結構塑模之主要活動包括: 原則上,一個使用個案需建立一個類別圖。 找出類別(或物件)與屬性 找出類別之操作 找出類別間之關係 建構類別圖與物件圖。 原則上,一個使用個案需建立一個類別圖。 物件資料結構塑模可從使用個案來分析系統所包含之類別(包含屬性與操作)、類別間之關係等以建構類別圖。
物件資料結構塑模(c.2) 物件資料結構塑模另一種做法是先進行物件互動行為塑模,再由所完成之互動圖(合作圖、循序圖)與使用個案圖做出類別圖。 這兩個方式若能交替進行會讓塑模工作進行得更順利。
物件資料結構塑模(c.3)
物件資料結構塑模(c.4) 確認類別、屬性與操作需從每一個使用個案之情節描述中找出名詞、名詞片語與代名詞(以下通稱名詞),並判斷該名詞是類別或是類別屬性。此外,從動詞找出類別可能之操作。 為便於分析之進行,建議先準備一張類別彙總表(如下表),配合分析之進行逐步將資料填入表中。
物件資料結構塑模(c.5) 類別彙總表
物件資料結構塑模(c.6) 確認類別之準則 可依下列步驟與準則找出類別: (1) 找出名詞 從檢視使用者個案的情節描述,找出所有的名詞,並將找出之名詞填入類別彙總表之名詞欄中。基本上,每個名詞都有可能成為類別,稱為準類別,但並非每一個名詞都可成為類別。 在分析的過程中,從人物角色、組織單元、物品、地點及概念等方向來尋找類別,此外與使用者高度的互動有助於找出有意義的類別,五種方向分別介紹如下:
物件資料結構塑模(c.7) a.人物角色:所有與系統有關的人所扮演的角色,如客戶、業務員。 b.組織單元:由人員組成之群體,如業務部、專案小組。 c.物品:系統中除了人、組織以外之實體,如機器、產品。 d.地點:人、組織、物品所在之地方,如廠房、倉庫。 e. 概念:系統中明顯可見,且有意義之非實體,如會計科目、成本。
物件資料結構塑模(c.8) (2)刪除不合適的名詞 若名詞有下列的情況,將不合適成為類別,應予以刪除: a. 名詞若有重複,只保留一個,其餘刪除。 b.名詞被用來描述一個類別之特徵、值或狀態。 c.名詞是一個處理程序的名稱或演算公式。 依據上述準則判斷名詞欄是否為類別,若是則在類別欄中打○,否則類別欄為空白。
物件資料結構塑模(c.9) 確認屬性之準則 類別之屬性可用問題領域之專業知識及原始表單之資料項目來判斷。 此外,屬性對類別要有意義,例如規格對產品是有意義,但對支票是無意義的。原則上,一個屬性應盡可能僅屬於一個類別,例如客戶出現在送貨單上,但客戶名稱只屬於客戶類別,而不必再將其歸屬到送貨單。 填表時,若名詞欄為某類別之屬性,則在類別屬性欄填入類別之名稱。
物件資料結構塑模(c.10) 確認操作之準則 操作應該是描述類別的主要行為或責任。若使用個案之情節是以事件條列式描述,也就是採用(主詞)+動詞+受詞的方式表示,則其中的動詞就可能是類別之操作。 原則上,類別圖之操作描述主要描述系統之行為,盡量避免描述其細部之程式邏輯,因為這些程式邏輯在設計階段經常會再修改,因此類別圖之操作描述可以直接從使用個案之描述中摘錄過來。
物件資料結構塑模(c.11) 主要的類別間之關係有 相依 一般化 關聯 實現化
物件資料結構塑模(c.12) 找出類別之關係可參考下列準則:假設有兩物件A與B,若存在下列情況,則物件A 與B間可能有關係: 一個類別會用到其他類別,且被用類別的改變可能會影響到使用它的類別,則這兩類別間可能有相依關係。 某一類別(稱次類別或子類別)僅具有另一類別(稱超類別或父類別)之某些特定性質,例如屬性與操作,則這兩類別間可能建立一般化的關係。
物件資料結構塑模(c.13) 一類別之物件知道另一類別之物件的存在,或一類別之物件使用到另一類別之物件的服務,但不是擁有此服務,則這兩類別間可能建立關聯關係。 在關聯關係中,若某一方由另一方聚集而成, 也就是有整體(Whole)與其組件(Parts)之關係, 則兩者間之關係可能是聚集或組合。 若某一類別之行為是由另一類別來描述,則這兩類別間可能建立實現化關係。
物件資料結構塑模(c.14) 若類別間有關聯關係,則需進一步分析有多少個案例參與該關聯 藉由該問題領域之專業知識或資料歸納等來判斷物件參與關聯之案例數目,以決定關聯基數為一對一,一對多,或多對多。
類別圖建構案例一 以送貨處理使用個案為例,說明如何建構類別圖。該個案中,業務部與客戶為行為者,情節如下: 1. 新增送貨單編號與日期 2. 輸入客戶資料(編號、名稱、地址與電話) 3. 輸入客戶之送貨資料(成品編號、品名、規格、數量、單價) 4. 更新成品庫存量 5. 查詢稅率 6. 計算送貨單各項金額 7. 儲存送貨單
類別圖建構案例一(c.2) 6. 計算送貨單各項金額 6.1設定折扣數和折讓金額 6.2 計算小計 = Σ(數量x單價) 6.3計算送貨單未稅金額=小計 × 折扣數-折讓金額 6.4計算稅額=送貨單未稅金額 × 稅率 6.5計算送貨單總金額=送貨單未稅金額 + 稅額
類別圖建構案例一(c.3) 建構類別圖須先確認類別與屬性,經逐一檢討上述情節描述之各名詞,並配合與使用者互動及領域知識判斷可知,送貨單是個原始表單,因此是一個類別。同理,業務部、客戶、送貨明細、成品及稅率等也都屬於類別。其餘詳下表。
類別圖建構案例一(c.4) 送貨處理類別彙總表
類別圖建構案例一(c.5) 依上表,共找出業務部、送貨單、客戶、送貨明細、成品及稅率等六個類別,再依據使用個案情節描述及從領域知識之判斷得知: 1. 業務部是啟動該使用個案之行為者,因此業務部與送貨單間有關聯,且箭頭由前者指向後者,表示如下圖。 1 N 業務部與送貨單之關聯
類別圖建構案例一(c.6) 2.送貨單與客戶、送貨明細與稅率間有關聯,因為前者需要後面三者之資訊,故關聯之箭頭分別由送貨單指向後面三者。 送貨單與客戶之關聯
類別圖建構案例一(c.7) 3. 送貨單與送貨明細之基數為一對一之關係,也就是一張送貨單只有一個送貨明細。 送貨單與送貨明細之關聯
類別圖建構案例一(c.8) 4. 送貨單與稅率之基數為多對一之關係,也就是一種稅率可適用於多張送貨單,但一張送貨單只有一種稅率。 送貨單與稅率之關聯
類別圖建構案例一(c.9) 5.送貨明細與成品間有關聯,因為前者需要後者之資訊,故關聯之箭頭由送貨明細指向成品。送貨明細與成品間之基數為多對多之關係,也就是一個成品可出現在多個送貨明細中,且一個送貨明細可擁有多個成品。 送貨明細與成品之關聯
類別圖建構案例一(c.10) 1 n 送貨處理類別圖
類別圖建構案例二 以線上訂購系統之五個使用個案為例,建構類別圖。 新增訂購項目個案 修改訂購數量個案 刪除訂購數量個案 取消採購訂單個案 確認採購訂單個案
類別圖建構案例二(c.2) 新增訂購項目個案
類別圖建構案例二(c.3) 修改訂購數量個案
類別圖建構案例二(c.4) 刪除訂購數量個案
類別圖建構案例二(c.5) 取消採購訂單個案
類別圖建構案例二(c.6) 確認採購訂單個案
類別圖建構案例二(c.7) 最後,將各使用個案之類別圖匯總成一個類別圖,並將分散在不同類別圖上的相同類別之屬性與操作合併(取聯集)。
類別圖建構案例二(c.8) 繪製物件圖
結論 應用類別圖與物件圖來表達一個系統類別間之靜態結構關係及類別內部之屬性與操作等資訊。 每一個使用個案需建立一個類別圖,且建構類別圖之資訊主要來自於使用個案圖及與使用者之互動。