问题描述
有人可以解释一下什么是聚合类型,为什么不应该初始化向量,而这段代码是根据图表的?我不明白为什么什么时候 -> 在聚合或组合结束时不应该内化向量。
class Project
{
private Vector<Student> stds;
private Vector<Diag> diagra = new Vector();
}
解决方法
此代码不允许在关联、聚合、组合之间进行区分。向量的初始化与否无关。
UML 表示 Project
具有未指定数量的 Student
。由于是聚合,没有独占权,所以同一个学生可以出现在多个项目中。 ALsi,当项目被摧毁时,所有学生都不受影响。
- Java 代码使
stds
单元化。这表示也不保证学生的所有权。 - 此外,如果项目应该聚集一些学生,Java 代码有时会正确初始化
stds
向量。 - 实际上,我怀疑代码的作者将聚合与Java中的对象分配混淆了。聚合是一种没有这种含义的建模安慰剂。在这种情况下,使用简单的关联而不是聚合要简单得多,也更明确。
UML 说 a Project
是一个组合,它具有未指定数量的 Diag
。组合意味着独占所有权,不是向量,而是存储在其中的图表:
- java 代码使用初始化为空向量的向量,它没有说明生命周期及其将包含的对象的所有权。
- 事实上,向量元素是可以始终共享的引用(“对象句柄”)。没有任何东西可以保证代码中图表的所有权。