这不是一个问题,而是一个基本问题,我知道每个工具供应商都会以不同的方式实现这一问题,因此我希望人们认为 OMG UML/SysML 工作组的预期行为是这样的。
在下面的复杂状态图中,我知道有很多未触发且仅受保护的转换。如果在进入行为完成之前退出转换上的守卫为真,则状态 Motion::Active::Debounce 的 do 行为是否会触发?
或者,您会以不同的方式对此进行建模吗?
UML 2.5.1 规范在第 14 页上有说明。 309:
14.2.3.4.3 状态进入、退出和 doActivity 行为
[...]
状态也可能有关联的 doActivity 行为。该行为在进入状态时开始执行(但仅在状态进入行为完成后),并与可能与该状态关联的任何其他行为同时执行,直到:
- 它完成(在这种情况下会生成完成事件)或
- 状态退出,在这种情况下 doActivity 行为的执行被中止。
State 的 doActivity 行为的执行不受该 State 内部 Transition 触发的影响。
因此:doActivity 将被触发,但由于退出条件为真而立即中止。换句话说:它不会运行。