2009-10-01 96 views
3

我有一个应用程序,它用类Tree,Node和Edge(我需要Edge类!)对树进行建模,并且我不知道如何表示类图中的关系这个。我已阅读其他文章,但我仍然有疑问。UML类图中的关系

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

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

但是,我在每个Edge对象中都有一个指向边缘目标节点的指针。考虑到我已经具有上述的节点->边缘组成,我该如何表示这种关系?另外,如果你还在阅读:),每个节点都有一个指向其父节点的指针。在这里,我将使用单向一元关联,但我不知道用于这种关系的名称。

感谢您的任何帮助。

回答

1

我想说的是:

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

注:

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

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

+0

我喜欢专门研究Node类的想法。关于Edge,我不会涉及细节,但我需要它用于此应用程序。谢谢! – 2009-10-01 02:31:53

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对象有一个指向节点(它的根节点)的指针,我相信它定义了一个单向的关联(树 - >节点),其中两端的重数为1..1。这样对吗?

没有,多样性应该是0..1 - 1(不是所有的节点将是树的根)

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

0

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

你似乎被聚合和组合之间的差异所困惑。当整体和部件的寿命相等时使用复合材料,在部件的寿命不同的情况下使用聚合,即从集合中添加和/或删除部件。