?? uml4.htm
字號(hào):
<html><head><meta http-equiv="Content-Type"content="text/html; charset=gb_2312-80"><meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"><title>標(biāo)準(zhǔn)建模語(yǔ)言UML及其支持環(huán)境(四)</title></head><body bgcolor="#D9D9D9"><p align="center"><font color="#FF0000" size="4">標(biāo)準(zhǔn)建模語(yǔ)言UML及其支持環(huán)境(四)<br></font></p><p align="center">北京航空航天大學(xué)軟件工程研究所</p><p><br>(接上期)<br>前三期所述主要內(nèi)容如下:<br>一、標(biāo)準(zhǔn)建模語(yǔ)言UML概述<br>二、標(biāo)準(zhǔn)建模語(yǔ)言UML的靜態(tài)建模機(jī)制<br>1. 用例圖<br>2. 類(lèi)圖、對(duì)象圖和包</p><p align="center"><img src="../images/uml4-1.jpg" width="326"height="282"></p><p align="left">3. 構(gòu)件圖和配置圖<br>構(gòu)件圖(Component diagram)和配置圖(Deployment diagram)顯示系統(tǒng)實(shí)現(xiàn)時(shí)的一些特性,包括源代碼的靜態(tài)結(jié)構(gòu)和運(yùn)行時(shí)刻的實(shí)現(xiàn)結(jié)構(gòu)。構(gòu)件圖顯示代碼本身的結(jié)構(gòu),配置圖顯示系統(tǒng)運(yùn)行時(shí)刻的結(jié)構(gòu)。</p><p align="left"><br>(1) 構(gòu)件圖構(gòu)件圖顯示軟件構(gòu)件之間的依賴(lài)關(guān)系。一般來(lái)說(shuō),軟件構(gòu)件就是一個(gè)實(shí)際文件,可以是源代碼文件、二進(jìn)制代碼文件和可執(zhí)行文件等。可以用來(lái)顯示編譯、鏈接或執(zhí)行時(shí)構(gòu)件之間的依賴(lài)關(guān)系。<br>(2) 配置圖配置圖描述系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)以及在此結(jié)構(gòu)上執(zhí)行的軟件。配置圖可以顯示計(jì)算結(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu)和通信路徑、結(jié)點(diǎn)上運(yùn)行的軟件構(gòu)件、軟件構(gòu)件包含的邏輯單元(對(duì)象、類(lèi))等。配置圖常常用于幫助理解分布式系統(tǒng)。<br>(3) 結(jié)點(diǎn)和連接 結(jié)點(diǎn)(Node)代表一個(gè)物理設(shè)備以及其上運(yùn)行的軟件系統(tǒng),如一臺(tái)Unix主機(jī)、一個(gè)PC終端、一臺(tái)打印機(jī)、一個(gè)傳感器等。如圖1所示,"客戶(hù)端PC"和"保險(xiǎn)后臺(tái)服務(wù)器"就是兩個(gè)結(jié)點(diǎn)。結(jié)點(diǎn)表示為一個(gè)立方體,結(jié)點(diǎn)名放在左上角。<br>結(jié)點(diǎn)之間的連線表示系統(tǒng)之間進(jìn)行交互的通信路徑,在UML中被稱(chēng)為連接(Connection)。通信類(lèi)型則放在連接旁邊的"《》"之間,表示所用的通信協(xié)議或網(wǎng)絡(luò)類(lèi)型。<br>(4) 構(gòu)件和界面 在配置圖中,構(gòu)件代表可執(zhí)行的物理代碼模塊,如一個(gè)可執(zhí)行程序。邏輯上它可以與類(lèi)圖中的包或類(lèi)對(duì)應(yīng)。因此,配置圖中顯示運(yùn)行時(shí)各個(gè)包或類(lèi)在結(jié)點(diǎn)中的分布情況。如在圖1中,"保險(xiǎn)后臺(tái)服務(wù)器"結(jié)點(diǎn)中包含"保險(xiǎn)系統(tǒng)"、"保險(xiǎn)對(duì)象數(shù)據(jù)庫(kù)"和"保險(xiǎn)系統(tǒng)配置"3個(gè)構(gòu)件。在面向?qū)ο蠓椒ㄖ?類(lèi)和構(gòu)件等元素并不是所有的屬性和操作都對(duì)外可見(jiàn)。它們對(duì)外提供了可見(jiàn)操作和屬性,稱(chēng)之為類(lèi)和構(gòu)件的界面。界面可以表示為一頭是小園圈的直線。圖1中,"保險(xiǎn)系統(tǒng)"構(gòu)件提供了一個(gè)"配置"界面。配置圖中還顯示了構(gòu)件之間的依賴(lài)關(guān)系,"保險(xiǎn)系統(tǒng)配置"構(gòu)件依賴(lài)于這個(gè)"配置"界面。<br>(5) 對(duì)象(Object) 一個(gè)面向?qū)ο筌浖到y(tǒng)中可以運(yùn)行很多對(duì)象。由于構(gòu)件可以看作與包或類(lèi)對(duì)應(yīng)的物理代碼模塊,因此,構(gòu)件中應(yīng)包含一些運(yùn)行的對(duì)象。配置圖中的對(duì)象與對(duì)象圖中的對(duì)象表示法一樣。圖1中,"保險(xiǎn)系統(tǒng)配置"構(gòu)件包含"配置保險(xiǎn)政策"和"配置用戶(hù)"兩個(gè)對(duì)象。</p><p align="left"><br>標(biāo)準(zhǔn)建模語(yǔ)言UML的靜態(tài)建模機(jī)制是采用UML進(jìn)行建模的基礎(chǔ)。我們認(rèn)為,熟練掌握基本概念、區(qū)分不同抽象層次以及在實(shí)踐中靈活運(yùn)用,是三條最值得注意的基本原則。</p><p align="left"><br>三、標(biāo)準(zhǔn)建模語(yǔ)言UML的動(dòng)態(tài)建模機(jī)制</p><p align="left"><br>1. 消息</p><p align="left"><br>在面向?qū)ο蠹夹g(shù)中,對(duì)象間的交互是通過(guò)對(duì)象間消息的傳遞來(lái)完成的。在UML的四個(gè)動(dòng)態(tài)模型中均用到消息這個(gè)概念。通常,當(dāng)一個(gè)對(duì)象調(diào)用另一個(gè)對(duì)象中的操作時(shí),即完成了一次消息傳遞。當(dāng)操作執(zhí)行后,控制便返回到調(diào)用者。對(duì)象通過(guò)相互間的通信(消息傳遞)進(jìn)行合作,并在其生命周期中根據(jù)通信的結(jié)果不斷改變自身的狀態(tài)。</p><p align="left"><br>在UML中,消息的圖形表示是用帶有箭頭的線段將消息的發(fā)送者和接收者聯(lián)系起來(lái),箭頭的類(lèi)型表示消息的類(lèi)型,如圖2所示。</p><p align="center"><br><img src="../images/uml4-2.jpg" width="196" height="154"></p><p align="left"> </p><p align="left">UML定義的消息類(lèi)型有三種:</p><p align="left"><br>簡(jiǎn)單消息(Simple Message)表示簡(jiǎn)單的控制流。用于描述控制如何在對(duì)象間進(jìn)行傳遞,而不考慮通信的細(xì)節(jié)。<br>同步消息(Synchronous Message)表示嵌套的控制流。操作的調(diào)用是一種典型的同步消息。調(diào)用者發(fā)出消息后必須等待消息返回,只有當(dāng)處理消息的操作執(zhí)行完畢后,調(diào)用者才可繼續(xù)執(zhí)行自己的操作。</p><p align="left">異步消息(Asynchronous Message)表示異步控制流。當(dāng)調(diào)用者發(fā)出消息后不用等待消息的返回即可繼續(xù)執(zhí)行自己的操作。異步消息主要用于描述實(shí)時(shí)系統(tǒng)中的并發(fā)行為。</p><p align="left"><br>2. 狀態(tài)圖<br>狀態(tài)圖(State Diagram)用來(lái)描述一個(gè)特定對(duì)象的所有可能狀態(tài)及其引起狀態(tài)轉(zhuǎn)移的事件。大多數(shù)面向?qū)ο蠹夹g(shù)都用狀態(tài)圖表示單個(gè)對(duì)象在其生命周期中的行為。一個(gè)狀態(tài)圖包括一系列的狀態(tài)以及狀態(tài)之間的轉(zhuǎn)移。</p><p align="left"><br>(1) 狀態(tài) 所有對(duì)象都具有狀態(tài),狀態(tài)是對(duì)象執(zhí)行了一系列活動(dòng)的結(jié)果。當(dāng)某個(gè)事件發(fā)生后,對(duì)象的狀態(tài)將發(fā)生變化。狀態(tài)圖中定義的狀態(tài)有:初態(tài)、終態(tài)、中間狀態(tài)、復(fù)合狀態(tài)。其中,初態(tài)是狀態(tài)圖的起始點(diǎn),而終態(tài)則是狀態(tài)圖的終點(diǎn)。一個(gè)狀態(tài)圖只能有一個(gè)初態(tài),而終態(tài)則可以有多個(gè)。</p><p align="left">中間狀態(tài)包括兩個(gè)區(qū)域:名字域和內(nèi)部轉(zhuǎn)移域,如圖3所示。圖中內(nèi)部轉(zhuǎn)移域是可選的,其中所列的動(dòng)作將在對(duì)象處于該狀態(tài)時(shí)執(zhí)行,且該動(dòng)作的執(zhí)行并不改變對(duì)象的狀態(tài)。</p><p align="center"><img src="../images/uml4-3.jpg" width="283"height="162"></p><p align="left"> </p><p align="left">一個(gè)狀態(tài)可以進(jìn)一步地細(xì)化為多個(gè)子狀態(tài),我們將可以進(jìn)一步細(xì)化的狀態(tài)稱(chēng)作復(fù)合狀態(tài)。子狀態(tài)之間有"或關(guān)系"和"與關(guān)系"兩種關(guān)系。或關(guān)系(如圖4)說(shuō)明在某一時(shí)刻僅可到達(dá)一個(gè)子狀態(tài)。例如,一個(gè)處于行駛狀態(tài)的汽車(chē),在"行駛"這個(gè)復(fù)合狀態(tài)中有向前和向后兩個(gè)不同的子狀態(tài),在某一時(shí)刻汽車(chē)要么向前,要么向后。與關(guān)系(如圖5)說(shuō)明復(fù)合狀態(tài)中在某一時(shí)刻可同時(shí)到達(dá)多個(gè)子狀態(tài)(稱(chēng)為并發(fā)子狀態(tài))。具有并發(fā)子狀態(tài)的狀態(tài)圖稱(chēng)為并發(fā)狀態(tài)圖。</p><p align="center"><img src="../images/uml4-4.jpg" width="330"height="140"><br></p><p align="center"><img src="../images/uml4-5.jpg" width="313"height="175"></p><p align="left">(2)轉(zhuǎn)移 狀態(tài)圖中狀態(tài)之間帶箭頭的連線被稱(chēng)為轉(zhuǎn)移。狀態(tài)的變遷通常是由事件觸發(fā)的,此時(shí)應(yīng)在轉(zhuǎn)移上標(biāo)出觸發(fā)轉(zhuǎn)移的事件表達(dá)式。如果轉(zhuǎn)移上未標(biāo)明事件,則表示在源狀態(tài)的內(nèi)部活動(dòng)執(zhí)行完畢后自動(dòng)觸發(fā)轉(zhuǎn)移。</p><p align="left"><br>3. 順序圖</p><p align="left"><br>順序圖(Sequence Diagram)用來(lái)描述對(duì)象之間動(dòng)態(tài)的交互關(guān)系,著重體現(xiàn)對(duì)象間消息傳遞的時(shí)間順序。順序圖存在兩個(gè)軸:水平軸表示不同的對(duì)象,垂直軸表示時(shí)間。順序圖中的對(duì)象用一個(gè)帶有垂直虛線的矩形框表示,并標(biāo)有對(duì)象名和類(lèi)名。垂直虛線是對(duì)象的生命線,用于表示在某段時(shí)間內(nèi)對(duì)象是存在的。對(duì)象間的通信通過(guò)在對(duì)象的生命線間畫(huà)消息來(lái)表示。消息的箭頭指明消息的類(lèi)型。</p><p align="left"><br>順序圖中的消息可以是信號(hào)(Signal)、操作調(diào)用或類(lèi)似于C++中的RPC(RemoteProcedure Calls)和Java中的RMI(Remote Method Invocation)。當(dāng)收到消息時(shí),接收對(duì)象立即開(kāi)始執(zhí)行活動(dòng),即對(duì)象被激活了。通過(guò)在對(duì)象生命線上顯示一個(gè)細(xì)長(zhǎng)矩形框來(lái)表示激活。</p><p align="left"><br>消息可以用消息名及參數(shù)來(lái)標(biāo)識(shí)。消息也可帶有順序號(hào),但較少使用。消息還可帶有條件表達(dá)式,表示分支或決定是否發(fā)送消息。如果用于表示分支,則每個(gè)分支是相互排斥的,即在某一時(shí)刻僅可發(fā)送分支中的一個(gè)消息。</p><p align="left"><br>在順序圖的左邊可以有說(shuō)明信息,用于說(shuō)明消息發(fā)送的時(shí)刻、描述動(dòng)作的執(zhí)行情況以及約束信息等。一個(gè)典型的例子就是用于說(shuō)明一個(gè)消息是重復(fù)發(fā)送的。另外,可以定義兩個(gè)消息間的時(shí)間限制。</p><p align="left"><br>一個(gè)對(duì)象可以通過(guò)發(fā)送消息來(lái)創(chuàng)建另一個(gè)對(duì)象,當(dāng)一個(gè)對(duì)象被刪除或自我刪除時(shí),該對(duì)象用"X"標(biāo)識(shí)。</p><p align="left"><br>另外,在很多算法中,遞歸是一種很重要的技術(shù)。當(dāng)一個(gè)操作直接或間接調(diào)用自身時(shí),即發(fā)生了遞歸。產(chǎn)生遞歸的消息總是同步消息,返回消息應(yīng)是一個(gè)簡(jiǎn)單消息。</p><p align="left"><br>4. 合作圖</p><p align="left"><br>合作圖(Collaboration Diagram)用于描述相互合作的對(duì)象間的交互關(guān)系和鏈接關(guān)系。雖然順序圖和合作圖都用來(lái)描述對(duì)象間的交互關(guān)系,但側(cè)重點(diǎn)不一樣。順序圖著重體現(xiàn)交互的時(shí)間順序,合作圖則著重體現(xiàn)交互對(duì)象間的靜態(tài)鏈接關(guān)系。</p><p align="left"><br>合作圖中對(duì)象的外觀與順序圖中的一樣。如果一個(gè)對(duì)象在消息的交互中被創(chuàng)建,則可在對(duì)象名稱(chēng)之后標(biāo)以{new}。類(lèi)似地,如果一個(gè)對(duì)象在交互期間被刪除,則可在對(duì)象名稱(chēng)之后標(biāo)以{destroy}。對(duì)象間的鏈接關(guān)系類(lèi)似于類(lèi)圖中的聯(lián)系(但無(wú)多重性標(biāo)志)。通過(guò)在對(duì)象間的鏈接上標(biāo)志帶有消息串的消息(簡(jiǎn)單、異步或同步消息)來(lái)表達(dá)對(duì)象間的消息傳遞。</p><p align="left"><br>(1) 鏈接 鏈接用于表示對(duì)象間的各種關(guān)系,包括組成關(guān)系的鏈接(CompositionLi nk)、聚集關(guān)系的鏈接(Aggregation Link)、限定關(guān)系的鏈接(QualifiedLink)以及導(dǎo)航鏈接(Navigation Link)。各種鏈接關(guān)系與類(lèi)圖中的定義相同,在鏈接的端點(diǎn)位置可以顯示對(duì)象的角色名和模板信息。</p><p align="left"><br>(2) 消息流 在合作圖的鏈接線上,可以用帶有消息串的消息來(lái)描述對(duì)象間的交互。消息的箭頭指明消息的流動(dòng)方向。消息串說(shuō)明要發(fā)送的消息、消息的參數(shù)、消息的返回值以及消息的序列號(hào)等信息(未完待續(xù))。<br></p><p align="center"><a href="../index.htm">Home</a></p></body></html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -