今天我們繼續(xù)來(lái)學(xué)習(xí)UML的相關(guān)知識(shí)。
在真正接觸UML核心之前,我們首先了解一下UML的一些通用知識(shí)。這如同在進(jìn)入公園之前,先在公園周?chē)镞_(dá)溜達(dá)。
那么,我們今天在進(jìn)入U(xiǎn)ML這個(gè)公園之前,要看看UML公園周?chē)氖裁达L(fēng)景呢?下面這個(gè)圖給出這次帶領(lǐng)大家參觀的內(nèi)容。
首先,我?guī)ьI(lǐng)大家參觀一下UML中的事物。
UML中的事物是UML中基本的面向?qū)ο蟮臉?gòu)造塊,也是UML中的重要詞匯,使用這些構(gòu)造塊可以構(gòu)造出良好模型。
在UML中定義了4種事物,如下圖所示:
首先,我們來(lái)詳細(xì)查看一下UML中的結(jié)構(gòu)事物。
結(jié) 構(gòu) 事 物
結(jié)構(gòu)事物(structural thing)是UML模型中名詞,通常用于描述模型的概念元素或物理元素。結(jié)構(gòu)事物主要包括:
(1)類(lèi)(class)
類(lèi)是對(duì)具有相同屬性和行為的對(duì)象的描述。在UML中,類(lèi)的圖形如下圖所示:
即一個(gè)矩形框通常被水平分為三部分,從上到下依次是類(lèi)的名稱(chēng)、類(lèi)的屬性和類(lèi)的操作。
(2)接口(interface)
接口定義一組操作的規(guī)約,但并不對(duì)操作進(jìn)行實(shí)現(xiàn)。每個(gè)操作描述了類(lèi)可以提供的一種服務(wù)。
在UML中,接口可以使用兩種圖形來(lái)表示,一種使用圓圈來(lái)表示,這種情況往往與某個(gè)類(lèi)連接在一起,以表示類(lèi)可以對(duì)外提供的接口。一種是使用與類(lèi)相似的圖標(biāo),加上構(gòu)造型《interface》。這兩種情形如下圖所示:
接口表示法1
接口表示法2
(3)協(xié)作(collaboration)
協(xié)作定義一個(gè)交互過(guò)程。它是由一組共同工作以提供協(xié)作行為的角色和其他元素構(gòu)成的一個(gè)整體。通常來(lái)說(shuō),這些協(xié)作行為大于所有元素的行為總和。
在圖形上,協(xié)作使用虛線橢圓來(lái)表示。
(4)用例(use case)
用例描述一組動(dòng)作序列,系統(tǒng)執(zhí)行這些動(dòng)作后將對(duì)特定的參與者產(chǎn)生有價(jià)值且可觀察的結(jié)果。也可以簡(jiǎn)單說(shuō)用例是系統(tǒng)對(duì)外部參與者提供的一項(xiàng)服務(wù)或功能。在UML中,用例使用下面的圖形來(lái)表示:
(5)主動(dòng)類(lèi)(active class)
主動(dòng)類(lèi)對(duì)象本身至少擁有一個(gè)進(jìn)程或線程,因此,主動(dòng)類(lèi)的對(duì)象可以自動(dòng)地啟動(dòng)控制活動(dòng),控制線程與其他元素并行執(zhí)行。
主動(dòng)類(lèi)的表示方法與類(lèi)相似,但其左右外框是雙線。
(6)構(gòu)件(component)
構(gòu)件是定義了良好接口的物理實(shí)現(xiàn)單元,是系統(tǒng)中物理的、可替代的部件。它提供一組接口的實(shí)現(xiàn),每個(gè)構(gòu)件體現(xiàn)了系統(tǒng)設(shè)計(jì)中某個(gè)特定的類(lèi)。
(7)節(jié)點(diǎn)(Node)
節(jié)點(diǎn)是系統(tǒng)在運(yùn)行時(shí)切實(shí)存在的物理對(duì)象,它表示一個(gè)計(jì)算資源,這些資源往往具有記憶能力和處理能力。一組構(gòu)件可以駐留在一個(gè)節(jié)點(diǎn)內(nèi),也可以從一個(gè)節(jié)點(diǎn)遷移到另外一個(gè)節(jié)點(diǎn)。在圖形上,把節(jié)點(diǎn)畫(huà)成一個(gè)立方體或長(zhǎng)方體。
以上是關(guān)于UML中結(jié)構(gòu)事物的介紹,下面我們?cè)倏纯碪ML中的行為事物。
行 為 事 物
行為事物(behavioral thing)是UML模型的動(dòng)態(tài)部分,可以用于描述跨越時(shí)間和空間的行為。共有三種行為事物。
(1)交互(interaction)
交互是指在特定的語(yǔ)境(Context)中,一組對(duì)象為共同完成一定任務(wù),為進(jìn)行一系列消息交換而組成的動(dòng)作以及消息交換的過(guò)程中形成的消息機(jī)制。交互的可視化主要通過(guò)消息來(lái)表示。消息由帶有名字或內(nèi)容的有向箭頭來(lái)表示。
(2)狀態(tài)機(jī)(state machine)
狀態(tài)機(jī)是一個(gè)類(lèi)的對(duì)象所有可能的生命歷程的模型,因此狀態(tài)機(jī)可用于描述一個(gè)對(duì)象或一個(gè)交互在其生命周期內(nèi)響應(yīng)時(shí)間所經(jīng)歷的狀態(tài)序列。狀態(tài)機(jī)涉及到其它一些元素,如狀態(tài)、轉(zhuǎn)移、事件和活動(dòng)等。在圖形上,把狀態(tài)畫(huà)成一個(gè)圓角矩形。
下圖是圖書(shū)的一個(gè)狀態(tài)。
(3)活動(dòng)(activity)
活動(dòng)描述了計(jì)算過(guò)程執(zhí)行的步驟序列。活動(dòng)的一個(gè)步驟稱(chēng)為一個(gè)動(dòng)作,在圖形上使用下圖所示的圖形來(lái)表示。
下面來(lái)到UML中事物的第三站,讓我們?cè)倏纯捶纸M事物。
分 組 事 物
分組事物(grouping thing)是UML模型的組織部分。主要的分組事物是包(package)。包是用于對(duì)設(shè)計(jì)本身進(jìn)行組織的通用機(jī)制。包內(nèi)可以放入結(jié)構(gòu)事物、行為事物或其它分組事物。包的圖形如下:
關(guān)于UML事物的最后一站是注釋事物。
注 釋 事 物
注釋事物(annotational thing)是UML模型的解釋部分。這些注釋事物可以用來(lái)描述、說(shuō)明和標(biāo)注模型中的任何元素。主要的注釋事物是注解(note)。注解是依附于一個(gè)模型元素或一組元素之上對(duì)其進(jìn)行解釋或約束的符號(hào)。其圖形如下所示:
以上我們?cè)敿?xì)參觀了UML中的事物,下面我們?cè)俎D(zhuǎn)戰(zhàn)UML中的關(guān)系。
在UML中定義了四種關(guān)系。
依 賴(lài) 關(guān) 系
依賴(lài)(dependency)是兩個(gè)模型元素間的語(yǔ)義關(guān)系,其中一個(gè)元素(獨(dú)立元素)發(fā)生變化會(huì)影響另一個(gè)元素(依賴(lài)元素)的語(yǔ)義。在圖形上,把依賴(lài)畫(huà)成一條可能有方向的虛線,也可能在其上還帶一定的標(biāo)志。
下圖給出了兩個(gè)類(lèi)之間的依賴(lài)關(guān)系。
關(guān) 聯(lián) 關(guān) 系
關(guān)聯(lián)(Association)是類(lèi)之間的結(jié)構(gòu)關(guān)系,用它來(lái)描述一組鏈,鏈?zhǔn)穷?lèi)對(duì)象之間的鏈接。
下圖給出了Department類(lèi)和Teacher類(lèi)之間的關(guān)聯(lián)關(guān)系。
這種關(guān)聯(lián)是一種單向關(guān)聯(lián),它表征在Teacher類(lèi)中要使用Department類(lèi)的對(duì)象作為其成員。
關(guān)于關(guān)聯(lián)更多的內(nèi)容將在類(lèi)圖中作進(jìn)一步的介紹。
泛 化 關(guān) 系
泛化(generalization)是一種特殊/一般關(guān)系。特殊元素(子元素)基于一般元素(父元素)而建立。用這種方法,子元素共享父元素的屬性和行為。
下圖給出了一般類(lèi)(父類(lèi))Vehicle(車(chē)輛)和特殊類(lèi)(子類(lèi))Truck(卡車(chē))之間的泛化關(guān)系。
在Vechicle類(lèi)中可以定義車(chē)輛共有的屬性和行為,而在Truck類(lèi)中定義卡車(chē)特有的屬性和行為。
實(shí) 現(xiàn) 關(guān) 系
實(shí)現(xiàn)(realization)是類(lèi)目之間的語(yǔ)義關(guān)系,其中一個(gè)類(lèi)目規(guī)定了另外一個(gè)類(lèi)目執(zhí)行的規(guī)約。實(shí)現(xiàn)可以用于接口及實(shí)現(xiàn)其的類(lèi)之間,也可以用于用例和實(shí)現(xiàn)其的協(xié)作之間。
在圖形上,實(shí)現(xiàn)關(guān)系使用帶有空心三角形的虛線來(lái)表示,下面是接口與實(shí)現(xiàn)其的類(lèi)之間的實(shí)現(xiàn)關(guān)系表示方法。
以上參觀了解了UML中的關(guān)系,下面再參觀了解一下UML中的公共機(jī)制。
在UML中,有四種貫穿整個(gè)語(yǔ)言且通用一致的公共機(jī)制。
規(guī) 格 說(shuō) 明
UML中的每個(gè)模型元素都可以添加規(guī)格說(shuō)明(specification),以提供對(duì)構(gòu)造塊的語(yǔ)法和語(yǔ)義的文字說(shuō)明。
UML中的圖形化表示用來(lái)可視化建模,而UML的規(guī)格說(shuō)明用來(lái)說(shuō)明構(gòu)造塊的細(xì)節(jié)。
修 飾
UML中的大多數(shù)元素都有唯一的圖形表示符號(hào),以展示其最重要的方面。但對(duì)于一些其它細(xì)節(jié)可以表示為圖形或文字修飾,放到基本圖形中。如,抽象類(lèi)的名稱(chēng)使用斜體來(lái)表示,類(lèi)屬性或方法的可見(jiàn)性可以在其前面使用+(公有)、-(私有)和#(保護(hù)的)來(lái)表示。
通 用 劃 分
在面向?qū)ο蠼V校?種通用劃分。
第一種是類(lèi)和對(duì)象的劃分。類(lèi)是一種抽象,對(duì)象是類(lèi)的實(shí)例。在UML中,在對(duì)類(lèi)和對(duì)象進(jìn)行建模時(shí),在圖形上可以區(qū)分開(kāi)類(lèi)及其對(duì)象。
在上面這個(gè)圖中,Person是一個(gè)類(lèi),而右面三個(gè)是它的對(duì)象,其中第一個(gè)顯式的指出Jack是類(lèi)Person的一個(gè)對(duì)象;而第二個(gè)是Person的一個(gè)匿名對(duì)象;第三個(gè)未給出其所屬的對(duì)象,但可以在其規(guī)格說(shuō)明中指出其所屬的類(lèi)。
第二種是接口和實(shí)現(xiàn)的分離。接口聲明了一個(gè)規(guī)約,而實(shí)現(xiàn)則表示了對(duì)該接口中規(guī)約的具體實(shí)施。在UML中,可以對(duì)接口建模,也可以對(duì)實(shí)現(xiàn)進(jìn)行建模。
上圖中,IUser是一個(gè)接口,VipUser是實(shí)現(xiàn)該接口的一個(gè)類(lèi)。
擴(kuò)展機(jī)制
UML再豐富也無(wú)法把實(shí)際細(xì)節(jié)完全表達(dá)出來(lái),因此,UML中提供了擴(kuò)展機(jī)制使人們能夠?qū)ML按照某種方式來(lái)擴(kuò)展其功能。UML主要提供了三種擴(kuò)展機(jī)制:構(gòu)造型、標(biāo)記值和約束。
(1)構(gòu)造型
構(gòu)造型擴(kuò)展機(jī)制的目的就是基于一個(gè)已存在的模型元素再重新定義一個(gè)新的模型元素,以擴(kuò)展UML的詞匯。
如上圖中,在類(lèi)的基礎(chǔ)上添加構(gòu)造型《Exception》以指示其是一個(gè)異常類(lèi)。
(2)標(biāo)記值
標(biāo)記值擴(kuò)展了UML構(gòu)造型的特性,可以用來(lái)創(chuàng)建構(gòu)造型的說(shuō)明信息。
上圖中使用注解的方式對(duì)InValidValue類(lèi)進(jìn)行版本和作者的說(shuō)明。
(3)約束
約束用來(lái)對(duì)構(gòu)造塊添加新規(guī)則或修改現(xiàn)有規(guī)則。約束一般放在一對(duì)花括號(hào)內(nèi)。
上圖中在類(lèi)關(guān)系時(shí)給Person添加的約束。
以上詳細(xì)介紹了UML中的事物、關(guān)系和公共機(jī)制。關(guān)于UML中的視圖和圖將在下一篇文章中進(jìn)行介紹。
新聞熱點(diǎn)
疑難解答