有人能告诉我聚合的类型是什么,为什么不应该初始化向量,并且这个代码符合图表?我不明白的是,为什么在聚合或合成的末尾,向量不应该被内部化。
class Project { private Vector<Student> stds; private Vector<Diag> diagra = new Vector(); }
统一建模语言:
whlutmcx1#
此代码不允许在关联、聚合和组合之间进行区分。向量的初始化与否无关。uml说 Project 有未指定数量的 Student . 因为它是聚合的,所以没有独占的所有权,所以相同的学生可以出现在几个项目中。此外,当项目被摧毁时,所有学生都不受影响。java代码离开了 stds 统一化。这并不能保证学生的所有权。此外,java代码有时需要正确初始化 stds 向量,如果该项目要聚集一些学生。事实上,我怀疑代码的作者将聚合与java中的对象分配混为一谈。聚合是一种建模安慰剂,没有这种意义。在这种情况下,使用简单关联而不是agregion要简单得多,也不那么模棱两可。uml表示 Project 是具有未指定数量的 Diag . 合成是指专有所有权,不是矢量所有权,而是存储在以下范围内的图表所有权:java代码使用被初始化为空向量的向量,它不告诉任何关于生命周期及其将包含的对象的所有权的信息。事实上,向量元素是始终可以共享的引用(“对象句柄”)。没有任何东西可以保证代码中图表的所有权。
Project
Student
stds
Diag
1条答案
按热度按时间whlutmcx1#
此代码不允许在关联、聚合和组合之间进行区分。向量的初始化与否无关。
uml说
Project
有未指定数量的Student
. 因为它是聚合的,所以没有独占的所有权,所以相同的学生可以出现在几个项目中。此外,当项目被摧毁时,所有学生都不受影响。java代码离开了
stds
统一化。这并不能保证学生的所有权。此外,java代码有时需要正确初始化
stds
向量,如果该项目要聚集一些学生。事实上,我怀疑代码的作者将聚合与java中的对象分配混为一谈。聚合是一种建模安慰剂,没有这种意义。在这种情况下,使用简单关联而不是agregion要简单得多,也不那么模棱两可。
uml表示
Project
是具有未指定数量的Diag
. 合成是指专有所有权,不是矢量所有权,而是存储在以下范围内的图表所有权:java代码使用被初始化为空向量的向量,它不告诉任何关于生命周期及其将包含的对象的所有权的信息。
事实上,向量元素是始终可以共享的引用(“对象句柄”)。没有任何东西可以保证代码中图表的所有权。