UML序列图总结

序列图主要用于展示对象之间交互的顺序。

序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。

消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。

 

序列图中涉及的元素:

1.   生命线:

生命线名称可带下划线。当使用下划线时,意味着序列图中的生命线代表一个类的特定实体。

 

2.       同步消息

发送人在它继续之前,将等待同步消息响应

 

3.       异步消息

在发送方继续之前,无需等待响应的消息

 

4.       注释

 

5.       约束

约束的符号很简单;格式是: [Boolean Test]

6.       组合片段

组合片段 用来解决交互执行的条件及方式。 它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。

常用的组合片段有:

a.       抉择(Alt)

抉择用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if..else..

抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

 

b.       选项(Opt)

包含一个可能发生或不发生的序列

c.       循环(Loop)

片段重复一定次数。 可以在临界中指示片段重复的条件。

 

d.       并行(Par)

 

下表列出了常用的组合片段:

片段类型

名称

说明

Opt

选项

包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。

Alt

抉择

包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。

可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

Loop

循环

片段重复一定次数。 可以在临界中指示片段重复的条件。

Loop 组合片段具有“Min”“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。

Break

中断

如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。

Par

并行

并行处理。 片段中的事件可以交错。

Critical

关键

用在 Par  Seq 片段中。 指示此片段中的消息不得与其他消息交错。

Seq

弱顺序

有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。

Strict

强顺序

有两个或更多操作数片段。 这些片段必须按给定顺序发生。

 

有关如何解释序列的片段

默认情况下,序列图表明可能发生的一系列消息。 在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。

以下片段类型可用于更改此释义:

片段类型

名称

说明

Consider

考虑

指定此片段描述的消息列表。 其他消息可发生在运行的系统中,但对此描述来说意义不大。

“Messages”属性中键入该列表。

Ignore

忽略

此片段未描述的消息列表。 这些消息可发生在运行的系统中,但对此描述来说意义不大。

“Messages”属性中键入该列表。

Assert

断言

操作数片段指定唯一有效的序列。 通常用在 Consider  Ignore 片段中。

Neg

否定

此片段中显示的序列不得发生。 通常用在 Consider  Ignore 片段中。




### 如何在UML序列图中正确描述消息 在UML序列图中,消息是用来表示对象之间交互的核心元素。以下是关于如何正确描述消息的方法: #### 1. **消息的基本形式** 消息通常通过带箭头的线条连接两个对象的生命线,用于表示从发送方到接收方的信息传递。每条消息都应附带一个名称或其他标识信息[^1]。 #### 2. **四种主要的消息类型** - **简单消息** 简单消息是最基础的形式,用来表示任意类型的通信行为,无需区分同步或异步特性。它适用于不需要关注具体实现细节的情况[^4]。 - **同步消息** 同步消息的特点在于发送方会暂停自身的执行流程,直到接收到对方完成任务后的确认回复为止。这种消息常用于阻塞式的函数调用场景,在图形上表现为实心箭头指向目标生命线,并在其下方绘制激活框以体现等待状态[^1]。 - **异步消息** 异步消息允许发送方立即恢复自己的工作而不用理会接收者的回应状况;因此不会存在后续依赖关系。此类消息在线路上采用开口箭头标记[^4]。 - **自反消息** 当某个特定条件下需要让同一个实体内部重复利用某些逻辑单元时,则需要用到所谓的“自我调用”,也就是所谓‘反射’现象——即主体既是发起者又是接受者角色兼备的情形之下产生的通讯联系。此时会在同一条垂直线上画出弯曲轨迹来代表回路路径. #### 3. **返回消息** 当涉及到请求—响应模式下的数据交换过程分析时,“答复”作为必不可少的一部分自然也要体现在图表当中。尽管实际绘图过程中可能省略显式标注出来的返程路线部分,但从理论上讲它们确实存在着并且能够帮助理解整个事务链路全貌。对于同步消息而言,默认假定存在隐含的反馈环节;而对于那些明确指出需展示完整往返周期样式的案例来说,则应该额外增加虚线加开箭头样式来回避歧义。 #### 4. **高级特征 - 控制结构 (仅限于 UML 2.x)** 随着版本迭代升级至更高标准之后引入了一些增强型语法支持复杂业务流建模需求的功能模块,比如循环体、分支判断语句等等都可以借助专门定义好的组合构造块来进行直观呈现。例如:"alt"/"opt"/"loop"等关键字分别对应不同种类的选择性或者反复性的操作指令集封装区域[^2]: - `alt` 表达互斥选项间的抉择可能性; - `opt` 描述可选动作项的存在与否; - `loop` 定义多次连续发生的相似事件集合。 这些新增加的内容极大地扩展了传统意义上单纯依靠直线链接所能传达有限含义之外更为丰富的表达潜力。 ```python # 示例代码:Python模拟简单的同步与异步消息处理机制 import threading def sync_task(): print("Sync Task Start") # Simulate a long-running task import time;time.sleep(2) print("Sync Task End") def async_task(): thread = threading.Thread(target=sync_task) thread.start() print("Async Task Triggered") async_task() ``` 以上就是有关如何在UML序列图里准确无误地描绘各类消息交流方式的知识要点总结。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值