【发布时间】:2014-09-18 22:28:50
【问题描述】:
我有一种情况,A类有B,没有B就不能存在,但是B可以完全独立于A而存在。
从A的角度来看,这是一种组合关系,但从B的角度来看,这是一种聚合关系。
我该怎么办??
【问题讨论】:
标签: uml aggregation composition
我有一种情况,A类有B,没有B就不能存在,但是B可以完全独立于A而存在。
从A的角度来看,这是一种组合关系,但从B的角度来看,这是一种聚合关系。
我该怎么办??
【问题讨论】:
标签: uml aggregation composition
如果A由B组成,则与A类侧的组成端关联。组合和聚合是关联端的类型。一方面可以组合,另一方面可以聚合。
您可以通过回答问题来识别组成。A 类是由 B 类组成的吗?如果是,它是 A 类的组成...例如:计算机是由内存、CPU 等组成的吗?所有计算机组件都与计算机组成。
聚合示例:特定椅子放置在房间中。它是聚合,因为房间不是由椅子组成的(房间是由墙壁、窗户等组成的)。但是椅子可以与放置在房间里的家具组合在一起。
【讨论】:
在通常的用法中,关联不会既是组合又是聚合,它取决于应用程序。出租车/轮胎关系将由与出租车相邻的黑色实心菱形组成。轮胎可以存在独立于出租车的零部件部门,但没有4个轮胎就不能派出出租车。零件部门可以没有轮胎而存在,所以这将是聚合。
【讨论】:
您的抽象示例是聚合或组合,其中各部分是可分离的(从某种意义上说,它们在存在上不依赖于聚合)。您没有就您的 B 部件的排他性发表任何声明。如果它们不能在两个或多个 A 之间共享,那么 A 和 B 之间的关联就是一个组合。
请注意,认为组合被定义为组合存在依赖于组件的聚合是一个普遍的错误。 UML 规范声明这通常是但不一定是组合的情况。相反,定义组合的是组件是不与其他组合共享的专有部分。
另请参阅my answer 的相关 SO 问题。
【讨论】: