上篇文章讲解完类图实体,现在讲解类图关联,如果没阅读过类图实体的那篇文章,链接在这:UML 从懵逼到精通(1) —— 类图实体 ,这节继续还是使用 StarUML 来讲解。
1. 类图关联

下面一个一个讲解上图的关联属性。
1.2 Association
Association 是双向关联的意思,比如老师与学生就是一个双向关联的关系。举例如下:

上面这个图 Student 的 1..* 的意思一个到多个的意思,也就是代表一个 Teacher 对象对应多个 Student。
1.3 Directed Association
这个关联是有方向关联的意思,举例图如下:

这个的意思是就是被关联类 B 以类属性出现在类 A。
1.4 Aggregation
这个是聚合的意思,体现了整体和部分的关系。

上图的意思就是一个 School 类拥有一个或多个 Student 类。
1.5 Composition
是一种比 Aggregation 更强的聚合关系,类似于孕妇与胎儿的关系,胎儿是依附于孕妇的,如果孕妇死了,胎儿也不能生存。举例如图:

1.6 Dependency
这个的意思其实就是一个类依赖另一个类,举例来说就是一个类作为参数在另一个类的方法中作为调用。

1.7 Generalization
这个的意思是泛化关系,表示一个类对另一个类的继承。下图就是 A 继承 B 的意思。

1.8 Interface Realization
这个也非常简单,就是接口实现的意思。举例如下图:

2. 时序图
2.1 定义
时序图其实就是对象之间传递消息的时间顺序。现在还是使用 StarUML 来讲解时序图的元素。


2.2 Lifeline
这个的意思就是一个对象,举例如下图:

2.3 Message
这个的意思就是发送一条普通消息,比如用户发送一条登录的消息给服务器,举例如下图:

2.4 Self Message
这个的意思就是自己发送消息给自己,比如一个对象的一个方法调用了本对象的另一个方法,举例如下图:

2.5 Async Message
这个的意思是异步消息,举例如下图:

这个图的意思就是 User 发出 Login 的消息给 Server,Server 发送保存用户消息给到数据库,注意这里的消息是异步消息。
2.6 Reply Message
这里的意思是回调消息,举例如下图:

上图的意思就是 User 发出 Login 的消息给 Server 后,Server 同时发出异步消息给数据库和登录结果给到用户。
2.7 Create Message
这个的意思就是创建一个对象,举例如下图:

2.8 Delete Message
这个的意思是销毁一个对象,举例如下图:

2.9 Async Signal Message
这个的意思就是发送一个信号消息,意思就是当某个对象达到某个条件后就会自动发送一个信号消息给另一个对象,类似于观察者模式。

2.10 Found Message
这个的意思就是发送一个不知道来源的消息,举例如下图:

2.11 Lost Message
这个的意思就是消息发送到一个不知道来源的地方,也可以说消息没有到达目的地,举例如下图:

2.12 Endpoint
这个的意思就是一个不知来源的消息对象,如下图:

2.13 Gate
这个的意思用于在时序图外与图内的消息交互,举例如下图:

上图的正方形就是 Gate。
2.14 State Invariant
这个的意思就是约束某个对象要在某一个状态下,举例如下图:

这个的意思就是说在 start 开始前,Task 必须要在 Finish 状态。
2.15 Combined Fragment
这个的翻译叫组合片段,它是用来解决交互执行的条件和方式。
组合片段常用的有这么几种:
类型 | 名称 | 说明 |
---|---|---|
alt(alternatives) | 选择 | 包含一个片段列表,这个片段列表有备选的消息序列,每次只能走一个消息序列 |
opt(option) | 选项 | 包含一个可能会发生的消息序列 |
loop(iteration) | 重复 | 包含一个可以重复的消息序列 |
par(parallel) | 并行 | 包含一个可以并行的消息序列 |
break(break) | 中断 | 如果执行了此部分则放弃了序列的其他部分的执行,可用于中断 loop 片段 |
以下来各自举例说明:
2.15.1 alt(alternatives)

上图的意思就是当满足了 a > 1 条件后,就会执行 Message1,否则执行 Message2。
2.15.2 opt(option)

上图的意思就是当满足了 a > 1 条件后,才会执行 Message1。
2.15.3 loop(iteration)

上图的意思是不停重复发送 Message1 消息。如果要限定 loop 的次数的话也可以按下图这样:

这样就代表这个循环重复了 10 次。
2.15.4 par(parallel)

上图的意思就是并行发送三条消息。
2.15.6 break(break)

上图的意思就是当 a > 0 时,就会跳出循环,发送消息到 ClassC。
常用的组合片段大概就是这些,如果各位对其他片段有兴趣的话,可以自行研究,这里就不再细说了。
2.16 Continuation

这个的意思用来表示这个序列的作用。
2.17 Interaction Use
这个的意思就是用来描述两个对象的交互现象,举例如下:

这个的意思就是 User 和 UserManager 的交互结果,User 使用 id 和 password 作为参数,UserManager 返回 result 作为 结果。
参考书籍与文章:
《UML和模式应用》
《大象:Thinking in UML》
UML Message
UML Sequence Diagrams
网友评论