双向和单向关联UML(bi-directional and uni-directional asso

2019-08-17 17:34发布

虽然我想我明白aggregationcomposition ,我有理解困难bi-directionaluni-directional关联。 我读过,有bi-directional关联,这两个类彼此知道对方,并与uni-directional关联只有一个类是知道的关系。 然而这个解释似乎对我来说过于抽象,我想知道我写在我的代码特定手段和程序这是什么。 这将是非常好的,如果你可以,有解释和说明,提供了如何这两个转换为代码一个简单的例子(我喜欢C ++,但它可以是任何东西,包括伪代码)

Answer 1:

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

class Parent {
  Child* children;
}

class Child {
  Parent* parent;
}

你可以从一个去Parent给其子,反之亦然:父知道它的孩子,孩子知道其母公司,以及(如果this.parent!=nullthis.parent.child==this (othewise它不会是相同的关联)。

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

然而,如果没有指向ParentChild

class Child { }

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

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


Answer 2:

不幸的是,UML规范没有定义的“双向关联”的任何概念,但只提到了“双向适航”,其中“适航性”(与在类图的箭头所示)不具有明确定义的计算意义,因为它可以提供,例如,通过参考属性或查询。 “适航”的最有效的形式,其通过参考属性提供,被建模与关联端所有权的UML概念(具有在类图的表示)。

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

  1. 对于this引用一个孩子, this.parent.child == this ,因为哈维尔的有些不完整的答案解释,但除此之外也

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

你可以阅读更多关于这一点,并找到许多类图描述的教程双向关联的例子在Java EE中管理双向关联和管理双向关联在JavaScript中 。



文章来源: bi-directional and uni-directional associations UML
标签: uml