虽然我认为我理解aggregation
和composition
,但我很难理解bi-directional
和uni-directional
关联。
我已经阅读了bi-directional
关联,两个类都知道
彼此和uni-directional
关联只有一个类知道
关系。然而,这个解释对我来说似乎太抽象了,我愿意
想知道这对我的代码和我正在编写的程序特别意味着什么。
如果你能够提供一个简单的例子,那将是非常好的
这两个如何转换为代码(我更喜欢c ++,但它可以是任何包括伪代码)
答案 0 :(得分:24)
双向关联可从两端导航。例如,给定以下类(为简单起见,假设两端的关联为0..1)
class Parent {
Child* children;
}
class Child {
Parent* parent;
}
你可以从Parent
转到它的孩子,反之亦然:父母知道它的孩子,孩子知道它的父母,(如果this.parent!=null
)this.parent.child==this
(否则它不会是相同的关联)。
Parent <---------> Child
但是,如果Parent
中没有指向Child
的指针:
class Child { }
这将是一个单向联想:你可以从父母到孩子,但你不能从孩子回到父母。
Parent ----------> Child
答案 1 :(得分:1)
不幸的是,UML规范没有定义&#34;双向关联&#34;的任何概念,但只提及&#34;双向导航&#34;在哪里&#34;导航&#34; (在类图中用箭头表示)没有明确定义的计算含义,因为它可以例如通过引用属性或通过查询来提供。参考属性提供的最有效的导航性能#34;使用关联终端所有权的UML概念建模(用点表示类图)。
双向关联 可以精确定义为一对 互相反向引用属性 。这个定义意味着两个条件:
this
引用一个孩子,this.parent.child == this
,正如Javier的一些不完整的答案中所解释的那样,但此外还
this
引用父母this.child.parent == this
。
您可以阅读更多相关信息,并在教程Managing Bidirectional Associations in Java EE和Managing Bidirectional Associations in JavaScript中找到描述双向关联示例的许多类图。