这些课程之间存在什么样的关系?聚合还是只是协会?

时间:2014-04-13 09:54:23

标签: oop uml class-diagram object-oriented-analysis

请注意:我知道聚合是一种特定类型的关联。但是,这是否是聚合?

class A{
     void myfunc(){
         B myB = new B();
     }
}
class B{
    // some code for class B, which as nothing to do with class A
}

因此,当在A类函数的范围内创建和销毁B的对象时,这两个类之间的关系是什么?

3 个答案:

答案 0 :(得分:1)

  • 有三种聚合状态:无,共享和组合。使用“聚合”一词代替“共享聚合”是不正确的。更好地说“共享”。
  • 共享聚合是一个非严格定义的术语,意思是1:n关系,不含严格包含(不是合成)。

我看到了你的问题 - 你可以多次调用该函数,每次A实例都有一个B实例。因此,它可能被误认为是1:n关联。但事实并非如此。请参阅UML标准的引文,2.5,p。 208:“一个协会声明在相关类型的实例之间可以存在链接”。您声明了一个关联,显示在“myfunc()”中。每次调用myfunc()都会创建一个属于同一声明的链接,即同一个关联。它不是一个关联1:n,它是同一个1:1关联的n个“实例”。

  • 因此,您的示例是n 1:1并且是none聚合。它不是属性,但显然是可导航的(一个非严格的术语)。所以,你应该把它显示为从A到B的常用箭头,没有点,如果你愿意,你可以把刻板印象“本地”放在上面。

答案 1 :(得分:1)

这是两个类之间依赖关系的明显例子,这是在运行时建立的短期关系。没有进一步的filosofy。

答案 2 :(得分:0)

由于方法中只有局部变量的引用,因此示例中AB之间没有关联(因此没有聚合)。

否则,sfinnie是正确的,他的陈述(在uml-aggregation-vs-association中)"聚合在语义上太弱,以至于没有提供任何实际上有益的东西。"所以,你不应该浪费你(和我们)的时间来问这个问题。