在 UML 状态机中,初始伪状态可以有传入转换吗?

In a UML state machine, can an initial pseudostate have incoming transitions?

在UML 2.5.1中,状态机的初始伪状态定义如下:

An initial Pseudostate represents a starting point for a Region; that is, it is the point from which execution of its contained behavior commences when the Region is entered via default activation. It is the source for at most one Transition, which may have an associated effect Behavior, but not an associated trigger or guard. There can be at most one initial Vertex in a Region.

换句话说,一个 UML 状态机应该几乎总是只包含一个初始伪状态,它应该只有一个 outgoing 转换。

但是,初始伪状态也可以有 incoming 转换吗?例如:

我在 UML 规范中找不到任何禁止它的内容,但我在网上找不到任何发生这种情况的示例,因此我想知道我是否忽略了任何内容。


编辑: 更详细地说,如果我们查看规范中规定的 OCL 约束,我们只能找到以下影响传出转换的约束(第 14.5 节)。 6.7):

inv: (kind = PseudostateKind::initial) implies (outgoing->size() <= 1)

但我找不到关于传入转换的任何约束


EDIT2: 我刚刚意识到我的模型是错误的!考虑规范的这句话(上面引用):"It is the source for at most one Transition, which may have an associated effect Behavior, but not an associated trigger or guard."

因此 inits1 之间的转换实际上应该有零触发,而不是 e1作为触发器。

请注意,虽然这不会使最初的问题无效。

不,这是不允许的。为什么要那样做?正如您在引用的文本中所述,它只能有一个没有任何保护的传出边缘。那么附加值是什么,因为您不能重复使用任何东西。

我认为文本按原样非常清楚:“[初始伪状态] 是开始执行其包含的行为的点当通过默认激活进入区域时."如果您将转换连接回初始伪状态,则初始伪状态不再是 "the point from which execution of its contained behavior commences," 它是其他东西,因此是未定义的。

我在 UML 2.5.1 Specification 中没有看到任何禁止目标为初始伪状态的转换。

这样的转变充其量是毫无意义的,最坏的情况是令人困惑,这可能是找不到示例的原因。

编辑: 看评论!

第423 UML 2.5:

15.7.18 InitialNode [Class]

15.7.18.4 Constraints

• no_incoming_edges

An InitialNode has no incoming ActivityEdges.

  inv: incoming->isEmpty()

N.B。如果您打算为 e1 进行自我转换,那么为什么不直接使用它呢? Initial无论如何只能有一个奇异的出边,即到第一个状态(这里s1)。