UML状态图中仅含Guard的状态转换是否合法?
UML状态图:无Event、仅Guard且无Action的转换是否合法?
嘿,这问题问得挺细致的!咱们来把UML状态图里的这个规则说清楚:
根据UML的官方规范,完全允许存在仅包含守卫(Guard)、没有触发事件(Event)也没有动作(Action)的状态转换。
具体解释:
- 这种转换属于「无触发事件的转换」,它不需要外部事件的刺激,只要守卫表达式的计算结果为
true,就会自动触发状态切换。 - 如果没有指定动作(Action),那么转换过程中不会执行任何额外的行为逻辑,直接完成状态的跳转。
适用场景举例:
比如一个订单系统的「等待审批」状态,我们可以定义这样的转换:当系统内部的审批状态满足[approvalStatus = "已通过"]时,自动切换到「订单完成」状态——不需要外部发送“审批通过”的事件,也不需要在转换时执行额外操作,完全依赖内部状态的判断来触发转换。
和常规转换的对比:
你提到的Event[Guard]/Action、Event[]/Action、Event这些都是带外部触发事件的常规转换,而这种无事件、仅守卫、无动作的形式是UML允许的合法变体,完全符合语法定义。
内容的提问来源于stack exchange,提问作者ge45mue
相关产品推荐
相关产品推荐

