溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

UML急速入門(mén)

發(fā)布時(shí)間:2020-06-11 20:27:53 來(lái)源:網(wǎng)絡(luò) 閱讀:1278 作者:ZeroOne01 欄目:軟件技術(shù)

UML是什么

UML定義:

  • 統(tǒng)一建模語(yǔ)言(Unified Modeling Language,縮寫(xiě)UML)
  • 非專利的第三代建模和規(guī)約語(yǔ)言

UML特點(diǎn):

  • UML是一種開(kāi)放方法
  • 用于說(shuō)明、可視化、構(gòu)建和編寫(xiě)一個(gè)正在開(kāi)發(fā)的、面向?qū)ο蟮?、軟件密集系統(tǒng)的制品的開(kāi)放方法
  • UML展現(xiàn)了一系列最佳工程實(shí)踐,這些最佳實(shí)踐在對(duì)大規(guī)模,復(fù)雜系統(tǒng)進(jìn)行建模方面,特別是在軟件架構(gòu)層次已經(jīng)被驗(yàn)證有效

在UML2.2中一共定義了14中圖示,大體分為三類:

  • 結(jié)構(gòu)式圖形:強(qiáng)調(diào)的是系統(tǒng)式的建模
  • 行為式圖形:強(qiáng)調(diào)系統(tǒng)模型中觸發(fā)的事件
  • 交互式圖形:屬于行為式圖形的子集,強(qiáng)調(diào)系統(tǒng)模型中資料流程

1.結(jié)構(gòu)式圖形:

  • 靜態(tài)圖(類圖、對(duì)象圖、包圖)
  • 實(shí)現(xiàn)圖(組件圖、部署圖)
  • 剖面圖
  • 復(fù)合結(jié)構(gòu)圖

2.行為式圖形:

  • 活動(dòng)圖
  • 狀態(tài)圖
  • 用例圖

3.交互式圖形:

  • 通信圖
  • 交互概述圖(UML2.0)
  • 時(shí)序圖(UML2.0)
  • 時(shí)間圖(UML2.0)

UML類圖:

類圖(Class Diagram):用于表示類、接口、實(shí)例等之間相互的靜態(tài)關(guān)系,雖然名字叫類圖,但類圖中并不只有類。我們來(lái)看一個(gè)比較全面的UML類圖樣例:
UML急速入門(mén)

首先在圖的上方可以看到一個(gè)“動(dòng)物”矩形框,這個(gè)矩形框就代表一個(gè)類。類圖分三層,第一層是類的名稱,如果是抽象類,類名會(huì)使用斜體表示。第二層是類的屬性,也就是類的字段或變量。第三層是類的行為,也就是方法或者說(shuō)函數(shù)。

圖中左下角的“飛翔”表示一個(gè)接口圖,與類圖的主要區(qū)別是接口圖頂端有<<interface>>。第一層自然是接口的名稱,第二層則是接口方法。接口還有另一種表示方法,也就是圖中的棒棒糖表示法。

然后我們來(lái)簡(jiǎn)單說(shuō)說(shuō)子類與父類及實(shí)現(xiàn)類與接口的關(guān)系在UML類圖中的表示方式:

當(dāng)類與類之間是繼承關(guān)系時(shí),使用空心三角形和實(shí)線來(lái)表示,而一個(gè)類實(shí)現(xiàn)了一個(gè)接口時(shí),使用空心三角形和虛線來(lái)表示,不管是繼承關(guān)系還是實(shí)現(xiàn)關(guān)系,三角形箭頭都是由子類指向父類或接口

類與類之間的關(guān)系及其在UML類圖中的表示方式,關(guān)聯(lián)關(guān)系:

當(dāng)一個(gè)類“知道”另一個(gè)類時(shí),那么它們就具有關(guān)聯(lián)關(guān)系,關(guān)聯(lián)關(guān)系使用實(shí)線箭頭表示。例如圖中的企鵝需要知道氣候這個(gè)類,此時(shí)企鵝類與氣候類就是關(guān)聯(lián)關(guān)系

聚合關(guān)系:

圖中的大雁群和大雁這兩個(gè)類就是聚合關(guān)系,我們都知道大雁是群居動(dòng)物,多只大雁可以聚合成一個(gè)雁群,所以它們之間就滿足聚合關(guān)系。聚合表示一種弱的“擁有關(guān)系”,體現(xiàn)的是A對(duì)象可以包含B對(duì)象,但B對(duì)象不是A對(duì)象的一部分。聚合關(guān)系使用空心菱形和實(shí)線箭頭來(lái)表示

合成(組合)關(guān)系:

合成是一種強(qiáng)的”擁有“關(guān)系,體現(xiàn)了嚴(yán)格的部分和整體的關(guān)系,部分與整體的生命周期一樣。上圖中的鳥(niǎo)和其翅膀就是合成(組合)關(guān)系,因?yàn)樗鼈兪遣糠趾驼w的關(guān)系,并且翅膀和鳥(niǎo)的生命周期是相同的。合成關(guān)系用實(shí)心的菱形和實(shí)線箭頭來(lái)表示。另外,在圖中合成關(guān)系的連線兩端還有一個(gè)數(shù)字1和數(shù)字2,這被稱為基數(shù),表明這一端的類可以有幾個(gè)實(shí)例。很顯然,一只鳥(niǎo)應(yīng)該有兩只翅膀,所以翅膀的基數(shù)是2。如果一個(gè)類可能有無(wú)數(shù)個(gè)實(shí)例,則就用n來(lái)表示。除了合成關(guān)系外關(guān)聯(lián)關(guān)系以及聚合關(guān)系也可以有基數(shù)

依賴關(guān)系:

我們都知道動(dòng)物維持生命就得進(jìn)行新陳代謝,那么就需要氧氣、水等物質(zhì)。也就是說(shuō),動(dòng)物依賴于氧氣和水。所以它們之間是依賴關(guān)系,使用虛線箭頭來(lái)表示。


接著我們?cè)賮?lái)看單個(gè)類的類圖:
UML急速入門(mén)

同樣的從上至下分別是類名、屬性以及行為。屬性和行為前面都有權(quán)限表示符,+ 表示public、- 表示private、# 表示protected、~ 表示default。屬性和行為中有下劃線的表示static,即靜態(tài)的屬性、方法。

而與該類圖所對(duì)應(yīng)的Java代碼如下:

public abstract class StudentClass {

    public String name;

    private int age;

    protected double weight;

    double height;

    public static char sex;

    public void eat(String food) {
    }

    protected void drink() {
    }

    private void walk() {
    }

    void run() {
    }

    public abstract void study();

    public boolean openMac() {
        return true;
    }

    public static void playGame(){
    }
}

記憶技巧

下面介紹一些簡(jiǎn)單UML類圖的記憶技巧:

記憶技巧1:UML箭頭方向:

  • 從子類指向父類

可能有些人會(huì)認(rèn)為子類是以父類為基礎(chǔ)的,箭頭應(yīng)從父類指向子類。但我們都知道定義子類時(shí)需要通過(guò)extends關(guān)鍵字指定父類,那么子類一定是知道父類定義的,只有知道對(duì)方信息時(shí)才能指向?qū)Ψ?,而父類是不知道子類是如何定義的,所以箭頭方向應(yīng)從子類指向父類。

記憶技巧2:實(shí)線 - 繼承 | 虛線 - 實(shí)現(xiàn):

  • 空心三角箭頭:繼承或?qū)崿F(xiàn):
  • 實(shí)線 - 繼承,is a 關(guān)系,擴(kuò)展目的,所以不虛,很結(jié)實(shí)
  • 虛線 - 實(shí)現(xiàn),虛線之所以“虛”是因?yàn)闊o(wú)實(shí)體,因?yàn)榻涌谑切枰粚?shí)現(xiàn)的
    UML急速入門(mén)

記憶技巧3:實(shí)線 - 關(guān)聯(lián) | 虛線 - 依賴:

  • 虛線 - 依賴關(guān)系:臨時(shí)用一下,若即若離,虛無(wú)縹緲,若有若無(wú),所以是虛線,表示一種使用關(guān)系,一個(gè)類需要借助另一個(gè)類來(lái)實(shí)現(xiàn)功能。一般是一個(gè)類里的函數(shù)使用了另一個(gè)類作為參數(shù),或作為返回值
  • 實(shí)線 - 關(guān)聯(lián)關(guān)系:關(guān)系穩(wěn)定,實(shí)打?qū)嵉年P(guān)系,鐵哥們,表示一個(gè)類對(duì)象和另一個(gè)類對(duì)象有關(guān)聯(lián),通常是一個(gè)類中有另一個(gè)類對(duì)象做為屬性
    UML急速入門(mén)

記憶技巧4: 空心菱形 - 聚合 | 實(shí)心菱形 - 組合:

  • 我們可以想象菱形就是一個(gè)盛東西的器皿(例如盤(pán)子,或者代碼中的集合容器)
  • 而聚合代表空器皿里可以放很多相同的東西,聚在一起(箭頭方向所指的類),所以是整體和局部的關(guān)系,兩者有著獨(dú)立的生命周期,是has a的關(guān)系,是弱關(guān)系
  • 組合則代表器皿里已經(jīng)有實(shí)體結(jié)構(gòu)的存在,可以說(shuō)是生死與共了,是整體與局部的關(guān)系,和聚合關(guān)系相比,關(guān)系更加強(qiáng)烈,兩者有相同的生命周期,contains - a 的關(guān)系,是強(qiáng)關(guān)系

UML急速入門(mén)

記憶技巧5:常見(jiàn)基數(shù)表達(dá)及含義,假設(shè)有A類和B類,數(shù)字標(biāo)記在A類一端:

  • 0..1:0個(gè)或1個(gè)實(shí)例,在系統(tǒng)某一時(shí)刻,代表B類的實(shí)例可以與0個(gè)或1個(gè)A類的實(shí)例相關(guān)
  • 0..*:0個(gè)或多個(gè)實(shí)例,代表B類的實(shí)例可以與0個(gè)或多個(gè)A類的實(shí)例相關(guān)
  • 1..1:1個(gè)實(shí)例,代表B類的實(shí)例可以與1個(gè)A類的實(shí)例相關(guān)
  • 1:只能有1個(gè)實(shí)例,代表B類的實(shí)例可以與1個(gè)A類的實(shí)例相關(guān)
  • 1..*:至少有1個(gè)實(shí)例,代表B類的實(shí)例可以與1個(gè)或多個(gè)A類的實(shí)例相關(guān)

注:通常會(huì)省略“..”直接使用數(shù)字表示


UML時(shí)序圖:

時(shí)序圖(Sequence Diagram):是顯示對(duì)象之間交互的圖,這些對(duì)象是按時(shí)間順序排列的

時(shí)序圖中包括的建模元素主要有:

  • 對(duì)象(Actor)
  • 生命線(Lifeline)
  • 控制焦點(diǎn)(Focus of control)
  • 消息(Message)

我們來(lái)看一個(gè)簡(jiǎn)單的時(shí)序圖, 左邊是代碼右邊是時(shí)序圖:
UML急速入門(mén)

右邊的時(shí)序圖的三個(gè)方框表示三個(gè)實(shí)例:Client、Service、Device,而下面的虛線則是該實(shí)例的生命線,時(shí)間從上向下流逝,生命線僅存在于實(shí)例的生命周期內(nèi)。其中虛線上的細(xì)長(zhǎng)方形表示實(shí)例處于某種活動(dòng)中,稱之為控制焦點(diǎn)。黑色的實(shí)線實(shí)心箭頭表示方法的同步調(diào)用,異步調(diào)用是實(shí)線非實(shí)心箭頭,而虛線非實(shí)心箭頭則表示方法的結(jié)束返回。這些箭頭所表示的元素就是消息,例如圖中的work和open等。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI