系统由多个部分组成,系统的整体行为源于这些部分以有序协调的方式协同工作。从设计和可视化角度来看,各部分之间的通信及其行为的同步至关重要。系统的主要结构单元(即模块)通过交换消息和信号来触发相应行为,从而实现协调一致的系统运行,体现系统的功能。
这种消息和信号的交换以及由此产生的行为,可以用顺序图来表示,该图展示了参与特定交互的模块实例之间按时间顺序发生的消息和信号。
15.1 生命线、消息和激活
在顺序图中,参与交互的元素通过一条虚线表示其生命周期,该虚线从元素底部延伸,并垂直延续至元素存在的整个期间。在顺序图所代表的时间段内,元素可以随时被创建或销毁,因此生命线反映了它们的存在状态。位于图顶部的元素是在交互开始时创建的。发送者与接收者之间的消息交换将始于一条生命线(发送者),并终止于另一条生命线(接收者)。
发送方实际上是在调用或激活接收端生命线所提供的某种行为。Enterprise Architect提供了实用的机制,用于利用已定义的操作行为。此图展示了现有消息的属性,建模者可以从已定义的操作下拉列表中进行选择。此外,建模者也可以通过点击“操作”按钮来定义新的操作。
正式而言,当消息指向一条生命线时,就会发生执行,即启动或增强某种行为。这种执行在视觉上表现为一个激活(activation),该激活以细长的矩形叠加形式绘制在生命线上,其长度代表该行为的相对持续时间。当回复消息被发送回调用者时,矩形激活的范围即告结束。
一个模块(实例)既可以是消息的发送者,也可以是接收者,这种消息被称为自身消息,因为它始于同一根生命线上并结束于同一根生命线上。在这种情况下,第二个较短的激活矩形会叠加在第一个激活矩形之上,但向右偏移。
创建和销毁模块的消息
任意数量的模块实例都可以参与交互,通常在顺序图所表示的时间段内,会存在一组这样的实例。这些模块将排列成一行,位于图顶部。然而,在图的执行过程中,模块也可能被创建或销毁。例如,某个特定的模块可能仅在短时间内需要使用,因此可以先实例化、执行其功能,然后被销毁。Enterprise Architect 允许工程师指定消息为“创建”消息,这意味着接收该消息的模块将在图时间序列中的相应位置被实例化。这通过将生命周期消息操作设置为“新建”来实现,如本图所示。
设置此属性会使目标模块移动到图示中的较低位置,表示该模块实例将在图示整个时间序列的这一时刻之后才被创建。消息的线型也会变为虚线并带有开放箭头,以显示这是一个创建消息。该消息的其他语义和效果方面均保持不变。
同样地,通过发送一个销毁消息可以结束实例的生命周期。实际上,这意味着该实例已完成其功能,不再需要。这可以通过重新设置消息属性来实现,但这次我们将生命周期消息的操作设置为“删除”。
设置此属性会立即终止实例的生命周期;在消息到达时,虚线生命线会在该时间点被一个小十字标记所拦截,以这种视觉方式表示。
当顺序图示的软件系统具有有限的可用内存时,销毁目标实例会导致已分配的内存被返回到内存池中。在系统工程中,管理机电对象生命周期还能带来多种其他益处,例如功耗、过热、可用性,甚至安全等风险。
同步与异步消息
消息本质上代表从发送者向接收者发送某种类型的请求。消息发送方与接收方之间有以下两种基本交互方式。第一类消息称为同步消息,因为消息大致在同一时间点发生。对于此类消息,发送方需等待接收方回复后,才能继续发送后续消息。第二类消息称为异步消息,因为发送方无需等待接收方的回复,即可继续执行,包括向该接收方或其他接收方发送额外的消息。
Enterprise Architect 默认创建同步消息,但可以通过在“属性”对话框中设置“同步类型”属性来更改消息类型。当消息类型设置为同步(默认值)时,线条样式将变为实线,并带有指向接收方实例的闭合箭头。该线条可标注消息的名称和参数。
异步消息表示对操作的调用,或发送给接收方的信号;无论哪种情况,发送方都不期望收到回复,也不会暂停执行以等待回复。在调用操作的情况下,该操作本身会被定义为异步的,因此系统或由图示所代表的机器将不会等待消息返回(即回复)。如前所述,Enterprise Architect 可通过“Synch”属性来设置此类消息类型。当消息类型设置为异步时,线条样式会变为虚线,并带有指向接收方实例的开放式箭头。该线条可标注消息的名称和参数。
还有一种可选使用的第三类消息,即回复消息(Reply Message)。这种消息表示对接收方发起的操作已成功执行完毕,并返回了确认信息,表明操作已完成。在图示中包含回复消息是一种风格上的选择。一些工程师和建模人员倾向于在图示中省略此消息,以减少视觉杂乱。如果已设置返回类型和值,则会作为回复消息的一部分返回。
模块在定义中可以同时指定操作和接收;这一范式描述了操作与接收与消息和信号之间的关系。
15.2 顺序图介绍
顺序图起源于统一建模语言(UML),在该语言中主要用于表示以软件为中心的系统中各组件之间的交互。在系统工程领域,其应用范围已进一步扩展,被更通用地用于表示系统或系统部分的结构单元之间按时间顺序进行的消息和信号交换。
顺序图包含两个轴:按照惯例,水平轴(x轴)表示参与交互的模块(实例),垂直轴(y轴)表示时间。这些模块无需按特定顺序排列,但建模者通常会根据最便于说明的方式进行布局,这种顺序往往基于它们在交互中被使用的先后次序。时间并非以线性尺度呈现,不同图之间的时间尺度可能差异很大。例如,表示高速摄影系统的顺序图的时间尺度,与表示超市收银机的顺序图的时间尺度会有显著不同。该图显示了两个顺序图(“开始车辆黑盒”和“启动车辆白盒”)的位置,它们是名为“启动车辆”的用例的子节点。
树状结构可作为导航工具,通过双击浏览器窗口中的项目,即可从该视图打开相应的图。
在第二个图示中,我们看到一个简单的顺序图,它表示启动车辆所涉及的消息序列。从图中可以看出,有两个模块(实例)参与了交互过程,消息在两个模块之间以及交互发起者和最终的用例之间进行传递。
创建顺序图
可以通过以下几种方式在用户界面中创建顺序图:
我们将使用设计功能区来创建顺序图。首先,需要在浏览器窗口中选择要创建顺序图的位置。与所有图一样,该位置可以是包或元素,但通常将顺序图添加到包中更为常见,因为包通常包含多个对象。在浏览器窗口中选定包位置后,选择:
功能区:设计 > 图 > 添加
选择此选项将打开“模型构建器”对话框中的“图构建器”标签页,在该页面中,您可以选择图类型并指定图名称;默认情况下,名称将使用包含该图的包或元素的名称。当选择SysML视图并选定SysML版本后,将显示一系列图类型列表,您可从中选择顺序图。点击“创建图”按钮后,系统将在浏览器窗口中指定的位置创建一个新的顺序图。图画布将被打开,允许您开始添加描述对象之间重要交互关系的元素和连接器。Enterprise Architect 还会显示顺序图工具箱页面,其中包含根据SysML规范定义的元素和关系,用于构建顺序图。如有需要,还可打开任意数量的其他工具箱页面,此外,“常用元素”和“常用关系”页面始终可用。
顺序图中使用的主要元素和连接器包括:
元素
连接器
可以通过从浏览器或工具箱中拖拽元素到图画布上来向图添加元素。通常的做法是复用现有的元素,例如“模块”(Blocks),这些元素具有以操作形式表现的行为,可被选为生命线之间传递消息的基础。这些元素可以作为链接添加到图中,但更常见的是以生命线的形式添加。
在创建了基本图后,随着对领域知识和系统交互的进一步了解,还可以添加片段(Fragments)、端点(Endpoints)、图入口(Diagram Gates)以及状态/连续(State/Continuation)元素。
15.3 基于片段的消息编排
许多系统本质上都很复杂,虽然简单的顺序图有助于传达软件或机电设备的整体情况,但为了创建这些更复杂系统的高级模型,必须对其进行扩展。在消息流程中建模复杂性的选项之一是“组合片段”(Combined Fragment)。通过组合片段,可以改变消息的执行顺序,例如在特定情况下选择特定消息,或对某条消息进行多次执行。可用的组合片段类型多种多样,其操作符决定了片段的类型。Enterprise Architect 支持所有操作符,使工程师能够创建足以准确描述所建模复杂工程系统的图。片段可直接从“交互”工具箱页面添加到图中,并可定位以覆盖相应的消息组。
图中放置的元素是一个通用片段,需要设置其操作符。这可以通过在组合片段属性表中选择类型的值来实现。
这会将片段更改为适当的类型,并允许(例如使用alt类型)设置任意数量的替代条件,这些条件将确定将触发哪个消息。