- UML基礎(chǔ)與Rose建模實(shí)用教程(第三版)
- 謝星星 周新國(guó)編著
- 4340字
- 2020-11-23 15:05:10
2.3.2 圖
UML的本意是要成為一種標(biāo)準(zhǔn)的統(tǒng)一語(yǔ)言,使得IT專業(yè)人員能夠進(jìn)行計(jì)算機(jī)應(yīng)用程序的建模。UML與程序設(shè)計(jì)語(yǔ)言無(wú)關(guān),Rational Rose的UML建模工具被廣泛應(yīng)用于各種程序語(yǔ)言的開(kāi)發(fā)中。
UML作為一種可視化的建模語(yǔ)言,其主要表現(xiàn)形式就是將模型進(jìn)行圖形化表示。UML規(guī)范嚴(yán)格定義了各種模型元素的符號(hào),并且還包括這些模型和符號(hào)的抽象語(yǔ)法和語(yǔ)義。當(dāng)在某種給定的方法學(xué)中使用這些圖時(shí),它使得開(kāi)發(fā)中的應(yīng)用系統(tǒng)更易于理解。UML的內(nèi)涵遠(yuǎn)不只是這些模型描述圖,還包括這些圖對(duì)這門(mén)語(yǔ)言及其用法背后的基本原理。最常用的UML圖包括:用例圖、類圖、序列圖、狀態(tài)圖、活動(dòng)圖、構(gòu)件圖和部署圖。
前面按照視圖的觀點(diǎn)對(duì)UML進(jìn)行了說(shuō)明,在每一種視圖中都包含一種或多種圖。在本章中,不深入討論每種圖的細(xì)節(jié)問(wèn)題。因此,下面僅對(duì)每種圖進(jìn)行簡(jiǎn)要說(shuō)明,更詳細(xì)的信息將在后面進(jìn)行介紹。
1.用例圖
用例圖描述了系統(tǒng)提供的一個(gè)功能單元。用例圖的主要目的是幫助開(kāi)發(fā)團(tuán)隊(duì)以一種可視化的方式理解系統(tǒng)的功能需求,包括基于基本流程的“角色”關(guān)系,以及系統(tǒng)內(nèi)用例之間的關(guān)系。使用用例圖可以表示出用例的組織關(guān)系,這種組織關(guān)系包括整個(gè)系統(tǒng)的全部用例或者是完成相關(guān)功能的一組用例。在用例圖中畫(huà)出某個(gè)用例方式就是在用例圖中繪制一個(gè)橢圓,然后將用例的名稱放在橢圓的中心或橢圓下面的中間位置。在用例圖上繪制一個(gè)角色的方式是繪制一個(gè)人形的符號(hào)。角色和用例之間的關(guān)系可以使用簡(jiǎn)單的線段來(lái)描述,如圖2-3所示。

圖2-3 用例圖示例
用例圖通常用于表達(dá)系統(tǒng)或者系統(tǒng)范疇的高級(jí)功能。在圖2-3中,可以很容易看出該系統(tǒng)所提供的功能。整個(gè)系統(tǒng)提供了圖書(shū)管理、圖書(shū)借閱、借閱情況查詢、圖書(shū)預(yù)定、圖書(shū)信息查詢和讀者管理的功能。在這個(gè)系統(tǒng)中,允許讀者進(jìn)行圖書(shū)借閱、借閱情況查詢、圖書(shū)預(yù)定和圖書(shū)信息查詢的功能。它也允許圖書(shū)管理員進(jìn)行所有功能的操作。
此外,在用例圖中,沒(méi)有列出的用例表明該系統(tǒng)不能完成的功能,或者說(shuō)是這些功能和系統(tǒng)是不相關(guān)的。
2.類圖
類圖顯示了系統(tǒng)的靜態(tài)結(jié)構(gòu),表示了不同的實(shí)體(人、事物和數(shù)據(jù))是如何彼此關(guān)聯(lián)的。類圖可用于表示邏輯類,邏輯類通常就是用戶的業(yè)務(wù)所談及的事物,比如圖書(shū)館、圖書(shū)等。類圖還可用于表示實(shí)現(xiàn)類,實(shí)現(xiàn)類就是程序員處理的實(shí)體。實(shí)現(xiàn)類圖或許會(huì)與邏輯類圖顯示一些相同的類。
類在類圖的繪制上使用包含三個(gè)部分的矩形來(lái)描述,如圖2-4所示。最上面的矩形部分顯示類的名稱,中間的矩形部分顯示了類的各種屬性,下面的矩形部分顯示了類的操作或方法。
類圖的這種簡(jiǎn)單形式讓每個(gè)開(kāi)發(fā)人員都很容易知道類圖是什么、如何去繪畫(huà)基本類圖。在類圖中,需要注意的是對(duì)類與類之間關(guān)系的描述。類與類之間的關(guān)系通常有依賴、泛化和關(guān)聯(lián)這三種關(guān)系,如果把接口也看成一種類,那么還有實(shí)現(xiàn)關(guān)系,即類對(duì)接口的實(shí)現(xiàn)。對(duì)于圖2-5這樣的類圖,使用帶有頂點(diǎn)指向父類的箭頭的線段來(lái)繪制泛化關(guān)系,并且這種箭頭是一個(gè)封閉的三角形。如果兩個(gè)類都彼此知道對(duì)方,則應(yīng)該使用實(shí)線來(lái)表示關(guān)聯(lián)關(guān)系;如果只有其中一個(gè)類知道該關(guān)聯(lián)關(guān)系,則使用非封閉的三角形箭頭來(lái)表示(這種箭頭也被稱為開(kāi)箭頭)。還有一個(gè)類對(duì)接口的實(shí)現(xiàn),使用帶有頂點(diǎn)指向接口的箭頭的線段來(lái)繪制,這種箭頭仍然是一個(gè)封閉的三角形。

圖2-4 類圖示例
在圖2-5中,可以看到泛化關(guān)系和關(guān)聯(lián)關(guān)系。人員類是對(duì)圖書(shū)管理員和讀者的泛化。讀者和圖書(shū)信息相關(guān)聯(lián)。

圖2-5 相對(duì)完整的類圖示例
一個(gè)類圖可以整合其他許多概念,這將在后面進(jìn)行詳細(xì)的介紹。
3.序列圖
序列圖顯示了一個(gè)具體用例或者用例一部分的一個(gè)詳細(xì)流程。它幾乎是自描述的,序列圖不僅可以顯示流程中不同對(duì)象之間的調(diào)用關(guān)系,還可以很詳細(xì)地顯示對(duì)不同對(duì)象的不同調(diào)用。序列圖有兩個(gè)維度:垂直維度也稱時(shí)間維度,以發(fā)生的時(shí)間順序顯示消息或調(diào)用的序列;水平維度顯示消息被發(fā)送到的對(duì)象實(shí)例。序列圖在有的書(shū)中也被稱為順序圖。
序列圖的繪制和類圖一樣也是非常簡(jiǎn)單的。橫跨圖的頂部,每個(gè)框表示每個(gè)類的實(shí)例或?qū)ο蟆T诳蛑校悓?shí)例名稱和類名稱之間使用冒號(hào)分隔開(kāi)來(lái),例如myBook:Book,其中myBook是實(shí)例名稱,Book是類的名稱。如果某個(gè)類實(shí)例向另一個(gè)類實(shí)例發(fā)送一條消息,則繪制一條具有指向接收類實(shí)例的開(kāi)箭頭的連線,并把消息或方法的名稱放在連線上面。消息也分為不同的種類,可以分為同步消息、異步消息、返回消息和簡(jiǎn)單消息等。
對(duì)于序列圖的閱讀也是非常簡(jiǎn)單。從左到右啟動(dòng)序列的類實(shí)例,然后順著每條消息往下閱讀即可。圖2-6是一個(gè)簡(jiǎn)單的序列圖示例。
通過(guò)閱讀圖2-6中的示例序列圖,可以明白管理員是如何獲得盤(pán)點(diǎn)信息報(bào)表的過(guò)程。首先,管理員將盤(pán)點(diǎn)信息發(fā)送給操作員,操作員將信息審核后發(fā)送給商品盤(pán)點(diǎn)模塊,商品盤(pán)點(diǎn)模塊調(diào)用信息打印模塊打印輸出信息,最后操作員將盤(pán)點(diǎn)信息的打印報(bào)表給管理員。其中可以看作是類實(shí)例的包括管理員、操作員、商品盤(pán)點(diǎn)模塊和信息打印模塊。在每一步的操作和運(yùn)行過(guò)程中,都有自己的標(biāo)號(hào),格式是標(biāo)號(hào)、冒號(hào)和動(dòng)作,如圖2-6中所示。

圖2-6 序列圖示例
圖2-6中的序列圖僅是一般的序列圖,它只顯示了必要的易于理解的信息,以及一些對(duì)象是如何表示嵌套調(diào)用的。至于在實(shí)際的應(yīng)用過(guò)程中,需要對(duì)這些更加細(xì)化一些。
4.狀態(tài)圖
狀態(tài)圖表示某個(gè)類所處的不同狀態(tài)以及該類在這些狀態(tài)中的轉(zhuǎn)換過(guò)程。雖然每個(gè)類通常都有自己的各種狀態(tài),但并不是每個(gè)類都需要有一個(gè)自己的狀態(tài)圖。只對(duì)“感興趣的”或“需要注意的”的類才使用狀態(tài)圖進(jìn)行描述。通常來(lái)講,“感興趣的”或“需要注意的”的類是那些在系統(tǒng)活動(dòng)期間往往具有三個(gè)或更多種潛在狀態(tài)的類。
如圖2-7所示,這是一個(gè)銀行賬戶的一個(gè)狀態(tài)圖。狀態(tài)圖的符號(hào)集包含下列五個(gè)基本的元素:
- 初始起點(diǎn),使用一個(gè)實(shí)心圓來(lái)繪制。
- 狀態(tài)之間的轉(zhuǎn)換,使用具有開(kāi)箭頭的線段來(lái)繪制。
- 狀態(tài),使用圓角矩形來(lái)繪制。
- 判斷點(diǎn),使用空心圓來(lái)繪制。使用判斷點(diǎn)可以根據(jù)不同的條件進(jìn)入不同的狀態(tài)下。
- 一個(gè)或者多個(gè)終止點(diǎn),它們使用內(nèi)部包含實(shí)心圓的圓來(lái)繪制。

圖2-7 狀態(tài)圖示例
要繪制狀態(tài)圖,首先繪制起點(diǎn)和一條指向該類的初始狀態(tài)的轉(zhuǎn)換線段。狀態(tài)本身可以在圖上的任意位置繪制,然后只需使用狀態(tài)轉(zhuǎn)換線條將它們連接起來(lái)。
圖2-7中的狀態(tài)圖表達(dá)這樣一些信息:從中可以看出銀行的賬戶最初處于賬戶打開(kāi)狀態(tài)。當(dāng)客戶取款時(shí),如果賬戶的余額小于0,則此時(shí)賬戶進(jìn)入了透支狀態(tài)。如果客戶請(qǐng)求關(guān)閉,賬戶進(jìn)入賬戶關(guān)閉狀態(tài)。賬戶處于透支狀態(tài)時(shí),如果客戶存款,使得賬戶的金額大于0,這樣賬戶就會(huì)直接進(jìn)入打開(kāi)狀態(tài)。如果檢查賬戶余額時(shí),賬戶的余額小于0,并且時(shí)間已經(jīng)達(dá)到三十天以上了,那么這個(gè)賬戶直接進(jìn)入關(guān)閉狀態(tài)。
5.活動(dòng)圖
活動(dòng)圖是用來(lái)表示兩個(gè)或者更多的對(duì)象之間在處理某個(gè)活動(dòng)時(shí)的過(guò)程控制流程。活動(dòng)圖能夠在業(yè)務(wù)單元的級(jí)別上,對(duì)更高級(jí)別的業(yè)務(wù)過(guò)程進(jìn)行建模,或者對(duì)低級(jí)別的內(nèi)部類操作進(jìn)行建模。和序列圖相比,活動(dòng)圖更能夠適合對(duì)較高級(jí)別的過(guò)程建模。
在活動(dòng)圖的符號(hào)上,活動(dòng)圖的符號(hào)集與狀態(tài)圖中使用的符號(hào)集非常類似,但是還有一些差別。在活動(dòng)圖中,和狀態(tài)圖一樣,活動(dòng)圖的初始活動(dòng)也是先由一個(gè)實(shí)心圓開(kāi)始的。活動(dòng)圖的結(jié)束也和狀態(tài)圖一樣,由一個(gè)內(nèi)部包含實(shí)心圓的圓來(lái)表示。和狀態(tài)圖不同的是,活動(dòng)是通過(guò)一個(gè)圓角矩形來(lái)表示的,可以把活動(dòng)的名稱包含在這個(gè)圓角矩形的內(nèi)部。活動(dòng)可以通過(guò)活動(dòng)的轉(zhuǎn)換線段連接到其他活動(dòng)中,或者連接到判斷點(diǎn),這些判斷點(diǎn)根據(jù)判斷點(diǎn)的不同條件需要執(zhí)行不同的動(dòng)作。在活動(dòng)圖中,出現(xiàn)了一個(gè)新的概念就是泳道(Swimlane)。可以使用泳道來(lái)表示實(shí)際執(zhí)行活動(dòng)的對(duì)象。
如圖2-8所示的活動(dòng)圖,具有兩條泳道,表示兩個(gè)對(duì)象的活動(dòng)控制:銷售人員和客戶。沿箭頭方向的活動(dòng)或?qū)ο笠来螢椋轰N售人員、確定客戶需求、獲取訂單、客戶、填寫(xiě)訂單、付款、銷售人員、交付訂單、發(fā)貨、客戶、接受貨物,最后結(jié)束。
該活動(dòng)圖中有兩條泳道,顯示出有兩個(gè)對(duì)象控制著各自的活動(dòng):銷售人員和客戶。銷售人員確定客戶需求后,然后獲取訂單,將訂單轉(zhuǎn)交給客戶,客戶填寫(xiě)訂單內(nèi)容并且客戶付款。銷售人員交付已經(jīng)付款的訂單,然后發(fā)貨給客戶,客戶接受貨物完成整個(gè)貨物的交易。在這個(gè)過(guò)程中,兩個(gè)對(duì)象各自扮演著自己的角色,完成整個(gè)銷售活動(dòng)。該活動(dòng)圖還表明,客戶接受貨物是整個(gè)過(guò)程中的最后一步。

圖2-8 活動(dòng)圖示例
6.構(gòu)件圖
前面所提到的這些圖提供的都是系統(tǒng)的邏輯視圖,但是要指出某些功能實(shí)際存在于哪些地方,還需要構(gòu)件圖來(lái)表示。構(gòu)件圖提供了系統(tǒng)的物理視圖,它是根據(jù)系統(tǒng)的代碼構(gòu)件來(lái)顯示系統(tǒng)代碼的整個(gè)物理結(jié)構(gòu)。其中,構(gòu)件可以是源代碼組件、二進(jìn)制組件或可執(zhí)行組件等。在構(gòu)件中,包含它需要實(shí)現(xiàn)的一個(gè)或多個(gè)邏輯類的相關(guān)信息,從而也就創(chuàng)建了一個(gè)從邏輯視圖到構(gòu)件視圖的映射,根據(jù)構(gòu)件的相關(guān)信息很容易就分析出構(gòu)件之間的依賴關(guān)系,并可以指出其中某個(gè)構(gòu)件的變化將會(huì)對(duì)其他的構(gòu)件產(chǎn)生什么樣的影響。總之,構(gòu)件圖的用途是顯示系統(tǒng)中的某些構(gòu)件對(duì)其他一些構(gòu)件的依賴關(guān)系。
一般來(lái)說(shuō),構(gòu)件圖最經(jīng)常用于實(shí)際的編程工作中。在以構(gòu)件為基礎(chǔ)的開(kāi)發(fā)(CBD)中,構(gòu)件圖為系統(tǒng)架構(gòu)師提供了一個(gè)為解決方案進(jìn)行建模的自然形式。
如圖2-9所示,顯示了一個(gè)構(gòu)件圖。它包含了四個(gè)構(gòu)件,分別是報(bào)表工具、Web服務(wù)、Servlet API和JDBC API。從報(bào)表工具構(gòu)件指向Web服務(wù)、Servlet API和JDBC API構(gòu)件的帶箭頭的線段,表示出報(bào)表工具構(gòu)件依賴于這三個(gè)構(gòu)件。

圖2-9 構(gòu)件圖示例
7.部署圖
部署圖是用于表示該軟件系統(tǒng)如何部署到硬件環(huán)境中,它顯示出在系統(tǒng)中的不同構(gòu)件在何處運(yùn)行,即彼此的物理連接和分布,以及如何進(jìn)行彼此的通信。部署圖對(duì)系統(tǒng)運(yùn)行情況的物理連接和分布進(jìn)行了建模,因此系統(tǒng)的生產(chǎn)人員就能夠很好地利用這種圖來(lái)部署實(shí)際的系統(tǒng)。
部署圖顯示了系統(tǒng)中的硬件和軟件的物理結(jié)構(gòu)。這些部署圖可以顯示實(shí)際的計(jì)算機(jī)和設(shè)備(節(jié)點(diǎn)),以及它們之間必要的連接,同時(shí)也包括這些連接的類型。在部署圖中顯示的節(jié)點(diǎn)內(nèi),包含了如何在節(jié)點(diǎn)內(nèi)部分配了可執(zhí)行的構(gòu)件和對(duì)象,以顯示這些軟件單元在某個(gè)節(jié)點(diǎn)上的運(yùn)行情況。并且,部署圖還可以顯示各個(gè)構(gòu)件之間的依賴關(guān)系。
系統(tǒng)的部署圖從系統(tǒng)的物理結(jié)構(gòu)的節(jié)點(diǎn)來(lái)顯示屬于該節(jié)點(diǎn)的構(gòu)件,然后使用構(gòu)件圖顯示該構(gòu)件包含的類,接著使用交互圖顯示該類的對(duì)象參與的交互,最終到達(dá)某個(gè)用例。可以說(shuō),系統(tǒng)的不同視圖是用來(lái)在總體上給出系統(tǒng)一個(gè)整體的、一致的描述。
在部署圖中,圖的符號(hào)表示增加了節(jié)點(diǎn)的概念。節(jié)點(diǎn)用來(lái)表示計(jì)算資源運(yùn)行時(shí)的物理對(duì)象,通常具有內(nèi)存和處理能力。節(jié)點(diǎn)可能具有用來(lái)辨別各種資源的構(gòu)造型,如CPU、設(shè)備和內(nèi)存等。節(jié)點(diǎn)可以包含對(duì)象和構(gòu)件實(shí)例,一個(gè)節(jié)點(diǎn)可以代表一臺(tái)物理機(jī)器,或代表一個(gè)虛擬機(jī)器的節(jié)點(diǎn)。要對(duì)節(jié)點(diǎn)進(jìn)行建模,只需繪制一個(gè)三維立方體,節(jié)點(diǎn)的名稱位于立方體的上部。
圖2-10中的部署圖表明,用戶使用運(yùn)行在本地機(jī)器上的瀏覽器訪問(wèn)應(yīng)用服務(wù)器,并通過(guò)HTTP協(xié)議連接到應(yīng)用服務(wù)器上。此圖還表明應(yīng)用服務(wù)器通過(guò)ODBC數(shù)據(jù)庫(kù)接口連接到它的數(shù)據(jù)庫(kù)服務(wù)器上。客戶端瀏覽器、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器包含了實(shí)際部署的所有節(jié)點(diǎn)。

圖2-10 部署圖示例
- Software Defined Networking with OpenFlow
- Leap Motion Development Essentials
- Vue.js前端開(kāi)發(fā)基礎(chǔ)與項(xiàng)目實(shí)戰(zhàn)
- 架構(gòu)不再難(全5冊(cè))
- 少年輕松趣編程:用Scratch創(chuàng)作自己的小游戲
- Programming ArcGIS 10.1 with Python Cookbook
- 云原生Spring實(shí)戰(zhàn)
- Visual C++數(shù)字圖像處理技術(shù)詳解
- Working with Odoo
- Python Data Analysis Cookbook
- OpenGL Data Visualization Cookbook
- Oracle GoldenGate 12c Implementer's Guide
- 現(xiàn)代CPU性能分析與優(yōu)化
- micro:bit軟件指南
- 系統(tǒng)分析師UML用例實(shí)戰(zhàn)