uml状态机图中的if-condition

时间:2014-06-21 16:32:57

标签: uml state-machine

考虑到这种情况:

  

...当下订单时,检查是否有空,如果通过,准备工作将开始,否则订单被拒绝。

     

如果客户在开始准备之前决定使用信用卡付款,则订单的价格会被锁定在信用卡上。

     

准备完成后,订单已下达,如果订单下达后超过30分钟,则有50%的折扣。

我怀疑如何在状态机图中建模if条件,我会用以下方式对其进行建模,但我不确定它是否正确:

http://f.cl.ly/items/29250u032k0d3d3U0i0p/state2.jpg

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

4 个答案:

答案 0 :(得分:3)

在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。

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

答案 1 :(得分:3)

在UML状态图中,if条件应建模为 choice 元素,并用菱形符号表示。传出的过渡必须在方括号中标记相应的条件(在UML术语中为“防护”)。如kkrambo所述,可以另外给出触发器(事件)和行为(动作)。

示例: choice example

Thisthis在选择(以及一般的状态图)方面提供了一些好的建议。

答案 2 :(得分:0)

此图表(取自here)可能有所帮助:

enter image description here

所以回答你的问题,你没有做错,只是风格和可读性的问题。据我所知,UML并没有真正定义表示条件的标准方法。所以,只要看看最好看,有意义。

答案 3 :(得分:0)

无法在状态机的状态元素内定义条件。检查你的图表。我想,你应该把一些信息放在图表上。例如,使用choice元素定义备用转换路径。或者为"准备订单"和"付款"准备和交付状态的行为。

并不总是可以将所有信息都放在一个图表上。