UML类图中的关系

3
我有一个模拟树的应用程序,其中包含Tree、Node和Edge类(我需要Edge类!),但我不确定如何在类图中表示这些关系。我已经阅读了其他相关帖子,但仍然存在疑问。
Tree对象具有指向Node(其根节点)的指针,我认为这定义了一个单向关联(Tree -> Node),在两端的多重性都是1..1。这样理解对吗?
每个Node对象都有指向其出边(Edge对象)的指针。由于这些边仅在节点存在时才存在,我认为这是一种组合关联。
但是,每个Edge对象中都有指向边的目标节点的指针。考虑到我已经描述了Node -> Edge组合关联,我该如何表示这种关系呢?
此外,如果您还在阅读:),每个Node都有指向其父节点的指针。在这里,我会使用单向一元关联,但我不知道该关系要使用哪个名称。
感谢任何帮助。
4个回答

1

我会这样说:

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

注意:

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

边缘可能根本不是一个类:相反,边缘可能只是节点的一个实例。


我喜欢将Node类进行专门化的想法。关于Edge,我不会详细说明,但是我需要它来完成这个应用程序。谢谢! - Vinicius Braz Pinto

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.

聚合和组合的区别可以从生命周期的角度来思考。如果两个对象的生命周期相同,因为它们在彼此之间相互依赖,则关系是一种组合;否则,它是一种聚合。

1

--Tree对象有一个指向Node(其根节点)的指针,我认为这定义了一种单向关联(Tree -> Node),两端的多重性均为1..1。是这样吗?

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

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


0

面向对象编程中,树形结构的处理可以通过组合 设计模式来解决。

你似乎对聚合和组合的区别有些困惑。当整体和部分的生命周期相同时,请使用组合;当部分的生命周期不同,即您需要添加和/或删除集合中的部分时,请使用聚合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接