组合和聚合问题 Java

问题描述

有人可以解释一下什么是聚合类型,为什么不应该初始化向量,而这段代码是根据图表的?我不明白为什么什么时候 -> 在聚合或组合结束时不应该内化向量。

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

UML:

enter image description here

解决方法

此代码不允许在关联、聚合、组合之间进行区分。向量的初始化与否无关。

UML 表示 Project 具有未指定数量的 Student。由于是聚合,没有独占权,所以同一个学生可以出现在多个项目中。 ALsi,当项目被摧毁时,所有学生都不受影响。

  • Java 代码使 stds 单元化。这表示也不保证学生的所有权。
  • 此外,如果项目应该聚集一些学生,Java 代码有时会正确初始化 stds 向量。
  • 实际上,我怀疑代码的作者将聚合与Java中的对象分配混淆了。聚合是一种没有这种含义的建模安慰剂。在这种情况下,使用简单的关联而不是聚合要简单得多,也更明确。

UML 说 a Project 是一个组合,它具有未指定数量的 Diag。组合意味着独占所有权,不是向量,而是存储在其中的图表:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...