uml - uml 状态机图中的 if 条件

标签 uml state-machine

考虑到这种情况:

...when an order is placed there is a check for availability, if is passed the preparation will start else the order is refused.

If the customer decides to pay with a credit card before starting the preparation the price of the order is locked on the credit card.

When the preparation is completed the order is delivered and if more than 30 minutes from the placement of the order have passed there is a discount of 50%.


我的疑问是如何在状态机图中对 if 条件进行建模,我会按照以下方式对其进行建模,但我不确定这是正确的方式:


我应该如何对状态机图中的条件进行建模?

最佳答案

在 UML 状态机图中,条件与转换相关联。转换具有“trigger-signature [guard]/activity”形式的 3 部分标签。 Guard是有条件的,必须评估为真才能进行转换。过渡标签的所有 3 部分都是可选的。

根据您的问题描述,我可能会定义 3 个状态,分别名为“等待订单”、“准备订单”和“正在交付订单”。有一个从“等待订单”到“准备订单”的过渡,该过渡可以标记为“order placed [order is available] /”。我选择放弃该事件,因为从问题描述中,我没有看到任何与此转换相关的事件。您可以绘制另一个标记为“order placed [order is unavailable] / refuse order”的过渡。但是,这种转换将从“等待订单”开始并返回“等待订单”,因为我们不会在订单被拒绝时更改状态。在这个转换中,我包含了 refuse order事件,因为我假设有一些与拒绝订单相关的实际事件。

或者,我看到绘制的过渡包括一个决策菱形,其中通向菱形的箭头标有 trigger ,菱形外的一个箭头标有 [guard] / activity菱形外的另一个箭头标有 [else] / activity .我不确定这在技术上是否是正确的 UML。

我认为您在准备和交付状态的进入事件中放置的条件非常好。因为这些条件似乎与进入这些状态时发生的事件有关,而不是与任何状态转换有关。

关于uml - uml 状态机图中的 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24343629/

相关文章:

uml - 用于描述分层(嵌套)有限状态机的标准文件格式?

.net-4.0 - Windows Workflow Foundation 3.5 中创建的状态机是否与版本 4.0 兼容?

delphi - 对 delphi 2010 代码进行逆向工程 - UML 工具

uml - UML 组件图中组件之间的关联

events - 用于显示事件的典型 uml 图

c++ - 有限自动机转换的空间和时间有效编码

jpa - DDD和依赖注入(inject)上下文中实体的状态机?

javascript - 使用状态机使我的 UI 简单灵活?好主意?我如何在 Knockout JS 中做到这一点?

UML - 如何将类图与子类垂直对齐

uml 类图 - 什么时候应该使用用法、聚合或关联?