我正在对 UML 活动图中的循环进行建模。它适用于简单的条件节点(图 1),但我正在寻找一种更具表现力的方式来强调循环语义。所以我来到这里和那里显示的“区域”或“可中断区域” ,但我找不到很多真正令人满意的例子。
我的示例是一个处理给定列表消息的函数。一旦找到第一个有效消息,循环就会中止,然后处理消息并且函数返回 true。否则,它返回false(请不要评论sense或废话,这只是为了样本)。
图1:使用了一个很好的旧活动图条件节点。诚然,沿着箭头跟踪控制流更容易,但没有“循环”,只有一个“如果”。
图2:
- (正)退出条件是否正确,使用中断边缘?没错,它可能与迭代器一起成为循环的 [test] 部分的一部分。
- 顺便说一句:在 UML 中如何最好地表达 for 循环的迭代特性?
- 循环体内的活动最终节点是否正确(即当条件“消息有效?”产生“否”时)?在这里使用最终节点感觉有些不对劲,但是我还能如何表达一个循环的控制流呢?
两个图的功能应该是等效的:
编辑:另一个实现斯蒂芬建议的图表:
- 循环体内的初始节点和最终节点
- “进一步处理”现在在循环体内。嗯...在这里可以,但可能还有其他循环,我宁愿把它放在外面。然后我可能会改变设计......
- “下一条消息”也可以看作是迭代器对象本身,而不是原始图中的“(提供)下一条消息”动作。
- 这两个对象流箭头可能有点矫枉过正,但我认为它们是正确的。