知识卡片

警戒条件互斥与无效事件被忽略

普通读书笔记卡 · 1949

内容

状态机图里,同一状态在同一事件上可以画出多条向外转换,但事件真发生时只能执行其中一条——这要求转换的警戒条件必须互斥,不能同时为真,否则该走哪条路径没有定义。反过来,若某事件发生时没有任何转换的触发器-警戒条件组合与它匹配,这个事件就被直接忽略,不报错也没有任何行为。理解这条规则的价值在于:审查状态图时要主动检查同一事件的多条转换是否真的互斥,这是最容易被忽略却最容易引发运行时歧义的设计漏洞。

参考来源

- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第10章《状态机图》(源文件:_epub-src/EPUB/9.xhtml) - 结论依据:原文说明"当事件在某个状态发生时,你可以只执行一个向外的转换。因此如果你在同一事件上使用多个转换……警戒条件必须互斥。如果一个事件发生,没有生效的转换……该事件被忽略"。 - 原始内容:当事件在某个状态发生时,你可以只执行一个向外的转换。因此如果你在同一事件上使用多个转换,就像图10.1中的Lock状态,警戒条件必须互斥。如果一个事件发生,没有生效的转换……该事件被忽略。