目录
一、什么是序列图(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.3 序列图和BPMN的区别和联系
这方面很少有人对比,我来试着讲述一下。序列图和BPMN(业务流程建模与标注)中的流程图在用途、表达方式和关注点上有显著的区别,同时也存在一定的联系。
区别——
- 用途不同:序列图主要用于展示在特定场景下对象之间的交互顺序和消息传递,强调时间和顺序的关系;而BPMN的流程图则主要用于描述业务流程的执行过程,强调任务、活动和流程控制。
- 表达方式不同:序列图使用垂直线和箭头表示对象之间的消息传递和交互,对象被表示为带有垂直虚线的矩形;而BPMN的流程图使用符号和连接线表示任务、活动和流程控制,如椭圆表示任务,菱形表示决策点等。
- 关注点不同:序列图关注对象之间的动态交互和消息传递的细节,强调对象之间的协作;而BPMN的流程图关注业务流程的整体流程和任务执行顺序,强调流程的优化和改进。
联系——
- 都是建模工具:序列图和BPMN的流程图都是用于建模的工具,可以帮助人们更好地理解和描述复杂的系统或业务流程。
- 可相互补充:在实际应用中,序列图和BPMN的流程图可以相互补充。例如,可以使用BPMN的流程图描述整体业务流程,然后使用序列图详细描述流程中关键部分的对象交互和消息传递。
这两种工具,可以相互补充以提供更全面的视图和理解。
在实践中,序列图往往提现了BPMN中某个部分的具体实现逻辑。
二、序列图的构成
上图是一个典型的序列图的样子,用ROSE的风格画的,当然可能不是用的ROSE工具。ROSE的配色,黄底色,红边框,早已经深入人心。
序列图主要由对象(Object)、生命线(Lifeline)、激活(Activation)和消息(Message)构成。
- 对象:对象是类的实例,在序列图中用带有垂直虚线的矩形表示,虚线表示对象的生命周期。我们经常会把Actor也画到同样的维度,比如Customer。
- 生命线:生命线是一条垂直的虚线,表示对象的存在时间。
- 激活:激活表示对象正在执行某个操作或方法,通常通过在生命线上绘制一个细长的矩形来表示。
- 消息:消息是对象之间的交互,通过箭头表示从一个对象的生命线指向另一个对象的生命线,箭头上标注有消息的名称或内容。
这些元素共同构成了序列图,用于描述在特定场景下对象之间的交互顺序和消息传递。
2.1 对象
对象有如下三种表示方法。
- 对象名+对象所属的类名;
- 只有对象名(省略类名);
- 只有类的名称(匿名对象);
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种处理方式,一是一个对象给另一个对象发销毁消息,用虚线加销毁标记,另外也可以对象自己销毁,在生命线上打个×,就可以了。
(未完待续)