为什么这个 Star UML 序列图在 Control 对象中没有激活 "rectangle"?

Why DOESN'T this Star UML Sequence Diagram have the activation "rectangle" in the Control object?

为什么这个 Star UML 序列图在 Control 对象中没有激活“矩形”?难道我做错了什么?我应该在 Star UML 中设置一些东西吗?

如何在控件对象中添加激活“矩形”?

答案很简单:因为 Star UML 的设计者就是这样设计的。

在 Star UML 中,如果没有任何东西启动(触发)执行事件(这是该矩形的正式名称),那么……就没有执行事件。如果你想拥有它,你需要以某种方式触发它(例如通过 self-referencing 启动消息)。

我没有找到任何更改该行为的选项。我已经有一段时间没有使用 Star UML 了,但是由于免费版本在我开始使用它之前就已经被放弃了,我相信自那以后没有任何改变。

如果您使用的是较新的专有版本,您可以向 Star UML 的开发团队发送请求以将其添加为一项功能。

嗯,这是因为 没有 我知道的工具可以正确实现序列图。根据 UML,应该可以定义独立于任何消息的 ExecutionSpecifications(又名激活)。

但是,许多工具供应商似乎都假定 ExecutionSpecification 必须由消息启动。我可以看到它们来自哪里,因为每次处决都有一个原因。问题是序列图不是关于因果关系,而是关于可能发生的事件序列。序列图并不意味着这是唯一可能的序列。

如果我们接受该工具想要使用消息启动 ExecutionSpecification,则 Star UML 的行为是一致的。请注意,创建消息(即 messageSort=createMessage)不会 调用构造函数:

UML: A CreateObjectAction is an Action that creates a direct instance of a given Classifier and places the new instance on its result OutputPin. The Action has no other effect. In particular, no Behaviors are executed

我知道,这是关于操作的,但是为什么创建消息应该不同?此外,还有一个约束条件会阻止创建具有签名的消息:

signature_refer_to

The signature must either refer an Operation (in which case messageSort is either synchCall or asynchCall or reply) or a Signal (in which case messageSort is asynchSignal).

也就是说,您不能在创建消息中引用构造函数。您将需要显式调用构造函数。此消息的发送者与创建新对象的生命线相同。它不应该是一条自我消息,因为这不是现实中发生的事情,因此是一种解决方法。

还有一个选择。您可以使 class 成为活动的 class。

An active object is an object that, as a direct consequence of its creation, commences to execute its classifierBehavior

许多工具显示一个 ExecutionSpecification,涵盖活动 Class 的整个生命线。也许你的 Class 是活跃的?

PS:当然,这并不完全正确,因为 classifier 行为也需要显式启动:

A StartObjectBehaviorAction is a CallAction that starts the execution […] of the classifierBehavior of an object

也就是说,它不会自动启动。我们需要一个 ActionExecutionSpecification 来启动它。很少有工具支持这个:-(