考虑到这种情况:
...当下订单时,检查是否有空,如果通过,准备工作将开始,否则订单被拒绝。
如果客户在开始准备之前决定使用信用卡付款,则订单的价格会被锁定在信用卡上。
准备完成后,订单已下达,如果订单下达后超过30分钟,则有50%的折扣。
我怀疑如何在状态机图中建模if条件,我会用以下方式对其进行建模,但我不确定它是否正确:
http://f.cl.ly/items/29250u032k0d3d3U0i0p/state2.jpg
我应该如何建模状态机图中的条件?
答案 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所述,可以另外给出触发器(事件)和行为(动作)。
答案 2 :(得分:0)
答案 3 :(得分:0)
无法在状态机的状态元素内定义条件。检查你的图表。我想,你应该把一些信息放在图表上。例如,使用choice元素定义备用转换路径。或者为"准备订单"和"付款"准备和交付状态的行为。
并不总是可以将所有信息都放在一个图表上。