在 Yakindu 的多状态机建模中将事件发送到 parent 状态图
Send events to parent statechart in multi state machine modeling in Yakindu
我有 2 个状态图,一个是 parent,另一个是 child。创建 parent 状态图时,它还会使用
创建一个 child 状态图
import: "Child.ysc"
var child: Child
parent状态图可以很容易地在child状态图中引发事件,例如:
raise child.goToD
但问题是无法在 child 状态图中引用相同的 parent 以在 parent 中引发事件。有没有办法将事件发送到 parent 状态图?或者 child 可以将自身的引用作为属性发送给 parent(例如,在 python 中使用 this)然后保存它在要访问以发送这些事件的变量中?
PS:两个状态图都有默认域而不是 C/C++ 域
基本上有两种方法。
第一种方法是定义从 child 状态图到 parent 的显式引用。就像您为 parent.
做的那样
import: "Parent.ysc"
var parent : Parent
请注意,您必须在 C++ 代码中明确设置关系:
child.setParent(&parent);
第二种方法是使用事件。 child 可以定义如下事件:
interface:
out event dReached
在 child 状态图中的某处提高它:
raise dReached
并使用该事件作为 parent 中的触发器:
child.dReached / doSomething()
生成的 parent 代码将关注订阅和监听 child 发出的事件。
大多数情况下我更喜欢第二种方法。它并不意味着 parent 和 child 之间的双向依赖关系。
我有 2 个状态图,一个是 parent,另一个是 child。创建 parent 状态图时,它还会使用
创建一个 child 状态图import: "Child.ysc"
var child: Child
parent状态图可以很容易地在child状态图中引发事件,例如:
raise child.goToD
但问题是无法在 child 状态图中引用相同的 parent 以在 parent 中引发事件。有没有办法将事件发送到 parent 状态图?或者 child 可以将自身的引用作为属性发送给 parent(例如,在 python 中使用 this)然后保存它在要访问以发送这些事件的变量中?
PS:两个状态图都有默认域而不是 C/C++ 域
基本上有两种方法。
第一种方法是定义从 child 状态图到 parent 的显式引用。就像您为 parent.
做的那样import: "Parent.ysc"
var parent : Parent
请注意,您必须在 C++ 代码中明确设置关系:
child.setParent(&parent);
第二种方法是使用事件。 child 可以定义如下事件:
interface:
out event dReached
在 child 状态图中的某处提高它:
raise dReached
并使用该事件作为 parent 中的触发器:
child.dReached / doSomething()
生成的 parent 代码将关注订阅和监听 child 发出的事件。
大多数情况下我更喜欢第二种方法。它并不意味着 parent 和 child 之间的双向依赖关系。