使用区域循环UML活动图

时间:2013-04-03 16:18:55

标签: loops android-activity uml

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

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

图1:使用一个好的旧活动图条件节点。无可否认,按照箭头控制流程更容易,但没有“循环”,只有“如果”。

图2:

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

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

loop with conditional node

loop with region


编辑:另一个实现Steph建议的图表:

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

enter image description here

1 个答案:

答案 0 :(得分:10)

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

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

中断边缘是来自当前处理之外的中断。该区域是可中断的,并且一些事件(通常用接收节点标记)可以完全中断它,无论区域内容的进展如何。事实并非如此。

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