uml状态机图中的if条件

uml状态机图中的if条件,uml,state-machine,Uml,State Machine,考虑到这种情况: …下订单时,会检查可用性,如果通过,将开始准备,否则订单将被拒绝 如果客户决定在开始准备之前使用信用卡付款,则订单价格锁定在信用卡上 当准备工作完成时,订单交付,如果订单下达超过30分钟,则可享受50%的折扣 我的疑问是如何在状态机图中建模if条件,我会用以下方式建模,但我不确定这是否正确: 我应该如何在状态机图中建模if条件?此图(取自)可能有助于: 所以要回答你的问题,你没有做错,只是风格和可读性的问题。据我所知,UML并没有真正定义一种表示条件的标准方法。所以,只需

考虑到这种情况:

…下订单时,会检查可用性,如果通过,将开始准备,否则订单将被拒绝

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

当准备工作完成时,订单交付,如果订单下达超过30分钟,则可享受50%的折扣

我的疑问是如何在状态机图中建模if条件,我会用以下方式建模,但我不确定这是否正确:

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

此图(取自)可能有助于:


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

无法在状态机的状态元素内部定义条件。回顾你的图表。我想,你们应该把一些信息放在图表上。例如,使用choice元素定义替代转换路径。或者从准备和交付状态为“准备订单”和“付款”行为绘制详细的图表


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

在UML状态机图表上,条件与转换相关。转换有一个三部分标签,格式为“
触发签名[guard]/activity
Guard
是条件,必须计算为true才能进行转换。过渡标签的所有3个部分都是可选的

根据您的问题描述,我可以定义3种状态,分别为“等待订单”、“准备订单”和“交付订单”。有一个从“等待订单”到“准备订单”的转换,该转换可以标记为“
Order placed[Order is available]/
”。我选择停止活动,因为从问题描述中,我没有看到任何与此转换相关的活动。您可以绘制另一个标记为“
下单[订单不可用]/拒绝订单
”的转换。然而,这种转换将从“等待订单”开始,并返回到“等待订单”,因为当订单被拒绝时,我们不会改变状态。在这个转换中,我包括了
拒绝订单
活动,因为我假设存在与拒绝订单相关的实际活动

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


我认为,您在准备和交付状态的输入活动中设置的条件与它们的方式相当好。因为这些条件似乎与进入这些状态时发生的活动相关联,而不是与任何状态转换相关联。

在UML状态图中,if条件应建模为选择元素,由菱形符号表示。输出转换必须用方括号中的相应条件(“UML术语中的保护”)进行标记。如kkrambo所述,可额外给出触发器(事件)和行为(动作)

例如:


并给出了一些很好的选择建议(以及一般的状态图)

您的示例中的图似乎是一个糟糕的示例,因为它不是状态机图(状态在哪里?)。它看起来更像是一个活动图,但我甚至不确定这是否是有效的UML。状态机图看起来几乎是一样的,基本上我想说的是,对于如何在UML或状态机图中表示条件,没有通用的标准(每个人的做法都不一样,包括所有的大学教科书),所以我只是向他展示了一种干净整洁的方式。他是用正确的方式做的,所以我将他的问题解释为应该使用什么风格。参见示例和