【UML】第12篇 序列图(1/2)——基本概念和构成

目录

一、什么是序列图(Sequence Diagram)

1.1 定义

1.2 主要用途

1.3 序列图和BPMN的区别和联系

二、序列图的构成

 2.1 对象

2.2 生命线

2.3 消息 

2.4 激活


序列图,是我个人认为的用处最多的一种图。产品和研发的同学,都应该熟练掌握的一种业务建模和沟通工具。

有时,我们会把序列图,和泳道图(Swimlane Diagram),或者BPMN图相混,认为是一种图。实际上,他们都可以为业务流程进行建模,不过使用的场景、针对的实体、流程描述的角度、颗粒度,都有很大的区别。

关于BPMN建模方式,可参考我之前的博文:业务建模工具BPMN-CSDN博客

一、什么是序列图(Sequence Diagram)

1.1 定义

序列图(Sequence Diagram)是一种用于显示对象之间交互的图形化表示。它描述了在特定场景下,对象之间按照时间顺序进行的消息传递和协作过程。

在序列图中,对象被表示为带有垂直虚线的矩形,虚线表示对象的生命周期。对象之间的交互通过箭头表示的消息来表示,箭头从一个对象的生命线指向另一个对象的生命线,表示消息的发送和接收。

1.2 主要用途

UML中的序列图是一种重要的建模工具,它可以帮助开发人员更好地理解系统的动态行为,并辅助设计和开发过程。

  1. 描述对象之间的动态交互:序列图可以清晰地展示对象之间的消息传递和协作过程,帮助开发人员理解系统的动态行为。
  2. 辅助设计和开发过程:通过绘制序列图,开发人员可以更好地理解系统需求和设计,从而更好地实现系统的功能。
  3. 用于测试和调试:序列图可以作为测试和调试的依据,帮助测试人员理解系统的预期行为并与实际行为进行比较。

1.3 序列图和BPMN的区别和联系

这方面很少有人对比,我来试着讲述一下。序列图和BPMN(业务流程建模与标注)中的流程图在用途、表达方式和关注点上有显著的区别,同时也存在一定的联系。

区别——

  1. 用途不同:序列图主要用于展示在特定场景下对象之间的交互顺序和消息传递,强调时间和顺序的关系;而BPMN的流程图则主要用于描述业务流程的执行过程,强调任务、活动和流程控制。
  2. 表达方式不同:序列图使用垂直线和箭头表示对象之间的消息传递和交互,对象被表示为带有垂直虚线的矩形;而BPMN的流程图使用符号和连接线表示任务、活动和流程控制,如椭圆表示任务,菱形表示决策点等。
  3. 关注点不同:序列图关注对象之间的动态交互和消息传递的细节,强调对象之间的协作;而BPMN的流程图关注业务流程的整体流程和任务执行顺序,强调流程的优化和改进。

联系——

  1. 都是建模工具:序列图和BPMN的流程图都是用于建模的工具,可以帮助人们更好地理解和描述复杂的系统或业务流程。
  2. 可相互补充:在实际应用中,序列图和BPMN的流程图可以相互补充。例如,可以使用BPMN的流程图描述整体业务流程,然后使用序列图详细描述流程中关键部分的对象交互和消息传递。

这两种工具,可以相互补充以提供更全面的视图和理解。

在实践中,序列图往往提现了BPMN中某个部分的具体实现逻辑。

二、序列图的构成

上图是一个典型的序列图的样子,用ROSE的风格画的,当然可能不是用的ROSE工具。ROSE的配色,黄底色,红边框,早已经深入人心。

序列图主要由对象(Object)、生命线(Lifeline)、激活(Activation)和消息(Message)构成。

  • 对象:对象是类的实例,在序列图中用带有垂直虚线的矩形表示,虚线表示对象的生命周期。我们经常会把Actor也画到同样的维度,比如Customer。
  • 生命线:生命线是一条垂直的虚线,表示对象的存在时间。
  • 激活:激活表示对象正在执行某个操作或方法,通常通过在生命线上绘制一个细长的矩形来表示。
  • 消息:消息是对象之间的交互,通过箭头表示从一个对象的生命线指向另一个对象的生命线,箭头上标注有消息的名称或内容。

这些元素共同构成了序列图,用于描述在特定场景下对象之间的交互顺序和消息传递。

 2.1 对象

对象有如下三种表示方法。

  1. 对象名+对象所属的类名;
  2. 只有对象名(省略类名);
  3. 只有类的名称(匿名对象);

2.2 生命线

这个不是你手上的那条,是对象的生命线,虚线,和对象的矩形一起,像个棒棒糖似的。

2.3 消息 

这里特意说一下,这些消息的标记,目前不同的版本,不同的工具,甚至团队内部,都有各自的规定。比如同步消息,异步消息,就有多种表示方法。甚至有时,使用半个箭头,这样特殊的模式。本文内容,使用的是UML2.5版本的约定。

1.同步消息(Synchronous Message)

  • 定义:同步消息是一种需要等待接收方处理完成后才能继续的消息。发送方在发送完消息后会等待,直到接收方处理完消息并返回结果。
  • 解释:同步消息类似于函数调用,发送方调用接收方的方法或操作,并等待其执行完成。发送方在等待期间会暂停自己的执行,直到接收方返回结果。
  • 图形表示:同步消息通常使用实线箭头表示,箭头指向接收方对象,并在箭头上标注消息的名称或内容。

2.异步消息(Asynchronous Message)

  • 定义:异步消息是一种发送方发送完消息后不等待接收方处理完成的消息。发送方在发送完消息后会立即继续自己的处理。
  • 解释:异步消息类似于发送事件或信号,发送方不关心接收方何时处理完成。发送方发送消息后可以继续执行其他操作,而不需要等待接收方的响应。
  • 图形表示:异步消息通常使用虚线箭头表示,箭头指向接收方对象,并在箭头上标注消息的名称或内容。

3.返回消息(Return Message)

  • 定义:返回消息是指当一个对象将消息发送给另一个对象后,另一个对象返回的虚线有向边,表示原消息已处理的消息。
  • 解释:返回消息用于表示对同步消息的响应,告诉发送方消息已被成功处理或返回处理结果。它通常与同步消息一起使用,表示消息的完整交互过程。
  • 图形表示:返回消息通常使用虚线箭头表示,箭头指向返回方对象,并在箭头上标注返回结果的名称或内容。

4.创建消息(Create Message)

  • 定义:创建消息是表示对消息传递目标对象的创建。
  • 解释:当某个对象需要创建另一个对象时,会使用创建消息来表示这个创建过程。创建消息可以包含对新对象的初始化和配置信息。
  • 图形表示:创建消息通常使用带有“create”标签的箭头表示,虚线,箭头指向新创建的对象,并在箭头上标注创建操作的名称或内容。

5.销毁消息(Destroy Message)

  • 定义:销毁消息是表示对消息传递目标对象的删除。
  • 解释:当某个对象需要销毁或删除另一个对象时,会使用销毁消息来表示这个销毁过程。销毁消息通知目标对象进行必要的清理和释放资源。
  • 图形表示:销毁消息通常使用带有“destroy”标签的箭头表示,虚线,箭头指向要销毁的对象,并在箭头上标注销毁操作的名称或内容。

6.自返消息(Self-Message)

  • 定义:自返消息是对象向自己发送的消息。它表示对象内部的某种行为或操作,而不是与其他对象的交互。
  • 解释:自返消息用于表示对象内部的状态变化或执行某个操作。它可以是对象调用自己的方法或执行自己的行为,而不涉及与其他对象的通信。
  • 图形表示:自返消息在序列图中通常使用指向对象自身的箭头表示。箭头的起点和终点都在同一个对象的生命线上,并在箭头上标注消息的名称或内容。

7.简单消息(Simple Message)

  • 定义:简单消息是对象之间最基本的通信方式,表示一个对象向另一个对象发送消息或请求。
  • 解释:简单消息用于描述对象之间的交互,它可以是同步消息或异步消息的一种简化表示。简单消息不涉及复杂的控制流或返回值,只是简单地表示一个对象调用另一个对象的方法或操作。
  • 图形表示:简单消息在序列图中使用箭头表示,箭头从发送方对象的生命线指向接收方对象的生命线。箭头上可以标注消息的名称或内容。

简单消息实际就是不标明是同步还是异步消息,只表达表消息这个事实。

以上的约定中,图形也比较好记忆,同步和简单消息,就是实线,虚线不特别标记,就是异步消息,方向是返回,或者标记有创建、销毁的,就是相应的意义。这样也比较简单,不要总是换箭头的模式,一会空心,一会实心,一会菱形,弄个太复杂。

同步消息的典型例子,就是上课铃和下课铃,上课铃打完,就要上课,上课没有结束,下课铃是不可能打的。程序中,这些都要控制。但是需要并发的网络购物等,就不同了。客户下单后,即使没有付款,也不会影响对另一件商品下单。除非是买的火车票,有重复的时段等特殊情况。

2.4 激活

激活表示一个对象执行一个动作所经历的时间段。一般情况下,当一个对象收到其它对象发送的消息时被激活,在激活期内处理该消息,激活结束时应该发出一个消息。在UML中使用处于生命线上的垂直长条矩形来表示。矩形的开始处为对象开始操作动作,底部表示操作动作的结束。

此外,对象的生命线,可能遇到销毁的情况。一般有2种处理方式,一是一个对象给另一个对象发销毁消息,用虚线加销毁标记,另外也可以对象自己销毁,在生命线上打个×,就可以了。

(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/300476.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS安装MongoDB

CentOS安装MongoDB 文章目录 CentOS安装MongoDB1. 安装并运行2. 创建用户/密码3. 测试语句4. 允许外网访问 1. 安装并运行 在 CentOS 上安装 MongoDB,你可以按照以下步骤进行: 导入 MongoDB 的 GPG 密钥: sudo rpm --import https://www.mon…

XxlJob 常见的报错

XxlJob 启动日志报错: 报错一: ERROR c.x.job.core.util.XxlJobRemotingUtil - Connection refused: connect java.net.ConnectException: Connection refused: connect 解决方法: 要启动的类是 XxlJobAdminApplication ,而不是…

什么是集成测试?它和系统测试的区别是什么? 操作方法来了

01 什么是集成测试? 集成测试是软件测试的一种方法,用于测试不同的软件模块之间的交互和协作是否正常。集成测试的主要目的是确保不同的软件模块能够无缝协作,形成一个完整的软件系统,并且能够满足系统的需求和规格。 在集成测试…

电商数据分析-02-电商业务介绍及表结构

参考 电商业务简介 大数据项目之电商数仓、电商业务简介、电商业务流程、电商常识、业务数据介绍、电商业务表、后台管理系统 举个例子:🌰 1.1 电商业务流程 电商的业务流程可以以一个普通用户的浏览足迹为例进行说明,用户点开电商首页开始浏览&…

【回溯】n皇后问题Python实现

文章目录 [toc]问题描述问题转换回溯法时间复杂性Python实现 个人主页:丷从心 系列专栏:回溯法 问题描述 有一批共 n n n个集装箱要装上 2 2 2艘载重量分别为 c 1 c_{1} c1​和 c 2 c_{2} c2​的轮船,其中集装箱 i i i的重量为 w i w_{i} w…

c# OpenCvSharp透视矫正六步实现透视矫正(八)

透视矫正,引用文档拍照扫描,相片矫正这块。 读取图像Cv2.ImRead();预处理(灰度化,高斯滤波、边缘检测)轮廓检测(获取到最大轮廓)获取最大面积轮廓的四个顶点标识最小矩形坐标透视矫正显示 完整代码 // 1、…

【数据结构】LRU缓存的简单模拟实现(leetcode力扣146LRU缓存)

文章目录 一、定义二、LRU模拟实现二、代码实现 一、定义 LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 Cache的容量有限,因此当Cache的容量用完后,而又有新的内容需要添加进来时, 就…

\r\n和缓冲区/进度条小程序

一 前置知识 带有\n就会立马刷新缓冲区,\r不会刷新缓冲区 刷新的2个场景: 1 ~fflush 缓冲区中存在\r或\n --> \r fflush --> 不换行的\n) 2 ~ 文件关闭自动刷新缓冲区 倒计时小程序0-9 倒计时小程序0-99

PostgreSQL 可观测性最佳实践

简介 软件简述 PostgreSQL 是一种开源的关系型数据库管理系统 (RDBMS),它提供了许多可观测性选项,以确保数据库的稳定性和可靠性。 可观测性 可观测性(Observability)是指对数据库状态和操作进行监控和记录,以便在…

中间继电器的文字符号和图形符号

中间继电器的文字符号和图形符号 中间继电器主要用途是当其他继电器触头数量或容量不够时,可借助中间继电器扩充触头数目或增大触头容量,起中间转换作用。将多个中间继电器相组合,还能构成各种逻辑运算电器或计数电器。 中间继电器文字符号…

C# WPF上位机开发(windows pad上的应用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大部分同学可能都认为c# wpf只能用在pc端。其实这是一种误解。c# wpf固然暂时只能运行在windows平台上面,但是windows平台不仅仅是电脑…

iconify图标集离线使用方案简介

1.需求描述 前端项目,技术栈使用Vue3Element Plus,参考了ruoyi-vue-pro项目与vue-element-plus-admin项目,封装了一个Icon组件,图标使用的是iconify,项目部署在内网环境,不能连接互联网,需要部署一套iconi…