SysML实践指南第二版(中文翻译:刘亚龙)第10章 基于消息的行为与交互

  1. 建模基于消息的行为与交互

本章讨论使用序列图来建模,一个模块的组成部分之间如何交互通过交换消息。

    1. 概述

在第9章,行为被建模使用活动图表示一个受控的动作序列,其转变输入到输出。在本章中,一个可选的方法表示行为被介绍。这种方法使用序列图来表示在一个模型中的结构元素之间的交互,作为一个消息交换的序列。交互可以是系统和它的环境之间或一个系统层次树上的任何层级系统组件之间的。一条消息可以表示一个服务在一个系统组件上的调用或一个信号的发送。

行为的这种表示方法是非常有用的,当建模面向服务的概念时,当一个系统的组成部分请求服务到另外的组成部分。一种面向服务的方法可以表示软件组件之间的分离的交互,当一个软件组件请求另外一种一个服务到另外一个,当服务被指定作为一组操作集。然而,序列图不仅仅限于软件组件之间的交互并广泛应用在系统级的行为建模中。一个交互可以被书写作为系统的组成部分如何应该交互的一个规范,和也可以被使用作为一个记录,一个系统的组成部分如何进行交互。

模块的结构元素被表示通过在一个序列图上的生命线。序列图描述这些生命线之间的交互作为这些生命线之间的一份发生规范指定的序列的顺序,其描述不同类型的发生,诸如,发送和接收消息、对象的生成和销毁、或行为执行的开始和结束。在一个序列图上许多发生规范与生命线之间的消息交互相关。有许多不同的消息类型,包含:同步消息当发送者等待一个响应和异步消息当发送者持续不需要等待一个响应。一个发送发生规范标志,当消息被发送通过发送实例,和一个接收发生规范标记当消息被接收通过接收实例。一条消息的接收中,接收实例可以启动一个行为的执行,其实施操作或信号接收引用在消息中。一条消息的接收也可以触发生成或接收生命线实例的销毁。

为了建模更复杂的发生顺序而不是简单的序列, 交互可以包含特定的构件被称为组合片段(combined fragments)。一个组合片段有一个操作符和一组操作数集,其可以是主要的交互片段,诸如,消息,或可以它们自身是组合片段,因此形成一个交互片段树。有许多操作符描述不同的顺序语义,诸如,并行,可选的,和它们操作数的迭代顺序。交互自身也可以被组合来处理大型场景或允许通用交互模式的重用。一个交互可以引用另外一个交互以抽象方式,一些交互在多个生命线之间的细节部分,或引用一个特定的生命线的组成部分之间。

交互执行在一个它占有的模块的一个实例的语境中,在交互中,每个生命线表示一个单一的实例也即占有通过它自身模块的实例。发生作为实例执行它们的行为和发送和接收请求对应操作符调用和信号。作为一个交互执行,它观察发生并对比它们到它占有的发生顺序的定义。

对于一个感兴趣的给定场景发生的序列,在这种情况下是交互的生命时间,被称为一个追溯。每种交互可以定义一组有效追溯的集和一组无效的追溯集。一个有效的追溯在其发生中定义通过交互的顺序是一致的。另外一个方面,使用neg交互操作符可以说明任何追溯也即与他的操作数是一致的无效的。断言操作符说明,如果一个追溯与它的操作数不一致随后它是无效的。如果一个断言操作符没有被使用随后不兼容的追溯被认为是决定,即标识有效或无效。

    1. 序列图

序列图表示一个交互过程。序列图的完整的标题如下:

sd [interaction] interaction name [diagram name]

序列图的图的类型是sd。和模型元素类型仅是interaction

图10.1显示一个序列图带有许多标志的例子。它显示一个Advacnced OperatorSurveillance System之间在处理一个入侵者警报时的交互。序列图的符号被详细显示在附录的表A.18到A.20。

    1. 交互的语境

交互执行的语境是拥有交互的模块的一个实例。作为实例(包含它的所有组成部分的实例)执行,任何当前的执行交互观察事件发生,作为其它行为的执行的一个结果。与其它类型的行为一样,交互可以是一个模块的分类行为,也可以是一个特定的调用动作调用模块拥有的行为。如果一个交互是一个分类器行为, 当模块的一个实例生成时,它开始执行;如果交互是一个拥有的行为, 它被调用时开始执行。交互的片段的执行完成之后,交互终止它们的执行。

图10.2显示System content模块的一个内部模块图,包含描述在本章的图中的所有交互明确的参与者。System ContextSurveillance System的一个特定使用得用法被称为Campany Security system。除了Campany Security system语境包含许多处于Campany Security system的外部的实体包含:一个Regional HQ、一组Perimeter Sensors一个Alam systemSecurity Guard。图也显示了Alarm SystemCampany Security system的内部组成部分,它们的行为被指定在后续的的交互中。交互的生命线也可以表示引用属性,但这不影响符号使用或交互的语义。

 

10.1 一个序列图的例子

 

10.2 交互语境的内部模块图

    1. 使用生命线来表示参与者在一个交互中

交互的主要的结构特征是生命线。一条生命线表示交互拥有模块的一个属性的相关寿命,其将是一个组成部分属性或一个引用属性,正如描述在第7章。正如解释在这里,一个组成部分也可以输入一个参与者,其参与者参与在交互中。然而,由于一个操作者不能支持操作,关于它的使用有限制。为了避免这个限制,一个参与者可以被分配到一个模块,其被使用代替参与者作为组成部分类型。生命线也可以表示端口,但由于代理端口,典型的仅依赖消息,它们很少贡献很多到一个交互的理解,并因此很少被使用。

当它的占有模块的一个实例执行一个交互,每条生命线演示模块的一些组成部分的一个实例(参考第7章获取一个模块语义的定义)。因此,当生命线表示的一个属性有多重性,且多重性大于1时,一个附加的选择器表达式(selector expression)应该被用来明确的标识一个实例。否则,生命线被采用来表示一个任意选择的实例。选择器表达式可以采取许多形式依赖于实例如何被表示在这个组成部分中。例如,它可以是一个顺序集合的一个索引,或一个组成部分的模块的一些属性特定的值,或一个更正式的标识的陈述。

一条生命线使用一个矩形(头部)带有一条虚线从它的基础延伸出(轨迹)。矩形包含被表示属性的名称和类型(如果可应用的),分隔通过一个冒号。

选择器表达式,如果存在,被显示在方括号中在名称之后。头部可以说明表示的模型元素使用一个特定的形状或图标。

图10.3显示一个简单的序列图,有一个图框架和两条生命线。一个表示正在思考中的Surveillance System,被称为company security system,和另外一条生命线表示一个Advanced Operator被称为security guard。由于security guard来自图10.2,有多重性上限大于1,生命线也包含一个选择器表达式被称为Elvis,来精确的指定那个实例在交互中。security guard被显示使用一个小的参与者图标来说明,它是监测系统的一个用户。

 

10.3一个交互与生命线

      1. 发生规范

生命线被关联到发生规范(Occurrence Specifications的一个顺序化列表,其描述在交互的执行过程中,生命线所表示的实例所能发生的情况。当一个交互执行时,发生集按时间排序被称为一个轨迹(trace)。顺序和结构的规范和实际发生的一个对比确定,是否轨迹是与交互协调的。发生规范的不同类型描述不同类型的发生。关联到交互的三种类型的发生分别是:

  • 消息的发送和接收
  • 动作和行为的开始和完成执行
  • 实例的生成和销毁

构件类似消息和交互操作,描述在本章的后面,提供这些发生规范的详细顺序和结构。

    1. 在生命线之间交换消息

消息不能在表示通过生命线实例之间交换来获得交互。一条消息可以被发送从一条生命线到它自身来表示发送和接收通过相同的实例的一条消息。

一条消息表示一个服务的调用或请求来自发送生命线到接收生命线,或一个信号的发送从发送生命线到接收生命线。一条消息被显示在一个序列图作为一条线使用不同的箭头和一个依赖于消息类型的符号。

消息被发送通过执行在一条生命线上行为,或更准确的调用动作,诸如,发送信号或调用操作动作,在那些行为内部。(参考第9.7节 获取更多信息关于发送信号动作)一条消息的接收通过一条生命线可以触发一个行为的执行,但它可以简单地被接收通过一个当前执行的行为(参考第10.5.4节)。注:可以在一条消息被发送的时间和接收和处理的时间之间有一个延迟。

尽管典型的消息被用来建模信息传递在计算机系统和它们的用户之间,它们也可说明物质和能量的传递。一个交互在一个雷达追踪系统中可以表示一个目标的探测和探测的响应。在一个产品系统中,一辆车的制造请求和那辆车到一个分销商的后续交货,可以被建模作为一个在分销商和制造商之间的交互,正如显示在图10.4。

 

10.4 消息交换的一个简单例子

      1. 同步和异步消息

消息的两个基础类型是同步和异步异步消息的发送者发送消息之后继续执行,而作为同步消息的发送者等待,直到它接收到接收者的一个响应,在继续续执行前它已经完成它的消息处理过程。

异步消息对应于或一个信号的发送或到一个操作的一个异步调用(或call)。一条同步消息对应到一个操作的同步调用。在这种情况下,响应到发送者被说明使用一个独立的(可选的)消息来自接收者返回到发送者。参考第7.5.2节,获取模块行为特征的一个描述。

调用消息和发送消息可以包含变量,其对应于相关的操作的输入参数或发送信号的属性。变量可以是文字值,诸如,数字或字符串;组成部分的属性被表示通过发送生命线;或当前执行行为的参数。一个响应消息可以包含对应被称为操作的输出参数参数或返回值的变量。当一个操作返回一个值,输出参数和返回值的特征被赋值可以被说明。一个特征可以是一个接收生命线的一个属性或一个局部属性或接收者的当前执行的参数。

一条消息实际发送隐含了两个发生:一个被关联到消息的发送通过实例对应于发送生命线;另外一个被关联到消息的接收通过实例对应于接收生命线。作为一种可以的期望,发送发生不得不发生,在接收发生之前。

消息被表示通过生命线之间的箭头。尾部表示对应发送消息的发生,和箭头表示对应消息接收的发生。箭头的形状和箭头线的样式说明消息的本质如下:

  • 开放的箭头意味着一条异步消息。消息相关的输入参数被显示消息名称之后的圆括号中的一个逗号分隔列表。一个变量对应操作参数或信号属性的名称可以被包含(紧随一个相等标志)在变量之前。如果这个符号选项没有使用,所有输入参数必须被列举在一个适当的顺序中。
  • 封闭的箭头意味一条同步消息。变量的符号同异步消息。
  • 开放的箭头在一条虚线显示一条响应的消息。与消息相关的输出参数被显示在圆括号中在消息名称、和返回值之后,如果真有的话被显示在变量列表之后。返回值的特征被赋值被显示(紧随一个相等符号。)消息名称之前, 与输入参数一样,输出参数可以在其对应的参数的名称之前由一个相等的符号分隔开。在罕见的情况下,所需的参数名称和所分配的功能都是必需的,然后使用以下语法:

feature name = parameter name: argument

图10.5显示2条生命线之间消息交换的而一个序列,介绍在图10.3。security guard首先选择摄像头CCC1与其交互。选择摄像头之后,security guard提交一个get current status请求来获取摄像头当前状态,系统响应OK。注:尽管company security system不提供一个明确的确认到security guard,摄像头已经被选择,系统不处理get current status请求,直到它已经接收select camera请求之后(并作为将被显示在图10.7的过程中)。company security system获得状态从选择的摄像头通过提交一个辅助get status请求到它自身,提供当前选择的摄像头的id。已经获得一个OK状态, security guard随后命令系统来移动摄像头通过给定一个pan camera指令(可能通过一个操作杆)。它再次请求获取摄像头的状态,这个时间状态是Moving

      1. 消息的丢失和查找

正常情形下,消息交换被认为是完整的;也即是,它有一个发送和接收发生。然而,有可能来描述丢失的消息,当没有接收发生时,和当没有发送发生时查找消息。这个功能是有用的,例如,来建模消息交通贯穿一个不可靠的网络和来建模消息丢失如何影响交互。

丢失消息的符号是一个箭头尾部在一条生命线上并且头部附着一个小的黑圆圈。查找消息对应的是相反的,箭头的尾部附着一个小的黑色圆圈和头部附着到一个生命线。一个例子可以被查找在附录表A.19。

 

10.5 生命线之间同步和异步消息交换

      1. 弱序列

一个交互强迫关于消息的最基本的顺序形式和它包含的其它发生,称为弱序列(weak sequencing)。弱序列意味着,在一条生命线上发生的顺序必须被遵循,但不同于约束,接收消息发生被排序在发送发生消息之后, 发生在不同的生命线之间没有顺序。

消息在序列图在图10.6中强迫一个顺序在发送和接收发生上;例如,A.send发生在A.receive之前和B.send发生在B.receive之前。生命线也强迫一个发生的一个顺序,所以lifeline 3说明,A.receive发生在B.send之前。然而,关于B.sendD.send的之间的顺序没有被说明。注:也就是说,它不是被测序的消息,而是它们的发送和接收发生。例如,B.send发生在C.send之前,但B.receive发生在C.receive之后。这种现象有时称为消息超车(message overtaking)和被更详细处理在第10.6节。

 

10.6 弱序列示例

      1. 执行

一条消息的到达表示一个操作调用在一条生命线上可以触发在接收者中的一个行为执行。在这种情况下,接收生命线执行行为(称为方法)对应消息表示的操作。可选的是,消息到达可以简单地触发一个变更在一个当前执行行为中,诸如,一个状态机或活动并引起它来执行附加的动作。变量包含在一个调用或发送消息重被传递到处理它行为。如果和当一个回复消息被发送, 输出的变量被提供来执行发送相应的同步调用消息。

生命线可以发送消息到它们自身。如果消息是同步的, 它可以引起一个新的执行将被启动,内嵌在当前的执行中。

生命线是或单个动作动作或完整的行为执行的主机。那个执行被建模的深度被保留给建模者。通常情况下,一个执行开始发生与消息接收的发生是一致的, 但不必在所有的情况下是这样(即,由于消息调度延迟执行可能会随后发生)。当一个执行是由收到一个同步消息触发时,执行结束发生可能与发送的答复消息是一致的。

激活(Activations)是矩形标志覆盖在垂直的生命线上并对应执行;它们开始在执行的开始发生和结束在执行的结束发生。激活是不透明的和可以或是灰色的或白色的;这个阴影不影响他们的音译。当执行是内嵌的时,激活被从左到右堆积。如果一个执行被触发通过一条消息的到达,箭头被附着到激活的顶部。如果一个执行终止使用一个响应消息的生成,随后响应的箭头尾部被附着到激活的底部。对应激活的一个可选符号是一个盒子标志重载交叉在生命线上里面带有行为或动作的名称。

图10.7显示与图10.5相同的交互,但激活被添加。相关的行为和动作在company security systemsecurity guard生命线现在是明确的。select camera操作告诉company security system来存储一个当前选择的摄像头。在一个变更来自图10.5,动作执行来存储摄像头一个id,current  camera=camera id ,被明确显示在这里使用盒子符号。get current status的过程引起一个新的执行来开始,其被触发通过get status消息使用先前存储的camera id作为一个变量。这个新的执行终止使用一个状态的响应OK。在pan camera命令触发一个的行为的执行来移动摄像头(其花费一些时间),另外一个get status消息触发一个内嵌的执行,其返回Moving的结果。有关security guard的生命线的执行持续贯穿交互,即使当等待来自company security system的一个响应。

 

10.7 生命线与激活

      1. 生命线的生成和销毁

在一个交互中,生命线表示的实例的生成和销毁被可以被引起通过特定的消息类型。一条生成消息引起一个实例的生成和所以是生命线表示实例的第一个发生。一条删除消息终止在特定类型的发生中,被称为销毁发生,其必须是生命线的最后发生。一个销毁发生也可以发生在隔离中,以表示一些不确定的(大概是内部)的破坏原因。这些发生常常应用到分配和释放内存来执行软件实例。然而,它们也可以被用来说明一个系统的物理部分的添加和删除从一个场景中。

符号对应一条生成消息是一条虚线带有一个开放的箭头,终止与正在生成的生命线的标题框,在序列图中被移动向下以适应符号。生命线虚线的尾端被绘制像常规。生成消息的名称和输入参数被显示以相同的方式正如一个调用消息的那些。对应一个销毁发生的符号是在生命线的结束处的一个十字。

序列图在图10.8中,显示新的路由如何被生成和销毁通过一个监控系统。一个Route是一组平移-旋转角度对,一个监控摄像头遵循,当处于一个自动监控模式中时。在这种情况下,user interface组件与Monitoring Station通讯执行路由维护操作。首先, user-interface调用Monitoring Station提供的create route服务,其依次生成一个新的路由并返回一个user interface的引用通过new route属性。user interface随后与这个新的路由交互为了添加路由点;最后,当路由完成时(仅路由节点显示在这里),它使用delete route服务来删除old route。注:动作的执行verify waypoint被显示使用盒子符号。

    1. 表示时间在一个序列图中

在一个序列图中,时间进展自上向下,正如前面陈述的,发生在一条生命线上对应时间顺序。此外,一条单一消息的发送发生和接收发生根据时间排序。然而,特别是在分布式系统中,一条消息可以被超车通过来自相同的生命线的一个后续的息发送;也即是,第一条消息可以到达在第二条消息接收之后。序列图允许出现这种情况,将被绘制在2条生命线之间使用一个向下倾斜的箭头,正如显示在图10.9。

序列图在图10.9显示发生什么,一条Alert消息超车一个常规的Status Report消息。这可能是因为Status Report消息被排队等候被处理,或它可以表明处理消息的一个手工过程。一旦Alert消息已经被regional HQ接收,,它延迟处理Status Report消息直到一条Stand Down消息已经被接收。

 

10.8 生成和销毁消息

 

10.9消息超车场景

除了时间的相对顺序,时间可以显式的表示在序列图上。观察时间(time observation)是指交互的执行过程中,时间对应于一些事件的发生的时间常量,持续观察(duration observation)是指交互执行过程中,两个时间之间的。时间约束(time constraint)持续时间约束(duration constraint)可以使用观测表达的约束,涉及那些观测的值。时间约束确定了一个适用于序列图上的单个发生的约束。一个持续时间约束标识2个发生,被称为开始和终止发生,和表达一个约束在它们之间的持续上。一个持续时间约束可以应用到任何元素,诸如一条消息,视为有持续时间或执行,在那种情形下,约束应用在发生之间,其括号元素的持续

SysML不要求特定模型的时间。在观测和时间限制中使用的表达式可以假设一个单一的时钟或参考一个更复杂的模型的时间与多个时钟。

一个时间约束被显示使用一个标准的约束表达在括号中连接通过一条线到约束发生。一个持续时间约束被显示通过一个双头箭头在两个约束发生之间带有它在约束附近浮动,也表示以标准的约束符号(即,在括号中)。一个持续时间约束也可以被显示作为一个标准约束浮动接近到一个带有持续过程的元素,诸如一条消息,或一个交互使用(参考第10.8节)。观察被显示以一种相似的方式到约束,但代替一个表达式在括号中,一个观察有观察的名称紧随通过一个相等的标志和随后一些表达式说明,观察对应的值如何被获得。实际的语言用来表示观察和约束,包含默认的时间、单位制、等等,必须被陈述作为观察和约束的部分。

图10.10显示一个场景当Monitoring Station被提问通过user interface到测试系统的摄像头。Monitoring Station依次请求每个摄像头来执行一个自检测并等待结果。而等待一个想用来自每个摄像头, controller组件内部到Monitoring Station需要来提供一个过程指示到user interface,所以它使用异步消息到交错通讯。在这种情况下,Monitoring Station和摄像头之间的通讯贯穿整个网络,和控制器和用户界面之间的通讯是局部的。作为网络延迟的一个结果, Monitoring Station接收响应来自摄像头,在消息被发送过程之后。注:尽管斜线被使用在这里来说明时间的传递,没有正式的语义隐含在斜线中;时间隐含被表示使用时间和持续性约束和发生的顺序。

许多观察和约束在这个交互中被表示,时间单位制为秒。一个观察时间t,被采用在当第一次自检测消息被发送使用表达式t=now 的点。一个时间约束在消息接收上说明,时间必须是处于1和2秒之间,t之后。发送和接收第一次自检测响应消息的过程被观察通过一个持久性观察d,并且对第二次响应消息有一个约束,不超过第一次的1.5倍。总的时间花费在用户界面请求一个测试命令和摄像头自检测应该被完成在5和10秒间,正如说明通过持续时间约束在图的右侧。

 

 

10.10 表示时间在一个序列图上

    1. 使用组合片段描述复杂场景

一个交互的最基础形式是,正如前面陈述的,一个发生的弱序列,更广泛的讲,从序列图的顶部到底部读。然而,交互的更复杂模式可以被建模使用构件被称为组合片段(combined fragments)。不同的组合片段指定不同的规则对应消息的顺序和它们关联发生,诸如,并行和替代轨迹。

一个组合片段由一个交互操作符和它的操作数组成。交互操作符定义排序逻辑的类型,和它的操作数都服从这个规则。每个操作数都有一个包含一个约束表达式的看门狗,表示它的有效条件。每个看门狗被绑定到一个单一的生命线和可以仅引用在它的约束的那条生命线属性中。操作数自身可以包含组合片段,和因此可以组成一个树的层次结构。在一个交互的执行过程中,所有操作数使用弱序列语义在它们的内容上。

一个组合片段必须指定那个定义通过它的操作数的生命线参与交互。考虑片段的轨迹时,仅在参与的生命线上发的生是有效的。

      1. 基础交互操作符

下面的交互操作符子集是使用最频繁的:

  • Seq—弱序列,正如描述在第10.5.3节。弱序列是所有操作数的默认形式,所以很少有明确的说明。
  • Par-操作符在其中操作符数可以并行发生,每个遵循弱序列规则。在不同的操作数之间没有隐含的顺序。这个操作符有一个可选的速记符号,应用到一个单一的生命线时,被称为一个coregion,其中替代一个操作数框架,通过垂直的方括号。
  • Alt/else-操作符在它的操作数中的精确的一个将被选择基于它的看门狗的值。看门狗在每个操作数上被评估在选择之前,和如果看门狗在一个操作数上是有效的,随后这个被选择。如果超过一个操作数有一个有效的看门狗随后选项是不确定的。一个可选的else片段是有效的,如果没有看门狗在其它操作数是有效的。一个通用的情形是,当操作数的选项是基于是否下一个发生切合第一个发生规范在一个操作数中。在这种情况下,没有看门狗。
  • Opt—操作符也即是等效于一个仅带有一个操作数的alt。这隐含操作数或被执行或跳过依赖于看门狗的有效性。
  • Loop—操作符在其中轨迹被表示通过它的操作数重复,直到它的约束被满足。一个循环可以定义迭代次数的上限和下限,以及看门狗表达式。这些边界被记录在括号内的循环关键字后的片段标签为:(lower bound,upper bound),其中,上限可以是值“*”说明一个无线的上限。

一个组合片段被显示使用一个框架,其标签说明操作符的类型和潜在的其它信息依赖于操作符的类型。

Altpar操作符有多个水平划分,分离通过虚线,对应于它们的操作数。其它操作符仅有一个单一的划分。消息和可能的其它组合片段嵌套在每个操作数中。当一个操作符有一个单独的操作数,它本身是一个组合的片段,它们的框架可以被合并成一个,并用合并的框架帧的标签被来表示所有的内容它们的框架,诸如:loop par

组合片段的框架标志必须不能使生命线模糊,参与在它的交互中,所以参与生命线的尾部是可视的在框架的顶部。框架不晦涩,不参与片段互动的生命线。

在图10.11中, lifelines 13参与在opt片段中,但仅lifelines 1lifelines 4参与在loop片段中。所以,为了维护当前的布局, lifelines 2lifelines 3是模糊的,通过loop框架来说明它们不参与。

 

10.11重叠和非重叠的生命线例子

图10.12显示,发生什么当一个入侵者被检测到通过company security system并追踪。当一些生命线处于交互的外部检测到一个潜在的非法进入到监控区域,交互启动。这触发系统来报警用户(security guard)使用传感器的id并发起警报。security guard随后图来查找并追踪入侵者和最后 (在这种情形下)取消警报。

 

10.12 复杂交互描述使用交互操作符

在这个序列内,alt操作符说明,security guard有一个选项在使用系统的自动追溯特征和和人工追踪入侵者之间。在自动追踪的情况下,系统试图获取和追踪一个目标。获取目标失败,或获取的目标的丢失,被表示通过一条Lost Track消息。在人工追踪的情况下,security guard使用一个输入设备来重复平移和旋转摄像头,正如说明通过loop par片段。

在所有场景中,security guard的职责是取消警报,其提示company security system取消警报。在这种情况下Illegal Entry Detected、Raise AlarmCancel Alarm消息终止在框架的门口,与当前生命线交互的外部交互(参考第10.8节获取一个有关gates的描述)。

      1. 附加的交互操作

下面是其它一些很少使用的交互操作符:

  • Strict—像“seq”,除了通过其操作数所代表的事件排序在所有参与的生命线中。Strict规则不应用到任何内嵌组合片段的操作数
  • Break—操作符,其操作数被执行而不是封闭片段的剩余部分保留。这被常常用来表示处理异常的情形。
  • Critical—操作符,操作数的顺序必须无交错与其他事件,至少在参与生命线的片段的内部。这可以被使用,当一些高层级的par操作符说明,交错可以发生,和这个操作符被用来约束交错。
  • Neg—操作符在追溯中,描述通过它的操作数是实际无效的。

在交互建模中有情形,覆盖所有潜在消息发生是非常繁重的,诸如当有大量的发生关联到消息,并不关联到场景被描述。考虑并忽略操作符允许发生和消息,已经被明显忽略(或没有考虑)将是有效的关于它们的操作数的交叉痕迹:

  • 考虑(Consider)—仅考虑消息对应一组特定的操作和/或信号。所有发生对应其它消息被忽略;也即是,它们不被考虑,当正在分析一个追踪时,使用操作符的操作数。仅考虑的消息可以出现在操作数中。
  • 忽略(Ignore)—不考虑消息对应一组特定的操作和/或信号。发生对应于忽略消息没有考虑,当正在分析一个追踪时。忽略的消息不能出现在操作数上。

不像其它操作符,确定或有效或无效的(在neg的情形下)追踪,但不是两者,断言(assert)操作符提供一种机制来断言那些追溯是无效的根据它的操作数的无效定义。这是一个非常强有力的构件,但可以表示变更,当有许多发生并且建模者希望使用断言来涵盖追溯,仅使用它们中的一些。使用其它交互操作符,追溯包含发生,其不匹配它们的操作数不计数作为或有效的或无效的,其中作为使用断言,它们是实际无效的,其不能被期望。对于这个原因, 考虑和忽略的片段操作符常常被使用减少断言发生的集,其是相关的所以一个有效/无效决策可以被信任。

对于considerignore操作符,消息将被考虑或忽略被显示在括号中紧随关键字在片段标签中。

图10.13描述消息交换的序列,当company security systemregional HQ通讯在一个紧急状态中。警报仅发生当监控系统处于打开状态时,所以当系统处于关闭状态时, regional HQ可以不计数任何出现被接受的警报(尽管它们可能希望调研它们发生的原因)。当一个有效的Alert消息已经被发送,那里必须没有其它消息直到一个Stand Down消息已经被接收;任何其它追溯是无效的和一个assert操作符被使用来确保这一点。然而,常常有常规的状态更新和确认在任何监控系统和regional HQ之间,和这些应该不能被实际来构成一个无效的追溯。通过封闭的assert操作符在一个忽略的片段,其列举Status ReportStatus Ack,,这些状态的发生更新消息不生成一个无效的追溯。

 

10.13 消息过滤场景

      1. 状态不变量

增强面向消息的有效追溯的表达式通过添加约束在请求一条生命线的状态在一个给定的点在发生的一个序列中常常是有用。可以被获取使用一个状态不变量(state invariant)在一条生命线上。不变约束可以包含属性和参数的值,或生命线被期望处于状态(一个状态机的)。

状态不变量的符号是一个在括号中的表达式,显示在生命线也即被约束。如果不变量指定一个状态机的状态,随后它被显示作为一个在生命线上的状态标志。

图10.14显示对应关闭系统的场景。状态不变量在security guard生命线说明,看门狗不得必须要登录对应Shutdown System消息将是有效的。状态不变量在company security system生命线上说明,用户数目必须是1对应一个关闭请求将是有效的;也即是,当前没有其它用户登录,一个有效的追溯终点使用一个Shutdown Confirmed消息反应到看门狗。

 

10.14 状态不变量

    1. 使用交互引用来构造复杂的交互

在多数系统工程项目中,系统的规模并由此常常交互的规模变得非常大。有许多交互的模式, 例如,初始化和关闭,其作为不同场景的部分被使用许多次。

为了支持大规模的交互使用,一个交互可以包含一个交互使用(interaction use),其引用描述在另外一个序列图上的一个已存在的交互。交互使用可以是内嵌的由于一个引用的交互可以依次引用另外一个。这个功能明显增强类交互的范围。它也促进重用由于一个交互可以被使用(即被引用)通过超过一个使用交互。使用交互表示参与者在引用交互中。使用交互的定义必须有生命线,其标识所有参与者在引用交互中,但也可以包含附加的生命线。

为了允许消息传递到和输出一个交互,当它被使用通过另外一个,一个交互可以有连接点, 在它的边界上被称为正规门(formal gates)。每条消息有一个对应的门,进入或离开交互在它的边界上。当交互使用时,使用交互有事实门(actual gates),其一对一对应被使用交互的正规门。消息到达或离开事实门必须匹配那些到达或离开在它们响应的正规门根据方向、类型、和原因(信号/操作)。

在一个交互的定义中,消息可以连接到交互的框架。在每个连接点有一个正规门, 尽管没有标志表示门自身。门可以被命名但名称典型的没有显示。消息连接到框架在一个交互的正规门的一个例子被显示在图10.12。

交互使用被显示作为框架,使用关键字ref在框架标签中。框架的体包含引用的交互的名称。消息在框架的边界终止/启动隐含了事实门的存在。生命线参与在内嵌交互中被框架标志遮挡。注:当参与者不被遮挡时,这是一个相反的关于参与者如何被表示在组合片段上。

图10.15显示一个交互,其引用4个其它交互,正如说明通过ref。第一个引用交互描述 company security system被设置通过security guard。在看门狗的转变过程中,两个事物中的一个被显示作为潜在的发生。如果事物是安静的(常规状态),看门狗可以执行一些维护在自动监控路由上(场景在图10.8),或看门狗和系统可以处理一个警报(场景来自图10.12)。这两个备选项可以重复地发生说明通过loop alt片段,直到看门狗关闭系统。为了使用Handling Alert交互,这个交互需要来附着兼容的消息到所有它的门。

 

10.15 引用到另外一个交互

    1. 分解生命线来表示内部行为

正如上面描述的, 生命线表示的属性是一个模块的一种用法,其可以自身有内嵌的属性。生命线可以被分解来显示生命线对应于那些属性。

序列图包含分解一条生命线的规定和详细说明在它的组成部分之间的交互。例如,一个序列图可以被用来表示一个系统的交互,作为一个单一的生命线与它的环境。这常常被称为黑盒交互,这时系统的内部行为被隐藏和仅外部行为是可见的。系统生命线可以随后被分解来指定一个内嵌的交互在它的支持黑盒交互的组成部分之间。

交互在这些组成部分之间被定义通过一个独立的交互,其被引用通过被分解的父生命线,引用的交互包含对应于消息的发送和接收在父生命线上的正规门。消息在引用的交互的门上必须是兼容的与父生命线的消息,并且消息发送和接收发生必须发生以相同顺序正如在父生命线上。仅生命线表示模块的组成部分,其类型父生命线可以出现在引用交互中。

一个生命线分解被显示通过添加引用交互的名称在生命线名称下面,有前缀通过关键字 ref。相同的名称被使用在引用交互的框架标签上。必须是对应于消息开始或终止在父生命线上的引用交互中的正规门。

图10.16显示黑盒生命线的分解对应Alarm System来自图10.15。它显示Alarm System如何处理警报。当alarm controller接收一条Raise Alarm消息,它请求在internal PA上的一个公告,和随后警报所有注册的紧急服务的警报通过Emergency Comms System;它提供一个location和一个password来授权警报。当Cancel Alarm消息被接收, alarm controller请求另外一个公告并随后发送一个请求到紧急服务离开。至少一个紧急服务必须被报警,但最大的数目可以依赖于环境。

一个可选的来使用引用序列图对应表示内嵌的交互。这被完成通过显示生命线和它的 内嵌的组成部分在相同的序列图上,黑盒生命线显示在生命线的顶部,对应于内嵌的组成部分头部盒子被附着到父生命线的头部盒子的下侧。内嵌的生命线可以被用来显示交互发生在父生命线内部,或直接发送和接收消息到与其它外部的生命线。

 

10.16 一条分解的生命线

图10.17显示当security guard希望登录到company security system时的白盒视图。company security system的两个明显的组成部分—user interfaceMonitoring Station—被显示在company security system的生命线下面。在这个场景中一个login消息被接收通过user interface并请求Monitoring Station来验证它。user interface随后检查最大数目的登录没有超过和返回控制到security guard

 

10.17 在线的内嵌生命线分解

    1. 小结

序列图描述交互,其被用来捕捉系统场景作为一组特定的发生贯穿整个系统的一些表示通过生命线部分。交互被指定使用发生规范,其管理在一个层次中和顺序使用一系列操作符。当一个交互执行时,它评估执行追随也即设置发生的集观察在行为的执行过程中通过交互的生命线的实例。最明显的源的发生是在生命线之间交换消息,和这些可以触发执行和新的实例的生成。下面的列表强调交互的关键方面。

  • 生命线表示拥有交互的模块的组成部分(或到组成部分)。在执行中,一条生命线可以仅表示一个实例; 所以当组成部分有一个上限大于1,一个附加的选择器表达式被需要来精确指定所有实例中的一个,其可以被表示通过组成部分。一个序列图中生命线运行自顶向下说明它们表示的组成部分存在之前和交互执行之后。它们也可以开始和/或终止在序列图中,说明实例的生成或销毁在交互的执行过程中。生命线可以被物理的内嵌在一个图上,显示一个交互在那个生命线的白盒视图中。状态不变量在生命线上断定必须持有在那个点在交互的执行中对应当前的追溯将是有效的条件。
  • 消息被交换在生命线之间和典型的表示一个操作的一个调用或一个信号的发送。消息不表示数据流,但数据的流(或其它项诸如事物或能量)可以被捕捉提供消息的参数。消息被发送和接收通过行为执行在生命线上和可以是或异步(发送者继续执行)或同步(发送者等待一个响应)。
  • 默认的发生的顺序执行通过一个交互是弱序列,在其中不关联的发生被序列化在其中,但没有贯穿生命线。一个组合片段是一种方式对应指定不同的顺序语义。一个组合片段包含一个操作符和操作数;操作符表示它的操作数的顺序,其可以它们自身被组合片段。通用使用的操作符包含par、altloop。每个操作数可以有一个看门狗表达,必须被满足一次对应操作数将被执行。
  • 交互可以使用其它交互作为它们定义的部分来增强可升缩性,正如演示通过关键字ref。一个交互可以使用另外一个交互来描述它的生命线中的一个内部交互;这使能一个黑盒规格要求模式。一个交互也可以使用另外一种来指定它的总的行为的部分,其可以设计许多它的生命线。这个分解或被进行来降低一个序列图的规模,或重用一些通用的交互模式。交互框架可以特征连接点在它们的边界上,被称为门,来使消息来传递在交互边界上。
    1. 问题
  1. 序列图的图的类型是什么,和其模型元素的类型是它的框架表示的?
  2. 执行交互的语境是什么?
  3. 绘制带有两条生命线一个序列图:一个表示一个组成部分没带名称,类型化使用‘actor’“Customer,”和其它使用名称“m”类型化使用模块“Vending Machine.”
  4. 选择器表达式用于什么?
  5. 当指定交互时,那种类型的发生相对的?
  6. 列举不同类型的消息,其可以被交换在生命线之间。
  7. 来自问题3,添加一条消息从Customer生命线到Vending Machine生命线表示信号Select Product使用参数“C3.”
  8. 术语message overtaking意义是什么?
  9. 动作或行为表示在一个序列图中,如何执行?
  10. 什么是一个观察和它如何被使用?
  11. 在图中来自问题7,观察当前的时间(提供提供“clock”函数)何时“Select Product”消息被发送。
  12. 组合片段如何被表示在一个序列图上?
  13. 命名四个通用的交互操作符。
  14. 在图中来自问题7,变更Select Product从一个信号到一个操作在Vending Machine上并显示两个不同的响应:如果机器已经采购,随后它有响应使用返回字符串Stock Available;否则,它响应使用字符串Sold Out.
  15. 消息 M1 和M2 来自生命线L2可以发生以任何顺序在生命线L1上。显示两个不同的方式,这可以被表示在一个序列图上。
  16. 生命线参与在一个组合片段上被显示在对应组合片段的框架盒子上?
  17. 那个消息是有效的在一个忽略片段的内部?
  18. 状态不变量指定的是什么?
  19. 门被用用代表什么?
  20. 一条生命线的孩子之间的交互两种方式的名称的显示是?
  21. 生命线参与在一个交互的使用显示在框架盒子的前面或后面?

 

 

你可能感兴趣的:(MBSE)