什么是序列图?

序列图是另一种可以用来说明系统动态行为信息的SysML 图。

你可以使用叫做生命线的元素,为系统行为中的参与者建模,然后使用生命线之间的消息,为那些参与者之间的交互建模。你可以指定交互的时间约束和持续期间约束。你还可以使用各种交互操作符来指引交互的执行。使用交互可以对一系列交互之间的行为分别建模。

作用

序列图是一种行为图;和活动图一样,它表示了系统的一种动态视图,这种视图会说明随着时间推移而发生的行为和事件的序列。

模块的各个部分会通过操作调用和异步信号彼此交互,以产生浮现式的行为,当你关注上述内容时,使用序列图就是很好的选择。这种行为的正式叫法是交王( interaction ) 。

序列图是对行为的精确说明,因此它很适合用在详细设计方面一一那会作为开发的输入项。

让你可以基于显示在序列图中的交互自动生成生产环境质量要求的源代码。这是可能实现的,因为序列图会表达自动转换成源代码所需的三种前提信息:行为执行的顺序、哪个结构会执行哪种行为,以及哪个结构会触发哪种行为。

精确度和可读性不可兼得。随着行为中控制逻辑复杂度的增加,序列图很
快就会变得不可读。

什么时候创建序列图

序列图是一种万能的行为图,所以你可以通过创建它来说明系统层级关系中任意级别的行为。

当你需要精确地指定实体之间的交互、系统问题域内的交互或者解决方案域内的交互的时候,序列图就是非常好的一种选择。简而言之,你可以在系统生命周期的任意时间点创建序列图。

序列图外框

在序列图中唯一允许使用的模型元素就是交互。序列图的外框总是表示你在系统模型某处定义的一个交互。

交互本身是一种模型元素;和活动一样,它是一种行为。和活动、模块和包一样,交互也是一种命名空间。它可以在模型层级关系中包含一系列命名的元素(像生命线、事件发生和消息) 。那些被包含的元素可以出现在相关序列图的外框之内。

图6.26 (见第6 章)显示了完整的Exec ute Hohmann Transfer 用例说明。图7. 1中的序列图显示了那个用例说明中的主要成功场景一一当卫星接收有效的传输命令时,那个行为就会发生。因为这两幅图显示了类似的行为,所以我们可以看出序列图和活动图在可读性方面的比较。

序列图是对主要成功场景的描述。

生命线

生命线是代表交互参与者的一种元素。

选择器表达式是名称字符串的可选部分。在显示的时候,它会出现在紧挨着生命线字符串后的方括号之中。选择器表达式会指定生命线代表的特定实例。

在生命线上可以出现6 种类型的事件:

  1. 消息发送事件
  2. 消息接收事件
  3. 生命线创建事件
  4. 生命线销毁事件
  5. 行为执行开始事件
  6. 行为执行结束事件

消息

消息代表的是发送生命线和接收生命线之间的通信。那种通信可能是启动行为在行为的末尾发送回应、创建生命线或者销毁生命线。

消息的标识法一般是带有箭头的线,连接发送和接收生命线。消息的尾端与发送生命线连接,消息的箭头端与接收生命线连接。

每种类型的消息都有其特殊的线形(像虚线或实线)和箭头形状(像开口箭头或者实心箭头) 。

消息上面还会有一个指定消息名称的字符串,它会和其他可选的消息片段(参数名称、参数值和返回值)在一起。名称字符串的具体格式取决于消息的类型。

当系统工程师使用术语消息的时候,它通常意味着某种数据格式。请不要把这种倾向带到对SysML 的学习中。在交互的情境中,术语消息并没有这种意义。例如,两条生命线之间的消息可能代表对操作的调用,即便那个消息并没有传人任何数据。当然,你可以表示数据(或者更一般的说法:对象)在生命线之间传递(通过在消息的名称字符串中显示参数) 。然而,术语消息、永远不会有这种意义。

消息事件

在交互的生命线上可以有六种事件发生。其中两种是消息发送事件和消息接收事件。我们可以把这两种更一般化地称为消息事件。

每次你创建从一条生命线到另一条的消息时(或者从一条生命线到其自身),你就同时为消息发送事件和消息接收事件建模了。在消息的尾端与生命线相交的地方,就会存在消息发送事件;在消息的箭头端与生命线相交的地方,就存在消息接收事件。

简而言之,消息事件没有任何标识法,它隐藏在消息末端和生命线相连的地方。

消息类型

异步消息

异步消息代表的是发送生命线和接收生命线之间的一种通信,而发送方会在发送消息之后马上继续执行。发送方不会等待接收方完成被触发的行为,也不会等待接收方在完成行为的时候发送回应。

measureAltitude 消息中没有显示任何参数列表(可能是因为meas ureAltitude 接收没有任何输入参数.或者是因为这个消息的参数对于看图者来说并不重要) 。然而,currentAltitudeUpdated 消息显示了一个参数:名为currentAltitude 的属性。这个属性所持有的值是接收的输入;当接收生命线执行与currentAltitudeUpdated 接收相关的行为时,就可以访问那个值。

如果measureAltitude 是一条同步消息,那么fc 生命线就需要等待man s 完成measureAltitude 行为的执行,并向fc 发送响应,然后fc 才可以继续发送checkSensorStatus消息。现在我们来详细讨论一下同步消息。

同步消息

同步消息代表的是发送生命线和接收生命线之间的一种通信,其中发送方会等待接收方完成被触发行为的执行,发送回复消息,然后才会继续自身的执行。同步消息的标识法是带有实心箭头的实线(从发送生命线画向接收生命线) 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGdETedT-1657714788177)(img/i6nrVh7CzF4IgxA.png)]

回复消息

回复消息代表一种标记同步调用行为结束的通信。它总是(通过交互中早期的同步消息)从执行行为的生命线发送到触发行为的生命线。

回复消息的标识法是带有开口箭头的虚线。

消息名称必须与相应同步消息的名称匹配(那也是同步消息所触发的操作的名称) 。

创建消息

创建消息代表在系统中创建新实例的通信一一之后会参与到交互中的一个实例。创建消息的标识法是带有开口箭头的虚线。消息的尾端与发送生命线连接(和平常一样) 。

消息的箭头端会和被创建的生命线的头部相连。

生命线创建事件会存在于创建消息与生命线头部的交点处。(在那里也会存在消息接收事件,因此它和生命创建事件是同时发生的。)

析构事件

能够出现在生命线上的第四种事件是生命线析构事件(或者简称为析构事件) 。

析构事件代表生命线的结束,并在生命线所代表的系统中析构该实例。

析构事件的标识法是X 形状的叉,位于被销毁的生命线底部。X 可能会显示在生命线的底部,不附加任何消息。这表示在交互的该时间点,生命线已经结束。

X 还可能会与消息的箭头端连接。这表示析构事件是生命线接收特定类型消息的结果,这个特定类型消息叫做删除消息。

执行说明

能够出现在生命线上的最后两种事件类型是行为执行开始事件和行为执行终止事件。

行为执行开始事件一般隐藏在生命线接收同步或异步消息的地方。行为执行终止事件一般隐藏在生命线发送回复消息的地方。

通常情况下,显式地表示行为在生命线的何处开始和结束,会消除不明确
的情况,因此非常有用。

执行说明的标识法是一个狭窄、垂直的矩形一一可能是空白的,也可能带有填充图案一一在生命线执行一个行为的时候,它会在交互的一段时间内覆盖生命线。矩形的顶部会显式地标记行为执行开始事件。矩形的底部会显式地标记行为执行终止事件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvXHRukJ-1657714788184)(img/rtIydzDPAfXmjo5.png)]

显示回复消息是可选的;不显示的时候,回复消息会隐藏在通过同步消息触发的行为的末端。

约束

序列图可以指定各种类型的约束。

在交互情境的日常实践中可以使用三种约束: 时间约束、期间约束和状态常量。

时间约束

关键是:当交互在系统操作过程中执行的时候,只有那个事件发生在时间约束指定的时间间隔中,我们才能够认为它能有效地执行。

期间约束

持续期间约束会指定两个事件发生所需的时间间隔。

关键是: 当交互在系统操作中执行的时候,只有那一对事件发生相隔的时间恰好落在期间约束所指定的时间间隔中,我们才能够认为它们是有效的。

状态常量

状态常量是一个条件,你可以在特定的事件发生之前(紧挨着的上面)指定给特定的生命线。

在交互的有效执行中,那个条件在那个事件发生的时间点上必须为真。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-21OV0dIK-1657714788185)(img/vQKux8h96ZNGqVr.png)]

组合片段

组合片段是一种机制,让你可以向交互添加控制逻辑(像决定、循环、并发行为) 。

组合片段的标识法是一个矩形,它会出现在序列图外框内的某处。矩形会放在一个或多个生命线之上,并封装在那些生命线之间传递的一条或多条消息一一由那个组合片段定义的控制逻辑所决定的消息。

你会使用在矩形左上角的分隔框中显现的字符串来指定控制逻辑。我们把那个字符串叫做交互操作符。SysML 定义了11 种交互操作符,有四种你可能会在日常建模工作中用到,分别是: opt 、alt 、loop和par 。

每个组合片段都由一个或多个交互操作数(简称操作数)组成。操作数在组合片段中以区域的形式显示一一区域由虚线分隔,那条线会水平穿过矩形。组合片段中的每个操作数(每个区域)包含一条或多条消息,它们的出现与否基于该组合片段定义的控制逻辑。

opt操作符

带有opt 交互操作符(在左上角)的组合片段代表一系列可选的事件,如果条件一一称为守卫(guard ) 一一的估值为真,那么就会在交互的执行过程中发生。

opt组合片段只会拥有一个操作数(区域),所以你不会看到水平穿过矩形的虚线。在那个操作数中的事件要么发生,要么不发生(基于系统操作过程中守卫的估值)。

守卫是一个布尔表达式,放在一对方括号之间,显示在o p t 组合片段的顶部附近。你必须把守卫放在组合片段中第一个事件发生的生命线上。所有出现在布尔表达式中的属性都必须是那个生命线的属性,或者是总体上拥有交互的模块的属性。

在这个交互的执行过程中,如果守卫isComman d Valid == True 的估值为真,那么这一系列被包含的事件就会成为执行的一部分。如果守卫的估值为假,那么被包含的事件就会完全被跳过。

守卫包含了属性isCommandValid 。它或者是fc 生命线的属性(它会与FlightComputer 模块的属性相对应)或者拥有该交互的模块的属性(它并没有在序列图上出现) 。你可以在BDD 上传达这些额外的信息。

alt操作符

带有alt 交互操作符的组合片段代表两个或多个可替换的系列事件,它们会在交互的一次执行中发生。

alt 组合片段必须拥有两个或多个操作数(区域),其中包含那些可替换的系列事件。正如之前所提到的,每个操作数都会由水平穿过矩形的虚线分隔。

alt 组合片段中的每个操作数都拥有自己的守卫。只有一个守卫的估值可以是真,在那个守卫下的操作数中的系列事件会成为执行的一部分;在所有其他操作数中的事件都会被完全跳过。你的职责是要确保alt 组合片段中的系列守卫都是互斥的。

你并不一定要使用else 守卫。可能(也允许)没有任何一个守卫为真(这种情况下,会跳过整个alt 组合片段)。

loop操作符

带有l oop 交互操作符的组合片段代表一系列事件,它们可以在交互的一次执行过程中发生多次。和opt 组合片段一样, loop 组合片段也只有一个操作数(区域) 。

这个范围没有指定在交互的一次执行过程会发生多少次迭代。它只约束
能够发生多少次迭代(仍然由交互的有效执行决定) 。为了指定任意次迭代都是有效的,你可以把范围设置为( 0,*)其中星号意味着“没有上限” 。事实上,如果没有在loop 交互操作符的右侧指定任何范围,那么( 0, *)就是默认的情况。

和通常一样,包含在loop 组合片段中的操作数可以拥有一个守卫(显示在操作数顶部的方括号中) 。在loop 至少循环迭代了括号中指定的min. 次之后,才会对守卫进行估值。一旦它拥有了值, loop 就会继续,直到守卫估值为假,或者循环迭代了括号中指定的max. 次数。

par操作符

带有par 交互操作符的组合片段代表两个或多个系列的事件,它们会在交互的执行过程中并行进行。

和alt 组合片段一样, par 组合片段有两个或多个操作数(区域),其中会包含那些并行的系列事件。

par 组合片段会改变生命线上的顺序。如果两个事件发生出现在par 组合片段的不同操作数上,那么其顺序无法判断。更加正式的说法是,那两个事件在交互的执行过程中能够以任意的顺序发生,而得到的执行都会是有效的。

你可以选择为par 组合片段的每个操作数指定一个守卫。如果那样做的话,它的意义就和之前一样: 只有守卫的估值为真,那个操作数中的事件才会发生。尽管这么说,建模者很少会为par 组合片段的操作数指定守卫。

下图中交互包含了一个par 组合片段。在第一个操作数中, fc 生命线上有两个事件。在第二个操作数中, fc 生命线上有八个事件。par 组合片段表示这两个系列的事件会彼此并行发生。

第一个操作数中的两个事件可能会在第二个操作数中的八个事件之前发生。第二个操作数中的八个事件也可能在第一个操作数中的两个事件之前发生。当然,这两个系列的事件也可能会以某种不确定的方式交错发生。这是由并发行为本身决定的,它们的相对顺序是无法提前决定的。

交互使用

把高层次的交互分解为低层次的行为一一通过叫做交互使用( interaction use )的元素触发的行为。

交互的标识法是一个矩形,它会出现在序列图的外框之内。矩形左上角出现的分隔框包含字符串ref,表示这个交互使用是对你在模型层级关系中某处定义的另一个交互的引用。那个被引用的交互的名称显示在矩形之中。矩形必须放在参与那个被引用交互的生命线上。

建模者一般会因为下面两种原因向交互添加交互使用。

  • 为了重构出事件的子集,这个子集对于几个高层次的交互是通用的,并把那个子集放在单个低层次交互的某个位置。
  • 为了把一个复杂的时间系列(在高层次交互中)分解为更可读的低层次交互序列。

在这幅序列图中,我重构出了事件的子集,把它们放在名为Bring MANS
Hardware Online 的低层次交五中,并添加了一个交互使用,以显示被触发的低层次交互。

总结

加交互使用。

  • 为了重构出事件的子集,这个子集对于几个高层次的交互是通用的,并把那个子集放在单个低层次交互的某个位置。
  • 为了把一个复杂的时间系列(在高层次交互中)分解为更可读的低层次交互序列。

在这幅序列图中,我重构出了事件的子集,把它们放在名为Bring MANS
Hardware Online 的低层次交五中,并添加了一个交互使用,以显示被触发的低层次交互。

[外链图片转存中…(img-wgTQHeY4-1657714788189)]

总结

序列图表示系统行为随着时间推移的变化信息,关注系统中特定部分之间发生的通信。建模者通常会用序列图为测试案例建模一一通过用例的单一执行路径,并且带有指定的输入值和期望的输出值。序列图的重要优势在于,它可以完整、清楚地指定系统行为。它会传达所有三种重要的信息:行为发生的顺序、哪个结构执行了哪个行为、哪个结构触发了哪个行为。因此,序列图经常会作为系统生命周期开发阶段的输入项。

MagicDraw-序列图相关推荐

  1. 在Visual Studio中使用序列图描述对象之间的互动

    当需要描述多个对象之间的互动,可以考虑使用序列图. 在建模项目下添加一个名称为"Basic Flow"的序列图. 比如描述客户是如何在MVC下获取到视图信息的. 备注: ● 通常是 ...

  2. Visual Paradigm 教程[UML]:如何在序列图中应用消息编号?

    下载Visual Paradigm最新试用版 已加入在线订购,现在抢购立享特别优惠>> 在本教程中,我们将介绍两种主要方式:基于图表和基于框架.当我们将"scope"指 ...

  3. Visual Paradigm 教程[UML]:如何在序列图中使用持续时间约束?

    2019独角兽企业重金招聘Python工程师标准>>> 下载Visual Paradigm最新试用版 在UML序列图中,持续时间消息用于表示消息的时间流逝.当您想要建模实时系统时,它 ...

  4. PowerDesigner建立UML序列图

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

  5. UML序列图总结(Loop、Opt、Par和Alt)

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

  6. UML建模--序列图建模技巧

    一.序列图工具箱说明 Actor:角色/执行者,通常用于用例场景图中,在描述用户交互时表示当前用户/操作者. Lifeline:生命线,最常用,例如系统.子系统.岗位角色.模块.类. Boundary ...

  7. 程序时序图 Sequence Diagram(序列图) UML图(数据流程图)的绘制

    参考视频教程:1.时序图的绘制 描述数据的流动 上面教程看起来还是有点懵逼 来看百度百科吧! 时序图中包括如下元素:角色,对象,生命线,控制焦点和消息. 1.角色(Actor) 系统角色,可以是人或者 ...

  8. 需求用例分析之九:序列图

    作者:张克强    作者微博:张克强-敏捷307 序列图,也称时序图.顺序图,英文名Sequence Diagram.在雅各布森用例分析方法中鼓励使用各类图形来表达,但恰恰没有明确提到序列图.而科伯恩 ...

  9. UML模型中的图-行为图【交互图-序列图、协作图】

    前言 上一篇博文小编为大家分享了UML建模中行为图里面的状态图和活动图,今天继续为大家分享行为图中的内容- 交互图 .在UML建模中,交互图包括两种- 序列图.协作图 正文 六.序列图     序列图 ...

  10. UML顺序图/序列图/时序图

    UML顺序图/序列图/时序图 UML时序图 什么是顺序图 基本元素 参与者 对象 生命线 激活框 消息 绘制工具 visio 亿图 UML时序图 什么是顺序图 为了实现系统功能,若干个对象之间需要交互 ...

最新文章

  1. 奔图打印机显示未连接_手机连接奔图打印机,无法打印的解决方法
  2. Leetcode 769. Max Chunks To Make Sorted
  3. boost::graph::page_rank用法的测试程序
  4. 失血多少会贫血_阿胶糕治贫血两大好处,治疗贫血两大方法要掌握
  5. 空字符是什么类型_Redis是什么?看这一篇就够了!
  6. Kafka单节点单broker的部署和使用
  7. 广义动量定理之质量m的应用案例分析
  8. Windows系统好用的文本编辑器
  9. system.Exception:端口已被占用1080
  10. 2017年苹果开发者账号申请——账号VISA卡支付流程
  11. MLX90614红外测温模块的使用
  12. php里用钢笔画曲线,ps钢笔工具组怎么用 ps钢笔工具使用方法
  13. Jmockit使用详解之Mocking
  14. 必知必会MYSQL下篇
  15. 问答系统QA的评价指标MAP、MRR、Accuracy@N
  16. 如果计算机电源突然断电 会导致,突然断电对电脑伤害有多大?
  17. 一个网络请求的历险之旅
  18. 继电保护matlab程序,自适应微机继电保护的matlab仿真实现 程序与算法
  19. S7COMM协议分析
  20. 关于网站中图片排名优化的技巧是?

热门文章

  1. IIS服务器重启三种方法
  2. 【入门】数据分析必备——Excel基础知识
  3. Excel重要知识点及学习分享
  4. 【经验分享】F e n c e s 桌面布局软件(Win All)----中文免费版+教程
  5. 如何查看AT24C02设备地址
  6. 怎么删除win10系统的AdobeFlash
  7. java 聊天室源代码_java聊天室源码(含客户端、服务端)
  8. java mysql聊天室_java实现聊天室的简单实现
  9. 从普通物理到弦论教材推荐
  10. 《数学建模与数学实验》第5版 作图 习题2.6