UML图——序列图详解
3分钟阅读完本文章,你将获得:
- 什么是序列图?
- 序列图的好处?
- 如何制作序列图?
序列图概述
在维基百科对序列图的解释:"序列图(Sequence Diagram),亦称为循序图、时序图,是一种UML行为图。描述物件在时间序列中的交叉作用。序列图会描绘在此情境下有关的物件,以及此物件和其他物件交换讯息的顺序。序列图一般和待开发系统逻辑视图上,用例的实现有关。序列图有时也称为事件图或事件情境。“
通俗的解释:序列图清晰的描述了一个事件的执行流程,并且它准确的表达了以下四点:
- 流程是什么?
- 整个流程有谁参与?
- 每个参与者和谁产生了交互?
- 每个参与者在整个流程中的的“生命周期”是什么?
例如:我去一家沙县小吃吃个饭,找个位置坐下来之后看了一下菜单点了个黄焖鸡米饭,过了5秒钟,服务员就把黄焖鸡米饭给我端过来了。下面我就用时序图简单描述这一流程。
使用序列图有什么好处?
- 用于对复杂功能、操作或过程背后的逻辑进行建模和可视化。
- 优秀的工程师都应该具备高级的画图能力和抽象能力。
序列图的符号
参与者
参与者就是与系统交互的角色,它是系统之外的,比如顾客去饭店吃饭,顾客就是参与者,而饭店是个系统。
参与者使用如下符合:
生命线和消息
系统中的每个实例对象都会有一条生命线,对象接收消息或者发送消息都是按照顺序出现在这条生命线上。消息用箭头表示。
为了更加形象的展示某个行为的长度,我们可以在生命线上画一个矩形来表示某个行为的长度:
消息
对序列图中的消息进行细分的话可以分为如下:
- 同步消息
- 异步消息
- 创建消息
- 删除消息
- 自消息
- Found消息
- 丢失消息
- 守卫
同步消息
表示同步调用操作,其中源对象发送消息并等待目标的返回消息,然后源对象才能继续。编程中大量的调用也都是同步的。
同步消息使用带有实心箭头的线,指向接收生命线
同步返回,带有指向原始生命线的实心箭头的虚线
例如:
异步消息
表示异步信号或异步调用,其中源对象发送消息并立即继续下一步,不用等待目标返回消息。
异步消息使用带有开放箭头的线表示
例如:
- 服务员在收到顾客1的消息之后向厨师发送消息
- 服务员此时不需要等待厨师的回复,又去接待顾客2了
- 服务员收到顾客2的消息之后向厨师发送消息,同样,也不需要等待厨师的回复,去接待其它顾客...
- ...
- 厨师做好了一份向服务员发送消息,此时厨师也不需要等待服务员的回复,
创建消息
创建消息表示交互中实例的创建,创建消息由关键字“create”表示。
例如,在电子商务网站上创建新订单需要创建 Order 类的新对象:
销毁消息
销毁消息表示交互中实例的销毁。销毁消息由关键字“destroy”表示。目标生命线在销毁消息处结束,并用 X 表示。
例如:
- 客户向银行申请贷款
- 银行经理启动信用检查程序,输入数据,然后等待信用机构发送结果
- 银行经理收到响应并向客户发送一条消息,告知贷款是否获得批准
- 银行经理关闭信贷代理程序,客户完成交易
自消息
可能会出现对象需要向自身发送消息的某些情况,此类消息称为“自身消息”,并用 U 形箭头表示。
类比到面向对象编程里,就是一个对象调用了自身的某个方法
例如:下面的设备对象想要访问其网络摄像头的场景,那么这种场景使用自消息来表示
Found消息
Found 消息用于表示未知来源发送消息的情况
例如:为了表示某个服务会出故障,但可能是多种原因造成的,不确定是哪种情况,那么就可以使用这个Found消息表示
丢失消息
丢失消息用于表示系统不知道收件人的情况。
例如:丢失消息可以用于与当前对象交互的其它对象生成一些警告日志啥的,由于我们事先不知道和当前对象直接交互的对象是谁,但是为了表示这一现象,可以用丢失消息表示。
守卫
用于对消息进行条件限制,只有当满足某个条件时,消息才会继续流出。
例如:客户从银行取钱,但是必须满足余额>0,后面的流程才会继续。
序列图常用工具
画序列图常用的工具有:
还有office中的visio,以及各大笔记软件的画板都可以画序列图,比如飞书、语雀等等。
如果使用 IntelliJ IDEA作为开发工具的话,可以在IDEA中下载Sequence Diagram插件,它可以很方便的生成某个方法调用的序列图。
使用方法很简单,下载好插件重启IDEA之后,直接对某个方法调用右键鼠标点击【Sequence Diagram】即可生成对应的序列图。
转载自:https://juejin.cn/post/7262747607008165945