3

将关联端所有权从“关联”设置为“分类器”对生成的代码有什么影响?

换句话说,

0) 我从一个空图开始

1)我创建A类和B类

2)我将 A 和 B 与关联 AB 连接起来

3)A处的关联端被命名为a

4)B处的关联端命名为b

5)a的关联端所有权设置为B类(默认设置为关联AB本身)

6) 我为此图生成 Java 代码

如果我省略第 5 步,现在生成的代码(应该)如何以及为什么会有所不同?即如果我使用默认值?

将 a 的关联端所有权设置为 B 类是什么意思?它有什么区别?

在视觉范例中,图表不同如下(第二个图表显示如果省略步骤 5):

在此处输入图像描述

在此处输入图像描述

编辑:

在 VP-UML 中,两种情况下生成的代码是相同的:

public class A {

    B b;

}

public class B {

    A a;

}

那么从这个意义上说,所有权无关紧要吗?这有点令人困惑。

4

3 回答 3

2

我可以给你一个关于通用 UML 2 源代码生成器如何工作的通用方法(UML 规范没有指定如何从 UML 模型生成代码)

在我看来,如果关联结束(属性)属于 UML 类,那么应该在源代码类中生成一个字段,而如果它属于关联则不生成字段(允许您建模单向或双向类之间的关联)。看看我最近 发布的例子

于 2013-09-21T12:50:02.147 回答
1

所有权意味着类或其实例不仅可以访问另一个类的实例,而且将其作为属性(直接引用或简单地包含它)。所有权不属于 UML 的严格特性。

  • 在做其他事情之前,您应该了解 A 到 B 的关联是什么。
    • 基本上它是 A 和 B 之间的一条实线。它可以表示一个将 A 的类/实例与 B 的类/实例连接起来的结构。该结构可以是任何类型的并且属于任何地方。所有关于线路的信息都描述了这个结构。
    • 如果有两个结构,一个结构将 A 的一个实例与 B 的实例连接,另一个结构将 B 的实例与 A 的实例连接,您可以在 ONE 关联中显示它们。然后,关于其 B 端的信息描述了第一个结构 (b->a),而关于另一端的信息描述了另一个结构。
    • 如果您将有多个从 A 到 B 的结构,则必须绘制两种不同的关联。
    • 如果连接结构很复杂,您可以将其表示为关联类。在那里您可以定义更多细节。
    • 一个连接结构可以连接两个以上的类,然后它将显示为一个带有实心分支的大菱形到这些类。还是联想!注意:这两个更复杂的关联在现有工具的支持下非常糟糕。你可以很容易地用它们创造出一些毫无意义的东西。而且他们很难。小心使用。

示例类图


在 C++ 中,实例 A 可以不是通过指针,而是直接拥有 B 实例。它没有特殊的 UML 符号,它应该以与普通指针属性相同的方式显示。

于 2014-02-04T11:16:59.587 回答
0

我认为您尝试处理的约定现在已被弃用。

过去经常根据非正式约定使用可导航表示法,即假定不可导航端归关联所有,而可导航端假定归另一端的分类器所有。此约定现已弃用。

资料来源:www.site.uottawa.ca

于 2020-09-11T06:48:59.253 回答