UML 图
Last updated
Jun 16, 2023
# UML
# 每个图用在什么流程
Stage |
Structure |
Behavior |
Requirement |
Use-case |
Activity |
Analyse |
|
Sequence |
Design |
Class |
State, Communication |
Implementation |
|
|
# Class Diagram
一个简单说明 02-Tutorial-annotated.pdf

PlantUML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
@startuml
skinparam classAttributeIconSize 0
class Gast {
-einladenderMitarbeiter
+Gast(einladender:Mitarbeiter):Gast
+getEinladenderMitarbeiter():Mitarbeier
}
Gast --|> Person
Gast "*" ---> "1" Mitarbeiter : lädt ein
class Gebaeude {
-raeume:Set<Raum>
addRaum(raum):void
}
Gebaeude *-- "*" Raum
class Geraet {
-name:String
+Geraet(name:String):Geraet
+getName():String
}
class Mitarbeiter {
-mitarbeiterNummer:String
+anzahlMitarbeiter:Integer = 0
+Mitarbeiter():Mitarbeiter
+raumBuchung(raum:Raum):RaumBuchung
+getMitNo():String
}
Mitarbeiter --|> Person
abstract class Person {
-vorname:String
-nachname:String
-geburtsdatum:String
+Person(vorname:String, nachname:String, geburtsdatum:String):Person
+getVorname(): String
+getNachname(): String
+getGeburtsdatum(): String
}
class Raum {
-ausstattung:Set<Geraet>
-gebaeude:Gebaeude
Raum():Raum
getGebaeude():Gebaeude
+addGeraet(geraet:Geraet):void
}
Raum o-- "0..3" Geraet
class RaumBuchung {
-mitarbeiter:Mitarbeiter
-raum:Raum
-buchungsZeitraum:String
+Raumbuchung(mitarbeiter, raum, buchungsZeitraum)
}
Mitarbeiter "*" -- "*" Raum
(Mitarbeiter, Raum) .. RaumBuchung
@enduml
|
# 类
# 属性/方法

# Association
association 会指示
- 关联类型
- 角色
- 多边关系



- aggregation: 成员没有聚合体还是成员(树没有森林还是树)
- composition: 部分没有整体就不是部分(玩家没有游戏就不是玩家)
# 对象图
某个类的具体对象在 UML 中的表示

# State Diagram
src: Software Entwuf mit UML2 7

PlantUML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@startuml
state choice1 <<choice>>
[*] --> aus
aus --> PasswortAngeben
PasswortAngeben --> choice1
choice1 --> rot: falsch
rot --> aus :30s
choice1 --> TürOffen :richtig
state TürOffen {
state choice2 <<choice>>
[*] --> sensorActive
sensorActive --> choice2
choice2 --> [*] : niemand
choice2 --> sensorActive : jemand, 10s
}
TürOffen --> aus :after 120s
aus --> [*]
@enduml
|
# 基础路线

# 分支
静态分支: 条件在执行前检查过了

动态分支:
- 如果还要判断
- 用空心圆或者菱形
- Möglichkeit Bedingungsteile

# 原子状态和持续状态(Activity)
- atomar
- andauernd(enter, do, exit)

# Protokollzustandsautomaten
状态协议机表示了在某一个协议下, 什么操作会发生什么变化

# Hierarchy

# Nebenläufige Zustände
- 并发状态
- 两个实体(两个图) 可能在某一过程执行时同时改变状态

# History-State
- 历史状态存储了在离开上一层状态前所处的最后一个子状态
- 某个状态被打断的时候, 重新进入应该在哪个点开始

# Activity Diagram
src: Software-Entwurf mit UML2 K3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@startuml
(*) --> "Vorlesung"
if "Prüfung erfordlich" then
--> [ja] B1
--> "anmelden"
--> B2
B1 --> "Termen erfragen"
--> B2
B1 --> "vorbereiten"
--> B2
--> [gesund] Klasur
--> (*)
else
--> [nein] (*)
@enduml
|
# 活动节点
普通节点
用来表示一个活动
起始节点/终止节点

- 起始节点也可以是实心圆(不是终止那种外面有一圈的)
# 分支
条件分支

分叉与汇合

# 一个建模算法的例子
- □ 表示某一属性

# Sequence Diagram

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@startuml
actor Actor as act
participant Browser as br
participant SWTTV as tv
participant SWTPay as pay
participant CreditCard as cc
database Database as db
act -> br
br -> tv: selectVideo
tv -> db: isVidoeAvailable
tv <-- db: yes
br <-- tv: payForVideo
br -> tv: paymentForm
tv -> pay: initPayment
pay -> cc: authentorize
cc -> cc: tryAgain
pay <-- cc: yes
tv <-- pay: paymentSuccess
br <-- tv: paymentOk
tv -> db: getVideo
tv <-- db: accept
act <-- br: video
@enduml
|
# 消息的类型

- 实心箭头(如上)是过程调用
- 单边箭头 $\rightharpoonup$ 是异步消息
# 分支, 循环
- 这应该是一个大富翁
- 虚线表示没有时序关系


# 交互范围

# 时间轴/生命线
# Interaction Diagram
- 交互图

# Communication Diagram
# 图例
- character
- sequence number(可以是变量, 表达式)
- direction
- operation

# Use-case Diagram


- 用例, 即是外部可见的系统功能
- 主要由 actor, use-case 组成
# 关联

- 泛化: 指通常理解为继承的关系, 子指向父, 如 vip -> guest
- 包含: 分解的关系
- 扩展:
- 依赖 dependency: VS2010中拓展的一种关系, 指向被依赖项
# 示例
