【问题标题】:How can one model an unconditional decision in an activity diagram?如何在活动图中为无条件决策建模?
【发布时间】:2017-03-13 10:19:38
【问题描述】:

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

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

【问题讨论】:

    标签: uml activity-diagram


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      如果您简单地省略弧上的防护,则模型没有描述系统行为方式的信息。它不能指导其他开发者创建软件,它不记录设计者的意图。

      用户在系统边界之外,所以关于执行什么操作的决定在别处。系统行为应该建模为其状态、输入或事件的条件——这些是系统可以操作的,以及开发人员期望在 UML 模型中找到的指导他们的东西。

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

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

      【讨论】:

      • 我同意,在我们的案例中,一个条件或事件更好的事件处理程序是有意义的。 @hans 你看过状态机了吗?
      • @ThomasKilian "model" 是一个动词,我可以说“在 UML 中表示为一个条件决定”。
      • @ThomasKilian 我不明白你在问什么,因为你在自己的回答中提到它们 - 你在决定的传出转换“用户选择选项 1”等上放置了合适的保护。
      • @ThomasKilian 'condition' 也是用于与真人交流的英文单词。我不是指特定的 UML 构造,因为您已经提到了它们。
      • @ThomasKilian 我扩大了答案,以帮助减轻您对“条件”的困惑。不要擅自告诉人们他们的意思或他们应该使用什么词。
      【解决方案3】:

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

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

      它包含三个部分:设置部分、每次迭代测试的测试部分和主体部分。

      也许这张从 sparx 文档中提取的图片可以帮助你:

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

      【讨论】:

      • 您对 LoopNode 的描述很好。但我不明白这如何解决 OP 关于无条件决定的问题。
      • 我对这个问题的理解是用户可以,他想执行多少次三个动作之一。所以对我来说,一个while循环可以用来模拟“他想要多少次”,并且在循环体中一个条件说“已经选择了1,2,3”并且根据测试的结果,动作1或执行动作 2 或动作 3,直到达到退出条件。也许我误解了这个问题。
      【解决方案4】:

      好吧,你把守卫丢了:

      现在路径可以采取任何方式。但是,既然有选择,那就是用户采取行动并选择他喜欢的路径。

      编辑 稍微考虑一下“自然”控制流,这似乎很明显,在 ConditionalNode 之前,您会发现类似 Offer choice 的动作(例如,在 OP 的具体示例中:“draw” 、“选择形状”、“选择颜色”等)。因此 ConditionalNode 的结果是用户的选择之一,而用户的选择又应该有适当的保护。所以以上只是一个草图,可以认为是不完整的。然而,将这个草图呈现给读者要么会让他“啊哈”,要么会问我想了一会儿后想到的问题。不管怎样,在 ConditionalNode 之后只会采用一条路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-08
        • 2015-12-03
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 2013-10-14
        相关资源
        最近更新 更多