第9章: 類別圖與物件圖 - 9lib TW
文章推薦指數: 80 %
物件圖和類別圖的差異在於類別圖是類別和其關係建立的抽象模型,物件圖是在特定時間點建立的實例。
換句話說,物件圖比類別圖更接近實際的系統行為,其主要目的如下所示 ...
menu
Upload
menu
Loading...
Home
 
其他
第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)和其他非靜態類別並沒
有什麼不同,唯一差異是靜態類別不能建立物件
,而且在類別名稱上方加上<
類別屬性的基本語法,如下所示:
能見度屬性名稱:資料型態[=初值]
上述語法的開頭是能見度符號+、-、#和~,符號之後
和「:」符號之前是屬性名稱,「:」符號之後是資料型
態,如果屬性有初值,可以在「=」等號後指定初值。
例
如:類別的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版預先定義的相依關係(範例)
相依關係可以在連接線上加上模版來說明是哪一
種相依關係,例如:明確標示之前的相依關係為
<
延伸文章資訊
- 1Design Pattern初心者筆記#1 - Medium
類別圖(Class Diagram)和物件圖(Object Diagram)是UML 圖的其中兩種 · 類別圖描述了類別的型態、屬性和方法,同時也表達了類別之間的靜態關係(static rela...
- 2類別圖- 維基百科,自由的百科全書
概述[編輯]. 類別圖是物件導向式的建模。他們一般都被用於概念建模(conceptual modelling)的系統分類的應用程式,並可將模型建模轉譯成程式碼。 一個類別有三個區域.
- 3Class Diagram 類別圖筆記 - 奧卡的部落格
類別圖是UML 的一種,他透過一個系統中的物件、物件的屬性、物件擁有的方法和物件與物件之間的關係來描述其結構。 ¶類別圖符號. 類別圖的符號分為兩大類.
- 4Day 4 軟體設計及架構---Class Diagram - iT 邦幫忙
前兩天都是介紹行為圖中的圖形,今天要介紹的是結構圖中的類別圖(Class Diagram),類別圖某部分來說和物件圖(Object Diagram) 十分相似,類別圖是從類別觀點看系統的 ...
- 5物件圖
本章以一個典型的範例來解說如何測試類別圖塑模的正確性。 Page 2. object object. Class. Class. Class object.