【问题标题】:UML state machine diagram - parallel processesUML 状态机图 - 并行进程
【发布时间】:2017-11-09 21:12:04
【问题描述】:

我正在尝试为以下问题开发 UML 状态机图:

自动售货机有 3 个按钮:R 代表“退钱”,A 和 B 代表饮料选择。 当自动售货机收到金额 x 的钱时,用户可以在饮料之间进行选择。按 R 不提供饮料就返还钱。

如果在插入任何钱之前按下按钮 - 机器会发出警报信号。 如果按下 A 或 B 并且 >= x 钱被插入 - 饮料将被送达。

服务完成后,会发出警报声通知用户。零钱被退回。取出饮料后,机器进入结束状态。

我的问题是我正在使用并行的“进程”,我相信必须有一个简单的配置来应对这种情况。有人可以提供/指导我正确的想法以优雅的方式解决这个问题吗?

编辑:在使用@Chris Reynolds 的建议后,我想出了这个:

【问题讨论】:

  • 在状态机中,我相信气泡应该只是状态,您的示例感觉非常面向过程。我将只有三种状态:非活动、正在进行中的付款、准备服务。然后对于每个状态,您必须处理 4 个事件:按钮 A、B、R 和 Coin-Received。
  • 一点,“如果在插入任何钱之前按下按钮 - 机器会产生警报信号”之后应该发生什么,因为您处于这种状态,我想某些事件应该停止警报没有?
  • 另一点,在您的架构上,是否有事件?似乎除了最后两个之外,您的大多数转换都没有发生任何事件
  • 最后,您的状态机中可能有什么并行的?用户一一操作没有?
  • granier:是的,我忘了实现关联 btw 警报信号和结束。我也不得不承认我完全误解了背后的整个想法。我使用了 Chris Reynolds 的建议来了,但现在附在我的编辑中。是这样的吗?

标签: uml diagram state-machine


【解决方案1】:

其实这个状态机里没有并行进程*:

在Collect money 期间以及等待A 和B 期间按下R 按钮可达到状态Return money。如果有钱,它会发出警报。如果没有其他警报的功劳,或者只是到 self 的新转换,您可以将行为添加到从 Collect money 的转换中。

*:假设一旦投入足够的钱,进一步的硬币接受就会被阻止。

【讨论】:

  • :) 确实很有趣
【解决方案2】:

因此,如果所有产品价格相同,状态机就会大不相同。可以在此表中捕获:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2014-08-12
    相关资源
    最近更新 更多