当前位置: 首页 > news >正文

UML建模图文详解教程06——顺序图


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl
  • 本文参考资料:《UML面向对象分析、建模与设计(第2版)》吕云翔,赵天宇 著

在这里插入图片描述

顺序图概述

顺序图(sequence diagram,也被称为为序列图或时序图)是按时间顺序显示对象交互的图。具体来说,它显示了参与交互的对象和所交换信息的先后顺序,用来表示用例中的行为并将这些行为建模成信息交换。

顺序图主要包括四个元素:对象(object)、生命线(lifeline)、激活(activation)和消息(message)。在 UML中,顺序图将交互关系表示为一张二维图。其中纵向代表时间维度时间向下延伸,按时间依次列出各个对象所发出和接收的消息。横向代表对象的维度,排列着参与交互的各个独立的对象。

核心知识点

请务必熟悉并掌握以下核心知识点。

顺序图是将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。

对象与生命线

顺序图中的对象与对象图中的概念一样,都是类的实例。顺序图中的对象可以是系统的参与者或者任何有效的系统对象。对象的创建由头符号来表示,即在对象创建点的生命线顶部使用显示对象名和类名的矩形框来标记,二者用冒号隔开,即为“对象名:类名”这种格式。

在顺序图中,生命线位于每个对象的底部中心位置,显示为一条垂直的虚线,与时间轴平行,带有一个显示对象的头符号。顺序图中的大部分对象是存在于整个交互过程的,即对象创建于顺序图顶部,其生命线一直延伸至底部。

在这里插入图片描述

激活

激活又称为控制焦点,表示一个对象执行一个动作所经历的时间段,既可以直接执行也可以通过安排下级过程来执行。同时,激活也可以表示对应对象在这段时间内不是空闲的,它正在完成某个任务或正被占用。通常来说,一个激活结束的时候应该伴有一个消息的发出。

激活在 UML 中用一个细长的矩形表示,显示在生命线上。矩形的顶部表示对象所执行动作的开始,底部表示动作的结束。

在这里插入图片描述

消息

消息是从一个对象(发送者)向另一个对象(接收者)发送信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。

在UML中,有以下几种主要动作。

  • 调用(call):调用某个对象的一个操作。可以是对象之间的调用也可以是对对象本身的调用,即自身调用或递归调用。调用属于同步机制,例如,当对象 A 发送消息调用对象 B时,A 会等待 B执行完所调用的方法后再继续执行。在 UML 中使用一个头部为实心三角的箭头来表示调用。

  • 返回(return):返回消息不是主动发出的,而是一个对象接收到其他对象的消息后返回的消息。很多情况下一个消息的接收会要求一个返回,如果把所有对源消息的返回全部绘制在顺序图中,图将变得过于复杂而难以阅读。所以仅仅需要绘制重要的返回消息。在UML中使用虚线箭头表示返回。

  • 创建(create):创建一个对象时发送的消息,在 UML中使用具有<< create >>构造型的消息表示。

  • 销毁(destroy):销毁一个对象(也允许对象销毁自身)。UML中使用具有<< destroy >>构造型的消息表示。

在这里插入图片描述

航空购票系统顺序图

在此,以航空购票系统的登录用例为例绘制顺序图。

确定交互对象

创建顺序图的第一步就是要明确参与该交互的对象。我们注意到该用例由用户发起,因此用户作为参与者是这个交互过程的发起者。此外,假设系统采用 MVC(即模型-视图-控制器)设计;因此参与这个交互的对象还包括用户界面、程序逻辑层以及程序数据库。

与创建用例图类似,请在Model中创顺序图;图示如下:
在这里插入图片描述
点击确定后,图示如下:

在这里插入图片描述
选中顺序图,右键单击选择添加图,再选择UML Behavioral和Sequence;图示如下:

在这里插入图片描述
单击确定后,图示如下:

在这里插入图片描述
首先,将工具箱中的Actor拖拽至绘图区添加参与者;图示如下:

在这里插入图片描述
点击确定后,图示如下:

在这里插入图片描述

将工具箱中的Boundary拖拽至绘图区添加登录界面作为边界;图示如下:

在这里插入图片描述
点击确定后,图示如下:

在这里插入图片描述
将工具箱中的Control拖拽至绘图区添加程序逻辑层作为控制器;图示如下:

在这里插入图片描述
点击确定后,图示如下:

在这里插入图片描述
将工具箱中的Entity拖拽至绘图区添加程序数据库;图示如下:

在这里插入图片描述
点击确定后,图示如下:

在这里插入图片描述
至此,我们确定了登录用例的交互对象。

添加消息

在确定了参与交互的对象之后,就要在对象之间添加消息的传递了。我们可以很容易地分析出整个交互过程:用户首先在界面填写表单并确认,用户界面将用户填写的表单数据发送给程序逻辑层,逻辑层向程序数据库发送请求来检查用户数据的合法性,接收到合法的返回消息后程序逻辑层再向界面发送消息显示出登录结果。

请利用Interaction Relationships中的Message添加用户向登录界面传递的消息;图示如下:

在这里插入图片描述
双击箭头,添加消息;图示如下:

在这里插入图片描述

点击确定后,图示如下:

在这里插入图片描述
类似地,添加登录界面,程序逻辑层,程序数据之间的消息;图示如下:
在这里插入图片描述
接下来添加程序数据向程序逻辑层的返回消息;图示如下:

在这里插入图片描述
点击确定后,图示如下:

在这里插入图片描述
类似地,我们添加其它的返回消息;图示如下:

在这里插入图片描述
至此,我们完成了航空购票系统的登录用例的顺序图。

相关文章:

UML建模图文详解教程06——顺序图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 顺序图概述 顺序图(sequence diagram&#xff0c;也…...

睡前随笔记录

一个人从出生到长大&#xff0c;就像一部手机从新用到旧。手机里面积累了太多的缓存&#xff0c;积累了太多的照片&#xff0c;各种app的数据&#xff0c;安装了各式各样的程序。 所以大概这就是年纪越大&#xff0c;记性越差的原因吗&#xff1f;就像一个屋子&#xff0c;堆满…...

微服务学习|Feign:快速入门、自定义配置、性能优化、最佳实践

RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码 存在下面的问题 代码可读性差&#xff0c;编程体验不统一 参数复杂URL难以维护 Feign的介绍 Feign是一个声明式的http客户端&#xff0c;官方地址: https://github.com/OpenFeign/feign …...

使用【画图】软件修改图片像素、比例和大小

打开电脑画图软件&#xff0c;点击开始 windows附件 画图 在画图软件里选择需要调整的照片&#xff0c;点击文件 打开 在弹出窗口中选择照片后点击打开 照片在画图软件中打开后&#xff0c;对照片进行调整。按图中顺序进行 确定后照片会根据设定的值自动调整 保存…...

DevOps 事后分析

众所周知&#xff0c;系统的变化会带来不稳定&#xff0c;进而引发事故。迁移到 DevOps 使世界各地的组织能够以更小的增量和更高的频率进行发布。这降低了特定版本中失败的风险。另一方面&#xff0c;增加发布数量并不一定会减少待命团队需要响应的事件数量。 事件响应团队的…...

fastdfs-client-java-1.30 maven 打包安装

1. 进入源代码目录&#xff0c;打开cmd mvn clean install 或者 mvn package 问题不大的话会在同级目录target目录下生成打包后文件 2. 当前目录下cmd进行maven安装 mvn install:install-file -DgroupIdorg.csource -DartifactIdfastdfs-client-java -Dversion${version} -D…...

【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 本章将介绍视觉SLAM的基本问题之一&#xff1a;如何描述刚体在三维空间中的运动&#xff1f; 旋转矩阵 点、向量和坐标系 三维空间由3个轴组成&…...

Linux驱动开发笔记(四):设备驱动介绍、熟悉杂项设备驱动和ubuntu开发杂项设备Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134533533 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…...

C/C++ 实现Windows注册表操作

Windows注册表&#xff08;Registry&#xff09;是Windows操作系统中用于存储系统配置信息、用户设置和应用程序数据的一个集中式数据库。它是一个层次结构的数据库&#xff0c;由键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;组成&#xff0c;这些键和值被…...

nginx 模块相关配置及结构理解

文章目录 模块配置结构模块配置指令先看一下 ngx_command_t 结构一个模块配置的demo简单模块配置的案例演示 模块上下文结构模块的定义 模块配置结构 Nginx中每个模块都会提供一些指令&#xff0c;以便于用户通过配置去控制该模块的行为。 Nginx的配置信息分成了几个作用域(sc…...

同时创建多个websoket(初始化多个连接、断开的重连、每个连接定时发消息、每个连接存储接收的数据(vuex或者pinia))

可复制现成代码直接使用&#xff01;&#xff01; 1.下边的例子演示了创建10个WebSocket 实例&#xff0c;当其中某一个连接失败时&#xff0c;会自动进行重连 <template><div></div> </template><script setup> import { ref, reactive, onMo…...

C语言——指针(一)

&#x1f4dd;前言 这篇文章主要带大家初步认识一下指针&#xff0c;供大家理解参考。 主要归纳与讲解&#xff1a; 1&#xff0c;指针与指针变量 2&#xff0c;指针的基本使用&#xff08;如何定义&#xff0c;初始化&#xff0c;引用&#xff09; &#x1f3ac;个人简介&…...

学习量化交易如何入门?

Python 量化入门很简单&#xff0c;只需 3 步就能快速上手! 题主在程序方向没有相关经验&#xff0c;今天就从量化行业的通用语言-Python 着手&#xff0c;教大家如何快速入门。 一、准备工作 在开始 Python 编程之前&#xff0c;首先需要确保你的计算机上安装了合适的 Pytho…...

CSS3动画

在CSS3中新增了一个很有意思的东西&#xff0c;那就是动画&#xff0c;有了动画我们可以做很多的事情&#xff0c;让我为大家介绍一下动画吧&#xff01; 本篇文章关于介绍动画&#xff0c;利用小球移动为你们介绍一下动画 默认样式&#xff1a; <!DOCTYPE html> <ht…...

黑马点评-10实现用户点赞和点赞排行榜功能

用户点赞功能 如果用户只要点赞一次就对数据库中blog表中的liked字段的值加1就会导致一个用户无限点赞 PutMapping("/like/{id}") public Result likeBlog(PathVariable("id") Long id) {// 修改点赞数量,update tb_blog set liked liked 1 where id …...

Spring配置其他注解Spring注解的解析原理

Spring配置其他注解 Primary注解用于标注相同类型的Bean优先被使用权&#xff0c;Primary是Spring 3.0引入的&#xff0c;与Component和Bean一起使用&#xff0c;标注该Bean的优先级更高&#xff0c;则在通过类型获取Bean或通过Autowired根据类型进行注入时&#xff0c;会选用优…...

TypeScript 学习笔记 第一部分 语法基础

【视频链接】尚硅谷TypeScript教程&#xff08;李立超老师TS新课&#xff09; TypeScript 1. 类型1.1 | 联合类型1.2 字面量类型1.3 any 任意类型1.4 unkown 类型1.5 as 类型断言1.6 object 对象类型1.7 { } 对象类型1.8 &#xff1f; 对象中的可选属性1.9 对象中的任意属性1.1…...

【element优化经验】怎么让element-ui中表单多语言切换排版不乱

目录 前言&#xff1a; 痛点&#xff1a; 1.左对齐&#xff0c;右对齐在中文和外语情况下字数不同&#xff0c;固定宽度会使名称换行&#xff0c;不在整行对齐&#xff0c;影响美观。 2.如果名称和输入框不在一行&#xff0c;会使页面越来越长 3.label-width值给变量&#…...

软件设计中如何画各类图之一实体关系图(ER图):数据库设计与分析的核心工具

目录 1 前言2 符号及作用&#xff1a;3 绘制清晰的ER图步骤4 实体关系图的用途5 使用场景6 实际应用场景举例7 结语 1 前言 当谈到数据库设计与分析的核心工具时&#xff0c;实体关系图&#xff08;ER图&#xff09;无疑是其中最重要的一环。在软件开发、信息管理以及数据库设…...

【神印王座】龙皓晨美妆胜过月夜,魔神皇识破无视,撮合月夜阿宝

Hello,小伙伴们&#xff0c;我是拾荒君。 《神印王座》国漫第82集已更新&#xff0c;拾荒君和大多数人一样&#xff0c;更新就去看了。魔神皇枫秀&#xff0c;威严凛然&#xff0c;突然空降月魔宫&#xff0c;整个宫殿都在这股无与伦比的强大气息中颤栗。为了顺利躲避魔神皇的…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...