3

我有一个模拟树的应用程序,具有树、节点和边缘类(我需要边缘类!),我不确定如何在类图中表示关系。我已经阅读了有关此的其他帖子,但仍然存在疑问。

树对象有一个指向节点(它的根)的指针,我相信它定义了一个单向关联(树->节点),两端的多重性为 1..1。这样对吗?

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

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

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

谢谢你的帮助。

4

4 回答 4

1

From what you describe it sounds like the UML class diagram should have:

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.

The difference between aggregation and composition can be thought of in terms of lifetimes. If two objects lifetimes are the same because they are co-dependent on each other then the relationship is one of composition, otherwise it is aggregation.

于 2009-10-01T02:25:42.663 回答
1

我想说的是:

  • 一棵树有一个根节点
  • 节点有子节点
  • 节点可能有一个父节点

笔记:

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

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

于 2009-10-01T01:47:51.743 回答
1

--Tree 对象有一个指向 Node(它的根)的指针,我相信它定义了一个单向 --association(Tree -> Node),两端的多重性为 1..1。这样对吗?

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

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

于 2009-10-01T10:25:45.850 回答
0

OO 中树结构的处理由复合 设计模式解决。

您似乎对聚合和组合之间的区别感到有些困惑。当整体和部分的生命周期相等时使用复合,当部分的生命周期不同时使用聚合,即从集合中添加和/或删除部分。

于 2009-10-05T18:27:17.337 回答