UML序列图

4
我在使用Eclipse Papyrus对SD进行建模时遇到了一些问题,不是因为这个工具有问题(实际上非常好用),而是我对OMG规范理解有误。
考虑以下简单示例: 我有一个模型,其中一个类ClassA包含两个不同类的实例(假设bObj: ClassB和cObj: ClassC)。 ClassA提供一个操作(即classAOperation(int param)),该操作与由SequenceDiagram指定的行为相关联。
现在,该行为包括调用bObj:ClassB的操作(即classBOperation(int param))和cObj:ClassC的操作(即classCOperation(int param))。
我想知道如何通过SD建模这个非常简单的行为。 问题基本上与LifeLine有关。
根据OMG规范,LifeLine只能表示(代表属性)ConnectableElement,在我的情况下有两个,对应于ClassB和ClassC实例的ClassA属性的组成。 问题是,我还需要引用这些可连接元素的容器,也就是执行此突发行为的ClassA实例。正是该实例发送了(与操作调用相关的)消息到bObj:ClassB和cObj:ClassC的生命线上。 此外,由于此行为对应于ClassA:classAOperation(int param)的调用,我还需要通过形式网关表示classAOperation(int param)消息。但是,由于我无法对容器生命线进行建模,因此无法看到将classAOperation(int param)消息结束连接到哪里。
2个回答

3

确实可以引用self实例

事实上,UML规范2.5b1页面607中关于Lifeline的说明如下。

如果名称是关键字self,则Lifeline表示封闭Interaction所拥有的分类器对象。即使包含self,也可以单独显示封闭器的端口。

enter image description here

请参见http://lowcoupling.com/post/47844944042/uml-sequence-diagrams以获取完整示例


-1

我认为,在序列图中,您只需要显示调用的顺序,而不需要更多的内容。我认为,连接元素、容器的引用等并不重要。它只是展示对象之间的调用链。我可以称之为消息图。

sequence diagram


根据UML规范,序列图生命线应始终引用可连接元素。 - Andrea Sindico
这是另一个我在其中发布了同样问题的论坛。那里的事情变得越来越有趣了。 http://www.eclipse.org/forums/index.php/m/999676/#msg_999676 - Andrea Sindico
你的模型问题在于它无法在ClassA分类器内定义。我应该定义一个虚假的User类,拥有ClassA实例,并在其中定义SD,类似于您提出的那个SD,在其中User生命线不存在(因为没有可连接元素),而ClassA生命线(指向User.aObject属性)从正式门接收classAOperation作为消息。然而,在ClassA分类器之外定义ClassA行为相当反直觉。我希望还有其他方法。 - Andrea Sindico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接