使用区域循环UML活动图

min*_*ros 20 uml loops android-activity

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

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

图1:使用一个好的旧活动图条件节点.顺便说一句,遵循箭头的控制流更容易,但没有"循环",只有"如果".

图2:

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

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

循环与条件节点

循环与区域


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

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

在此输入图像描述

Ste*_*eph 10

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

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

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

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