什么是';do';在UML状态图中做什么?

什么是';do';在UML状态图中做什么?,uml,state,sta,Uml,State,Sta,我不能100%确定“做”在UML状态图中的作用 我的想法是否正确: 如果发生转换,将首先执行“entry”,然后执行“do”。 如果我们离开这个州,只会执行“退出” 这个逻辑也适用于自反性转换吗 如果一个触发器发生了,那怎么办?这不会引发一个转换?这是否只执行“do”?告诉我们: 14.2.3.4.3说明进入、退出和行动行为 一个状态也可能具有相关的doActivity行为。此行为在输入状态时开始执行(但仅在状态输入行为完成后),并与可能与状态关联的任何其他行为同时执行,直到: 完成(在这种

我不能100%确定“做”在UML状态图中的作用

我的想法是否正确:

如果发生转换,将首先执行“entry”,然后执行“do”。 如果我们离开这个州,只会执行“退出”

这个逻辑也适用于自反性转换吗

如果一个触发器发生了,那怎么办?这不会引发一个转换?这是否只执行“do”?

告诉我们:

14.2.3.4.3说明进入、退出和行动行为

一个状态也可能具有相关的doActivity行为。此行为在输入状态时开始执行(但仅在状态输入行为完成后),并与可能与状态关联的任何其他行为同时执行,直到:

  • 完成(在这种情况下生成完成事件)或
  • 状态已退出,在这种情况下,doActivity行为的执行将中止
状态的doActivity行为的执行不受该状态内部转换触发的影响

你:

这个逻辑也适用于自反性转换吗


正如上面最后一句所说,这取决于反射转换是内部的还是外部的。

为了给布鲁诺的答案添加更具体的内容

如UML规范所述(bruno在其回答中引用),do活动是在系统处于特定状态时(在进入活动完成后)执行的。它在系统处于状态的整个时间内执行。do活动仅在两种情况下停止执行:

  • 将您带出状态的转换被触发;在这种情况下,do活动被中断,执行退出活动(如果有),然后发生转换。转换可以是自反的(即,一旦完成,系统将返回到相同的状态),在这种情况下,将执行首次进入活动,一旦完成,do活动将再次开始
  • do活动自行完成;在这种情况下,一旦do活动完成,就是离开状态的时候了。因此,执行最终退出活动并执行转换。一个有效的系统应该有一个或多个没有触发事件的转换(如果不止一个,那么它们应该具有允许唯一确定将使用哪一个的条件),一旦退出活动完成(或者如果没有退出,则执行)
让我们举一个更具体的例子。考虑一下洗衣机。它有两种有趣的状态,一种是充满水,另一种是滚筒滚动

对于充满水的状态,可以预期以下活动:

  • 入口:打开水阀
  • do:监测水位
  • 出口:关闭水阀
现在,一旦洗衣机进入状态,阀门将打开(进入),然后机器立即启动do:以监控水位(因为水现在可以自由流入)。一旦达到当前程序和步骤的设定水位,将发送事件“水位已达到”,启动下一个转换。因此,do活动停止(水位监测没有更多的点)并执行出口(阀门关闭),然后过渡到下一个状态(例如,加热或滚筒滚动,取决于程序阶段)

您可以清楚地看到,在这种情况下,一旦捕获转换触发器,do活动就会中断

然而,对于鼓的滚动来说,情况却大不相同。为了简单起见,我们将只有一个*do(活动,没有进入或退出活动:

  • do:以n速度旋转滚筒n秒

当洗衣机进入此状态时,它立即开始滚动滚筒(除非因某些异常事件而中断)在预定义的时间内一直这样做。一旦时间过去,do活动立即中断,并发生到下一个状态的转换。在这种情况下,do活动控制下一个状态转换的发生时间,至少在典型场景中是这样。

@bruno不幸的是,它没有。因此,如果我们正在离开状态。在这种情况下,只会执行“退出”,对吗?如果我们处于一种状态,并且我们有一个不会触发转换的触发器,那么将执行“do”?你说的内部和外部自反转换是什么意思?@Nime自反转换可以是内部的,也可以是外部的,当你添加自反转换时,你可以ave选择它是哪一个。因此,在内部自转换的情况下,do行为不会中止。如果没有可能的转换,do行为可以(继续)不管是否被执行,UML并没有说要与任何情况兼容,因为我们不知道它是否在循环中、在计时器上执行,以及它的执行时间有多长