UML的双向和单向关联

jcx*_*cxz 9 uml

虽然我想我明白aggregationcomposition,我有困难的理解bi-directionaluni-directional关联.我已经阅读了与bi-directional关联,两个类都知道彼此和uni-directional关联只有一个类知道这种关系.然而,这个解释对我来说似乎太抽象了,我想知道这对我的代码和我正在编写的程序有什么意义.如果你能够提供一个简单的例子说明这两个如何转换为代码(我更喜欢c ++,但它可以包括伪代码),那将是非常好的.

Jav*_*ier 25

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

class Parent {
  Child* children;
}

class Child {
  Parent* parent;
}
Run Code Online (Sandbox Code Playgroud)

你可以从a Parent到它的孩子,反之亦然:父母知道它的孩子,孩子知道它的父母,和(如果this.parent!=null)this.parent.child==this(不然它不是同一个关联).

Parent <---------> Child
Run Code Online (Sandbox Code Playgroud)

然而,如果没有指针ParentChild:

class Child { }
Run Code Online (Sandbox Code Playgroud)

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

Parent ----------> Child
Run Code Online (Sandbox Code Playgroud)

  • 好的,非常感谢,现在这一切开始对我来说更有意义了.总结一下我的发现:关联,聚合和组合是相当语义的概念,基本上可以用非常相似的方式实现.另外(对于所有碰巧遇到这个帖子的人)我发现了这样的帖子:http://stackoverflow.com/questions/4298177/association-vs-aggregation,它澄清了三者之间的语义差异. (3认同)
  • 感谢澄清"双向"和"单向"关联之间的区别,但现在我有第二个问题.到目前为止,我认为拥有指向关联类的成员指针/引用将是聚合的实现,但您的代码示例也使用指针.这是否意味着聚合和关联在代码中以相同的方式实现? (2认同)