Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用区域在UML活动图中循环_Loops_Android Activity_Uml - Fatal编程技术网

Loops 使用区域在UML活动图中循环

Loops 使用区域在UML活动图中循环,loops,android-activity,uml,Loops,Android Activity,Uml,我正在UML活动图中建模一个循环。它适用于简单条件节点(图1),但我正在寻找一种更具表现力的方式来强调循环语义。 所以我来到了“区域”或“可中断区域”,它们显示了,但我找不到很多真正令人满意的例子 我的示例是一个处理给定列表消息的函数。一旦找到第一条有效消息,循环就会中止,然后处理该消息,函数返回true。否则,它返回false(请不要对sense或胡说八道发表评论,这只是为了一个示例) 图1:使用一个好的旧活动图条件节点。诚然,沿着箭头跟随控制流更容易,但没有“循环”,只有“如果” 图2:

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

我的示例是一个处理给定列表消息的函数。一旦找到第一条有效消息,循环就会中止,然后处理该消息,函数返回true。否则,它返回false(请不要对sense或胡说八道发表评论,这只是为了一个示例)

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

图2:

  • 使用中断边缘时(正)退出条件是否正确?的确,它可能是循环的[test]部分以及迭代器的一部分
  • 顺便问一下:for循环的迭代特性如何在UML中得到最好的表达
  • 循环体中的活动最终节点是否正确(即,当条件“消息有效?”产生“否”时)?在这里使用最后一个节点感觉有点不对劲,但如何表达一个循环的控制流呢
两个图的功能应相同:


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

  • 循环体中的初始和最终节点
  • “进一步处理”现在位于循环体内部。好。。。好的,但可能还有其他循环,我更希望它在外面。那我可能会改变设计
  • “下一条消息”也可以看作迭代器对象本身,而不是原始图表中的“提供下一条消息”操作
  • 两个对象流箭头可能有点过分,但我认为它们是正确的

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

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

中断边缘更适合于来自当前处理外部的中断。该区域是可中断的,无论区域内容的进度如何,某些事件(通常用接收节点表示)可能会完全中断该区域。但事实并非如此


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

感谢您提供有关最终节点的提示和解释中断边。我将画另一个图表,见上面的编辑。我认为这是一个很好的工作。顺便说一句,关于flow final节点,如果您不确定每个人都会理解它的含义(通常,UML图是要展示给对UML一无所知或知之甚少的人),您仍然可以为节点设置一个“break”标签,以便更明确,至少如果您的UML工具允许您这样做的话。您可以解释一下“fork”是什么吗“isMessageValid”状态中的符号表示什么?我不知道有这样一个符号。这是一个带有“呼叫行为”的动作(不是状态)。它象征着“isMessageValid”不仅仅是一个布尔标志,而是另一个图的占位符,该图解释了更深层次的工作流程(在EA等工具中,您还可以双击该操作切换到此图)。请注意,几年前我画这个图表时,我不是很有经验。现在,我要写“有效性检查”,因为UML应该是抽象的,独立于编程语言。如果没有其他的图,只有一个已知的对象需要调用方法isMessageValid(),那么也可以编写它——不需要fork。好的,这是一个动作,因为它是一个活动图。谢谢你的详细解释。我只知道“两个气泡/状态”符号(复合状态)。这等同于fork吗?不。简言之:在活动图中,带有“fork”的操作节点调用另一个活动,其行为与之类似,但并不拥有它。该活动可以从不同的地方调用,就像通用编程语言中的函数一样。两个气泡符号是一个“隐藏的成分指示器”,表明零件本身的内部没有详细显示。这是一对一的关系。主要见于状态图;例如,EA也在组件和用例图等中使用它来显示零件分解为更多的子零件(以及链接到其他相关图的符号)。