问:如何处理 UML 状态机转换中的多个条件

Q: How to handle more than one condition in a UML state machine transition

如何在 UML 状态机转换(作为守卫)中处理多个条件(具有不同的布尔表达式)?

示例:

在这个例子中,我想在从 "logging in" 到 "Logged In" 的过渡中添加多个条件 (Tries < 3),如注释中所述。

如何处理这个 UML 兼容?

这里有几个选项:

  1. 您的警卫条件可以在“[]”中组合多项检查 - 就像您在注释中所做的那样。
  2. 您可以在相同的两个状态之间进行多次转换,每个状态都有自己的条件。
  3. 您可以在州内拥有州。因此,在您的示例中,这三个状态可以在 'Normal Operation' 的超状态内 - 然后您可以在其他文档中或通过注释进一步定义。

所有这些都是有效的 UML 语法。但请注意,仅仅因为某些内容有效并不意味着它会在您的编辑器中得到支持。例如,序列图的大部分功能在编辑器中可用多年之后...

简单地说(并专注于所需的步骤)

Guard 中放置一个像上面那样的布尔条件。这可以是任何文本。您可以编写 C 风格或纯文本。我在这里不确定 OCL,但无论如何这是出于学术目的(我的意见)。

N.B。您的图表显示 Tries = 3 也应该是 Guard(即 [Tries = 3])而不是 Name.