代码之家  ›  专栏  ›  技术社区  ›  Vinicius Braz Pinto

UML类图中的关系

  •  3
  • Vinicius Braz Pinto  · 技术社区  · 15 年前

    我有一个为树建模的应用程序,包括类tree、Node和Edge(我需要Edge类!),我不知道如何在类图中表示这种关系。我已经读过其他关于这个的帖子,但仍然有疑问。

    Tree对象有一个指向节点(其根)的指针,我相信它定义了一个单向关联(Tree) ->

    每个节点对象都有指向从中产生的边(边对象)的指针。因为这些边只有在节点存在时才存在,我相信这是一个合成关联。

    上面描述的边缘合成?

    谢谢你的帮助。

    4 回复  |  直到 15 年前
        1
  •  1
  •   ChrisW    15 年前

    我得说:

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

    注:

    • 您可能想区分UML类图和UML对象图

    Edge可能根本不是类:相反,Edge可能只是节点的实例。

        2
  •  1
  •   Phillip Ngan    15 年前

    从你的描述来看,它听起来像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.
    

    聚合和合成的区别可以用生命周期来考虑。如果两个对象的生命周期是相同的,因为它们相互依赖,那么这种关系就是复合关系,否则就是聚合关系。

        3
  •  1
  •   Jordi Cabot    15 年前

    --关联(树->节点)两端的重数为1..1。对吗?

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

        4
  •  0
  •   Martin Spamer    15 年前

    面向对象中树结构的处理由 Composite Design Pattern .

    你似乎对聚合和合成的区别有点困惑。使用复合当整个和部分的生存期相等时,在部分的生存期不同的地方使用聚合,即从集合中添加和/或删除部分。