20

我正在对 UML 活动图中的循环进行建模。它适用于简单的条件节点(图 1),但我正在寻找一种更具表现力的方式来强调循环语义。所以我来到这里那里显示的“区域”或“可中断区域” ,但我找不到很多真正令人满意的例子。

我的示例是一个处理给定列表消息的函数。一旦找到第一个有效消息,循环就会中止,然后处理消息并且函数返回 true。否则,它返回false(请不要评论sense或废话,这只是为了样本)。

图1:使用了一个很好的旧活动图条件节点。诚然,沿着箭头跟踪控制流更容易,但没有“循环”,只有一个“如果”。

图2:

  • (正)退出条件是否正确,使用中断边缘?没错,它可能与迭代器一起成为循环的 [test] 部分的一部分。
  • 顺便说一句:在 UML 中如何最好地表达 for 循环的迭代特性?
  • 循环体内的活动最终节点是否正确(即当条件“消息有效?”产生“否”时)?在这里使用最终节点感觉有些不对劲,但是我还能如何表达一个循环的控制流呢?

两个图的功能应该是等效的:

带条件节点的循环

与区域循环


编辑:另一个实现斯蒂芬建议的图表:

  • 循环体内的初始节点和最终节点
  • “进一步处理”现在在循环体内。嗯...在这里可以,但可能还有其他循环,我宁愿把它放在外面。然后我可能会改变设计......
  • “下一条消息”也可以看作是迭代器对象本身,而不是原始图中的“(提供)下一条消息”动作。
  • 这两个对象流箭头可能有点矫枉过正,但我​​认为它们是正确的。

在此处输入图像描述

4

1 回答 1

10

在 UML 中,活动最终节点表示完成,因此在循环区域中使用它是正确的,它是循环内容的正常完成(进而导致下一次迭代)。作为旁注,我建议您在循环开始时也使用初始节点。

还有一个流最终节点,它代表一个出口,而不是一个完成。因此,您可以使用它来表示“break”语句,而不是您使用的中断边缘。在这种情况下,您必须在“是”分支中,就在此流程最终节点之前集成“进一步消息处理节点”。

中断边缘更适用于来自当前处理之外的中断。该区域是可中断的,无论区域内容的进展如何,某些事件(通常用接收节点注明)都可能完全中断它。情况并非如此。

不幸的是,关于迭代字符,没有什么非常直观的。我倾向于在区域顶部使用对象节点,就在初始节点旁边。

于 2013-04-03T19:03:21.990 回答