具有嵌套状态的UML状态机并执行Activity

时间:2015-11-18 12:03:10

标签: uml statechart

在下面的状态机上,让我们假设我在“StateE”中。然后是Sig1,所以转换发生了。首先我退出“StateE”,然后假设“Grd1”守卫让我通过。

现在我输入“StateH”,执行输入操作(“Act2”)。然后我将一个信号放入队列以执行“StateH”的“do”动作。这意味着在进入操作后不必执行“StateH”“do”操作,但可以首先提供其他一些已安排的信号。

然后我继续“StateG”。再次在“StateG”中,执行输入操作(“Act2”),并将“do”操作安排为信号。

信号调度程序到达StateH执行动作信号的信号队列中的点。

问题是:在执行StateH的do操作之前,我们是否从StateG退回到StateH,或者我们可以说:在StateG中也处于StateH状态,因此不需要进行状态转换,让我们执行StateH立即采取行动。

enter image description here

2 个答案:

答案 0 :(得分:2)

根据UML Specification(正式 - 15-03-01,Sect.14.2.3.4.3)

  

状态也可能具有关联的doActivity行为。这种行为   在进入国家时开始执行(但仅在国家之后)   状态输入行为已完成)并与任何一个同时执行   可能与国家相关的其他行为,直到:•它   完成(在这种情况下生成完成事件)或•   退出状态,在这种情况下执行doActivity行为   中止。

这意味着1)doActivity在进入状态后立即执行(与您的理解相反)和2)doActivity在状态处于活动状态时继续运行。

在您的情况下,StateHStateG处于活动状态时处于活动状态(请参阅活动状态配置的定义),因此StateH的待办事项在您{{1}时保持运行}}

答案 1 :(得分:0)

OMG统一建模语言2.5.1 中,该语句要强一些:

  

此外,如果为状态定义了doActivity行为,则此行​​为   输入“行为”后,立即开始执行。   它与与之关联的任何后续行为同时执行   输入状态,例如输入的输入的子状态的行为   作为同一复合过渡的一部分。

我不认为这意味着状态机必须是多线程的。假设您在单个核心处理器上有一个多线程状态机。尽管可能由单独的线程执行,但各种行为和活动仍会顺序执行,即使它们是事件。