UML类图中的关系

时间:2009-10-01 01:40:04

标签: uml relationship class-diagram

我有一个模型树的应用程序,包括Tree,Node和Edge类(我需要Edge类!),我不知道如何在类图中表示关系。我已经阅读了有关此事的其他帖子,但我仍有疑问。

Tree对象有一个指向节点(它的根)的指针,我认为它定义了两端具有多重性1..1的单向关联(树->节点)。是不是?

每个Node对象都有指向它的边缘的指针(Edge对象)。由于这些边仅在节点存在时才存在,我相信它是一个组合关联。

但是我在每个Edge对象中都有一个指向边缘目标节点的指针。考虑到我已经拥有上述节点-> Edge组合,我该如何表示这种关系?

另外,如果你还在阅读:),每个节点都有一个指向其父节点的指针。在这里,我会使用单向一元关联,但我不知道这个关系使用哪个名称。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

我会说:

  • 树有根节点
  • 节点具有子节点
  • 节点可能有父节点

注意:

  • 您可能想要区分UML类图和UML对象图
  • 我不知道根节点和子节点是否是同一个类(子节点可能是根节点的子类,因为两种类型的节点都有子节点,但只有子节点有父节点)

Edge可能根本不是一个类:而Edge可能只是一个Node的实例。

答案 1 :(得分:1)

根据您的描述,听起来像UML 图应该具有:

Tree -> Node, aggregation, 1..0-1
Node -> Edge, aggregation, 1..*
Edge -> Node, composition, 1..2 (an edge exists only if it connects 2 nodes)
Node -> Node, aggregation, 1..1 (would be composition, except the root node doesn't point to a node.

聚合和组合之间的差异可以从生命周期的角度来考虑。如果两个对象的生命周期是相同的,因为它们是相互依赖的,那么这个关系就是一个组合,否则就是聚合。

答案 2 :(得分:1)

- Tree对象有一个指向Node(它的根)的指针,我认为它定义了一个单向 --association(Tree - > Node),两端都有多重性1..1。是不是?

不,多重性应为0..1 - 1(并非所有节点都是树的根)

您还应该考虑Edge是否真的是一个类。如果你不需要存储任何关于边缘的信息(即它们没有标记),我只是将边缘模型化为节点之间的二元关联

答案 3 :(得分:0)

OO中树结构的处理由Composite Design Pattern解决。

你似乎对聚合和构图之间的区别感到有些困惑。当整体和零件的寿命相等时使用复合材料,在零件的使用寿命不同的情况下使用聚合,即从集合中添加和/或移除零件。