UML 规范没有告诉我们如何处理多个继承的分类器行为。但是,fUML 规范说:
fUML 1.5(第 151 页):[5] startBehavior [...] 为每个具有分类器行为的对象激活对象类型创建分类器行为调用 [...]。
所以,我认为 Cameo 模拟引擎按规定工作,因为超类型在对象的类型列表中。而且,这真的很有意义。如果某物有两种类型,它应该表现出两种类型的行为。例如,逆变器-充电器将对逆变器和充电器做出反应的事件做出反应。
我在规范中没有发现的一件事是,当一个类有一个分类器行为时,继承的行为应该被它替换。我认为这是有道理的,因为否则继承的行为永远不会改变。模拟引擎正是这样做的。
现在,您可能想要选择一种继承的行为,而不是定义新的行为或同时执行它们。这可以通过定义一个对继承的分类器行为进行泛化的空行为并将其分配为分类器行为来完成。但是,这在模拟引擎中不起作用。fUML 不包括对 ActivityNodes 的重新定义,因此这可以解释为什么 Activity 泛化不起作用。但是,“状态机的精确语义”规范允许重新定义状态。
所以我发现的唯一方法是创建一个新的分类器行为并调用其中一个继承的行为。
解决操作方法的情况不同。例如,它可以有一个输出。这里只有建模者可以决定返回哪个输出。这是通过定义操作的新版本来完成的,该版本重新定义两个旧版本并从所需的祖先中选择行为作为新操作的方法。我认为这是相当直截了当的,没有理由拒绝多重继承。