0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UML精準(zhǔn)入門指南2

jf_78858299 ? 來源:蝸?;ヂ?lián)網(wǎng) ? 作者:蝸?;ヂ?lián)網(wǎng) ? 2023-05-05 11:17 ? 次閱讀

五、UML 的適用場(chǎng)景

UML 既可以描述某個(gè)問題領(lǐng)域,也可以表達(dá)構(gòu)思中的軟件設(shè)計(jì),還可以描述已經(jīng)完成的軟件實(shí)現(xiàn)。

它適用于面向?qū)ο蠓治鲈O(shè)計(jì)的整個(gè)過程。這個(gè)過程可以分為三個(gè)階段,如下圖。

圖片

第一個(gè)階段是通過建模將現(xiàn)實(shí)世界轉(zhuǎn)為業(yè)務(wù)模型。業(yè)務(wù)模型真實(shí)映射了參與者(業(yè)務(wù)活動(dòng)的驅(qū)動(dòng)者)在現(xiàn)實(shí)世界的行為。

圖片

從圖里可以看到,現(xiàn)實(shí)世界映射到業(yè)務(wù)模型后,是使用 參與者 和 用例 這兩個(gè) UML 的核心元素表達(dá)的。參與者作為一個(gè)特定事件的驅(qū)動(dòng)者,用例則描述了這個(gè)驅(qū)動(dòng)者的業(yè)務(wù)目標(biāo)。文章后邊也會(huì)提到這兩個(gè)元素。

第二個(gè)階段是對(duì)業(yè)務(wù)模型概念化,建立適合計(jì)算機(jī)理解和實(shí)現(xiàn)的模型,也就是概念模型,或者叫分析模型。分析模型向上映射了原始需求,向下為計(jì)算機(jī)實(shí)現(xiàn)規(guī)定了一種高層次的抽象,是一種過渡模型。

圖片

現(xiàn)實(shí)世界千差萬(wàn)別的業(yè)務(wù),都用 邊界、控制和實(shí)體這幾個(gè)核心元素來描述,同時(shí)也引入了 包、組件 這些與現(xiàn)實(shí)世界毫不相干的概念做包裝。

第三個(gè)階段是對(duì)概念模型實(shí)例化,得到相對(duì)詳細(xì)的設(shè)計(jì)模型。

圖片

在設(shè)計(jì)模型中,概念模型中的邊界類可以被轉(zhuǎn)化為操作界面或者系統(tǒng)接口;控制類可以被轉(zhuǎn)化為計(jì)算程序或控制程序,例如工作流、算法體等;實(shí)體類可以轉(zhuǎn)化為數(shù)據(jù)庫(kù)表、XML 文檔或者其他帶有持久化特征的類。

同樣的概念模型會(huì)因?yàn)檫x擇不同而得到不同的設(shè)計(jì)模型。比如技術(shù)選型上使用不同的編程語(yǔ)言,不同的中間件就會(huì)得到不同的設(shè)計(jì)。

為什么需要這一道轉(zhuǎn)換呢?

因?yàn)椤斑吔纭?、“控制”、“?shí)體”這些對(duì)象化的概念,雖然是計(jì)算機(jī)可以理解的,但它并不是真正的對(duì)象實(shí)例,也就是說它們并不是可執(zhí)行代碼,概念模型只是紙上談兵。真正的對(duì)象世界行為是由 Java 類、C++ 類、JSP 等這些可執(zhí)行代碼構(gòu)成的。

換句話說,設(shè)計(jì)模型是概念模型在特定環(huán)境和條件下的實(shí)例化,實(shí)例化后的對(duì)象行為執(zhí)行了概念模型描述的那些信息。

以下是面向?qū)ο蠓治鲈O(shè)計(jì)的完整過程,它表達(dá)了現(xiàn)實(shí)世界是怎么通過 UML 映射到對(duì)象世界的。

圖片

六、UML 的組成結(jié)構(gòu)

前面花了比較大的篇幅分析了 UML 的定位和適用場(chǎng)景,目的是幫助讀者建立對(duì) UML 整體系統(tǒng)性的認(rèn)知,而不是過早的陷入 UML 的使用細(xì)節(jié)里。我們要應(yīng)用一項(xiàng)技術(shù)或工具,不能單純的因?yàn)樗目犰呕蛘哒f業(yè)界都在用所以我們要用,而應(yīng)該結(jié)合自己的使用場(chǎng)景以及技術(shù)或工具的特點(diǎn),來確認(rèn)這項(xiàng)技術(shù)或工具究竟是不是我們需要的。

在讀者了解 UML 在面向?qū)ο蠓治鲈O(shè)計(jì)領(lǐng)域優(yōu)秀的特性之后,我們?cè)賮砜纯?UML 的一些細(xì)節(jié)。

凡是語(yǔ)言,都會(huì)存在基本詞匯和語(yǔ)法。

那么對(duì)應(yīng)到 UML 里,基本詞匯就是核心元素,語(yǔ)法就是核心視圖。

UML 的組成結(jié)構(gòu)如下圖:

圖片

6.1 核心元素

我們先介紹核心元素,下圖是大綱。

圖片

6.1.1 版型

版型:也稱「類型」或「構(gòu)造型」。是對(duì) UML 元素基礎(chǔ)定義的擴(kuò)展,在元素基礎(chǔ)定義的基礎(chǔ)上賦予特別的含義,使得這個(gè)元素適用于特定的場(chǎng)合。

比如,我們前邊提到的「邊界類」、「實(shí)體類」、「控制類」都是類的版型。

6.1.2 參與者

圖片

參與者定位:事件的第一驅(qū)動(dòng)者,也是系統(tǒng)的服務(wù)方。比如你在電商網(wǎng)站購(gòu)物,你就是參與者。

6.1.3 用例

圖片

用例定位:系統(tǒng)執(zhí)行的一系列操作,并生成參與者可以觀察的值。比如你在電商網(wǎng)站交易,會(huì)生成在線訂單,用戶下單就是一個(gè)用例。

用例版型:

圖片

  • 業(yè)務(wù)用例:用于需求階段業(yè)務(wù)領(lǐng)域建模。與計(jì)算機(jī)系統(tǒng)建模無關(guān),比如下單可以不依賴在線服務(wù),而只是線下簽署協(xié)議。業(yè)務(wù)建模的目標(biāo)是讓需求人員和客戶能夠達(dá)成共識(shí)。
  • 業(yè)務(wù)用例實(shí)現(xiàn):業(yè)務(wù)用例的一種實(shí)現(xiàn)方式,一個(gè)業(yè)務(wù)用例可以有多種實(shí)現(xiàn)方式。比如下單后的支付,可以用現(xiàn)金,也可以銀行卡轉(zhuǎn)賬,還可以第三方支付。

圖片

  • 概念用例:用于獲取業(yè)務(wù)模型中的關(guān)鍵概念,分析出核心業(yè)務(wù)結(jié)構(gòu)。業(yè)務(wù)架構(gòu)就是概念建模階段產(chǎn)生,同時(shí)為系統(tǒng)建模階段提供重要指導(dǎo)。比如用戶下單這個(gè)用例,可以從實(shí)現(xiàn)過程中獲得一些核心業(yè)務(wù),并把它們展現(xiàn)出來。

圖片

  • 系統(tǒng)用例:用于定義系統(tǒng)范圍、獲取功能性需求。也就是我們常掛在嘴邊的用例。像業(yè)務(wù)用例中提到的線下簽約的方式,就不會(huì)納入到系統(tǒng)用例中,但如果是電子簽約的話,就可以成為系統(tǒng)用例了。
  • 系統(tǒng)用例實(shí)現(xiàn):系統(tǒng)用例的一種實(shí)現(xiàn)方式,一個(gè)系統(tǒng)用例可以有多種實(shí)現(xiàn)方式。比如下單后的支付,可以接入微信支付接口,也可以接入支付寶支付接口。

你會(huì)發(fā)現(xiàn),同是用例的版型,業(yè)務(wù)用例與系統(tǒng)用例的區(qū)別就在于業(yè)務(wù)用例是客戶業(yè)務(wù)視角,系統(tǒng)用例是系統(tǒng)視角。

6.1.4 邊界

圖片

邊界定位:用于業(yè)務(wù)建模和系統(tǒng)建模階段的分析,保證分析粒度在一定的范圍內(nèi),不會(huì)擴(kuò)散。

比如一個(gè)電商網(wǎng)站按領(lǐng)域職責(zé)作為邊界,會(huì)有店鋪域、商品域、會(huì)員域、交易域、支付域和營(yíng)銷域等。各域只負(fù)責(zé)域內(nèi)的事情,就能夠減少混亂緊耦合的局面。

一個(gè)好的分析和設(shè)計(jì)如同一筐帶殼的雞蛋,清清爽爽;一個(gè)差的設(shè)計(jì)如同一堆打碎了殼的雞蛋,粘粘糊糊。殼,是好壞的關(guān)鍵。

6.1.5 業(yè)務(wù)實(shí)體

圖片

業(yè)務(wù)實(shí)體定位:它代表參與者執(zhí)行業(yè)務(wù)用例時(shí)所處理或使用的事物,特別用于在業(yè)務(wù)建模階段建立領(lǐng)域模型。業(yè)務(wù)實(shí)體是類(class)的一種版型。

業(yè)務(wù)實(shí)體的結(jié)構(gòu):包含屬性和方法。屬性用來保存業(yè)務(wù)實(shí)體特征,方法用來訪問業(yè)務(wù)實(shí)體。比如一臺(tái)電視,把它看成一個(gè)業(yè)務(wù)實(shí)體的話,它的屬性有運(yùn)行狀態(tài)和音量,它的方法就是遙控器,我們可以開、關(guān)、調(diào)聲音,但是我們不可以試圖讓它飛起來——因?yàn)樗鼪]有這樣的方法。

6.1.6 包

圖片

包定位:容納并為其他 UML 元素分類。比如 Java 后端經(jīng)常會(huì)提供 jar 包給接入方使用。

6.1.7 分析類

圖片

分析類定位:用于代表系統(tǒng)中主要的職責(zé)簇,由此產(chǎn)生系統(tǒng)的設(shè)計(jì)類和子系統(tǒng)。

  • 邊界類:用于對(duì)系統(tǒng)外部環(huán)境和內(nèi)部運(yùn)作之間的交互進(jìn)行建模。比如現(xiàn)實(shí)世界的窗戶,計(jì)算機(jī)世界的網(wǎng)頁(yè)。
  • 控制類:用于對(duì)用例特有的控制行為進(jìn)行建模。比如顯示邏輯和業(yè)務(wù)邏輯通過控制層分離的 MVC 架構(gòu)。
  • 實(shí)體類:用于對(duì)需要存儲(chǔ)的信息和相關(guān)行為進(jìn)行建模。源于業(yè)務(wù)模型中的業(yè)務(wù)實(shí)體。

分析類的抽象層次較高,比設(shè)計(jì)和實(shí)現(xiàn)要穩(wěn)定很多,因此方便維護(hù),也更容易獲得一個(gè)穩(wěn)定架構(gòu)來指導(dǎo)整個(gè)軟件的開發(fā)。

6.1.8 設(shè)計(jì)類

圖片

設(shè)計(jì)類定位:是系統(tǒng)實(shí)施中一個(gè)或多個(gè)對(duì)象的抽象,由此映射到實(shí)現(xiàn)代碼,依賴于實(shí)施語(yǔ)言。

設(shè)計(jì)類結(jié)構(gòu):

  • 類型:對(duì)對(duì)象某一方面特征的歸納和抽象。映射到編碼中的 class。
  • 屬性:對(duì)象特征。映射到編碼中的 field。
  • 方法:訪問對(duì)象屬性的唯一途徑。映射到編碼中的 method。

6.1.9 關(guān)系

圖片

關(guān)系定位:抽象出對(duì)象之間的聯(lián)系,讓對(duì)象構(gòu)成某個(gè)特定的結(jié)構(gòu)。

關(guān)系分為以下幾種:

  • 關(guān)聯(lián)(association)
  • 關(guān)系:是一種擁有的關(guān)系,即一個(gè)類知道另一個(gè)類的屬性和方法;比如老師與學(xué)生可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。
  • 箭頭和連線:帶普通箭頭的實(shí)心線,指向被擁有者。
  • 適用場(chǎng)景:類圖。
  • 依賴(dependency)
  • 關(guān)系:是一種使用的關(guān)系,即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助,是一種弱關(guān)系,隨運(yùn)行場(chǎng)景變化。比如削蘋果時(shí),人依賴于刀,脫離了這個(gè)場(chǎng)景,依賴關(guān)系就不存在了。
  • 箭頭和連線:帶箭頭的虛線,指向被使用者。
  • 適用場(chǎng)景:類圖。
  • 泛化(generalization)
  • 關(guān)系:是一種繼承的關(guān)系,比如貓是動(dòng)物的一種。
  • 箭頭和連線:帶三角的實(shí)線,箭頭指向父類。
  • 適用場(chǎng)景:類圖。
  • 實(shí)現(xiàn)(realization)
  • 關(guān)系:是一種實(shí)現(xiàn)的關(guān)系,比如用例和用例實(shí)現(xiàn)的關(guān)系,接口與實(shí)現(xiàn)類的關(guān)系。
  • 箭頭和連線:帶三角的虛線,箭頭指向用例實(shí)現(xiàn)或接口類。
  • 適用場(chǎng)景:用例圖,類圖。
  • 聚合(aggregation)
  • 關(guān)系:是整體與部分的關(guān)系,且部分可以離開整體而單獨(dú)存在。生命周期各自獨(dú)立。如車和輪胎是聚合關(guān)系,輪胎離開車仍然可以存在。
  • 箭頭和連線:帶空心菱形的實(shí)線,菱形指向整體。
  • 適用場(chǎng)景:類圖。
  • 組合(composition)
  • 關(guān)系:是整體與部分的關(guān)系,但部分不能離開整體而單獨(dú)存在。同生同滅。如公司和部門是組合關(guān)系,沒有公司就不存在部門。
  • 箭頭和連線:帶實(shí)心(黑色實(shí)心:要死一起死,良心是黑的)菱形的實(shí)線,菱形指向整體。
  • 適用場(chǎng)景:類圖。

關(guān)聯(lián)關(guān)系和依賴關(guān)系的區(qū)別:

  • 關(guān)聯(lián)關(guān)系是靜態(tài)天然的聯(lián)系,依賴關(guān)系是動(dòng)態(tài)臨時(shí)的聯(lián)系。

此外還有只用于用例中的關(guān)系:

圖片

  • 擴(kuò)展(extends)
  • 關(guān)系:用于在用例模型中說明向基本用例中的某個(gè)擴(kuò)展點(diǎn)插入擴(kuò)展用例。
  • 箭頭和連線:帶箭頭的虛線加版型<>。
  • 特點(diǎn):用例可選。
  • 包含(include)
  • 關(guān)系:用于在用例模型中說明在執(zhí)行基本用例的用例實(shí)例過程中插入的行為段。
  • 箭頭和連線:帶箭頭的虛線加版型<>
  • 特點(diǎn):用例必需。

6.1.10 組件

圖片

組件定位:實(shí)現(xiàn)特定功能的邏輯代碼模塊。比如分布式應(yīng)用架構(gòu)下,將業(yè)務(wù)目標(biāo)拆成多個(gè)功能,每個(gè)功能作為組件獨(dú)立部署。這樣這些組件也能被其他場(chǎng)景復(fù)用。

6.1.11 節(jié)點(diǎn)

圖片

節(jié)點(diǎn)定位:表示應(yīng)用程序的部署單元。比如分布式應(yīng)用的環(huán)境中,服務(wù)器或設(shè)備會(huì)有很多,就需要通過節(jié)點(diǎn)來體現(xiàn)物理部署的情況。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPB-RA2E2-快速入門指南

    FPB-RA2E2-快速入門指南
    發(fā)表于 01-11 18:52 ?1次下載
    FPB-RA<b class='flag-5'>2E2</b>-快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    EK-RA2E2-快速入門指南

    EK-RA2E2-快速入門指南
    發(fā)表于 01-30 18:47 ?0次下載
    EK-RA<b class='flag-5'>2E2</b>-快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    瑞薩 R8C/2F 入門套件快速入門指南

    瑞薩 R8C/2F 入門套件快速入門指南
    發(fā)表于 04-27 19:07 ?0次下載
    瑞薩 R8C/<b class='flag-5'>2</b>F <b class='flag-5'>入門</b>套件快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    瑞薩電子 R8C/2D 入門套件快速入門指南

    瑞薩電子 R8C/2D 入門套件快速入門指南
    發(fā)表于 04-28 19:06 ?0次下載
    瑞薩電子 R8C/<b class='flag-5'>2</b>D <b class='flag-5'>入門</b>套件快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    UML精準(zhǔn)入門指南1

    自己。因此我希望可以結(jié)合自己的經(jīng)驗(yàn)和實(shí)踐,寫一篇 UML入門文章,幫助做面向?qū)ο蟮某绦騿T朋友能更好的利用它,從而順利完成自己的編程設(shè)計(jì)工作。
    的頭像 發(fā)表于 05-05 11:16 ?537次閱讀
    <b class='flag-5'>UML</b><b class='flag-5'>精準(zhǔn)入門</b><b class='flag-5'>指南</b>1

    UML精準(zhǔn)入門指南3

    自己。因此我希望可以結(jié)合自己的經(jīng)驗(yàn)和實(shí)踐,寫一篇 UML入門文章,幫助做面向?qū)ο蟮某绦騿T朋友能更好的利用它,從而順利完成自己的編程設(shè)計(jì)工作。
    的頭像 發(fā)表于 05-05 11:17 ?685次閱讀
    <b class='flag-5'>UML</b><b class='flag-5'>精準(zhǔn)入門</b><b class='flag-5'>指南</b>3

    EK-RA4E2– 快速入門指南

    EK-RA4E2 – 快速入門指南
    發(fā)表于 05-12 19:23 ?0次下載
    EK-RA4E<b class='flag-5'>2</b>– 快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    FPB-RA2E2-快速入門指南

    FPB-RA2E2-快速入門指南
    發(fā)表于 06-30 20:39 ?1次下載
    FPB-RA<b class='flag-5'>2E2</b>-快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    OB1203SD-BT2-EVK 快速入門指南

    OB1203SD-BT2-EVK 快速入門指南
    發(fā)表于 07-03 19:48 ?0次下載
    OB1203SD-BT<b class='flag-5'>2</b>-EVK 快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    EK-RA2E2-快速入門指南

    EK-RA2E2-快速入門指南
    發(fā)表于 07-03 20:12 ?0次下載
    EK-RA<b class='flag-5'>2E2</b>-快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    EK-RA2E1 – 快速入門指南

    EK-RA2E1 – 快速入門指南
    發(fā)表于 07-04 19:40 ?0次下載
    EK-RA<b class='flag-5'>2</b>E1 – 快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    EK-RA4M2– 快速入門指南

    EK-RA4M2 – 快速入門指南
    發(fā)表于 07-04 19:41 ?0次下載
    EK-RA4M<b class='flag-5'>2</b>– 快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    EK-RA2L1-快速入門指南

    EK-RA2L1 - 快速入門指南
    發(fā)表于 07-04 19:53 ?0次下載
    EK-RA<b class='flag-5'>2</b>L1-快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    EK-RA6M2– 快速入門指南

    EK-RA6M2 – 快速入門指南
    發(fā)表于 07-04 20:54 ?0次下載
    EK-RA6M<b class='flag-5'>2</b>– 快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>

    Stream-it!-RZ-V2快速入門指南

    Stream-it! - RZ-V2 快速入門指南
    發(fā)表于 07-10 18:58 ?0次下載
    Stream-it!-RZ-V<b class='flag-5'>2</b>快速<b class='flag-5'>入門</b><b class='flag-5'>指南</b>