Uml 状态机:与转换关联的行为期间发生异常

Uml 状态机:与转换关联的行为期间发生异常,uml,Uml,行为可能与转换关联,这就是效果。我记得读过一篇文章,说一个效果和一个防护应该没有副作用,没有例外 但在阅读规范2.5版时,我没有再次发现这一点 我错了吗?如果不是,如果在效果期间发生异常,会发生什么情况 一个解决方案是根据效果的结果定义一个防护装置,但这是可能的吗?事实上我从来没有那样做过。358: ♦ guard:Constraint[0..1]{subsets Namespace::ownedRule}(与A_guard_transition::transition相反) 保护是一种约束,它

行为可能与转换关联,这就是效果。我记得读过一篇文章,说一个效果和一个防护应该没有副作用,没有例外

但在阅读规范2.5版时,我没有再次发现这一点

我错了吗?如果不是,如果在效果期间发生异常,会发生什么情况

一个解决方案是根据效果的结果定义一个防护装置,但这是可能的吗?事实上我从来没有那样做过。358:

♦ guard:Constraint[0..1]{subsets Namespace::ownedRule}(与A_guard_transition::transition相反) 保护是一种约束,它提供了对转换触发的细粒度控制。当StateMachine调度事件发生时,将对保护进行评估。如果此时防护为真,则可以启用转换,否则将禁用转换。守卫应该是没有副作用的纯表情。有副作用的保护性表达是不正确的

p。375:

由于在向目标节点提供令牌时使用转换或选择行为,因此在目标节点接受令牌之前,可能会在同一令牌上运行多次。这意味着该行为不能有副作用。它不应修改对象,但变换可以从一个对象导航到另一个对象,从对象获取属性值,或用另一个数据值替换数据值


您应该阅读章节
14.2.3.9.1运行到完成范例
,该章节详细解释了转换是如何发生的。简而言之,如果在转换的行为执行过程中发生异常,则不会执行此转换。

我不确定是否理解,p 375与第15章的活动有关,而不是与状态Marchines(第14章)有关。事实上,我最关心的是在状态机转换的情况下的效果异常…你是对的。这是唯一一篇(在别处重复)提到行为副作用的文章。没有任何特定于状态机的行为。然而,活动机和状态机都有相同的父级(Petri网),因此这可能被解释为适用于这两种机器。另请参见行为/摘要第一个要点。YMMV。规范并非完美无瑕。正如我所知,UML状态机是建立在Harel的状态机上的,而Harel的状态机最终是建立在petri网上的。所以我不能说状态机就像一个petri网。无论如何,我认为我混合了两点:过渡期间的副作用和异常。这可能不是同一件事,例如,对转换的影响可能是向管理员发送邮件,如果smtp服务器关闭,则会发生异常,那么转换会发生什么情况?请参阅我在答案中的添加内容。参考段落中说:“在转换过程中,可能会执行许多操作和行为。如果这种行为包括对另一个执行状态机的对象的同步调用,那么转换步骤直到被调用的对象方法完成其运行到完成步骤才完成。“如果发生异常,即行为中未捕获的异常,可能意味着转换不会发生。但这并没有说清楚。。。