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

2024-01-08

我正在 UML 活动图中对循环进行建模。它适用于简单的条件节点(图 1),但我正在寻找一种更具表现力的方法来强调循环语义。 所以我来到了所示的“区域”或“可中断区域”here http://www.pst.ifi.lmu.de/~stoerrle/V/AD-4b-ExpansionNJC.pdf and there http://sparxsystems.com/enterprise_architect_user_guide/12.1/building_models/loop_and_conditional_nodes2.html,但我找不到很多真正令人满意的例子。

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

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

图2:

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

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


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

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

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

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

中断边缘更适合来自当前处理外部的中断。该区域是可中断的,并且无论该区域内容的进度如何,某些事件(通常用接收节点标记)都可能完全中断它。但这里的情况并非如此。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用区域在 UML 活动图中循环 的相关文章

随机推荐