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

在UML状态机中,初始伪状态可以有传入的转换吗?,uml,Uml,在UML 2.5.1中,状态机的初始伪状态定义如下: 初始伪态表示区域的起点;那个 是,它是执行其包含的行为的起点 通过默认激活输入区域时开始。它是 最多一个转换的源,该转换可能具有关联的效果 行为,但不是关联的触发器或防护。至少会有 一个区域中的大多数初始顶点 换句话说,一个UML状态机应该几乎总是只包含一个初始伪状态,它应该只包含一个传出转换 然而,初始伪态是否也会有传入的跃迁?例如: 我在UML规范中找不到任何禁止它的东西,但是我在网上找不到任何发生这种情况的例子,因此我想知道我是否忽略

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

初始伪态表示区域的起点;那个 是,它是执行其包含的行为的起点 通过默认激活输入区域时开始。它是 最多一个转换的源,该转换可能具有关联的效果 行为,但不是关联的触发器或防护。至少会有 一个区域中的大多数初始顶点

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

然而,初始伪态是否也会有传入的跃迁?例如:

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


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


inv:(kind=PseudostateKind::initial)暗示(传出->大小()不这是不允许的。为什么要这样做呢?正如你在引用的文本中所说的,它只能有一个传出边缘,没有任何保护。那么附加值是什么,因为你不能重用任何东西。

我认为文本非常清楚:[初始伪状态]是通过默认激活进入区域时开始执行其包含行为的点。“如果将转换连接回初始psuedostate,则初始psuedostate不再是”开始执行其包含行为的点,”它是另一种东西,因此是未定义的。

我在中没有看到任何东西禁止目标为初始伪状态的转换


这样的转换充其量是毫无意义的,最糟糕的情况是令人困惑的,这可能就是为什么找不到示例的原因。

编辑:请参阅注释

在第423页UML 2.5中:

15.7.18初始节点[类]

15.7.18.4限制条件

•无输入边缘

InitialNode没有传入的ActivityEdge

  inv: incoming->isEmpty()

注意:如果您打算对
e1
进行自转换,那么为什么不直接使用它呢?
初始
只能在单数输出边上进行转换,即到第一个状态(此处
s1
).

为了澄清,我不是问这是否是一个好主意或做法,我只是想知道它是否是有效的UML。关于引用的文本,它只声明了一个关于传出转换的约束,而不是关于传入转换的约束,因此我的问题。事实上,只有初始状态的传出转换量是约束的使用OCL(规范的第14.5.6.7节)进行测试,令人惊讶的是,关于传入转换的数量没有OCL约束。UML规范在哪里说它是不允许的?规范的第15章涉及活动,而问题是关于状态机(第14章)@jaco0646你说得有道理。它们都是从Petri网派生出来的,如果SM没有,那么这很可能是规范中的一个错误。上面的陈述并不排除任何东西。如果我说“一辆车可以运送人”,那么并不意味着它不能运送任何其他东西。