第9章: 類別圖與物件圖 - 9lib TW

文章推薦指數: 80 %
投票人數:10人

物件圖和類別圖的差異在於類別圖是類別和其關係建立的抽象模型,物件圖是在特定時間點建立的實例。

換句話說,物件圖比類別圖更接近實際的系統行為,其主要目的如下所示 ... menu Upload menu Loading... Home &nbsp 其他 第9章:  類別圖與物件圖 68  57  Download (0) 顯示更多(67頁) 顯示更多(頁) 立即下載(68頁) 全文 (1)第9章類別圖與物件圖 9-1類別圖與物件圖的基礎 9-2類別圖的符號 9-3類別關係 9-4物件圖 9-5繪製類別圖與物件圖 9-6綜合練習 (2)9-1類別圖與物件圖的基礎-說明 類別是物件導向軟體系統的核心,UML類別圖 (ClassDiagram)可以用來描述軟體系統靜態結 構的類別和類別關係(Relationships),它是我 們最常使用的UML圖形。

物件圖(ObjectDiagram)就是類別圖的實例 (Instances),其基本觀念和類別圖相同,不過 ,物件圖描述的系統靜態結構是系統某一時間點 的快照(Snapshot)。

(3)9-1類別圖與物件圖的基礎-4+1觀點 類別圖與物件圖可以呈現4+1觀點軟體系統模型 (4)9-1類別圖與物件圖的基礎-類別圖的目的 類別圖的主要目的是建立軟體系統靜態觀點的模 型,它是唯一可以直接對應物件導向程式語言的 UML圖形,其主要目的如下所示: •建立物件導向分析和設計階段的領域、概念、分析和 設計模型。

•描述系統的責任(Responsibilities)。

•類別圖是套件、元件和部署圖的基礎。

•支援UML塑模工具將類別圖轉換輸出成程式碼,或是 反向工程將程式碼轉換成UML類別圖。

(5)9-1類別圖與物件圖的基礎-物件圖的目的 物件圖和類別圖的差異在於類別圖是類別和其關 係建立的抽象模型,物件圖是在特定時間點建立 的實例。

換句話說,物件圖比類別圖更接近實際 的系統行為,其主要目的如下所示: •支援輸出程式碼和反向工程。

•描述系統的物件關係。

•描述物件之間互動的靜態觀點。

•了解特定觀點的物件行為和其關係。

(6)9-2類別圖的符號 9-2-1類別符號 9-2-2屬性與能見度 9-2-3操作 (7)9-2類別圖的符號 UML類別圖的基本單位是類別符號(Notation),多個類 別之間擁有類別關係,我們可以使用多種連接線來標示類 別之間不同的類別關係,例如:圖書銷售系統(Book (8)9-2-1類別符號-類別 類別符號是組成類別圖的基本單位,它是使用長 方形來表示,在長方形中由上而下分成三個部分 :類別名稱、屬性(Attribute)和操作 (9)9-2-1類別符號-抽象類別 抽象類別(AbstractClass)是使用斜體字的類別 名稱來表示。

例如:抽象類別Person,如下圖所 示: (10)9-2-1類別符號-靜態類別 靜態類別(StaticClass)和其他非靜態類別並沒 有什麼不同,唯一差異是靜態類別不能建立物件 ,而且在類別名稱上方加上<>模版來表示 ,如下圖所示: (11)9-2-2屬性與能見度-屬性語法 在類別符號中間部分是屬性(Attributes)清單,這是類 別的性質、特徵或狀態,每一個屬性自成一列來表示。

類別屬性的基本語法,如下所示: 能見度屬性名稱:資料型態[=初值] 上述語法的開頭是能見度符號+、-、#和~,符號之後 和「:」符號之前是屬性名稱,「:」符號之後是資料型 態,如果屬性有初值,可以在「=」等號後指定初值。

例 如:類別的month和salesForMonth屬性,如下所示: -month:int=1 -salesForMonth:int (12)9-2-2屬性與能見度-能見度(種類) 在操作和屬性前可以加上存取修飾子,稱為能見 度(Visibility),或稱為可見度和可見性。

能見 度是物件導向的封裝機制,可以指定操作或屬性 的存取等級,避免屬性被任意修改,或操作被任 意呼叫。

UML的能見度分為四種,如下圖所示: (13)9-2-2屬性與能見度-能見度(說明) Public能見度:允許其他任何類別存取的屬性或操作,事 實上,在類別中宣告Public能見度的屬性和方法就是類別 對外的使用介面,允許其他類別存取和使用。

它是使用 「+」符號表示Public能見度。

Protected能見度:允許類別本身和其繼承的子類別存取屬 性和使用操作。

它是使用「#」符號表示Protected能見 度。

Package能見度:只允許同一個套件的類別可以存取屬性 和使用操作。

它是使用「~」符號表示Package能見度。

Private能見度:表示它是屬於類別本身,除類別本身之外 ,不允許任何其他類別存取或使用。

它是使用「-」符號 表示Private能見度。

(14)9-2-2屬性與能見度-靜態屬性 靜態屬性(StaticAttributes)表示此屬性是屬於 類別,不論類別建立多少個物件,存取靜態屬性 都是存取同一個屬性,在UML類別圖是使用底線 標示靜態屬性,例如:Student類別的teacherNo 和count屬性,如下圖所示: (15)9-2-3操作-語法1 在類別符號最下方是操作(Operations)清單, 可以描述類別行為或功能,所謂實作類別程式碼 ,就是將操作轉換成程式語言的程序與函數,或 稱為「方法」(Methods)。

類別操作的基本語法,如下所示: 能見度操作名稱(參數列):傳回資料型態 上述操作語法的開頭是能見度符號+、-、#和~ ,在符號之後和「:」符號之前是操作名稱和括 號中的參數列,之後是傳回值的資料型態,沒有 傳回值是void。

(16)9-2-3操作-語法2 操作參數列的基本語法如下所示: 參數名稱:資料型態[,參數名稱:資料型態] 上述參數列的每一個參數是使用「,」逗號分隔 ,之前是參數名稱,「:」符號之後是資料型態 ,例如:setSales()操作有一個參數;【增加項目 ()】操作有2個參數,如下所示: +setSales(sales:int):void (17)9-2-3操作-建構子操作 建構子操作 (Constructor Operations)是類別建 構子,可以用來建立 物件,在UML類別圖 並不會特別區分建構 子和一般操作,我們 可以在操作之前使用 <>模版 標示為建構子。

例如 :Customer類別擁有 同名的建構子操作, 如右圖所示: (18)9-2-3操作-靜態操作 靜態操作(StaticOperations)如同靜態屬性是屬 於類別,不論類別建立多少個物件,使用的靜態 操作都是同一個操作,在UML類別圖是使用底線 標示靜態操作,如下圖所示: (19)9-2-3操作-抽象操作 在第9-2-1節的抽象類別可以擁有抽象操作 (AbstractOperations),這是使用斜體字標示的 操作。

例如:Account抽象類別擁有名為 (20)9-3類別關係 9-3-1類別關係的基礎 9-3-2結合關係 9-3-3聚合關係 9-3-4組合關係 9-3-5角色名稱與多重性 9-3-6結合類別 9-3-7反身關係 9-3-8一般關係 9-3-9相依關係 9-3-10實現關係 (21)9-3-1類別關係的基礎 類別關係是指類別之間擁有的合作關係,UML類 別擁有很多種不同強度的類別關係,在此的強度 是指類別彼此之間依賴的程度,稱為耦合度 (22)9-3-2結合關係-結合關係 結合關係(Associations)是指兩個類別相互知道另一個 類別存在的關係,或稱為雙向結合關係,我們可以將兩個 類別之間的關係,視為扮演不同的角色。

例如:Customer 客戶下Order訂單,所以客戶知道下了哪一張訂單; Order訂單需要知道是屬於哪一位客戶所下的訂單,如下 圖所示: (23)9-3-2結合關係-可導覽的結合關係(說明) 可導覽的結合關係(NavigableAssociations)是一 種擁有方向性的結合關係,稱為互通性 (Navigability),也就是在連接線上標示箭頭來 表示訊息傳遞的方向。

可導覽結合關係是一種單向結合關係,在兩個類 別中,只有其中一個類別擁有指標指向另一個類 別,反過來,就沒有建立互通訊息的管道。

(24)9-3-2結合關係-可導覽的結合關係(範例) 只允許從Order訂單類別查詢OrderItem訂單項目 資料,就是可導覽的單向結合關係,如下圖所示 : (25)9-3-3聚合關係 聚合關係(Aggregation)是一種關係較強的結合 關係,屬於成品和零件(Whole-Part)的類別關 係。

這是使用空菱形的實線從零件指向成品,屬 於通用零件。

例如:Computer電腦類別擁有CPU 類別的中央處理器,CPU是電腦零件,不同電腦 可以使用同一種零件,如下圖所示: (26)9-3-4組合關係-說明 在聚合關係中最強的類別關係稱為組合關係 (Composition),這是一種專屬零件。

使用實心 菱形的實線從零件指向成品,如下圖所示: (27)9-3-4組合關係-差異 組合關係和聚合關係的主要差異,如下所示: •組合關係的零件是只能使用在成品的專屬零件 ;聚合關係的零件是可以使用在其他成品的通 用零件。

•成品如果不存在,組合關係的零件也不會存在 ,換句話說,組合關係的零件並不能單獨存在 。

但是,聚合關係的零件因為是通用零件,所 以可以單獨存在。

(28)9-3-5角色名稱與多重性-角色名稱 在類別之間如果擁有結合關係、聚合或組合關係 ,在類別圖連接線兩端的上方,可以額外標示角 色名稱與多重性。

角色名稱(RoleName)表示類別在類別關係中 扮演的角色。

例如:公司(Company)類別是勞 工(Worker)的雇主(Employer),如下圖所 示: (29)9-3-5角色名稱與多重性-多重性(說明) 多重性(Multiplicity)表示類別實例參與類別關 係的個數是一對一、一對多或多對多,類似資料 庫實體關聯圖的一對一、一對多和多對多關聯性 。

(30)9-3-5角色名稱與多重性-多重性(數字範圍) 在類別關係連接線的兩端,我們可以加上數字範圍的多重 性來標示類別參與關係的物件數,其說明如下表所示: 表示符號說明 1表示只有一個,例如:公司只有一位董事長;每一個科系只有一 位系主任 3表示有3個,例如:公司有3位副董事長 *或0..*表示從0到多個,例如:學生可以選擇0到多個輔系 0..1表示0或1個,例如:員工有0或1位配偶 1..*表示至少1個,從1到多個,例如:教師指導1至多位學生的畢 業報告 10..*表示至少10個,從10到多個,例如:學生必須選10至多門必 修課 3..5從「m..n」前的數字m到之後n的範圍,以此例是3到5個, 例如:公司員工每年有3~5天的給薪假 (31)9-3-5角色名稱與多重性-多重性(範例) 例如:學生(Student)擁有住家電話、宿舍電話 和手機等1至3個電話(Phone)物件,如下圖 所示: (32)9-3-6結合類別 「結合類別」(AssociationClass)是一種使用在類別結 合關係的中間類別,通常是使用在多對一(Many-to-one )或多對多(Many-to-Many)的結合關係。

例如:一個多對多的結合關係,Order訂單(每次最多處 理5筆訂單)擁有很多Book的購買圖書(每筆訂單最多5 本書),反過來,很多圖書屬於不同的訂單,如下圖所示 : (33)9-3-7反身關係 反身關係(ReflexiveAssociations)可以使用在結合、組 合或聚合關係,它是指類別擁有參考到自已的指標,以聚 合關係來說,類別本身是成品;也是零件。

例如:學校Department科系類別可以分成很多子科系, 每一個子科系物件也是一種Department類別,如下圖所 示: (34)9-3-8一般關係 一般關係(Generalization) 就是繼承關係,使用空箭頭 的實線從子類別指向父類別 ,如右圖所示: (35)9-3-9相依關係-基礎 類別的相依關係(Dependency)是使用虛線箭頭表示一 種最弱的結合關係,它是指類別在語意上需要依賴其他類 別。

當類別之間有相依關係時,更改其中一個類別,有可能會 強迫需要更改另一個類別。

例如:Client類別的操作參數 或傳回值是Supplier類別的物件,如下圖所示: (36)939相依關係 -UML2.x版預先定義的相依關係(說明) UML一些常用預先定義的相依關係種類和說明, 如下表所示: 模版說明 «call»在Client類別的操作呼叫Supplier類別的操作 «create»在Client類別的建構子建立Supplier類別的實例 «derive»Client類別的屬性值或其他值是由Supplier類別計算而得 «instantiate»在Client類別的操作建立Supplier類別的實例 «send»在Client類別的操作送出一個訊號(Signal)給Supplier 類別 (37)939相依關係 -UML2.x版預先定義的相依關係(範例) 相依關係可以在連接線上加上模版來說明是哪一 種相依關係,例如:明確標示之前的相依關係為 <>,如下圖所示: (38)9-3-10實現關係-說明 實現關係(Realization)是類別和介面之間的關 係,介面(Interface)是一種特殊的類別型 態。

UML類別圖是使用虛線和空心三角來表示實 現關係,因為實現關係類似一般關係,所以符號 也相似,只是連接線由實線改為虛線。

介面(Interface)的類別型態可以用來定義行為 ,然後透過介面替其他類別提供共同行為的定義 ,就算類別之間沒有任何關係(有關係也可以) ,一樣可以擁有共同行為的介面。

換句話說,介 面是用來定義不同類別之間的一致行為。

(39)9-3-10實現關係-介面 UML類別圖是在類 別名稱上方使用 <>指明 為介面,其語法類 似模版 (Stereotype), 但不是模版,稱為 類別化(Classifier ),如右圖所示: (40)9-4物件圖 9-4-1物件圖的符號 9-4-2物件關係 (41)9-4物件圖 物件圖(ObjectDiagram)類似類別圖,可以描 述特定時間點物件集合和之間的關係。

其差別在 於物件圖是顯示實例(Instances),而不是類別 的藍圖。

物件圖呈現的是物件導向軟體系統執行時期的物 件狀態,可以實際將我們設計的類別轉換成物件 ,描述特定集合的物件、屬性值與之間的關係, 和這些物件如何通力合作來完成特定的工作。

(42)9-4-1物件圖的符號-說明 物件圖符號對比類別圖簡單一些,在長方形符號 分為上下兩部分:物件名稱與屬性值清單,如下 圖所示: (43)9-4-1物件圖的符號-物件名稱 在物件圖上方的底線名稱是物件完整名稱,其基 本語法如下所示: 物件名稱:類別名稱 上述語法在「:」符號之前是物件名稱,之後是 藍圖的類別名稱。

例如:圖書類別的物件圖名稱 ,如下所示: Java:圖書 C#:圖書 (44)9-4-1物件圖的符號-屬性值清單 在物件圖下方是屬性值清單,這就是源自類別藍 圖的屬性清單,而且只有屬性值,其基本語法如 下所示: 屬性=值 上述語法的每一個屬性值是一個指定敘述,前為 屬性名稱,等號後是目前的屬性值。

例如: 【Java:圖書】物件圖的屬性清單,如下所示: bookid=F0002 (45)9-4-1物件圖的符號-匿名物件 匿名物件(AnonymousObjects)的物件圖只有類 別名稱,沒有指明物件名稱,通常是因為物件名 稱並不重要,如下圖所示: (46)9-4-2物件關係-類別圖 在物件圖一樣可以顯示物件之間的結合關係,我 們可以使用連接線標示物件之間的關係,例如: 圖書與圖書作者的類別圖,如下圖所示: (47)9-4-2物件關係-物件圖 從上述類別圖,可以建立一位作者有多本著作; 一本圖書有多位作者的物件圖,如下圖所示: (48)9-4-3驗證類別圖的多重性-類別圖 物件圖常常用來作為類別圖的測試案例,幫助我 們驗證類別圖多重性設計是否正確,例如:一輛 車有4個輪子,UML類別圖如下圖所示: (49)9-4-3驗證類別圖的多重性-物件圖 聚合關係的成品與 零件表示一輛Car車 有4個Wheel輪子 。

但是,當我們將 它繪成物件圖後, 發現並無法建立三 個輪子的車輛,如 右圖所示: (50)9-4-3驗證類別圖的多重性-更正的類別圖 車輛只有3個輪子,之前的類別圖是將輪子固定 成4個,有問題,所以,應該將多重性改為1..* ,如下圖所示: (51)9-5繪製類別圖與物件圖 9-5-1繪製類別、抽象類別與介面 9-5-2新增類別的屬性清單 9-5-3新增類別的操作清單 9-5-4繪製類別關係 9-5-5繪製物件圖 (52)951繪製類別、抽象類別與介面 -新增類別與介面 在「工具箱」視窗拖拉【類別】至編輯區域後, 即可新增類別符號,然後輸入類別名稱,如下圖 所示: (53)951繪製類別、抽象類別與介面 -新增抽象類別 請先新增名為Person的類別符號後,選取此符號 ,執行【右】鍵快顯功能表的【屬性】指令,可 以看到「Person–屬性」對話方塊。

在中間【修飾子】欄勾 選【Abstract】,按 【確定】鈕建立抽象類 別;勾選【Static】建 立靜態類別。

(54)952新增類別的屬性清單 -新增屬性 請選取類別符號,執行【右】鍵快顯功能表的【屬性】指 令開啟「屬性」對話方塊。

在【類別】標籤,按上方【屬 性】框右邊的【新增】鈕,可以開啟「屬性編輯器」對話 方塊。

(55)952新增類別的屬性清單 -設為靜態屬性 在類別新增屬性清單後,對於指定屬性,我們可 以按【編輯】鈕開啟「屬性編輯器」對話方塊, 在「修飾子」框勾選【Static】,將屬性改為靜 態屬性。

(56)952新增類別的屬性清單 -屬性的初值 在類別圖上直接點選欲指定初值的屬性,就可以 進入屬性的編輯模式,請直接編輯屬性內容加上 等號的屬性初值。

(57)9-5-3新增類別的操作清單-新增操作 請選取類別且開啟「屬性」對話方塊後,在【類別】標籤 ,按下方操作後的【新增】鈕,可以開啟「操作編輯器」 對話方塊。

輸入操作名稱、選取或輸入傳回值型態和能見 度的存取修飾子。

如果操作有參數,請選【參數】標籤輸 入操作的參數,如下圖所示: (58)953新增類別的操作清單 -指定靜態操作與模版 在「屬性」對話方塊開啟指定操作的「操作編輯 器」對話方塊,勾選【Static】可以將操作改為 靜態操作。

如果是建構子,我們可以在下方新增 模版,請按【



請為這篇文章評分?