【问题标题】:UML Can a relationship be composition AND aggregation?UML 关系可以是组合和聚合吗?
【发布时间】:2014-09-18 22:28:50
【问题描述】:

我有一种情况,A类有B,没有B就不能存在,但是B可以完全独立于A而存在。

从A的角度来看,这是一种组合关系,但从B的角度来看,这是一种聚合关系。

我该怎么办??

【问题讨论】:

    标签: uml aggregation composition


    【解决方案1】:

    如果A由B组成,则与A类侧的组成端关联。组合和聚合是关联端的类型。一方面可以组合,另一方面可以聚合。

    您可以通过回答问题来识别组成。A 类是由 B 类组成的吗?如果是,它是 A 类的组成...例如:计算机是由内存、CPU 等组成的吗?所有计算机组件都与计算机组成。

    聚合示例:特定椅子放置在房间中。它是聚合,因为房间不是由椅子组成的(房间是由墙壁、窗户等组成的)。但是椅子可以与放置在房间里的家具组合在一起。

    【讨论】:

    • 您能否举一个例子说明您的主张“可以在一侧进行组合,而在另一侧进行聚合”?我简直不敢相信这一点,因为部分和整体的关系通常是不自反的。
    • 我说有可能。我的意思是 UML 允许创建这样的结构。
    • 如果 UML 允许某些东西,这并不意味着它实际上是有意义的。你觉得这有意义吗?如果是,请举例说明。
    【解决方案2】:

    在通常的用法中,关联不会既是组合又是聚合,它取决于应用程序。出租车/轮胎关系将由与出租车相邻的黑色实心菱形组成。轮胎可以存在独立于出租车的零部件部门,但没有4个轮胎就不能派出出租车。零件部门可以没有轮胎而存在,所以这将是聚合。

    【讨论】:

      【解决方案3】:

      您的抽象示例是聚合或组合,其中各部分是可分离的(从某种意义上说,它们在存在上不依赖于聚合)。您没有就您的 B 部件的排他性发表任何声明。如果它们不能在两个或多个 A 之间共享,那么 A 和 B 之间的关联就是一个组合。

      请注意,认为组合被定义为组合存在依赖于组件的聚合是一个普遍的错误。 UML 规范声明这通常是但不一定是组合的情况。相反,定义组合的是组件是不与其他组合共享的专有部分。

      另请参阅my answer 的相关 SO 问题。

      【讨论】:

        猜你喜欢
        • 2014-02-08
        • 2014-08-05
        • 2013-02-23
        • 2018-01-21
        • 2015-08-07
        • 1970-01-01
        • 2017-06-24
        • 2020-05-04
        • 2013-05-14
        相关资源
        最近更新 更多