【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种处理方式,一是一个对象给另一个对象发销毁消息,用虚线加销毁标记,另外也可以对象自己销毁,在生命线上打个×,就可以了。

(未完待续)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中,很多企业都会遇到一个共同问题:重复建设基础功能,耗费大量时间和资源。为解决这一难题,WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发,如IM(即时通讯&#xf…

截断整型提升算数转换

文章目录 🚀前言🚀截断🚀整型提升✈️整型提升是怎样的 🚀算术转换 🚀前言 大家好啊!这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…

“C语言“——scanf()、getchar() 、putchar()、之间的关系

scanf函数说明 scanf函数是对来自于标准输入流的输入数据作格式转换,并将转换结果保存至format后面的实参所指向的对象。 而const char*format 指向的字符串为格式控制字符串,它指定了可输入的字符串以及赋值时转换方法。 简单来说给一个打印格式(输入…

css radial-gradient 径向渐变基本语法与使用

在之前的文章《深入理解Css linear-gradient线性渐变》我们了解了CSS中的线性渐变,本文将介绍CSS中的另一种渐变———径向渐变(Radial Gradient): CSS中的径向渐变(Radial Gradient)允许你创建从一个颜色…

基于Java SSM框架实现交通事故档案管理系统项目【项目源码+论文说明】

基于java的SSM框架实现交通事故档案管理系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于交通事故档案管理系统当然也不能排除在外,随着网络技术的不断成熟&#xff0…

企业知识库:从信息管理到知识创新的转变

在当今这个信息爆炸的时代,企业知识库的建设已经成为了企业持续发展的重要基石。从传统的信息管理到现代的知识创新,企业知识库的角色和功能也在不断地演变和升级。本文将探讨企业知识库的发展历程,以及如何实现从信息管理到知识创新的转变。…

谷歌Gemini演示视频解析

在刚刚过去的前两天 谷歌发布了号称最强的多模态大模型Gemini 不仅提供了Ultra、Pro 和 Nano版本 而且在32项学术基准中 Gemini Ultra都达到了SOTA水平 甚至在MMLU测试中 Gemini Ultra 的得分率高达 90.0%, 是第一个超过人类专家的模型 应该说,G…

【vtkWidgetRepresentation】第十八期 vtkHoverWidget

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtkHoverWidget,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. vtkHoverWidget vtkHoverWidget用于在呈现窗口中…

如何在飞书自建项目中接入ChatGPT打造智能问答助手并远程访问

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中…

10.3 uinput

uinput 简介 uinput 是一个内核驱动,应用程序通过它可以在内核中模拟一个输入设备,其设备文件名是 /dev/uinput 或 /dev/input/uinput。 uinput 使用 使用 uinput 时遵循以下步骤: 通过 open 打开 uinput 设备通过 ioctl 设置属性位图通过…

Windows基础知识:一站式整理指南

目录 学习目标: 学习内容: 学习产出: Windows操作系统的发展历史和版本特点 Windows界面和桌面元素的基本介绍 文件和文件夹管理:创建、复制、移动、删除等操作 系统设置和个性化:调整屏幕分辨率、更改桌面背景、设置…

Python之classmethod和staticmethod的区别

python中3种方式定义类方法,常规方式、classmethod修饰方式、staticmethod修饰方式。 class A(object):def foo(self, x):print(调用foo函数 (%s, %s)%(self, x))print(self:, self)classmethoddef class_foo(cls, x):print(调用class_foo函数 (%s, %s) % (cls, x))…

Azure Machine Learning - 如何使用 GPT-4 Turbo with Vision

介绍如何在Azure中使用GPT-4 Turbo with Vision 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理…

Plantuml之对象图语法介绍(十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

MySQL undo日志精讲3-从回滚段中申请 Undo 页面链表

回滚段-Rollback Segment Header 页面 回滚段的概念 我们现在知道一个事务在执行过程中最多可以分配4个 Undo 页面链表,在同一时刻不同事务拥有的 Undo 页面链表是不一样的,所以在同一时刻系统里其实可以有许许多多个 Undo 页面链表存在。为了更好的管…

qt项目-《图像标注软件》源码阅读笔记-Shape类绘图及其子类

目录 1. Shape 概览 2. Shape 基类 2.1 字段 2.2 方法 2.3 嵌套类型 3. Shape2D 2d形状纯虚基类 3.1 字段 3.2 方法 4. Shape3D 3d形状纯虚基类 5. Shape2D子类 5.1 Rectangle 矩形类 1. Shape 概览 功能:Shape类及其子类负责形状的绘制及形状的存储。…

【SpringBoot】Spring data JPA整合ShardingSphere-JDBC静态读写分离实现

大佬栽树,我乘凉 许大仙老师:【yuque.com/fairy-era/yg511q/ud9uli67b6gxgdh7】 开整 数据库准备 一主两从 数据库脚本 CREATE DATABASE IF NOT EXISTS dbtest CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE dbtest; -- 创建表 CREATE TA…

【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java入门到精通 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. Java的注释方式二. 标识符三. 关键字四. 全篇总结 📑前言 在Java编程…

《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)

目录 并发编程面试题1.什么是进程、线程、协程,他们之间的关系是怎样的2.协程对于多线程有什么优缺点吗 并发编程面试题 1.什么是进程、线程、协程,他们之间的关系是怎样的 进程: 本质上是⼀个独⽴执⾏的程序,进程是操作系统进⾏资源分配和…

C# float/double 减 float/double 等 (X.xxxxxxxxxxxxxE-07)(黑盒测试)

问题 因为没有深究原理,所有只进行了“黑盒测试” 黑盒测试结论: 问题操作结论float/double运算进过一系列的运算后大概率 ! 0.0 , 而是等于0.00000000000xxxx等于X.xxxxxxxx一串数字的时候不影响下一步继续使用当需要显示fl…