(匿) 2022-4-11 12:36
课后复习已三刷,觉得已经理解老师的讲解,可以提问了
这道题根据老师的讲解,在C2发生e5会转到A,这个我理解了。如果接下来从A经另一条路线到达E然后再e1转历史状态,那还是回到C2吗?
还有,历史状态指向别的状态有什么用,没有历史是不是应该回到初始状态?
UMLChina潘加宇
这个问题问得好,说明你确实是理解了并且在此基础上提出了真正的问题。
第一个问题,应该是到达C1。
这个情况和题目中在C2发生e4到达E后再通过e1回到历史不同。
在C2发生e5,迁移到C的终态,引发C的完成迁移到A。最后离开C的迁移是C→A,已经不能算是从C2离开C了。
另外,历史是C的历史,C进入终态,C的历史应该被清除。按照你说的另一条路的场景,在E发生e1时,C应该没有历史,因此迁移到历史状态指向的C,C的缺省状态是C1。
第二个问题我答不上来。
也许是为了再多一种选择吧,毕竟含义有区别。一个是未指明子状态时的缺省状态,一个是不存在历史状态时的缺省历史状态。
问题所给图中,历史状态指向C,所以这两者是相同的。如果历史状态没有缺省指向任何状态,那么两者也是相同的。如果历史状态缺省指向C2,就会不一样。
这只是我的猜测。《UML参考手册》第2版关于历史状态的解释如下,没有涉及以上内容。