術語匯編 UML模型圖組成解析
本文和大家學習一下UML模型圖,UML模型圖能夠將被建模的系統的某一個方面的某一部分以圖形的方式表示出來,不同的視圖通過將多個不同的模型圖有機組合在一起就能夠描述系統模型的某方面的特征。
UML的九種模型圖
1.UML模型圖
UML模型圖能夠將被建模的系統的某一個方面的某一部分以圖形的方式表示出來,不同的視圖通過將多個不同的模型圖有機組合在一起就能夠描述系統模型的某方面的特征。UML的模型圖是有模型元素構成的,模型元素以圖標的形式直觀形象的表達各種概念。有的模型元素可以在多個模型圖中使用,如注釋和注釋連接可以在任何模型圖中使用,用于給其他的模型元素進行注釋。各種模型圖能使用的模型元素集合也不相同,在介紹各種模型圖的時候會有具體的說明。
UML定義了九種UML模型圖:用例圖(UseCaseView)、類圖(ClassDiagram)、對象圖(ObjectDiagram)、構件圖(ComponentDiagram)、部署圖(DeploymentDiagram)、狀態圖(StateChartDiagram)、活動圖(ActivityDiagram)、序列圖(SequenceDiagram)以及協作圖(CollaborationDiagram)。這九種模型圖各有側重,如用例圖側重描述用戶需求,類圖側重描述系統具體實現;描述的方面都不相同,如類圖描述的是系統的結構,序列圖描述的是系統的行為;抽象的層次也不同,如構件圖描述系統的模塊結構,抽象層次較高,類圖是描述具體模塊的結構,抽象層次一般,對象圖描述了具體的模塊實現,抽象層次較低。
在有的文獻書籍中,將這九種模型圖分為三大類:結構分類、動態行為和模型管理,結構分類包括用例圖、類圖、對象圖、構件圖和部署圖,動態行為包括狀態圖、活動圖、順序圖和協作圖,模型管理則包含類圖。本文則從動態和靜態的角度分別介紹UML的九種模型圖。
2.靜態UML模型圖
結構分類模型圖描述了的是系統的與時間不相關的屬性和行為。靜態模型圖包括類圖、對象圖、構件圖和部署圖。
2.1類圖
類圖描述的是類和類之間的相互關系。類在UML中的是用矩形表示,矩形中可以有三個區域,最上方的區域是名字域,用來顯示類名,中間的區域是屬性域,用來顯示類所具有的屬性列表,最下方的區域是操作區域,顯示定義的操作列表。
屬性自己也含有屬性,如名字,類型,可見性等,屬性的名字就是標識屬性的名稱,屬性的類型就是屬性所屬于的數據類型,屬性的可見性標識屬性是否能被所屬類之外的類直接訪問,屬性的可見性分為三種:public,protected和private。
public標識的是對應屬性可以被所屬的類和其他類直接訪問;
protected標識的是對應屬性可以被與所屬類相關的一系列類的訪問,這些類的相關性不同的面向對象程序設計語言有不同的定義,如C++中protected是標識的是屬性能夠被以public方式繼承的子類訪問,在JAVA中則是標識屬性可以被在同一個包(package)的所有類訪問;
private標識的是屬性只能被所屬類訪問。操作的屬性有名字、返回類型、參數類型以及可見性等,名字是操作的名稱;返回類型是操作的返回值的類型;參數類型是傳入操作的參數類型;可見性標識的是操作是否能被被所屬類之外的類直接訪問,也分為:public、protected和private。有時為了表達簡潔,可以省去顯示類的各種屬性和操作。
類之間的相互關系包括:關聯(Association)、依賴(Dependency)、泛化(Generalization)以及實現(Realize)。
關聯描述的是類的對象之間邏輯上的關系,這些對象可以是同類的,也可以不是,關聯的兩端稱為角色,如客戶和訂單就存在一種關聯。在UML中關聯主要有三種形式,一種是用一條線段標識雙向的關聯,稱為關聯(Association);第二種是用一個有箭頭的線段標識單向的關聯(UnidirectinalAssociation);第三中是用一個菱形為頭的線段表示關聯的兩端的類是整體和部分的關系,這種關聯也稱為聚合(Aggregation),例如:一個對象a包含另一個對象b的引用,則菱形的一端連接的是對象a,另一段連接的是對象b。聚合又分為。圖2.2.2顯示了這三種關聯的圖形表示。
從圖2.2.2中可以看到,NewClass2和NewClass4之間的關聯兩端都有星號,那是用于標識關聯的角色的多重性,如一對一、一對多、多對多等,這里標識的是NewClass2和NewClass4是多對多關聯。
UML模型圖中類圖里的依賴表示的是模型元素間的依賴關系,依賴關系兩端的模型元素,一端是獨立的,另一端需要依賴這個獨立的元素。依賴關系用帶箭頭的虛線段表示。
泛化表示的是模型元素之間抽象和具體的關系,也就是模型元素之間的繼承關系。繼承者具有被繼承者相同的特性,同時還能在被繼承者的基礎上進行擴展,如:人和中國人的關系就是泛化關系,中國人是人,同時具有人的特征,也有自己擴展了的特征。在面向對象中,被繼承者稱為父類,繼承者稱為子類。泛化用一個帶有空心的三角箭頭的線段表示,三角箭頭指向父類,另一端連接子類。
實現關系表示一個模型元素實現了另一個模型元素定義的操作,一般是指一個類實現了一個接口(Interface)定義的方法,在面向對象的概念中,接口就是只定義方法,并不實現這個方法,用來給別的類繼承它,并用類的操作實現它定義方法,通過這樣的方法就能夠將定義和抽象分開,利于代碼的維護。實現關系用一條帶有空心三角箭頭的虛線段表示,三角形接口指向接口,虛線段另一端連接實現類。
表達實現關系除了上面的這中表示外,UML還提供了另一種簡潔的表示方式,用一個圓圈表示接口,上面沒有接口定義的方法,通過用一條實線段將其與一個類相連,就能表示了接口和實現類的關系。
泛化和實現關系都是描述一般和具體的關系,但是兩者還是有區別:泛化實在同一個抽象層次上的一般和具體的關系,而實現是在不同抽象層次的一般和具體的關系,接口的抽象層次較高。
2.2對象圖
對象圖描述的是對象之間的關系,也可以理解為系統在某一個時刻的圖像。對象圖是在比較具體的層次上描述,比如描述一個系統的各個類的對象是如何組合的。對象圖沒有類圖那么復雜,對象的表示和類相似,只是在名字域要標明對象名和所屬類名,兩者用冒號分隔,屬性域要標識出屬性的具體值,對象之間的關系都是用實線段相連。現在很少將對象圖獨立畫出來,一些CASE工具,如RationalRose2002就沒有提供對象圖。對象的概念更多的是用在動態的模型圖中。
2.3構件圖
UML模型圖中構件圖描述系統中的構件以及構件之間的依賴關系,構件圖是在很具體的層次描述系統的物理結構。
構件圖有一下幾個主要的模型元素:構件、接口、依賴關系。構件就是定義了良好接口的實現代碼單元,已經成為系統的一部分。構件并不依賴于其他的構件,只依賴于其所支持的接口,因此,構件是可替換的,只要新的替換構件支持相同的接口就可以,構件用一個左邊有兩個小矩形的大矩形表示;接口用于描述構件定義的接口,用一個圓圈表示,它與構件是用實線段相連;依賴關系描述的是構件之間的依賴關系,用帶箭頭的虛線段表示,箭頭一段的是被依賴的構件。
2.4部署圖
部署圖描述任何基于計算機的應用系統的物理或邏輯的配置。它可以描述系統硬件的物理拓撲結構和在此結構上執行的系統軟件,也能描述系統節點的拓撲結構和通信路徑、節點上運行的構件、構件中的邏輯單元等。
部署圖中有以下幾個主要的模型元素:節點、構件、對象、接口、連接和依賴關系。節點描述一個物理設備以及在其上運行的軟件系統,用一個立方體來表示。連接是節點之間的通信路徑,用實線段來表示。構件、對象、界面和依賴關系同之前的介紹相同。#p#
3.動態UML模型圖
動態行為模型圖描述了系統隨時間變化的行為。動態UML模型圖包括:用例圖、狀態圖、活動圖、順序圖和協作圖。
3.1用例圖
用例圖從用戶的角度來描述系統的行為和特征。用例圖一般是用來進行系統的需求分析的工具。
用例圖中首先要明確的概念就是用例。用例是系統的一個功能單元,描述了參與者與系統發生的一次交互行為。例如:銀行的ATM自動提款機系統,用戶提款就是一個用例。
用例圖有以下幾種模型元素:用例(UseCase)、參與者(Actor)、關聯關系(Association)、包含關系(Include)、擴展關系(Extend)以及泛化關系(Generalization)。用例是以一個橢圓形來表示,橢圓中心是用例的名稱;參與者就是與所要建模的系統交互的外部用戶、進程或其他系統,參與者是以一個人形的圖標表示;關聯關系描述參與者與其需要交互的用例之間的通信路徑,用一條實線段表示;包含關系描述一個用例利用另一個用例完成某個過程,用一個帶箭頭的虛線段并在虛線段上以“《include》”作為標識來表示,箭頭指向被包含的用例;擴展關系描述一個用例在原有的另一個用例的基礎上,擴展了那個用例的部分功能,和包含關系類似,也是以一個帶箭頭的虛線段表示,不同的是虛線段上顯示的是“《extend》”,箭頭指向被擴展的用例;泛化關系描述用例之間的一般和特殊的關系,特殊用例是在繼承了一般用例的特性的基礎上添加了新的特性,泛化關系和擴展關系有相似之處,不同的是擴展關系的需要明確標明被擴展用例的擴展點,擴展用例只能擴展這些擴展點,泛化關系用一個帶有空心三角箭頭的實線段表示。
3.2狀態圖
UML模型圖中狀態圖以狀態的概念描述對象、子系統、系統在生命周期中的各種行為,簡單的說就是一個狀態圖只描述某一個對象(可以是類、程序模塊、系統)的行為。通過狀態圖可以知道一個對象、子系統、系統的各種狀態及其收到的消息對其狀態的影響。世界萬物都有可以描述的狀態,因此都可以通過狀態圖來描述他們的行為,狀態圖具有很強的表達能力。
狀態圖有以下幾種常用的模型元素:狀態(State)、轉換(Transition)、起始狀態(StartState)、終止狀態(EndState)。狀態描述一個對象的生命周期中某個時間段的特征,狀態是用圓角的矩形表示;轉換描述狀態間的轉移,用一個帶箭頭的實線段表示,還可以給轉換添加標注,通過標注來描述引起狀態轉移的事件、條件和要執行的操作,標注的格式為:事件名[條件]/操作,標注的每個部分都可以省略;起始狀態描述對象生命周期的開始階段,用一個黑色的圓表示,有時為了表述清楚,在不產生混淆概念的情況下,可以省去起始狀態;終止狀態描述對象生命周期的終止階段,用一個帶圓形外框的黑色圓表示,一個狀態圖可以有多個終止狀態,有時為了表述清楚,在不產生混淆概念的情況下,可以省去終止狀態。
3.3活動圖
UML模型圖中活動圖是通過一系列活動描述對象的行為,對象可以是程序、模塊、子系統、系統。通過活動圖,可以了解所描述對象的要進行的各種任務和過程。活動圖常用的模型元素包括:活動(Activity)、起始點(Start)、終止點(End)、轉換(Transition)、對象(Object)、條件判斷(Decision)、同步條(SynchronizationBar)、信息流和泳道(Swinlane)。
活動描述的是系統要完成的一個任務或要進行的一個過程,是活動圖中的一個原子活動,活動用一個圓角的矩形表示,并標上活動名;起始點描述活動圖的開始狀態,與狀態圖類似,用一個黑色的圓標識,活動圖可以有多個起始點;終止點描述活動圖的終止狀態,與狀態圖類似,用一個帶圓圈的黑色圓表示,活動圖可以有多個終止點;轉換描述活動之間的轉換,也就是被描述對象的控制流,轉換用帶箭頭的實線段表示,箭頭指向轉向的活動,可以在轉換上用文字標識轉換發生的條件;對象是活動圖中參與的對象,它可以發送信號給活動或是接收活動的信號,也可以表示活動的輸入/輸出結果,對象的表示和對象圖中的表示相同;條件判斷描述活動間轉換的分支,只有一個流入的信息流,不同的條件下輸出的信息流有不同的流向,條件判斷用一個菱形表示;同步條描述活動之間的同步,一般有多個信息流流入,多個信息流流出,必須是流入的信息流都到達,流出的信息流才能同時流出,同步條用一條較粗的水平的或是垂直的實線段表示;信息流描述活動和對象的交互關系,對象可以作為活動的輸入/輸出,也可以作為一個實體,接收活動的信號或是向活動發送信號,信息流用帶箭頭的虛線段表示,箭頭標識信息流的方向;泳道描述的是活動圖中的活動的分組,通常,可以將活動按照某種標準分組,泳道在UML活動圖中的表示就是在橫向上將活動圖劃分出一個縱向的區域,同組的活動和對象都在這個區域中,區域之間用虛線分隔。
3.4順序圖
順序圖通過描述對象之間的交互來表達被描述對象的行為。UML模型圖中順序圖重點強調對象交互的時間性順序性。與前面介紹的模型圖可以隨意組織模型元素不同,順序圖有一定的結構,可以將順序圖看成一個二維坐標,縱向上表示的是不同的對象,橫向上是順序的時間
順序圖常用的模型元素有:對象(Object)和消息(Message)。對象是順序圖描述的對象中的一個子對象,對象的表示和對象圖的類似,但是順序圖中的對象只放置在圖中對象所在的縱向區域的頂端,同時有一條向下延伸的虛線,表示對象的生命線,在對象正在執行動作(如向其它對象發送消息)的區間,生命線的虛線就被一個矩形方塊代替,用來表示此時對象處于激活狀態,在對象生命線末尾用一個“×”標識對象生命期的結束;消息是對象間通訊的信息,可以是控制信息、數據信息等,消息可以分為簡單消息、同步消息、異步消息和返回消息,簡單消息標識對象間的一般消息,沒有具體的細節,只描述了對象間的一次通訊,簡單消息用一個帶箭頭的實線段表示,同步消息描述的是消息的發送方發送了消息之后,必須收到回復消息才能進行后續的動作,同步消息用帶實心三角箭頭的實線段表示,異步消息描述的是消息的發送方在發送了消息之后就能進行后續動作,不需要等待回復消息,返回消息描述的是從同步消息激活的動作返回到同步消息發送者的消息,返回消息用帶箭頭的虛線段表示。
3.5協作圖
協作圖描述在一定的語境中一組對象以及用來實現某些功能的對象之間的相互作用和對象之間的關系。UML模型圖中協作圖可以看成是在對象圖的基礎上,加入了對象之間的消息通訊以描述對象之間的交互。與順序圖不同,協作圖重點是在空間上描述對象的交互。
協作圖除了具有對象圖的模型元素之外,就是加入了消息(Message),消息是對象之間的通訊,從而實現對象的交互,消息可以分為:指向源的簡單消息、指向目的的簡單消息、指向源的異步消息、指向目的的異步消息、指向源的同步消息、指向目的的同步消息,指向源和指向目的都是表示簡單消息的流向,只是圖形表示的指向不同而已,指向源的簡單消息和指向目的的簡單消息都用帶箭頭的線段表示,指向源的簡單消息只指向左邊邊,指向目的的簡單消息只指向右邊,指向源的異步消息用帶有下半個箭頭的實線段表示,指向目的的異步消息用帶有上半個箭頭的實線段表示,指向源的同步消息和指向目的的同步消息用帶實心三角箭頭的實線段表示,指向源的同步消息只指向左邊,指向目的的同步消息只指向右邊。
【編輯推薦】