Uml 双向和单向关联

Uml 双向和单向关联,uml,Uml,虽然我认为我理解聚合和组合,但我很难理解双向和单向关联。 我读过双向关联的两个类都知道 相互之间以及与单向关联时,只有一个类知道 关系的一部分。然而这个解释对我来说太抽象了,我会的 我想知道这对我的代码和我正在编写的程序来说意味着什么。 如果你能在解释的同时提供一个简单的例子,那就太好了 这两个如何翻译成代码(我更喜欢C++,但它可以是任何东西,包括伪代码)双向关联是可以双向导航的。例如,给定以下类(为简单起见,假设两端的关联为0..1) 您可以从父级转到子级,反之亦然:父级知道它的子级,子级知

虽然我认为我理解
聚合
组合
,但我很难理解
双向
单向
关联。 我读过双向关联的
两个类都知道
相互之间以及与
单向
关联时,只有一个类知道 关系的一部分。然而这个解释对我来说太抽象了,我会的 我想知道这对我的代码和我正在编写的程序来说意味着什么。 如果你能在解释的同时提供一个简单的例子,那就太好了
这两个如何翻译成代码(我更喜欢C++,但它可以是任何东西,包括伪代码)

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

您可以从父级转到子级,反之亦然:父级知道它的子级,子级知道它的父级,并且(如果
this.Parent!=null
this.Parent.child==this
(否则它将不是相同的关联)

这将是一种单向关联:你可以从一个家长到另一个孩子,但你不能从一个孩子回到另一个家长

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

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

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

  • 对于引用子项的
    this
    this.parent.child==this
    ,正如Javier的不完全回答所解释的,但除此之外

  • 对于引用父项的
    this
    this.child.parent==this


  • 您可以阅读更多相关内容,并在教程和中找到许多描述双向关联示例的类图。

    和中有一些示例。感谢您澄清了
    双向关联和
    单向关联之间的区别,但现在我有第二个问题。到目前为止,我认为拥有一个成员指针/对关联类的引用将是聚合的一种实现,但是您的代码示例也使用指针。这是否意味着聚合和关联在代码中的实现方式相同?是的,聚合更像是模型的概念元素。我记得我们在《Ok》中讨论过这个问题,非常感谢,现在这一切对我来说变得更有意义了。所以总结一下我的发现:关联、聚合和组合是语义概念,基本上可以用非常相似的方式实现。另外(对于所有在将来偶然遇到这个问题的人),我发现这篇文章:,澄清了这三者之间的语义差异。
    
    Parent <---------> Child
    
    class Child { }
    
    Parent ----------> Child