虽然我认为我理解aggregation
和composition
,但我在理解bi-directional
和uni-directional
联想方面有困难。我读过bi-directional
关联,两个类都知道彼此,并且uni-directional
关联只有一个类知道这种关系。然而,这个解释对我来说似乎太抽象了,我想知道这对我的代码和我正在编写的程序特别意味着什么。如果你能提供一个简单的例子来说明这两者如何转换为代码,那将是非常好的(我更喜欢 c++,但它可以是任何东西,包括伪代码)
问问题
23951 次
2 回答
27
双向关联可从两端导航。例如,给定以下类(为简单起见,假设两端的关联为 0..1)
class Parent {
Child* children;
}
class Child {
Parent* parent;
}
你可以从 aParent
到它的孩子,反之亦然:父母知道它的孩子,孩子知道它的父母,和 (if this.parent!=null
) this.parent.child==this
(否则它不会是同一个关联)。
Parent <---------> Child
但是,如果没有指向Parent
in的指针Child
:
class Child { }
这将是一个单向关联:您可以从父母转到孩子,但您不能从孩子回到父母。
Parent ----------> Child
于 2013-03-18T22:10:22.400 回答
1
不幸的是,UML 规范没有定义任何“双向关联”的概念,而只提到了“双向可导航性”,其中“可导航性”(在类图中用箭头表示)没有明确定义的计算含义,因为它可以是例如,通过引用属性或查询提供。由引用属性提供的最有效的“可导航性”形式是用关联端所有权的 UML 概念建模的(在类图中用一个点表示)。
双向关联可以精确地定义为一对相互反向的参考属性。这个定义意味着两个条件:
引用
this
一个孩子,this.parent.child == this
正如哈维尔有些不完整的回答中所解释的那样,但此外还有对于
this
引用父母,this.child.parent == this
.
您可以阅读更多相关信息,并在教程在 Java EE 中管理双向关联和在 JavaScript中管理双向关联中找到许多描述双向关联示例的类图。
于 2017-09-06T13:24:37.720 回答