上篇文章講解完類(lèi)圖實(shí)體,現(xiàn)在講解類(lèi)圖關(guān)聯(lián),如果沒(méi)閱讀過(guò)類(lèi)圖實(shí)體的那篇文章,鏈接在這:UML 從懵逼到精通(1) —— 類(lèi)圖實(shí)體 ,這節(jié)繼續(xù)還是使用 StarUML 來(lái)講解。
1. 類(lèi)圖關(guān)聯(lián)

下面一個(gè)一個(gè)講解上圖的關(guān)聯(lián)屬性。
1.2 Association
Association 是雙向關(guān)聯(lián)的意思,比如老師與學(xué)生就是一個(gè)雙向關(guān)聯(lián)的關(guān)系。舉例如下:

上面這個(gè)圖 Student 的 1..* 的意思一個(gè)到多個(gè)的意思,也就是代表一個(gè) Teacher 對(duì)象對(duì)應(yīng)多個(gè) Student。
1.3 Directed Association
這個(gè)關(guān)聯(lián)是有方向關(guān)聯(lián)的意思,舉例圖如下:

這個(gè)的意思是就是被關(guān)聯(lián)類(lèi) B 以類(lèi)屬性出現(xiàn)在類(lèi) A。
1.4 Aggregation
這個(gè)是聚合的意思,體現(xiàn)了整體和部分的關(guān)系。

上圖的意思就是一個(gè) School 類(lèi)擁有一個(gè)或多個(gè) Student 類(lèi)。
1.5 Composition
是一種比 Aggregation 更強(qiáng)的聚合關(guān)系,類(lèi)似于孕婦與胎兒的關(guān)系,胎兒是依附于孕婦的,如果孕婦死了,胎兒也不能生存。舉例如圖:

1.6 Dependency
這個(gè)的意思其實(shí)就是一個(gè)類(lèi)依賴(lài)另一個(gè)類(lèi),舉例來(lái)說(shuō)就是一個(gè)類(lèi)作為參數(shù)在另一個(gè)類(lèi)的方法中作為調(diào)用。

1.7 Generalization
這個(gè)的意思是泛化關(guān)系,表示一個(gè)類(lèi)對(duì)另一個(gè)類(lèi)的繼承。下圖就是 A 繼承 B 的意思。

1.8 Interface Realization
這個(gè)也非常簡(jiǎn)單,就是接口實(shí)現(xiàn)的意思。舉例如下圖:

2. 時(shí)序圖
2.1 定義
時(shí)序圖其實(shí)就是對(duì)象之間傳遞消息的時(shí)間順序。現(xiàn)在還是使用 StarUML 來(lái)講解時(shí)序圖的元素。


2.2 Lifeline
這個(gè)的意思就是一個(gè)對(duì)象,舉例如下圖:

2.3 Message
這個(gè)的意思就是發(fā)送一條普通消息,比如用戶(hù)發(fā)送一條登錄的消息給服務(wù)器,舉例如下圖:

2.4 Self Message
這個(gè)的意思就是自己發(fā)送消息給自己,比如一個(gè)對(duì)象的一個(gè)方法調(diào)用了本對(duì)象的另一個(gè)方法,舉例如下圖:

2.5 Async Message
這個(gè)的意思是異步消息,舉例如下圖:

這個(gè)圖的意思就是 User 發(fā)出 Login 的消息給 Server,Server 發(fā)送保存用戶(hù)消息給到數(shù)據(jù)庫(kù),注意這里的消息是異步消息。
2.6 Reply Message
這里的意思是回調(diào)消息,舉例如下圖:

上圖的意思就是 User 發(fā)出 Login 的消息給 Server 后,Server 同時(shí)發(fā)出異步消息給數(shù)據(jù)庫(kù)和登錄結(jié)果給到用戶(hù)。
2.7 Create Message
這個(gè)的意思就是創(chuàng)建一個(gè)對(duì)象,舉例如下圖:

2.8 Delete Message
這個(gè)的意思是銷(xiāo)毀一個(gè)對(duì)象,舉例如下圖:

2.9 Async Signal Message
這個(gè)的意思就是發(fā)送一個(gè)信號(hào)消息,意思就是當(dāng)某個(gè)對(duì)象達(dá)到某個(gè)條件后就會(huì)自動(dòng)發(fā)送一個(gè)信號(hào)消息給另一個(gè)對(duì)象,類(lèi)似于觀(guān)察者模式。

2.10 Found Message
這個(gè)的意思就是發(fā)送一個(gè)不知道來(lái)源的消息,舉例如下圖:

2.11 Lost Message
這個(gè)的意思就是消息發(fā)送到一個(gè)不知道來(lái)源的地方,也可以說(shuō)消息沒(méi)有到達(dá)目的地,舉例如下圖:

2.12 Endpoint
這個(gè)的意思就是一個(gè)不知來(lái)源的消息對(duì)象,如下圖:

2.13 Gate
這個(gè)的意思用于在時(shí)序圖外與圖內(nèi)的消息交互,舉例如下圖:

上圖的正方形就是 Gate。
2.14 State Invariant
這個(gè)的意思就是約束某個(gè)對(duì)象要在某一個(gè)狀態(tài)下,舉例如下圖:

這個(gè)的意思就是說(shuō)在 start 開(kāi)始前,Task 必須要在 Finish 狀態(tài)。
2.15 Combined Fragment
這個(gè)的翻譯叫組合片段,它是用來(lái)解決交互執(zhí)行的條件和方式。
組合片段常用的有這么幾種:
| 類(lèi)型 | 名稱(chēng) | 說(shuō)明 |
|---|---|---|
| alt(alternatives) | 選擇 | 包含一個(gè)片段列表,這個(gè)片段列表有備選的消息序列,每次只能走一個(gè)消息序列 |
| opt(option) | 選項(xiàng) | 包含一個(gè)可能會(huì)發(fā)生的消息序列 |
| loop(iteration) | 重復(fù) | 包含一個(gè)可以重復(fù)的消息序列 |
| par(parallel) | 并行 | 包含一個(gè)可以并行的消息序列 |
| break(break) | 中斷 | 如果執(zhí)行了此部分則放棄了序列的其他部分的執(zhí)行,可用于中斷 loop 片段 |
以下來(lái)各自舉例說(shuō)明:
2.15.1 alt(alternatives)

上圖的意思就是當(dāng)滿(mǎn)足了 a > 1 條件后,就會(huì)執(zhí)行 Message1,否則執(zhí)行 Message2。
2.15.2 opt(option)

上圖的意思就是當(dāng)滿(mǎn)足了 a > 1 條件后,才會(huì)執(zhí)行 Message1。
2.15.3 loop(iteration)

上圖的意思是不停重復(fù)發(fā)送 Message1 消息。如果要限定 loop 的次數(shù)的話(huà)也可以按下圖這樣:

這樣就代表這個(gè)循環(huán)重復(fù)了 10 次。
2.15.4 par(parallel)

上圖的意思就是并行發(fā)送三條消息。
2.15.6 break(break)

上圖的意思就是當(dāng) a > 0 時(shí),就會(huì)跳出循環(huán),發(fā)送消息到 ClassC。
常用的組合片段大概就是這些,如果各位對(duì)其他片段有興趣的話(huà),可以自行研究,這里就不再細(xì)說(shuō)了。
2.16 Continuation

這個(gè)的意思用來(lái)表示這個(gè)序列的作用。
2.17 Interaction Use
這個(gè)的意思就是用來(lái)描述兩個(gè)對(duì)象的交互現(xiàn)象,舉例如下:

這個(gè)的意思就是 User 和 UserManager 的交互結(jié)果,User 使用 id 和 password 作為參數(shù),UserManager 返回 result 作為 結(jié)果。
參考書(shū)籍與文章:
《UML和模式應(yīng)用》
《大象:Thinking in UML》
UML Message
UML Sequence Diagrams