10

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

4

2 回答 2

27

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

class Parent {
  Child* children;
}

class Child {
  Parent* parent;
}

你可以从 aParent到它的孩子,反之亦然:父母知道它的孩子,孩子知道它的父母,和 (if this.parent!=null) this.parent.child==this(否则它不会是同一个关联)。

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

但是,如果没有指向Parentin的指针Child

class Child { }

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

Parent ----------> Child
于 2013-03-18T22:10:22.400 回答
1

不幸的是,UML 规范没有定义任何“双向关联”的概念,而只提到了“双向可导航性”,其中“可导航性”(在类图中用箭头表示)没有明确定义的计算含义,因为它可以是例如,通过引用属性或查询提供。由引用属性提供的最有效的“可导航性”形式是用关联端所有权的 UML 概念建模的(在类图中用一个点表示)。

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

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

  2. 对于this引用父母,this.child.parent == this.

您可以阅读更多相关信息,并在教程在 Java EE 中管理双向关联和在 JavaScript中管理双向关联中找到许多描述双向关联示例的类图。

于 2017-09-06T13:24:37.720 回答