组合和聚合问题 Java

Composition and aggregation issue Java

有人可以向我解释什么是聚合类型,为什么不应该初始化矢量并且此代码是根据图表显示的?我不明白为什么什么时候是 -> 在聚合或组合结束时不应内部化向量。

class Project
{
 private Vector<Student> stds;
 private Vector<Diag> diagra = new Vector();
}

UML:

此代码不允许区分关联、聚合和组合。 vector初始化与否无关

UML 表示 Project 有未指定数量的 Student。由于是聚合,没有排他性,所以同一个学生可以出现在多个项目中。 ALsi,当项目销毁时,所有学生不受影响

  • Java 代码使 stds 未初始化。这说明也不保证学生的所有权。
  • 此外,如果项目要聚集一些学生,Java 代码有时会正确初始化 stds 向量。
  • 其实我怀疑代码作者在Java中混淆了聚合和对象赋值。聚合是一种建模安慰剂,没有这个意思。在这种情况下,使用简单的关联而不是聚合要简单得多,也不会含糊不清。

UML 表示 Project 是具有未指定数量的 Diag 的组合。组合意味着独家所有权,不是矢量,而是存储在以下图表的所有权:

  • java 代码使用初始化为空向量的向量,它没有说明生命周期和它将包含的对象的所有权。
  • 实际上,矢量元素是始终可以共享的引用(“对象句柄”)。没有任何东西可以保证代码中图表的所有权。