UML的双向和单向关联

时间:2013-03-18 21:34:11

标签: uml

虽然我认为我理解aggregationcomposition,但我很难理解bi-directionaluni-directional关联。 我已经阅读了bi-directional关联,两个类都知道 彼此和uni-directional关联只有一个类知道 关系。然而,这个解释对我来说似乎太抽象了,我愿意 想知道这对我的代码和我正在编写的程序特别意味着什么。 如果你能够提供一个简单的例子,那将是非常好的 这两个如何转换为代码(我更喜欢c ++,但它可以是任何包括伪代码)

2 个答案:

答案 0 :(得分:24)

双向关联可从两端导航。例如,给定以下类(为简单起见,假设两端的关联为0..1)

class Parent {
  Child* children;
}

class Child {
  Parent* parent;
}

你可以从Parent转到它的孩子,反之亦然:父母知道它的孩子,孩子知道它的父母,(如果this.parent!=nullthis.parent.child==this (否则它不会是相同的关联)。

Parent <---------> Child

但是,如果Parent中没有指向Child的指针:

class Child { }

这将是一个单向联想:你可以从父母到孩子,但你不能从孩子回到父母。

Parent ----------> Child

答案 1 :(得分:1)

不幸的是,UML规范没有定义&#34;双向关联&#34;的任何概念,但只提及&#34;双向导航&#34;在哪里&#34;导航&#34; (在类图中用箭头表示)没有明确定义的计算含义,因为它可以例如通过引用属性或通过查询来提供。参考属性提供的最有效的导航性能#34;使用关联终端所有权的UML概念建模(用表示类图)。

双向关联 可以精确定义为一对 互相反向引用属性 。这个定义意味着两个条件:

  1. this引用一个孩子,this.parent.child == this,正如Javier的一些不完整的答案中所解释的那样,但此外还

  2. {li>

    this引用父母this.child.parent == this

    您可以阅读更多相关信息,并在教程Managing Bidirectional Associations in Java EEManaging Bidirectional Associations in JavaScript中找到描述双向关联示例的许多类图。