如何在 UML 时序图中绘制构造函数的调用?

6
我看到了多种绘制构造函数的方法,例如像这里所示带有尾巴(函数调用),但更常见的是像这里没有尾巴和不带箭头返回(有时使用标签<<create>>)。
我知道UML1和UML2之间存在差异,但我不确定这是否是其中之一,无论如何,我都找不到任何关于如何表示对象构造函数中的方法调用的参考资料。
编辑:以下是Java代码示例。假设我们的入口点是foo()。我最感兴趣的是如何绘制B()构造函数。
class A {
    private B b;
    public foo() {
        b = new B(this);
    }
}

class B {
    public B(A a) {
        foo();
        a.bar();
    }
}

关于“_任何参考资料_”部分,请参见http://www.uml-diagrams.org/sequence-diagrams.html,并在其中搜索“create message”,还可以参见https://www.websequencediagrams.com/examples.html。为了回答“_来自构造函数的调用_”部分,请向我们展示您想要在UML中绘制的代码。顺便说一句:一些UML建模工具(不仅仅是图片绘制工具)可以自动为您做出外观决策。 - xmojmr
例子代码已添加。感谢提供链接。 - Gabor Magyar
2个回答

6

2
有趣。出于某种原因,我认为虚线必须指向对象的框。不过看起来是有效的。谢谢! - Gabor Magyar
1
@GaborMagyar 没错。请查看我的编辑后的答案,其中包含了 Enterprise Architect 如何绘制该消息序列的示例(经过原始输入)。uml-diagrams.org 将其称为“_..请注意,这种向不存在的对象发送消息以创建自身的奇怪惯例在 UML 1.x 和 2.x 中均被使用。在面向对象分析与设计实践中,应该将 create 消息发送到类,请参见 OOAD 中的消息 讨论以获取背景信息.._"。 - xmojmr
2
带参数的构造函数怎么办? - qtopierw
1
@artificerpi 如果您的工作不需要严格遵循标准(文档片段很少需要),我认为<<create>>(param)<<create>>后跟<init>(param)都足够可理解。个人而言,我更喜欢<<create>>(param),因为它更易读。至于硬性标准,我支持第二种方案。 - Egor Hans

3

UML规范(2.5 beta)简要介绍了以下内容:

对象创建消息(messageSort等于createMessage)具有一个带有开放箭头的虚线。

图17.14说明了这一点:UML 2.5 Figure 17.14无论如何,我都会将每个操作建模为自己的序列图。因此,我会将上面的代码示例建模为以下内容:

enter image description here


不幸的是,这并没有展示构造函数的主体应该是什么样子。 - Gabor Magyar
2
@GaborMagyar 我根据你的代码添加了一个示例来说明。 - Geert Bellekens

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