設(shè)計(jì)模式之旅1--UML基礎(chǔ)

1. 簡(jiǎn)介

UML(Unified Modeling Language),即統(tǒng)一建模語(yǔ)言,適用于描述以用例為驅(qū)動(dòng),以體系結(jié)構(gòu)為中心的軟件設(shè)計(jì)的全過(guò)程。為面向?qū)ο筌浖O(shè)計(jì)提供統(tǒng)一的、標(biāo)準(zhǔn)的、可視化的建模語(yǔ)言。系統(tǒng)的建模有時(shí)候很難通過(guò)文字來(lái)表達(dá)(比如說(shuō)一些復(fù)雜的過(guò)程等等),用圖來(lái)說(shuō)明是最好的辦法。

UML的構(gòu)造塊包含3種:

  • 事物(4種):結(jié)構(gòu)事物,行為事物,分組事物,注釋事物
  • 關(guān)系(4種):泛化關(guān)系,實(shí)現(xiàn)關(guān)系,依賴(lài)關(guān)系,關(guān)聯(lián)關(guān)系(特例:聚合關(guān)系、組合關(guān)系) (強(qiáng)度排序:組合>聚合>關(guān)聯(lián)>依賴(lài))
  • 圖(10種):用例圖,類(lèi)圖,對(duì)象圖,包圖,組件圖,部署圖,狀態(tài)圖,活動(dòng)圖,序列圖,協(xié)作圖 (常用:用例圖,類(lèi)圖,對(duì)象圖)

注意:事物是對(duì)模型中最具代表性的成分的抽象;關(guān)系把事物結(jié)合在一起;圖聚集了相關(guān)的事物。

2. UML事物(4種)

UML包含4種事物:

  • 構(gòu)件事物:UML模型的靜態(tài)部分,描述概念或物理元素。它包括以下幾種:

    • 類(lèi):具有相同屬性相同操作 相同關(guān)系相同語(yǔ)義的對(duì)象的描述
    • 接口:描述元素的外部可見(jiàn)行為,即服務(wù)集合的定義說(shuō)明
    • 協(xié)作:描述了一組事物間的相互作用的集合
    • 用例:代表一個(gè)系統(tǒng)或系統(tǒng)的一部分行為,是一組動(dòng)作序列的集合
    • 構(gòu)件:系統(tǒng)中物理存在,可替換的部件
    • 節(jié)點(diǎn):運(yùn)行時(shí)存在的物理元素
    • 另外,參與者、信號(hào)應(yīng)用、文檔庫(kù)、頁(yè)表等都是上述基本事物的變體
  • 行為事物:UML模型圖的動(dòng)態(tài)部分,描述跨越空間和時(shí)間的行為。它包括以下幾種:

    • 交互:實(shí)現(xiàn)某功能的一組構(gòu)件事物之間的消息的集合,涉及消息、動(dòng)作序列、鏈接
    • 狀態(tài)機(jī):描述事物或交互在生命周期內(nèi)響應(yīng)事件所經(jīng)歷的狀態(tài)序列
  • 分組事物:UML模型圖的組織部分,描述事物的組織結(jié)構(gòu)

    • 包:把元素組織成組的機(jī)制
  • 注釋事物:UML模型的解釋部分,用來(lái)對(duì)模型中的元素進(jìn)行說(shuō)明,解釋

    • 注解:對(duì)元素進(jìn)行約束或解釋的簡(jiǎn)單符號(hào)

3. UML關(guān)系

3.1 泛化(generalization)關(guān)系

  • 說(shuō)白了就是繼承關(guān)系。是一個(gè)類(lèi)(稱(chēng)為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱(chēng)為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力。
  • 繼承是類(lèi)與類(lèi)或者接口與接口之間最常見(jiàn)的關(guān)系。
  • 在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性。
泛化關(guān)系

3.2 實(shí)現(xiàn)(realization)關(guān)系

  • 說(shuō)白了就是接口關(guān)系。指的是一個(gè)class類(lèi)實(shí)現(xiàn)interface接口(可以是多個(gè))的功能;實(shí)現(xiàn)是類(lèi)與接口之間最常見(jiàn)的關(guān)系;
  • 在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí),在設(shè)計(jì)時(shí)一般沒(méi)有爭(zhēng)議性;
實(shí)現(xiàn)關(guān)系

3.3 依賴(lài)(dependency)關(guān)系

  • 依賴(lài)關(guān)系也是類(lèi)與類(lèi)之間的連接。表示一個(gè)類(lèi)依賴(lài)于另一個(gè)類(lèi)的定義。
  • 依賴(lài)關(guān)系總是單向的。
  • 可以簡(jiǎn)單的理解,就是一個(gè)類(lèi)A使用到了另一個(gè)類(lèi)B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是B類(lèi)的變化會(huì)影響到A;比如某人要過(guò)河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴(lài);
  • 表現(xiàn)在代碼層面,為類(lèi)B作為參數(shù)被類(lèi)A在某個(gè)method方法中使用。在java中,依賴(lài)關(guān)系體現(xiàn)為: 局部變量, 方法中的參數(shù), 和對(duì)靜態(tài)方法的調(diào)用。
依賴(lài)關(guān)系

3.4 關(guān)聯(lián)(association)關(guān)系

  • 關(guān)聯(lián)關(guān)系: 表示類(lèi)與類(lèi)之間的聯(lián)接, 它使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法。
  • 關(guān)聯(lián)可以使用單箭頭表示單向關(guān)聯(lián), 使用雙箭頭或不使用箭頭表示雙向關(guān)聯(lián), 不建議使用雙向關(guān)聯(lián)。
  • 關(guān)聯(lián)有兩個(gè)端點(diǎn), 在每個(gè)端點(diǎn)可以有一個(gè)基數(shù), 表示這個(gè)關(guān)聯(lián)的類(lèi)可以有幾個(gè)實(shí)例。
  • 關(guān)聯(lián)關(guān)系體現(xiàn)的是兩個(gè)類(lèi)、或者類(lèi)與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴(lài)關(guān)系,比如我和我的朋友;這種關(guān)系比依賴(lài)更強(qiáng)、不存在依賴(lài)關(guān)系的偶然性、關(guān)系也不是臨時(shí)性的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的。
  • 表現(xiàn)在代碼層面,為被關(guān)聯(lián)類(lèi)B以類(lèi)屬性的形式出現(xiàn)在關(guān)聯(lián)類(lèi)A中,也可能是關(guān)聯(lián)類(lèi)A引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)B的全局變量;在java語(yǔ)言中關(guān)聯(lián)關(guān)系是使用實(shí)例變量實(shí)現(xiàn)的。

常見(jiàn)的基數(shù)及含義:

  • 0..1:0 或1 個(gè)實(shí)例
  • 0..*: 對(duì)實(shí)例的數(shù)目沒(méi)有限制
  • 1: 只能有一個(gè)實(shí)例
  • 1..*: 至少有一個(gè)實(shí)例
關(guān)聯(lián)關(guān)系

3.4.1 聚合(aggregation)關(guān)系

  • 聚合關(guān)系: 關(guān)聯(lián)關(guān)系的一種特例, 是強(qiáng)的關(guān)聯(lián)關(guān)系。
  • 聚合是整體和個(gè)體之間的關(guān)系,即has-a的關(guān)系,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享;
  • 比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等;
  • 表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分;聚合關(guān)系也是使用實(shí)例變量實(shí)現(xiàn)的。從java語(yǔ)法上是分不出關(guān)聯(lián)和聚合的。
  • 關(guān)聯(lián)關(guān)系中兩個(gè)類(lèi)是處于相同的層次, 而聚合關(guān)系中兩不類(lèi)是處于不平等的層次, 一個(gè)表示整體, 一個(gè)表示部分。
聚合關(guān)系

3.4.2 組合(合成)關(guān)系(composition)

  • 組合關(guān)系:也是關(guān)聯(lián)關(guān)系的一種特例,關(guān)聯(lián)關(guān)系的一種特例, 是強(qiáng)的關(guān)聯(lián)關(guān)系。
  • 他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱(chēng)為強(qiáng)聚合。
  • 他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束;比如你和你的大腦;
  • 組合關(guān)系不能共享。
  • 表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分。
組合關(guān)系

4 用例圖(Use Case Diagram )

  • 用例圖是從用戶(hù)角度描述系統(tǒng)功能,是用戶(hù)所能觀察到的系統(tǒng)功能的模型圖,用例是系統(tǒng)中的一個(gè)功能單元。
  • 例如下圖就描述了用戶(hù)的購(gòu)物功能的模型:
用例圖

5. 類(lèi)圖(Class Diagram)

  • 類(lèi)圖描述系統(tǒng)中類(lèi)的靜態(tài)結(jié)構(gòu)。不僅定義系統(tǒng)中的類(lèi),表示類(lèi)之間的聯(lián)系如關(guān)聯(lián)、依賴(lài)、聚合等,也包括類(lèi)的內(nèi)部結(jié)構(gòu)(類(lèi)的屬性和操作)。
  • 例如下面的單例模式的類(lèi)圖:
單例模式

需要注意:

  • 每一行分別表示:類(lèi)型、成員屬性、函數(shù)(操作)
  • 類(lèi)名斜體表示為抽象
  • 下劃線(xiàn)表示靜態(tài)
  • 訪(fǎng)問(wèn)權(quán)限控制:+表示public;#表示protect;-表示private;~表示package

6. 時(shí)序圖(Sequence Diagram)

  • 順序圖顯示對(duì)象之間的動(dòng)態(tài)合作關(guān)系,它強(qiáng)調(diào)對(duì)象之間消息發(fā)送的順序,同時(shí)顯示對(duì)象之間的交互。
  • 順序圖的一個(gè)用途是用來(lái)表示用例中的行為順序。當(dāng)執(zhí)行一個(gè)用例行為時(shí),順序圖中的每條消息對(duì)應(yīng)了一個(gè)類(lèi)操作或引起狀態(tài)轉(zhuǎn)換的觸發(fā)事件。
  • 例如下面的是支付寶的支付流程:
時(shí)序圖

需要注意:

  • 實(shí)線(xiàn)表示同步消息
  • 虛線(xiàn)表示異步消息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容