前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >UML时序图详解

UML时序图详解

作者头像
xxpcb
发布于 2023-08-22 01:29:51
发布于 2023-08-22 01:29:51
1.1K0
举报

本篇,来继续介绍UML中的另一种图——时序图。

1 时序图简介

时序图(Sequence Diagram),也叫顺序图,或序列图,是一种UML动态图。

UML具有许多不同类型的图表,包括:

  • 静态图:用例图、类图、包图
  • 动态图:活动图、状态图、时序图、协作图

时序图通过描述对象之间发送消息的时间顺序显示多个对象之间的交互模式

时序图将交互关系表示为一个二维图

  • 纵向是时间轴,时间沿竖线向下延伸;横向轴代表了在协作中各独立对象的类元角色。
  • 类元角色用生命线表示。当对象存在时,角色用一条虚线表示;当对象的过程处于激活状态时,生命线是一个垂直矩形
  • 消息用从一个对象的生命线到另一个对象生命线的箭头表示。
  • 箭头以时间顺序在图中从上到下排列。

2 时序图元素介绍

2.1 参与者

参与者,或称为系统角色,以一个小人图标表示。

2.2 对象

对象,以一个矩形表示,在一个系统中可以有多个对象。

2.3 生命线

生命线就是一条垂直的虚线。

2.4 激活

激活,也叫会话,或控制焦点,代表时序图中对象执行一项操作的时期, 表示该对象被占用以完成某个任务,以一个垂直的窄的矩形表示。

2.5 消息

2.5.1 (同步)消息

以一条实线和实心箭头表示。

消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。

2.5.2 返回消息

以小于号和虚线表示。

返回消息表示从过程调用返回。

2.5.3 异步消息

以一条实线和大于号表示。

消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。

2.5.4 自关联消息

以一个半闭合的长方形+下方实心剪头表示。

表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。

2.6 片段

2.6.1 选择片段

选择片段,或称条件分支,可根据不同的条件,执行不同的交互,类似于if-else语句

2.6.2 循环片段

表明该片段会被重复执行,类似于while或for语句

2.6.3 并向片段

2.6.4 片段总结

片段的功能,除了上面介绍的选择、循环和并向、还有许多其它类型,这里详细列举一下,作为参考:

片段类型

名称

说明

Alt

选择

在一组行为中根据特定的条件选择某个交互

Loop

循环

交互片段会被重复执行

Par

并行

支持交互片段的并发执行

Opt

选项

表示一个可选的行为

Break

中断

提供了和编程语言中的break类拟的机制

Seq

弱顺序

有两个或更多操作数片段,如果消息涉及的生命线不同,会并行交错

Strict

强顺序

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

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

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

片段类型

名称

说明

Consider

考虑

明确标志了应该被处理的消息

Assert

断言

标志了在交互片段中作为事件唯一的合法继续者的操作数

Neg

否定

用来标志不应该发生的交互

Ignore

忽略

明确定义了交互片段不应该响应的消息

3 visio绘制UML时序图

3.1 visio创建时序图

新建一个visio文件,打开后会自动提示选择创建某种类型的图,这里选择"软件和数据库 ->UML序列"

点击确定之后,会进入UML时序图的编辑界面,左侧可以看到用于UML时序图编辑的基本元素,将这些元素拖拽到右侧的编解面板中,可以看到这些元素的基本结构形式:

注意visio中的生命线绘图元素,实际上包含了参加者元素或对象元素,所以命名为了参与者生命线和对象生命线

3.2 时序图实例

下面通过一个实例来介绍一下UML时序图的画法。

这是一个嵌入式开发中,常见的对物联网设备进行配网的操作流程,配网的方式有很多,具体可看之前的文章:【图解】物联网设备的N种Wi-Fi配网方式,这个时序图是其中的一种配网方式——设备热点配网。

解读一下此时序图:

  • 参与者(主角)是用户,因为是用户触发了整个流程的执行
  • 对象有3个:手机上的APP程序、待连网的物联网设备、WiFi路由器
  • 配网的时序逻辑为:
    • 用户按下设备的配网按钮,设备开启一个热点,并广播自己的热点信息(热点名称和密码)
    • 用户在APP上输入WiFi路由器的名称和密码(用于后续发给设备)
    • 用户操作APP,连接上设备的热点,然后把WiFi路由器的名称和密码发给设备
    • 设备收到WiFi路由器的名称和密码后,尝试连接路由器,配网成功

本时序图中,暂未体现出片段的用法,以后有能用到片段用法的例子再举例分析。

3.4 visio中框图不能调节宽度解决

在用Visio绘制UML时序图,使用“交互操作数”时,可能遇到宽度被锁定不能调节的问题,解决方法如下:

步骤一:文件----选项----高级----常规-----勾选“以开发人员模式运行”

步骤二:菜单栏出现“开发工具”选项,点击受保护框图,取消宽度的保护

4 总结

本篇介绍了UML时序图的基础知识,并通过visio绘制一个物联网设备WIFI配网的UML时序图实例,来介绍UML时序图的画法与所表达的含义。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农爱学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
mongoDB 文档查询
1、文档查询db.users.find()等价于db.users.find( {} ) 2、基于and运算符的多个组合条件可以省略and运算符的多个组合条件可以省略and,直接将条件组合即可 3、对于$and运算符内的条件,用[]括起来,相当于数组形式 4、对于数组查询,可以使用基于下标的方式精确配置特定的元素值 5、对于内嵌文档,可以使用”文档键.内嵌文档键”方式进行访问 6、对于数组内内嵌文档的方式,可以使用”数组名.下标.内嵌文档键”方式访问 7、对于哪些列名需要显示可以通过{ field1: <0|1>, … }来设定 8、本文参考:https://docs.mongodb.com/manual/tutorial/query-documents/
Leshami
2018/08/13
3.3K0
【翻译】MongoDB指南/CRUD操作(一)
【原文地址】https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档。 CRUD操作包括创建、读取、更新和删除文档。 创建操作 执行创建或者插入操作可向集合中添加文档。如果集合不存在,插入操作会创建此集合。 MongoDB提供下列方法向集合中插入文档: db.collection.insert() db.collection.insertOne()  3.2版本新增 db.collection.insertMany(
甜橙很酸
2018/03/08
5.6K0
【翻译】MongoDB指南/CRUD操作(一)
MongoDB 数组元素增删改
与关系型数据库相比,MongoDB支持数组,将数组存储到文档之中。因此,与之对应的是数组的增删改查。对于有C语言基础的童鞋,数组应该不会陌生。数组的增删改查,在MongoDB中有相应的操作符来实现。本文主要描述数组的增删改相关操作符的使用。 有关数组的查询可以参考:MongoDB 数组查询 1、占位符$ 占位符$的作用主要是用于返回数组中第一个匹配的数组元素值(子集),重点是第一个 在更新时未显示指定数组中元素位置的情形下,占位符$用于识别元素的位置 通过数组过滤条件找到的第一个匹配的元素值的文档将
Leshami
2018/08/13
6.9K0
mongoDB 文档删除
mongoDB文档删除等同于关系型数据库中删除满足条件的单条或者多条记录,通常使用db.collection.remove()方法来实现文档的删除动作。mongDB文档删除属于原子性操作,仅仅在仅仅在单个文档级别。本文描述mongoDB文档删除操作并给出示例。 预备热身 Linux下快速安装MongoDB Windows平台下安装MongoDB mongoDB 启动与停止 mongo shell连接到mongoDB及shell提示符下执行js脚本 mongoDB简介及关键特性
Leshami
2018/08/13
1.7K0
【翻译】MongoDB指南/CRUD操作(二)
【原文地址】https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关注),写确认(写关注) 1 更新文档 1.1 更新 MongoDB提供下列方法用于更新一个集合 db.collection.updateOne() 更新使用指定过滤器匹配到的文档,即使过滤器匹配到多个文档,也只会更新一个文档。 3.2版本新增特性。 db.collection.upda
甜橙很酸
2018/03/08
2.5K0
mongoDB 文档更新
1、mongoDB文档更新有很多个不同的方法,传统的update,以及3.2版本之后的updateOne,updateMany 2、mongoDB文档替换也有很多个不通的方法,传统的update,以及3.2版本之后的replaceOnye,replaceMany 3、updateOne与updateMany是对update方法的扩展,update方法可以通过multi值为true或false来等同于updateMany以及updateOne 4、replaceOne与replaceMany也是对update方法的扩展,update方法可以通过multi值为true或false来等同于replaceMany以及replaceOne
Leshami
2018/08/13
1.8K0
MongoDB(3): 查询
  2、如果没有显示指定_id字段隐藏,则默认会显示,显示指定隐藏,如:find({},{"_id":0});
py3study
2020/01/09
1.9K0
MongoDB(3): 查询
mongodb查询的语法总结
$size是匹配数组内的元素数量的,如有一个对象:{a:[“foo”]},他只有一个元素:
周小董
2019/03/25
1.8K0
pymongo的简单使用
pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client = pymongo.MongoClient() # 指定数据库 db = client.test db = client["test"] # 这两种方式都可以指定数据库,如果没有该数据库的话,会自行创建 # 如果了解面向对象的一些魔法(内置)方法的话,大概能够知道client对应的类,肯定重写__get
py3study
2020/01/16
8330
MongoDB权威指南学习笔记(1)--基础知识与对文档的增删改查
使用.来分割不同命名空间的子集合,例如一个博客系统可能包含两个集合,分别时blog.posts和blog.authors。
earthchen
2020/09/24
5.7K0
mongodb操作(概述以及相关的命令)
http://blog.csdn.net/ljfbest/article/details/11979609
bear_fish
2018/09/20
6550
MongoDB 3.0.6的主,从,仲裁节点搭建
在MongoDB所在路径创建log和data目录 mkdir log mkdir data
用户3003813
2018/09/06
1.4K0
MongoDB 3.0.6的主,从,仲裁节点搭建
MongoDB常用操作
插入多条测试数据 > for(i=1;i<=1000;i++){ ... db.blog.insert({"title":i,"content":"mongodb测试文章。","name":"刘"+i}); ... }
白墨石
2021/01/13
1.2K0
MongoDB入门实操《下篇》
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
Wu_Candy
2022/07/04
2250
mongodb的查询语句学习摘要 原
db.users.find({"age" : 27}) select * from users where age = 27
拓荒者
2019/03/11
8380
python操作mongodb数据库
(6) $push: 和 $ pushAll 都是向数组属性添加元素。# 好像两者没啥区别
bear_fish
2018/09/20
1.8K0
浅尝辄止MongoDB:操作(1)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/82863479
用户1148526
2019/05/25
9510
浅尝辄止MongoDB:操作(3)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/82882703
用户1148526
2019/05/25
1.1K0
mongodb进阶一之高级查询「建议收藏」
上篇文章我们讲了mongodb的crud基本操作 http://blog.csdn.net/stronglyh/article/details/46812579
全栈程序员站长
2022/07/08
5690
MongoDB基本概念
Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。Mongodb是一款非关系型数据库,说到非关系型数据库,区别于关系型数据库最显著的特征就是没有SQL语句,数据没有固定的数据类型,关系数据库的所使用的SQL语句自从 IBM 发明出来以后,已经有 40 多年的历史了,但是时至今日,开发程序员一般不太喜欢这个东西,因为它的基本理念和程序员编程的想法不一致。后来所谓的 NoSQL 风,指的就是那些不用 SQL 作为查询语言的数据存储系统,而文档数据库 MongoDB 正是 NoSQL 的代表。看一下当下数据库的排名就会发现,目前排在Mongodb数据库前面的无一例外是老牌的关系型数据库,而在NoSQL序列中,Mongodb排名第一,且有上升的趋势。
Java廖志伟
2022/03/07
6.7K0
MongoDB基本概念
相关推荐
mongoDB 文档查询
更多 >
目录
  • 1 时序图简介
  • 2 时序图元素介绍
    • 2.1 参与者
    • 2.2 对象
    • 2.3 生命线
    • 2.4 激活
    • 2.5 消息
      • 2.5.1 (同步)消息
      • 2.5.2 返回消息
      • 2.5.3 异步消息
      • 2.5.4 自关联消息
    • 2.6 片段
      • 2.6.1 选择片段
      • 2.6.2 循环片段
      • 2.6.3 并向片段
      • 2.6.4 片段总结
  • 3 visio绘制UML时序图
    • 3.1 visio创建时序图
    • 3.2 时序图实例
    • 3.4 visio中框图不能调节宽度解决
  • 4 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档