版權聲明
- 本文原創作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
- 本文參考資料:《UML面向對象分析、建模與設計(第2版)》呂云翔,趙天宇 著
類圖概述
類圖用來描述系統內各種實體的類型以及不同的實體之間是如何彼此關聯的,顯示了系統的內部靜態結構,因此類圖的描述對于系統的整個生命周期都是有效的。如果說用例圖是系統的“面子”,那么類圖就是系統的“里子”。類圖不僅包含了系統定義的各種類,還包含了各種關系,如關聯、泛化和依賴等。類圖大部分涉及對系統的詞匯建模、對協作建模或對模式建模。作為面向對象系統的建模中最常見的圖,類圖是組件圖與部署圖的基礎,它不僅對結構模型的可視化、詳述和文檔化很重要,而且對通過正向與逆向工程構造可執行的系統也很重要。
類圖(class diagram)是顯示一組類、接口、協作以及它們之間關系的圖。一個類圖主要通過系統中的類以及各個類之間的關系來描述系統的靜態結構。
類圖主要包含七種元素:類、接口、協作、依賴關系、泛化關系、實現關系和關聯關系類圖中還可以含有包或子系統,用來把模型元素聚集成更大的組塊。與其他 UML 圖類似類圖同樣可以創建約束和注釋等。
核心知識點
請務必熟悉并掌握以下核心知識點。
類
類(class)是一組擁有相同的屬性、操作、方法、關系和行為的對象描述符。
在UML中,類表達成一個有三個分隔區的矩形。其中,頂端顯示類名(name),中間顯示類的屬性(attribute),尾端顯示類的操作(operation)。
示例如下:
接口
接口(interface)是一個被命名的操作集合,用于描述類或組件的一個服務。接口不同于任何類或類型,它不描述任何結構,因此不包含任何屬性;也不描述任何實現,因此不包含任何實現操作的方法。一個接口可以有多個操作,每個操作都是公共的。一個類可以實現多個接口。為了顯示接口中的操作,接口可以表示為帶有<< interface >>構造型的類。
示例如下:
類圖中的關系
類圖中涉及了 UML 中最常用的四種關系,即關聯關系、泛化關系、依賴關系和實現關系。
關聯關系
關聯關系是兩個或多個類元之間的關系,它描述了這些類元的實例間的連接。
多重性
多重性(multiplicity)放在靠近關聯端的部分,表示在關聯關系中源端的一個對象可以與目標類的多少個對象之間有關聯。在 UML中,多重性的格式為“min…max”。其中,min 和 max分別表示該端最少和最多可以有多少對象與另一端關聯。常用的多重性有0,1,0…1(0或1)、0…*(0或更多)、1…*(1或更多)、* (0 或更多)等。
例如,Student 類與 School類的關聯關系的多重性,即一個學校可以有一個或更多個學生,而一個學生可能在 0所或更多所學校中學習。
導航性
導航性(navigation)是一個布爾值,用來說明運行時刻是否可能穿越一個關聯。對于二元關聯,當對一個關聯端(目標端)設置了導航性就意味著可以從另一端(源端)指定類型的一個值得到目標端的一個或一組值(取決于關聯端的多重性)。
例如,一個訂單可以獲取到該訂單的一份產品列表,但一個產品卻無法獲取到哪些訂單包括了該產品。
聚合與組合
聚合與組合是特殊的關聯。
有時候我們需要對“整體-部分”的關系建模,即一個描述整體的對象由一些描述部分的對象組成,這種關系稱為聚合(aggregation)。聚合關系是一種特殊形式的關聯關系,用來表示一個“整體-部分”的關系。在聚合關系中,“部分”可以獨立于“整體”存在。在 UML中,通過在關聯路徑上靠近表示“整體”的類的一端上使用一個小空心菱形來表示。
例如,ClassRoom(教室)類與 Desk(課桌)類之間構成一個聚合關系即教室中有許多課桌,當教室對象不存在時課桌同樣可以作為其他用途,二者是獨立存在的。
組合關系(composition)描述的也是整體與部分的關系,它是一種更強形式的聚合關系,又被稱為強聚合。與聚合關系的區別在于,在組合關系中的部分要完全依賴于整體。這種依賴性主要表現在兩個方面:部分對象在某一特定時刻只能屬于一個組合(整體)對象組合對象與部分對象具有重合的生命周期,組合對象銷毀的時候,所有從屬部分必須同時銷毀。
例如,Window(窗口)類與 Frame(架)類之間構成組合關系,Frame必須附加在 Window 中存在當一個 Window 被刪除時其中的 Frame 部分也必須被刪除。
泛化關系
泛化關系描述了一種“is-a-kind-of”(是··…·.的一種)關系,它的使用有利于簡化有些類的描述,可以不必重復添加大量相同的屬性和操作等特性而是通過泛化對應的繼承機制使子類共享父類的屬性和操作。在 UML 中,泛化關系通過一個由子類指向父類的空心三角形箭頭表示。
例如,Tiger類和 Bird類繼承了Animal類的屬性和操作,還添加了屬于自己的某些屬性和操作。
在最簡單的情況下,每個類最多能擁有一個父類,這稱為單繼承。而在更復雜的情況中,子類可以有多個父類并繼承了所有父類的結構、行為和約束。這被稱為多重繼承(或多重泛化)。
依賴關系
依賴關系表示的是兩個元素之間語義上的連接關系。對于兩個元素 X和 Y,如果元素X的變化會引起對另一個元素 Y 的變化,則稱元素Y 依賴于 X。其中,X 被稱為提供者,Y被稱為客戶。依賴關系使用一個指向提供者的虛線箭頭來表示。
由于依賴關系語義的寬泛性,在類圖中要標記出所有的依賴關系是一件費時費力的事情并且會降低模型的可讀性。因此建議在類圖中盡量不使用依賴關系。
實現關系
實現關系用來表示類與實現之間的關系。一個類可以實現多個接口,一個接口也可以被多個類實現。在 UML中實現關系表示為一條指向提供規格說明的元素的虛線三角形箭頭。
例如, Wall類實現了 Measurable 接口。即,在 Wall類中要實現接口中聲明的三個操作。
分析類
分析類是一個主要用于開發過程中的概念,用來獲取系統中主要的“職責簇”,代表系統的原型類,是帶有某些構造型的類元素。分析類包括邊界類(boundary)、控制類(control)和實體類(entity)三種。
邊界類是一種用于對系統外部環境與其內部運作之間的交互進行建模的類。這種交互包括轉換事件,并記錄系統表示方式中的變更。一般來說,邊界類的實例可以是窗口、通信協議、外部設備接口、傳感器、終端等。總之,在兩個有交互的關鍵對象之間都應當考慮建立邊界類。
控制類是一種對一個或多個用例所特有的控制行為進行建模的類。控制類的實例稱為控制對象,用來控制其他對象,體現出應用程序的執行邏輯。
實體類是用于對必須存儲的信息和相關行為建模的類。簡單來說,實體類就是對來自現實世界的具體事物的抽象。實體類的主要職責是存儲和管理系統內部的信息,它也可以有行為,但這些行為必須與它所代表的實體對象密切相關。
航空購票系統類圖
根據業務需求,我們應該確定出系統主要可以包括哪些類在航空購票系統類圖中可以歸結出用戶User、管理員Administrator、機場Airport、航班Flight與機票Ticket幾個實體類,還應該包括有一個系統控制類TicketManagement來控制整個系統。由于分析階段尚未進行用戶界面設計,因此類圖中暫時不涉及邊界類,需要在設計階段再對類圖進一步完善。
與創建用例圖類似,請在Model中創建類圖;圖示如下:
創建完畢,圖示如下:
在類圖上右鍵選擇添加圖,在彈出的窗口中選擇UML Structural,在圖的類型中選擇Class;再單擊確定;圖示如下:
創建完畢,圖示如下:
此時,點擊工具箱就可以看到與類圖相關的工具。如果沒有與類圖相關的工具,那么可以點擊右上角更多的工具…即可;圖示如下:
我們先來繪制User類。請左鍵單擊Class,鼠標挪至繪圖區彈出類的配置界面。請設置類的名字;圖示如下:
單擊確定后,圖示如下:
接下來在項目瀏覽器中右鍵單擊User實體再選擇屬性,圖示如下:
此處,可以為User實體添加屬性和操作。
先添加userID、password、info等三個屬性;圖示如下:
接下來為User實體添加login、register、searchMyFlight、bookMyTicket、cancleMyTicket、browserTicket、構造函數User等操作。這些操作的參數和返回值均設置為空;圖示如下:
User實體繪制完成,圖示如下: