类图:聚合或组合

时间:2015-08-08 09:55:21

标签: uml aggregation composition class-diagram

我在类图上做了一个赋值,下面显示了类OrderMenu Item之间的关联。链接应该是聚合(弱)还是组合(强)?

enter image description here

我很困惑因为我看过显示聚合的例子。我觉得它应该是组合,因为Order必须添加至少1 Menu Item。我错了吗?

2 个答案:

答案 0 :(得分:1)

  

链接应该是聚合(弱)还是组合(强)?

两者都可以。主要区别在于:

如果是作文:

  • MenuItem对象在Order对象的实例化时实例化。
  • 一旦Order对象被破坏,MenuItem对象就会被破坏。

  • C ++示例:

    class Order {
        MenuItem menus[NUMBER_OF_MENUS];
    };
    

如果是聚合:

  • MenuItem对象的生命周期与Order对象的生命周期无关。

  • C ++示例:

    class Order {
        MenuItem* menus[NUMBER_OF_MENUS];
    };
    

所以这是一个设计决定。也可能还取决于实现语言。例如,在Java中,两者之间没有区别,所有对象变量都是引用。

答案 1 :(得分:0)

很多都取决于背景。让我们用一个例子来说明你的不同之处。

假设您正在汽车工厂组装Car对象。 Car对象有两个Axle对象,四个Wheel对象,一个Motor对象,依此类推。所有这些对象在整个汽车的环境中只有意义(一旦你把它们放进去,它们就会留在那里)。这是作文。

现在,假设您在垃圾场中有一个Car对象。 Car对象具有相同的东西,但您可以将车轮或车轴或电机拉出来并单独出售。在这种情况下,每个部件的寿命与汽车的寿命不同。这是聚合。