【问题标题】:UML Sequence DiagramsUML 序列图
【发布时间】:2012-12-26 20:14:39
【问题描述】:

我在使用 Eclipse Papyrus 建模 SD 时遇到了一些问题,不是因为该工具(实际上制作得非常好),而是因为我对 OMG 规范的理解有误。

考虑这个简单的例子:

我有一个模型,其类 ClassA 包含两个不同类 (say bObj:ClassB and cObj:ClassC) 的两个实例。 ClassA 提供与通过 SequenceDiagram 指定的行为相关的操作(即 classAOperation(int param))。

现在的行为包括调用 bObj:ClassB 的操作 (ie.classBOOperation(int param)) 和 cObj:ClassC 的操作(即 classCOperation(int param))。

我想知道如何通过 SD 对这种非常简单的行为进行建模。 这个问题基本上和LifeLine有关。

根据 OMG 规范。生命线只能表示(表示属性)一个 ConnectableElement,在我的例子中是两个并且对应于实现ClassBClassC 实例(bObj and cObj) 的组合的ClassA 属性。

问题是,我还需要引用这些可连接元素的容器,也就是说 ClassA 实例实际上正在执行这种紧急行为。正是该实例向bObj:ClassBcObj:ClassC 生命线发送消息(与操作调用相关)。 此外,由于此行为对应于 ClassA:classAOperation(int param) 调用,我还需要通过正式的门来表示 classAOperation(int param) 消息。但同样,由于我无法对容器生命线进行模式化,因此我看不到将 classAOperation(int param) 消息附加到哪个结尾。

【问题讨论】:

    标签: eclipse uml modeling


    【解决方案1】:

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

    【讨论】:

    • 根据 UML 规范,序列图生命线应始终引用可连接元素。
    • 这是另一个论坛,我在其中发布了相同的问题。事情变得有趣了。 eclipse.org/forums/index.php/m/999676/#msg_999676
    • 您的模型的问题是它不能在 ClassA 分类器中定义。我应该定义一个拥有 ClassA 实例的假 User 类,并在其中定义 SD 类似于您提出的不存在 User 生命线的 SD(因为它没有可连接的元素)和 ClassA 生命线(引用 User.aObject 属性)接收 classAOperation 作为来自正式门的消息。然而,在 ClassA 分类器之外定义 ClassA 行为是非常违反直觉的。我希望有另一种方法
    【解决方案2】:

    确实可以引用self实例

    实际上UML spec 2.5b1 page 607,关于生命线的说法。 如果名称是关键字self,则生命线表示包含拥有生命线的交互的分类器的对象。即使包含 self ,外壳的端口也可以单独显示。

    http://lowcoupling.com/post/47844944042/uml-sequence-diagrams

    一个完整的例子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多