MagicDraw-活动图

活动图的作用

活动图可以表示各种各样的活动,甚至可以描述最复杂的行为。对象节点可以通过活动对事件、能力和数据的流建模,使用控制节点可以掌控活动的执行。活动分区可以为系统结构分配系统行为。

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

这与结构图( BDD 、IBD 和参数图)相对,结构图都是静态视图,不
会表达任何动态的时间,或者系统及其环境的变化。

三种活动图的选择

活动图、序列图和状态机图是SysML 提供的指定系统行为的三种选择。所有三种图都可以表达连续和并发的行为,以及随着时间的推移发生的事件。然而,每种图都有其优点和缺点,你需要根据看图者的需求进行选择。

活动图的特点

活动图特别擅长通过行为表示对象一一事件、能量或者数据一一的流动,关注系统操作时,对象是如何在行为的执行过程中被访问和修改的。它的关键优势在于可读性;活动图可以表达复杂的控制逻辑,这要比序列图和状态机图更强。另外,活动图是唯一能够说明连续系统行为的图。

活动图确实也存在缺点,它略显模糊。活动图说明执行动作的顺序,它们可以有选择地说明哪种结构执行了哪个动作。然而它们并没有提供任何机制来说明哪个结构触发哪个动作(相对而言,序列图可以说明所有三种信息) 。

当与利益相关者协作定义问题空间,并指定系统所需要的行为时,建模者会使用活动图作为分析工具。

活动图对于详细设计一一即适用于系统实现的、明确的行为说明并不是一种特别有用的工具。

什么时候创建活动图

因为活动图作为一种分析工具最为有效,所以在你需要和利益相关者沟,想要捕获系统及其执行者期望的行为时,它是首先要创建的行为图。因为活动图作为一种分析工具最为有效,所以在你需要和利益相关者沟通,想要捕获系统及其执行者期望的行为时,它是首先要创建的行为图。

活动图还可以作为图形化的用例说明书。

各种图本身就是工具,最大目的是选用合适的图把设计意图及设计方案表达清楚。

活动图外框

活动图唯一允许使用的模型元素类型是活动。

活动图的外框表示你在系统模型某处定义的单个活动。

活动和活动图并不一样。当使用活动这个术语的时候,我指的是一个模型元素,而不是相关的图。

**模型的图永远都不是模型本身;它只是模型的一种视图。**在你的系统中定义一个活动,而不把它显示在活动图中,是完全没有问题的。但大多数情况下,你都会显那它。

令牌流

令牌流是一种抽象的概念。令牌不是模型元素,你不会在系统模型中创建它们,你也不会在活动图中显示它们。

令牌的想法和Sy sML 关于活动、节点和边缘的定义紧密相关。你必须依赖于你的想象来理解活动中的令牌流,而那个活动会给予各种类型节点和边缘的规则。

对象令牌

对象令牌代表的是在活动中流动的事件、能量或者数据的实例。

它可以从总体上代表一个活动的输入或者输出,并且可以代表活动中一个动作的输人或输出。

正式的说法是, 一个对象令牌代表你在模型层级关系中某处创建的模块、值类型或者信号的实例(以定义事件、能量或者数据的类型) 。

控制令牌

什么都不代表。不代表任何物理的东西。它没有类型(模块、值类型或者信号) 。

控制令牌只表示活动的哪个动作在活动执行的特定时刻处于启用状态。可能会有多个控制令牌流过活动的单次执行。那样意味着活动中的多个动作同时处于启用状态。

基本动作(动作节点)

动作是一种可以存在于活动之中的节点,它是为活动基本的功能单元建模的节点。

一个动作代表某种类型的处理或者转换,它会在系统操作过程中活动被执行的时候发生。

基本动作的标识法是圆角矩形。

最好把动作写成一个短语,由有力、无歧义的动词开始。另外,你应该避免把多个动词放在一个动作中,而应该把它分解成多个动作。例如,不要写“验证并保存命令”,而应该创建两个连续的动作:“验证命令”和“保存命令” 。

还可以使用正式的编程语言(像C 、Java 、Veril og 或者Mo d elica )来描述活动图中的动作。SysML 把这样的声明叫做不透明表达式。

image-20220713112428261

不透明表达式并不是只能使用编程语言。

系统建模者很少会把动作写成不透明表达式。开发团队会经常在活动图中这么做,创建那些图用于沟通他们的设计。

一个有用且有意义的活动总是会包含一个以上动作。

你使用活动图表述的不仅仅是动作的序列; 它还可以表达对象流一一总体上来说就是那些动作和活动的输入和输出。

对象节点

对象节点是另一种能够存在于活动之中的节点,它会对对象令牌通过活动的流建模(其中对象令牌代表的是事件、能量或者数据的实例)。

对象节点的标识法是一个矩形。显示在对象节点中的名称字符串会拥有下面的格式:: []

对象节点名称是建模者定义的,类型必须与你在模型层级关系中某处定义的模块、值类型或者信号的名称匹配,它会指定对象节点能够持有的对象令牌类型。

它持有代表值类型km 的实例的对象令牌。字符串末尾的多重性表示,第一个活动只会产出一个对象令牌作为输出,而第二个动作只需要一个对象令牌作为输入。

image-20220713113553009

对象节点另一个有用的特性是, 它可以选择显示分隔框一一就像模块或者组成部分属性一样一一来表示它持有的对象令牌的内部属性。只有在指定的类型(模块、值类型或者信号)真正拥有内部属性的时候,这才真正有用。

栓pin

栓( pin )是一种特殊类型的对象节点。你会把栓附加到动作上,表示动作的输入或输出。栓的标识法是附着在动作外边界上的小方块。

你可以选择在方块内部显示一个箭头,以指定栓代表的是输入还是输出。

栓的意义和对象节点一样;栓只是你可以根据具体情况选择的另一种标识法,以满足看图者的特殊需求。

对象节点标识法可以显示分隔框,以表示它所持有的对象令牌的内部属性。然而,它要比栓标识法占据活动图中更多空间。栓标识法无法显示分隔框,但这种标识法更节省空间。

建议选择栓标识法作为默认的选项,只有在一些不常见的场合,当你需要显示对象令牌的内部属性的时候,才使用对象节点标识法。

栓和对象节点的意作用是一样的。

栓是创建对象流动线的时候自动创建的。创建控制流动线则不会自动创建栓。

活动参数

活动参数是另一种特殊类型的对象节点。你会把它附加到活动图的外框上,从总体上表示活动的一种输入或者输出。

活动参数的标识法是横跨在活动图外框上的矩形。

活动参数的名称字符串的格式和对象节点(以及栓)相同。

一种约定俗成的建模方法是把输入活动参数放在外框的顶部或者左边,输出活动参数放在底部或者右边。

image-20220713114615501

流与非流

默认情况下,动作和活动只有在执行的时候才会消费它们的输入对象令牌。类似地,只有在完成执行的时候,它们才会交付输出对象令牌。我们把这叫做非流( nonstreaming )的行为。

你所设计出来的系统行为不会总是如此,有时它们甚至会在行为持续执行的时候接受输入和产生输出。我们把这叫做流( streaming )行为。你可以在栓或者活动参数的名称字符串后面指定[stream],从而为流行为建模。

对象流

对象流是一种边,它会传输对象令牌。使用对象流,可以表示事件、能量或者数据的实例通过活动,在系统操作过程中活动执行的时候,从一个节点向另一个节点流动。

对象流的标识法是带有箭头的实钱。对象流一般会把两个对象节点连接在一起。

除了对象节点之外,你还可以在对象流的一端拥有决定节点( decision node )、合并节点( merge node )、分支节点( fork node )和整合节点( join node ),来指示对象令牌的流。

下图显示了7个对象流,它们表示这个活动部分中的动作需要对象作为输入,并且会产出对象作为输出。

image-20220713133847315

你必须确保对象流两端的对象节点拥有兼容的类型,在尾端作为输出产生的对象令牌必须可以作为箭头端的输入被接受。

可以通过泛化确保兼容性:这是针对抽象设计的例子(例如: Command ) 。你应该对这种实践感觉良好,它在你的系统设计中创建了可扩展性,对于生命周期中稍后不可避免的变更来说,那会最小化成本。

image-20220713134624158

控制流

控制流是一种传递控制令牌的边。控制令牌的到达可以启动等待它的动作。因此,当活动中的对象流自身无法传达序列的时候,你会使用控制流来表示一系列动作之间的序列约束。

控制流一般使用虚线及逆行标识,这样在图中很容易区分控制流和对象流。

下图中显示了7个控制流,他们连接了活动中的节点以定义它们之间排序的序列。

当一个动作完成时,它就会在输出的控制流中提供控制令牌,那会启动序列中的下一个动作。

image-20220713135522545

动作

动作什么时候开始

动作启动的三个条件:

  • 拥有动作的活动正在执行。
  • 在所有输入的控制流上都有控制令牌到达。
  • 在所有输入的对象流上都有足够数量的对象令牌到达,以满足相应输人栓的最低多重性。

image-20220713141158238

建模者在绘制活动图的时候,最常见的错误是向一个动作给制多个输入边,以表达通向那个动作的不同路径。他们错误地相信多条输入边之间“或”运算。正如你、·现在所知道的,这其实是“与”运算。所以请注意在你自己的活动图中查找这样的错误;这是很容易犯的错误。如果你需要对通向特定动作的可选路径建模,就必须在活动之前插入一个合并节点。

你还要知道,动作可以不需要任何输入边。在那种情况下,你表达的是动作不会等待任何输入令牌;它会在活动启动的时候启动。如果在活动中有多个没有任何输入边的动作,那么就会同时启动。

调用行为动作

调用行为动作是一种特定的动作,它会在启用的时候触发另一种行为。调用行为动作可以把一个高层次的行为分解成一系列低层次的行为。

调用行为动作会根据刚刚讨论的相同规则启动。它所调用的行为可以是以下三种中的任意一种:交互、状态机或者其他活动。

调用行为动作的标识法和动作的标识法相同一一圆角矩形。

上图中三种动作都是调用行为动作。调用行为动作(像ma 和vc )的右下角出现分支符号,表示被调用的行为( Measure altitude 、Validate Command )是一种活动。没有那种符号的调用行为动作(像rs )是模糊的;被调用的行为( Rotate satellite )可能是一种交互,也可能是一种状态机。尽管这么说,但是建模者很少使用调用行为动作来触发状态机。

当调用行为动作触发另一个活动的时候,调用行为动作的栓必须与所调用活动的活动参数匹配。

图6.15 显示了Stream telemetry data 活动的定义,它拥有一个输出的活动参数,与图6 .14 中显示的输出栓相匹配。一旦这个活动被触发,它就会持续地把类型为Source Packet 的对象令牌从多个数据源转换到类型为Transfer Frame
的单个对象令牌流中。当每个对象令牌到达输出活动参数frame 的时候,就会马上被传递到调用行为动作open telemetry stream 相应的输出栓上。

参数和输出栓相匹配

image-20220713142643342.png

image-20220713142425964

你可以使用调用行为动作进行重构,把出现在多个地方的通用功能块抽取出来,在单独的行为中定义它,然后你只需要多次调用它。这种设计实践会让我们更易于重用那些通用的低层次行为。例如, Stream telemetry data 活动包含三个调用行为动作,它们都会触发Create virtual channel frame 行为。那个行为只定义了一次(在模型层级关系中的某处定义为活动),而在这里执行了多次。

发动信号动作

作用:为了满足可伸缩性和性能的要求,系统工程师经常会设计分布式和并发的系统。这样的系统会使用并发机制来传递事件、能量和数据,并同步那些以并行的方式操作的各种动作。你可以使用发送信号动作和接受事件动作,在活动图上为这种类型的系统行为建模。

定义:发送信号活动是一种特定类型的动作,启用的时候会异步地生成信号实例,并把它发送到目的地。

发送信号动作的标识法是形状类似于路标的五边形。

在发送信号动作(例如: Orbit Radius Updated )内部显示的字符串必须与在模型层级关系某处定义的信号的名称相匹配。

当这个发送信号动作启动的时候一一
也就是在输入栓中有输入的对象令牌到达时一一它就会异步地生成Orbit Radius
Updated 信号的实例,把currentOrbitRadius 值传送给等待它的目标方。因为发送信号动作是异步的,所以不会等待来自目标方的回应;它会立即完成,并在输出边提供一个控制令牌。每当新的对象令牌到达其输入栓的时候,发送信号动作都会启动。

image-20220713143311971

接收事件动作

接受事件动作在异步行为中是发送信号动作的好搭档;接受事件动作是在活动中使用的元素,它表示活动在继续执行之前,必须等待发生一个异步的事件。一般情况下,这个异步事件是接收信号实例。

接受事件动作的标识法是一个五边形,看起来像是一个矩形的一边有一个三角形的槽。

接收信号实例的接受事件动作和生成该信号的发送信号动作,可能会出现在同一个活动中。或者,它可能会出现在单独的活动中;这样,你可以为两个不同的系统行为之间的异步通信建模。

和其他类型的动作一样,接受事件动作并不需要任何输入边。于没有输入边的动作来说,只要活动开始执行,它就会启动。在这方面接受事件动作也不例外,只要活动开始执行,没有输入边的接受事件动作就会启动,并开始监昕信号实例。

即便在第一个信号实例到达之后,没有输入边的接受事件动作也会保持有效,它会继续监听其他信号实例。通过这种方式,我们可以为持续响应异步事件的系统行为建模。

等待时间动作

等待时间事件发生的接受事件动作也叫做等待时间动作。

等待时间动作的标识法是一个沙漏形状的符号,下面有时间表达式。

在等待时间动作和其他接受事件动作之间,区别仅在于标识法和事件的类型不同;在上一节中叙述的其他一切都对等待时间动作适用。

沙漏下面的时间表达式可以指定绝对时间事件,也可以指定相对时间事件。

image-20220713161533323

等待时间动作是一种特殊类型的接受事件动作。即便在所需要的事件第一次发生之后,也没有任何输入边的接受事件动作还会保持有效。因此,在图6.19 中显示的等待时间动作会继续每两秒输出一个控制令牌(并触发Read temperature 行为),直到Sample system temperature 活动终止。这个例子说明了如何为持续的周期性行为建模。

控制节点

控制节点的作用:

使用控制节点,可以引导活动沿着路径执行,而不只是简单的序列动作。控制节点既可以指引活动中控制令牌的流,也可以指引活动中对象令牌的流。

控制节点有7 种类型:初始节点、活动最终节点、流最终节点、决定节点、合并节点、分支节点和集合节点。当然,可以使用这些节点的组合,在活动中定义任意复杂的控制逻辑,以满足系统功能需求。

初始节点

初始节点标记活动的起点。正式的说法是,它标记了活动中的一个位置,控制令牌的流会从那里开始。初始节点的标识法是一个小的实心圆形,它一般只有一个输出控制流。

活动不一定需要初始节点。控制令牌的流可以从没有输入边的动作开始。

也可能对象令牌流本身就足以在活动中定义正确的动作序列。对象令牌一般会从输入的活动参数(在活动图的外框上)开始。在这样的情况下,你不需要在活动中有初始节点。

流最终节点和活动最终节点是标记控制令牌流结束的控制节点。

流最终节点和活动最终节点

流最终节点和活动最终节点是标记控制令牌流结束的控制节点。

二者的区别:当控制令牌到达流最终节点的时候,那个令牌会被销毁,以此标记单独一个控制流的结束。而当控制令牌到达活动最终节点的时候,整个活动都会结束,以此标记所有控制流的结束。

image-20220713162949691

你可以为一个活动添加多个活动最终节点。然而,你应该小心避免在并发
控制流之间建立竞争条件的模型,第一个到达任何活动最终节,点的拉制令牌
都会终止整个活动。你应该使用流最终节点而不是活动最终节点来避免建立
竞争条件的模型。

决定节点

决定节点标记在活动中可替换序列的开始。其标识法是一个空心的菱形。

决定节点必须拥有单一的输入边,一般拥有两个或多个输出边。每个输出边会带有布尔表达式的标签,那叫做监听,显示为方括号中间的字符串。

image-20220713163813988

当一个令牌一一可能是对象令牌,也可能是控制令牌一一到达决定节点的时候,输出边的监听会被估值。令牌会提供给那时监昕估值为真的输出边。

监听要完整且独立。

合并节点

合并节点标记活动中可选序列的结尾。其标识法和决定节点相同:空心菱形。

可以通过输入边和输出边的数量来区分它们;合并节点拥有两条或多条输入边,而只拥有一个输出边。当一个令牌一一可能是对象令牌,也可能是控制令牌一一通过任意一条输入边到达合并节点,令牌马上就会提供给输出边。

最常见的情况是,合并节点和决定节点组合使用,在活动中对循环建模。

image-20220713164333168

合并节点和决定节点是同一个东西,只是用法不同

分支节点

分支节点标记活动中并发序列的起点。分支节点的标识法是一条线段(方向随意),它必须拥有一条输入边和两条或多条输出边。

原始令牌的每个副本都代表独立、并发、沿着各自路径前进的控制流。

image-20220713164459395

集合节点

集合节点标记活动中并发序列的结束。集合节点的标识法和分支节点一样: 一条线段。

你可以通过输入、输出边的数量来区分它们;集合节点一般拥有两条或多条输入边,而只有一条输出边。

可以使用集合节点为活动中并发动作序列的同步点建模。当令牌到达每条输入边的时候,就会有单个令牌提供给输出边。并发序列结束,一条控制流会通过集合节点所标记的点,继续执行。

活动分区:把行为分配给结构

活动图不仅可以传达活动中动作的顺序,而且还可以传达执行每个动作的结构。你可以使用活动分区来表示。

活动分区的方向可能是水平的,也可能是垂直的,但是某些建模工具可能只支持其中一种方向。

活动分区最常见的情况下会代表存在于系统模型某处的一个模块或者一个组成部分属性。在活动分区中放置一个动作表示该动作被分配给一个名称由头部决定的结构。如果只是简单地放置,那么当活动在系统操作过程中执行的时候,结构就会负责执行那个动作。

image-20220713165006444

总结

活动图是一种强大的信息沟通媒介,你可以随着时间的推移使用它与利益相关者沟通系统的行为。当你需要显示持续的系统行为,并且需要关注事件、能量和数据的流在一系列动作之间的流动(可能是串行或者并行)时,这种图是很好的选择。活动图的重大优势在于它的可读性,即使所显示的行为拥有复杂的控制逻辑。

你可以在活动中创建调用行为i;IJ作来为行为分解建模。发送信号动作和接受事件动作让你可以为分布式系统中结构之间的异步通信建模。你可以使用等待时间动作为周期性发生的行为或者在特定时间点发生的行为建模。活动分区让你可以为活动中的动作分配职责,以指定系统中的结构。所有这些特性都让活动图成为表达系统行为的一种意义丰富的媒介。

03258330)]

总结

活动图是一种强大的信息沟通媒介,你可以随着时间的推移使用它与利益相关者沟通系统的行为。当你需要显示持续的系统行为,并且需要关注事件、能量和数据的流在一系列动作之间的流动(可能是串行或者并行)时,这种图是很好的选择。活动图的重大优势在于它的可读性,即使所显示的行为拥有复杂的控制逻辑。

你可以在活动中创建调用行为i;IJ作来为行为分解建模。发送信号动作和接受事件动作让你可以为分布式系统中结构之间的异步通信建模。你可以使用等待时间动作为周期性发生的行为或者在特定时间点发生的行为建模。活动分区让你可以为活动中的动作分配职责,以指定系统中的结构。所有这些特性都让活动图成为表达系统行为的一种意义丰富的媒介。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木头人的星辰大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值