【问题标题】:How to draw calls from constructors in UML sequence diagrams?如何在 UML 序列图中绘制来自构造函数的调用?
【发布时间】:2014-11-18 18:57:27
【问题描述】:

我见过多种绘制构造函数的方法,例如 here 下方有尾部(函数调用),但更常见的是 here 没有尾部且没有返回箭头(有时带有标签 <<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();
    }
}

【问题讨论】:

  • 至于“任何引用”部分,请参阅uml-diagrams.org/sequence-diagrams.html,并在其中搜索“创建消息”,另请参阅websequencediagrams.com/examples.html。为了回答“来自构造函数的调用”部分,请向我们展示一些您想在 UML 中绘制的代码。顺便说一句:一些 UML 建模工具(不仅仅是绘图工具)可以自动为您做外观决策
  • 添加了示例代码。感谢您的链接。

标签: constructor uml sequence-diagram


【解决方案1】:

这个websequencediagrams script 似乎捕获了你的代码

User->A: foo
A-->>+B: <<create>>
B->B: foo
B->A: bar
B-->>A:
A-->>User:

您可以根据http://www.uml-diagrams.org/sequence-diagrams-reference.html 验证符号

编辑:这与Enterprise Architect绘制的消息序列相同

【讨论】:

  • 有趣。出于某种原因,我认为虚线必须指向对象的框……但看起来确实有效。谢谢!
  • @GaborMagyar 没错。有关 Enterprise Architect 如何绘制此消息序列的示例(在原始输入之后),请参阅我编辑的答案。 uml-diagrams.org 将其设置为“..注意,UML 1.x 和 2.x 都使用这种向不存在的对象发送消息以创建自身的奇怪约定。在 OOAD 实践中,创建消息可能应该是发送到班级,背景信息见Message in OOAD讨论.."
  • 带参数的构造函数呢?
  • @artificerpi 如果您的工作不需要严格符合标准(文档很少需要),我会说&lt;&lt;create&gt;&gt;(param)&lt;&lt;create&gt;&gt;,然后是&lt;init&gt;(param)是可以理解的。我个人会说&lt;&lt;create&gt;&gt;(param) 更具可读性。按照硬标准,附议。
【解决方案2】:

UML 规范(2.5 测试版)对此进行了说明

对象创建消息(messageSort 等于 createMessage)有一条带空心箭头的虚线。

图 17.14 说明了这一点: 但无论如何,你这样做我会建模each operation in its own sequence diagram。 所以我会像这样对上面的代码示例进行建模:

【讨论】:

  • 不幸的是,这并没有显示构造函数的主体必须是什么样子。
  • @GaborMagyar 我根据您的代码添加了一个示例来说明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2011-04-29
  • 2012-07-28
  • 2016-12-09
相关资源
最近更新 更多