考虑到这种情况:
...下订单时,会检查可用性,如果通过,则准备工作将开始,否则订单将被拒绝。
如果客户决定在开始准备之前使用信用卡付款,则订单价格将锁定在信用卡上。
准备工作完成后,订单即会交付,如果下单后超过 30 分钟,则可享受 50% 的折扣。
我的疑问是如何在状态机图中对 if 条件进行建模,我会按以下方式对其进行建模,但我不确定这是正确的方法:
我应该如何对状态机图中的 if 条件进行建模?
在 UML 状态机图中,条件与转换相关联。该转换有一个由 3 部分组成的标签,形式为“ trigger-signature [guard]/activity”。 Guard是有条件的,必须评估为 true 才能进行转换。过渡标签的所有 3 个部分都是可选的。
根据你的问题描述,我可能会定义3个状态,分别名为“等待订单”、“准备订单”和“交付订单”。存在从“等待订单”到“准备订单”的转换,并且该转换可以标记为“ order placed [order is available] /”。我选择停止该活动,因为从问题描述来看,我没有看到任何与此转换相关的活动。您也许可以绘制另一个标记为“ order placed [order is unavailable] / refuse order”的过渡。但是,此转换将从“等待订单”开始并返回“等待订单”,因为当订单被拒绝时我们不会更改状态。在此转换中,我包含了该refuse order活动,因为我假设存在一些与拒绝订单相关的实际活动。
或者,我看到绘制的转换包括决策菱形,其中通向菱形的箭头标记为trigger,从菱形出来的一个箭头标记为[guard] / activity,从菱形出来的另一个箭头标记为[else] / activity。我不确定这在技术上是否是正确的 UML。
我认为您在“准备”和“交付”状态的进入活动中设置的条件非常好。因为这些条件似乎与进入这些状态时发生的活动相关,而不是与任何状态转换相关。