如何在UML活动图中表示嵌套动作?


16

这个问题是非常相似,这一个,但得到的答复不符合我的需求。它专注于特定的UML工具(Papyrus),而我的问题是关于UML的一般性问题。

我想在活动图中表示一个嵌套动作,但是我不知道执行此动作的常用方法是什么。这个想法是,存在一个与其他动作具有相同作用域的动作,但是执行起来更为复杂。我想展示有关其执行的更多详细信息,同时仍能够在其他级别上展示该操作。

在下面的示例(该活动图显示了某种“ 返乡 ”活动)中,嵌套动作位于该Pet the cat动作中。请注意,此图中还有另一个潜在错误,请参阅问题末尾的勘误表。

终于回到家了

我已经使用了结构化节点,但是我不确定这是正确的方法,因此是一个问题。在状态图中,等效项将是复合状态,但是我只是找不到关于复合动作的任何信息。关于结构化节点,在阅读了一些有关它的文档后,我仍然没有真正知道应该如何使用它,因此,我可能完全不喜欢该图。

我也知道有可能用三叉戟符号来引用另一个子活动,如下图所示,但是它不符合我的需求,因为我希望所有信息都在同一张图表上(因此我可以打印它而不会丢失任何信息):

三叉戟子活动

那么代表这种嵌套动作的标准方法是什么?按照标准,我指的是有效的UML,通常在大多数UML设计工具上都可以看到并且可行。

无关的勘误表:我的图表中有另一件事是错误的,进入同一动作(Scratch behind the ears)的箭头应先进入合并节点,然后再输入该动作。请参阅下面的评论,包括JOT的引用


您没有问这个问题,但我想指出,“从头开始”动作永远无法执行。有谁知道这是真的吗?
Jim L.

好吧,我不知道,但我希望那只是猫的脾气,因为我最后给老板的图表看起来像这样:/
蒂姆·

原因是必须将来自两个路径的令牌提供给操作才能启动,这是不可能的,因为一个令牌来自另一个永远不会发生的令牌。
Jim L.

@JimL。您是说两个条件都必须为真才能进入此状态吗?那么表达我打算表达的方式是什么?在州入口之前有一个合并的钻石节点?
蒂姆(Tim)

我们在谈论的是行动,而不是国家。但是可以,需要合并才能解决此问题。
Jim L.

Answers:


23

两者都是“标准”。根据UML规范的第一张图片是

结构化活动节点

StructuredActivityNode是一个Action,它也是一个ActivityGroup(请参见第15.6节),其行为由其包含的ActivityNodes和ActivityEdges指定。与其他类型的ActivityGroup不同,StructuredActivityNode拥有它包含的ActivityNodes和ActivityEdges,因此节点或边缘只能直接包含在一个StructuredActivityNode中。可以嵌套StructuredActivityNodes(作为StructuredActivityNode,作为Action也是ActivityNode),因此,边缘或节点可以间接包含在许多嵌套的StructuredActivityNodes中。

活动组

ActivityGoups是ActivityNodes和ActivityEdges的分组构造。节点和边可以属于多个组。本子节描述了两种具体的ActivityGroup,ActivityPartitions和InterruptibleActivityRegions。StructuredActivityNodes是第三类ActivityGroup,但它们也是Actions,有关Actions的第16节的16.11小节中对此进行了讨论。

第二张图片是

调用动作

InvocationAction是直接或间接导致对Behavior的调用的Action(请参见第13.2节)。InvocationActions包括用于调用操作或行为以及用于启动先前已实例化的行为的CallActions。其他种类的InvocationActions可以有针对性地发送信号和其他对象,并可以向可用的接收器广播信号。

两种情况之间的主要区别是重复使用。在第一个位置,您只是在一个位置(您Pet the cat)有一些复杂性,第二个位置是您在多个位置(重新)使用某个动作。但是,我倾向于使用调用变体,即使它仅用于一次使用。在这里,我添加了一个复合图(在dbl-click中在EA中打开),以显示相应操作的详细信息。主流程仅显示概述,如果需要详细信息,则只需单击一下即可。

现在,在EA中创建复合图(再次)有所不同。您需要在程序包级别创建一个AD,然后将其拖动到调用元素中。现在,当您单击dbl时,将打开嵌入式图。


谢谢您的回答。您能否详细说明何时使用哪种可能性?我觉得用户端的UML规范很难阅读。
蒂姆

这不是上课前的演讲:-)我将尝试添加一些解释。
qwerty_so

我对另一个EAUI进行了评论更新。
qwerty_so
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.