軟件設(shè)計(jì)師考試 | 第七章 面向?qū)ο蠹夹g(shù) | UML

面向?qū)ο蠓治鰪?qiáng)調(diào)的是對一個(gè)系統(tǒng)中對象的特征和行為的定義则涯。

統(tǒng)一建模語言(UML)是面向?qū)ο筌浖臉?biāo)準(zhǔn)化建模語言线定。

UML的詞匯表包含三種構(gòu)造塊:

  • 事物受楼,對模型中最具有代表性的成分的抽象酒繁。
  • 關(guān)系孽惰,關(guān)系把事物結(jié)合在一起膳凝。
  • 碑隆,圖聚集了相關(guān)的事物。

(一)事物

UML中有四種事物:結(jié)構(gòu)事物蹬音、行為事物上煤、分組事物和注釋事物。

1. 結(jié)構(gòu)事物

通常是模型的靜態(tài)部分著淆,描述概念或物理元素劫狠。

結(jié)構(gòu)事物包括:

  • 接口
  • 協(xié)作
  • 用例
  • 主動(dòng)類
  • 構(gòu)件
  • 制品
  • 結(jié)點(diǎn)

各種結(jié)構(gòu)事物的圖形化表示如下圖所示:


結(jié)構(gòu)事物的圖形表示

2. 行為事物

行為事物是UML模型的動(dòng)態(tài)部分,它們是模型中的動(dòng)詞永部,描述了跨越時(shí)間和空間的行為独泞。

行為事物包括:

  • 交互
  • 狀態(tài)機(jī)
  • 活動(dòng)

各種行為事物的圖形表示如下圖所示:


行為事物的圖形表示

交互 由在特定語境中共同完成一定任務(wù)的一組對象之間交換的消息組成。一個(gè)對象群體的行為或單個(gè)操作的行為可以用一個(gè)交互來描述苔埋。交互涉及一些其他元素懦砂,包括消息、動(dòng)作序列和鏈。

狀態(tài)機(jī) 描述了一個(gè)對象或一個(gè)交互在生命期內(nèi)響應(yīng)事件所經(jīng)歷的狀態(tài)序列孕惜。單個(gè)類或一組類之間協(xié)作的行為可以用狀態(tài)機(jī)來描述愧薛。一個(gè)狀態(tài)機(jī)涉及到一些其他元素,包括狀態(tài)衫画、轉(zhuǎn)換毫炉、事件和活動(dòng)。

活動(dòng) 是描述計(jì)算機(jī)過程執(zhí)行的步驟序列削罩,注重步驟之間的流而不關(guān)心哪個(gè)對象執(zhí)行哪個(gè)步驟瞄勾。活動(dòng)的一個(gè)步驟稱為一個(gè)動(dòng)作弥激,在圖形上进陡,把動(dòng)作畫成一個(gè)圓角矩形,在其中含有指明其用途的名字微服。

3. 分組事物

分組事物是UML模型的組織部分趾疚,是一些由模型分解成的“盒子”。

在所有的分組事物中以蕴,最主要的分組事物是包糙麦。包把元素組織成組的機(jī)制。結(jié)構(gòu)事物丛肮、行為事物甚至其他分組事物都可以放在包中赡磅。

包的圖形化表示如下圖所示:


4. 注釋事物

注釋事物是UML模型的解釋部分。這些注釋事物用來描述宝与、說明和標(biāo)注模型的任何元素焚廊。

注解是一種主要的解釋事物。注解是一個(gè)依附于一個(gè)元素或一組元素之上习劫,對它進(jìn)行約束或解釋的簡單符號(hào)咆瘟。

注解的圖形化表示如下圖所示:


注解

(二)關(guān)系

UML中有四種關(guān)系:

  1. 依賴
    依賴是兩個(gè)事物間的語義關(guān)系,其中一個(gè)事物發(fā)生變化會(huì)影響另一個(gè)事物的語義榜聂。
    在圖形上搞疗,把一個(gè)依賴畫成一條可能有方向的虛線。如下圖所示:

    依賴

  2. 關(guān)聯(lián)
    關(guān)聯(lián)是一種結(jié)構(gòu)關(guān)系须肆,它描述了一組鏈匿乃,鏈?zhǔn)菍ο笾g的連接。
    聚集是一種特殊類型的關(guān)聯(lián)豌汇,它描述了整體和部分間的結(jié)構(gòu)關(guān)系幢炸。
    關(guān)聯(lián)和聚集的圖形化表示如下圖所示:

    關(guān)聯(lián)

  3. 泛化
    泛化是一種特殊/一般關(guān)系,特殊元素(子元素)的對象可替代一般元素(父元素)的對象拒贱。
    在圖形上宛徊,把一個(gè)泛化關(guān)系畫成一條帶有空心箭頭的實(shí)線佛嬉,它指向父元素。如下圖所示:

    泛化

  4. 實(shí)現(xiàn)
    實(shí)現(xiàn)是類元之間的語義關(guān)系闸天,其中一個(gè)類元指定了由另一個(gè)類元保證執(zhí)行的契約暖呕。
    在兩種情況下會(huì)使用實(shí)現(xiàn)關(guān)系:一種是在接口和實(shí)現(xiàn)它們的類或構(gòu)件之間;另一種是在用例和實(shí)現(xiàn)它們的協(xié)作之間苞氮。
    在圖形上湾揽,把一個(gè)實(shí)現(xiàn)關(guān)系畫成一條帶有空心箭頭的虛線,如下圖所示:

    實(shí)現(xiàn)


(三)UML中的圖

圖是一組元素的圖形表示笼吟,大多數(shù)情況下把圖畫成頂點(diǎn)(代表事物)和豢馕铩(代表關(guān)系)的連通圖。

UML2.0提供了13種圖贷帮,分別是:

  • 類圖
  • 對象圖
  • 用例圖
  • 序列圖
  • 通信圖
  • 狀態(tài)圖
  • 活動(dòng)圖
  • 構(gòu)件圖
  • 組合結(jié)構(gòu)圖
  • 部署圖
  • 包圖
  • 交互概覽圖
  • 計(jì)時(shí)圖

其中戚揭,序列圖、通信圖撵枢、交互概覽圖和計(jì)時(shí)圖均被稱為交互圖民晒。

1. 類圖

類圖展現(xiàn)了類、接口锄禽、協(xié)作和它們之間的關(guān)系镀虐。如下圖所示:


UML類圖

類圖用于對系統(tǒng)的靜態(tài)設(shè)計(jì)視圖建模。

當(dāng)對系統(tǒng)的靜態(tài)設(shè)計(jì)視圖建模時(shí)沟绪,通常以下述三種方式之一使用類圖:

  1. 對系統(tǒng)的詞匯建模
    需要考慮:哪些抽象是考慮中的系統(tǒng)的一部分,哪些抽象處于系統(tǒng)邊界之外空猜。
    用類圖詳細(xì)描述這些抽象和它們的職責(zé)绽慈。
  2. 對簡單的協(xié)作建模
    協(xié)作是一些共同工作的類、接口和其他元素的群體辈毯,該群體提供的一些合作行為強(qiáng)于所有這些元素的行為之和坝疼。
    例如,當(dāng)對分布式系統(tǒng)的事務(wù)語義建模時(shí)谆沃,不能僅僅盯著一個(gè)單獨(dú)的類來推斷要發(fā)生什么钝凶,而要有相互協(xié)作的一組類來實(shí)現(xiàn)這些語義。
    用類圖對這組類以及它們之間的關(guān)系進(jìn)行可視化和詳述唁影。
  3. 對邏輯數(shù)據(jù)庫模式建模
    將模式看作為數(shù)據(jù)庫的概念設(shè)計(jì)的藍(lán)圖耕陷,可以用類圖對這些數(shù)據(jù)庫的模式建模。

2. 對象圖

對象圖展現(xiàn)了某一時(shí)刻一組對象以及它們之間的關(guān)系据沈,描述了類圖中所建立的事物的實(shí)例的靜態(tài)快照哟沫。
對象圖一般包括對象和鏈。如下圖所示:


UML對象圖

對象圖給出系統(tǒng)的靜態(tài)設(shè)計(jì)視圖或靜態(tài)進(jìn)程視圖锌介,這種視圖主要支持系統(tǒng)的功能需求嗜诀,即系統(tǒng)應(yīng)該提供給最終用戶的服務(wù)猾警。利用對象圖可以對靜態(tài)數(shù)據(jù)結(jié)構(gòu)建模,主要是對對象結(jié)構(gòu)進(jìn)行建模隆敢。
對象圖表示了交互圖表示的動(dòng)態(tài)場景的一個(gè)靜態(tài)畫面发皿,可以使用對象圖可視化、詳述拂蝎、構(gòu)造和文檔化系統(tǒng)中存在的實(shí)例以及它們之間的相互關(guān)系穴墅。

3. 用例圖

用例圖展現(xiàn)了一組用例、參與者及它們之間的關(guān)系匣屡。
用例圖通常包括:用例封救;參與者;用例之間的擴(kuò)展關(guān)系和包含關(guān)系捣作,參與者和用例之間的關(guān)聯(lián)關(guān)系誉结,用例與用例以及參與者與參與者之間的泛化關(guān)系。如下圖所示:


UML用例圖

用例圖對系統(tǒng)的靜態(tài)用例視圖進(jìn)行建模券躁。這個(gè)視圖主要支持系統(tǒng)的行為惩坑,即該系統(tǒng)在它的周邊環(huán)境的語境中所提供的外部可見服務(wù)。
當(dāng)對系統(tǒng)的靜態(tài)用例視圖建模時(shí)也拜,可以用以下兩種方式來使用用例圖:

  1. 對系統(tǒng)的語境建模
    對一個(gè)系統(tǒng)的語境進(jìn)行建模以舒,包括圍繞整個(gè)系統(tǒng)畫一條線,并聲明有哪些參與者位于系統(tǒng)之外并與系統(tǒng)進(jìn)行交互慢哈。在這里蔓钟,用例圖說明了參與者以及它們所扮演的角色的含義。
  2. 對系統(tǒng)的需求建模
    對一個(gè)系統(tǒng)的需求進(jìn)行建模卵贱,包括說明這個(gè)系統(tǒng)應(yīng)該做什么滥沫,而不考慮系統(tǒng)應(yīng)該怎樣做。在這里键俱,用例圖說明了系統(tǒng)想要的行為兰绣。

4. 交互圖

交互圖用于對系統(tǒng)的動(dòng)態(tài)方面進(jìn)行建模。

交互圖表現(xiàn)為序列圖编振、通信圖缀辩、交互概覽圖和計(jì)時(shí)圖。

(1)序列圖

序列圖強(qiáng)調(diào)消息時(shí)間順序的交互圖踪央。描述了以時(shí)間順序組織的對象之間的交互活動(dòng)臀玄。如下圖所示:


UML序列圖

形成序列圖時(shí),首先把參加交互的對象放在圖的上方杯瞻,沿水平方向排列镐牺。通常把發(fā)起交互的對象放在左邊,下級(jí)對象依次放在右邊魁莉。然后睬涧,把這些對象發(fā)送和接收的消息沿垂直方向按時(shí)間順序從上到下放置募胃。以此來形成控制流隨時(shí)間推移的清晰的可視化軌跡。

序列圖與通信圖不同的兩個(gè)特征:

  • 序列圖有對象生命線
    對象生命線是一條垂直的虛線畦浓,表示一個(gè)對象在一段時(shí)間內(nèi)存在痹束。
    • 大部分對象存在于整個(gè)交互過程中,所以這些對象全部排列在圖的頂部讶请,其生命線從圖的頂部畫到圖的底部祷嘶。
    • 少部分對象在交互過程中創(chuàng)建,它們的生命線從接收到構(gòu)造型為create的消息時(shí)開始夺溢。
    • 對象也可以在交互過程中撤銷论巍,它們的生命線在接收到構(gòu)造型為destroy的消息時(shí)結(jié)束(并且給出一個(gè)大X的標(biāo)記表明生命的結(jié)束)。
  • 序列圖有控制焦點(diǎn)
    控制焦點(diǎn)是一個(gè)瘦高的矩形风响,表示一個(gè)對象執(zhí)行一個(gè)動(dòng)作所經(jīng)歷的時(shí)間段嘉汰,既可以是直接執(zhí)行,也可以是通過下級(jí)過程執(zhí)行状勤。

矩形的頂部表示動(dòng)作的開始鞋怀,底部表示動(dòng)作的結(jié)束。還可以通過將另一個(gè)控制焦點(diǎn)放在它的父控制焦點(diǎn)的右邊來顯示控制焦點(diǎn)的嵌套持搜。

(2)通信圖

通信圖強(qiáng)調(diào)接收和發(fā)送消息的對象的結(jié)構(gòu)組織密似。也被稱為協(xié)作圖。

產(chǎn)生一張通信圖葫盼,首先要將參加交互的對象作為圖的頂點(diǎn)残腌,然后把連接這些對象的鏈表示為圖的弧,最后用對象發(fā)送和接收的消息來修飾這些鏈贫导。如下圖所示:


UML通信圖

通信圖有兩個(gè)不同于序列圖的特性:

  • 通信圖有路徑
    為了指出一個(gè)對象如何與另一個(gè)對象鏈接废累,可以在鏈的末端附上一個(gè)路徑構(gòu)造型。通常只需要顯式地表示以下幾種鏈的路徑:local(局部)脱盲、parameter(參數(shù))global(全局)日缨、self(自身)钱反。
  • 通信圖有順序號(hào)
    為了表示一個(gè)消息的時(shí)間順序,可以給消息加一個(gè)數(shù)字前綴匣距。如果有嵌套的話面哥,可以使用帶小數(shù)點(diǎn)的號(hào)碼。

(3)交互概覽圖

交互概覽圖強(qiáng)調(diào)控制流毅待。是UML2.0新增的交互圖之一尚卫,它是活動(dòng)圖的變體,描述業(yè)務(wù)過程中的控制流概覽尸红,軟件過程中的詳細(xì)邏輯概覽吱涉,以及將多個(gè)圖進(jìn)行連接刹泄,抽象掉了消息和生命線。使用活動(dòng)圖的表示法怎爵,如下圖所示:

交互概覽圖

(4)計(jì)時(shí)圖

計(jì)時(shí)圖是另一種新增的特石,特別適合實(shí)時(shí)和嵌入式系統(tǒng)建模的交互圖,關(guān)注沿著線性時(shí)間軸鳖链、生命線內(nèi)部和生命線之間的條件改變姆蘸。它描述對象狀態(tài)隨著時(shí)間改變的情況,項(xiàng)示波器芙委,適合分析周期和非周期性任務(wù)逞敷。如下圖所示:


UML計(jì)時(shí)圖

5. 狀態(tài)圖

狀態(tài)圖展現(xiàn)了一個(gè)狀態(tài)機(jī),它由狀態(tài)灌侣、轉(zhuǎn)換推捐、事件和活動(dòng)組成。強(qiáng)調(diào)對象行為的事件順序顶瞳。

狀態(tài)圖通常包括簡單狀態(tài)和組合狀態(tài)玖姑、轉(zhuǎn)換(事件和動(dòng)作)。如下圖所示:


UML狀態(tài)圖

狀態(tài)是指對象的生命周期中某個(gè)條件或狀態(tài)慨菱,在此期間對象將滿足某些條件焰络、執(zhí)行某些活動(dòng)或等待某些事件,是對象執(zhí)行了一系列活動(dòng)的結(jié)果符喝,當(dāng)某個(gè)事件發(fā)生后闪彼,對象的狀態(tài)將發(fā)生變化。

6. 活動(dòng)圖

活動(dòng)圖是一種特殊的狀態(tài)圖协饲,它展現(xiàn)了在系統(tǒng)內(nèi)從一個(gè)活動(dòng)到另一個(gè)活動(dòng)的流程畏腕。如下圖所示:


UML活動(dòng)圖

活動(dòng)圖一般包括活動(dòng)狀態(tài)和動(dòng)作狀態(tài)、轉(zhuǎn)換和對象茉稠。

當(dāng)對一個(gè)系統(tǒng)的動(dòng)態(tài)方面建模時(shí)描馅,通常有兩種使用活動(dòng)圖的方式:

  • 對工作流建模
    關(guān)注的是與系統(tǒng)進(jìn)行協(xié)作的參與者所觀察到的活動(dòng)。
  • 對操作建模
    此時(shí)是把活動(dòng)圖當(dāng)作流程圖使用而线,對一個(gè)計(jì)算的細(xì)節(jié)部分建模铭污。

7. 構(gòu)件圖

構(gòu)件圖展現(xiàn)了一組構(gòu)件之間的組織和依賴。構(gòu)件圖專注于系統(tǒng)的靜態(tài)實(shí)現(xiàn)視圖膀篮,與類圖類似嘹狞,通常把構(gòu)件映射成一個(gè)或多個(gè)類、接口或協(xié)作誓竿。如下圖所示:


UML構(gòu)件圖

8. 組合結(jié)構(gòu)圖

組合結(jié)構(gòu)圖用于描述一個(gè)分類器(如類磅网、構(gòu)件或用例)的內(nèi)部結(jié)構(gòu),分類器與系統(tǒng)中其他組成部分之間的交互端口筷屡,展示一組相互協(xié)作的實(shí)例如何完成特定的任務(wù)涧偷,描述設(shè)計(jì)簸喂、架構(gòu)模式或策略。組合結(jié)構(gòu)圖的內(nèi)部結(jié)構(gòu)和協(xié)作使用圖分別如以下兩圖所示:


內(nèi)部結(jié)構(gòu)組合結(jié)構(gòu)圖
協(xié)作使用組合結(jié)構(gòu)圖

9. 部署圖

部署圖是用來對面向?qū)ο笙到y(tǒng)的物理方面建模的方法嫂丙,展現(xiàn)了運(yùn)行時(shí)處理結(jié)點(diǎn)以及其中構(gòu)件(制品)的配置娘赴。

在部署圖中,通常一個(gè)結(jié)點(diǎn)是一個(gè)在運(yùn)行時(shí)存在并代表一項(xiàng)計(jì)算資源的物理元素跟啤,至少擁有一些內(nèi)容诽表,常常具有處理能力,包含一個(gè)或多個(gè)構(gòu)件隅肥。如下圖所示:


UML部署圖

10. 包圖

包圖是用于把模型本身組織成層次結(jié)構(gòu)的通用機(jī)制竿奏,不能執(zhí)行,展現(xiàn)由模型本身分解而成的組織單元以及其間的依賴關(guān)系腥放。

包可以擁有其他元素泛啸,可以是類、接口秃症、構(gòu)件候址、結(jié)點(diǎn)、協(xié)作种柑、用例和圖岗仑,甚至是嵌套的其他包。如下圖所示:


UML包圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聚请,一起剝皮案震驚了整個(gè)濱河市荠雕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驶赏,老刑警劉巖炸卑,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異煤傍,居然都是意外死亡盖文,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湃密,你說我怎么就攤上這事。” “怎么了桐玻?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵篙挽,是天一觀的道長。 經(jīng)常有香客問我镊靴,道長铣卡,這世上最難降的妖魔是什么链韭? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮煮落,結(jié)果婚禮上敞峭,老公的妹妹穿的比我還像新娘。我一直安慰自己蝉仇,他們只是感情好旋讹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轿衔,像睡著了一般沉迹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上害驹,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天鞭呕,我揣著相機(jī)與錄音,去河邊找鬼宛官。 笑死葫松,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的底洗。 我是一名探鬼主播腋么,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枷恕!你這毒婦竟也來了党晋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤徐块,失蹤者是張志新(化名)和其女友劉穎未玻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胡控,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扳剿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昼激。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庇绽。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖橙困,靈堂內(nèi)的尸體忽然破棺而出瞧掺,到底是詐尸還是另有隱情,我是刑警寧澤凡傅,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布辟狈,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哼转。R本人自食惡果不足惜明未,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壹蔓。 院中可真熱鬧趟妥,春花似錦、人聲如沸佣蓉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偏螺。三九已至行疏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間套像,已是汗流浹背酿联。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夺巩,地道東北人贞让。 一個(gè)月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像柳譬,于是被迫代替她去往敵國和親喳张。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容