如何在 activity 图中模拟无条件决策?

How can one model an unconditional decision in an activity diagram?

例如,用户可以在工具中执行操作A、操作B或操作C。无论他们选择 A、B 还是 C,这些操作的顺序和重复次数取决于用户,他们选择 A、B 或 C 的原因以及以特定顺序选择它们的原因尚不清楚.也可以在用户完成另一个操作后再次重复任何操作。

编辑:一个更具体的例子是图像的创建。用户可以绘制形状、选择新形状、选择新颜色并保存图像。在绘制这 4 个动作时,可以以任意随机顺序和任意数量交织在一起,仅由用户的突发奇想引导。 还可以选择从头开始创建新图像或编辑现有图像以创建新图像。

好吧,你就把守卫丢掉吧:

现在路径可以任意选择。不过,既然有选择,那就是用户采取行动,选择自己喜欢的路径。

Edit 稍微考虑一下 "natural" 控制流似乎很明显,在 ConditionalNode 之前你会发现像 Offer choice 这样的操作(例如在OP 的具体示例:"draw"、"choose shape"、"choose color" 等)。因此,ConditionalNode 的结果是用户的选择之一,反过来应该有适当的保护。所以以上只是一个草图,可以认为是不完整的。但是,将此草图呈现给 reader 会让他 "aha" 或在思考一段时间后提出我想到的问题。不管怎样,ConditionalNode 之后只会走一条路。

在使用任何符号对任何事物建模时,重要的是要记住创建模型的目的是什么,以及谁将使用它。

如果您只是简单地省略了弧上的守卫,那么模型就没有描述系统行为方式的信息。它不能指导另一个开发者创建软件,它不记录设计者的意图。

用户在系统边界之外,因此执行什么操作的决定权在别处。系统行为应建模为其状态、输入或事件的条件 - 这些是系统可以操作的内容,以及开发人员希望在 UML 模型中找到的内容来指导他们。

所使用的确切 UML 构造将取决于该选择如何跨系统边界进行通信 - activity 图可能不是最好的通信方式,或者您可以为每次交互使用多个图

被建模的软件不会做出无条件的选择,模型中的信息应该以足够的细节反映出来,以便对下一个查看它的人有用。

通常,循环节点应该可以帮助您解决问题。如果标志是 TestedFirst,则循环节点是一个 while-do 循环。

然而,这不是 activity 图中最简单的节点。

它分为三部分:设置部分、每次迭代时测试的测试部分和主体部分。

也许这张从 sparx 文档中提取的图像可能对您有所帮助:

希望这会有所帮助,也许其他人可以提供更多详细信息。

下面是您问题的非常简单的解决方案。

如果您不想让您的 activity 出现不确定的行为,请不要省略决策节点后的守卫。决策节点向具有真正守卫的第一个流提供令牌,而守卫的评估顺序未定义。