Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现中聚合和关联的区别_Java_Oop_Uml - Fatal编程技术网

Java 实现中聚合和关联的区别

Java 实现中聚合和关联的区别,java,oop,uml,Java,Oop,Uml,我已经阅读了很多关于对象关系的理论,但从实现的角度来看,我仍然难以理解关联和聚合是如何分离的。 在这两种情况下,您都将对象B作为对象a中的数据成员,在对象a中它作为引用存在(与组合不同,组合中它是按值存在的)。那么这两种情况之间的区别到底是什么呢? 我在某个地方读到一些java大师认为聚合是一个抽象概念,一个“安慰剂”的例子,它不能从实现/语法的角度(从关联)中分离出来,这是对的还是我遗漏了什么?我同意,从实现的角度来看,关联和聚合看起来是一样的——就像您提到的,在这两种情况下,一个对象是另一个

我已经阅读了很多关于对象关系的理论,但从实现的角度来看,我仍然难以理解关联和聚合是如何分离的。 在这两种情况下,您都将对象B作为对象a中的数据成员,在对象a中它作为引用存在(与组合不同,组合中它是按值存在的)。那么这两种情况之间的区别到底是什么呢?
我在某个地方读到一些java大师认为聚合是一个抽象概念,一个“安慰剂”的例子,它不能从实现/语法的角度(从关联)中分离出来,这是对的还是我遗漏了什么?

我同意,从实现的角度来看,关联和聚合看起来是一样的——就像您提到的,在这两种情况下,一个对象是另一个对象中的数据成员

我的理解是,您所询问的实现差异并非发生在对象级别,而是发生在应用程序设计级别:

  • 如果通过实现差异了解代码本身(对象放置在另一个对象中的方式),则没有差异

  • 但是,如果我们将对话扩展到对象在应用程序中的使用方式,那么我们需要开始研究对象是否自给自足,它们是否可以提供唯一、独立的功能。由您决定这是否仍然是实施

编辑->下面添加的其他说明:

我可能还不够清楚-我的意思是,在这种情况下,实施可以从两个层面考虑:

  • 表示类中对象的代码(包含对该对象的引用的字段)

  • 更广泛的代码(对象如何在其他类中使用,或者对象之间的依赖关系如何表示)


这两种方法都可以理解为实现,但在不同的抽象层次上-类内的用法对于聚合组合都是相同的,然而,跨多个类实现对象关系的方式会有所不同。

我同意,从实现的角度来看,关联和聚合看起来是一样的——就像您提到的,在这两种情况下,一个对象是另一个对象中的数据成员

我的理解是,您所询问的实现差异并非发生在对象级别,而是发生在应用程序设计级别:

  • 如果通过实现差异了解代码本身(对象放置在另一个对象中的方式),则没有差异

  • 但是,如果我们将对话扩展到对象在应用程序中的使用方式,那么我们需要开始研究对象是否自给自足,它们是否可以提供唯一、独立的功能。由您决定这是否仍然是实施

编辑->下面添加的其他说明:

我可能还不够清楚-我的意思是,在这种情况下,实施可以从两个层面考虑:

  • 表示类中对象的代码(包含对该对象的引用的字段)

  • 更广泛的代码(对象如何在其他类中使用,或者对象之间的依赖关系如何表示)


这两种方法都可以理解为实现,但在不同的抽象层次上-类内的用法对于聚合组合都是相同的,然而,跨多个类实现对象关系的方式会有所不同。

正确地说:UML术语聚合(您可能指的是)是
复合聚合。UML 2.5的第110页说:

composite
-表示属性以复合方式聚合,即复合对象负责组合对象的存在和存储(参见11.2.3中的部分定义)

如果您指的是共享聚合,请参见同一页。110:

shared
-表示属性具有共享聚合语义。共享聚合的精确语义因应用程序区域和建模者而异


tl;dr

区别很简单。如果聚合对象说再见,则必须销毁复合(聚合)对象。关联的项目不关心(或者引用的对象不会试图杀死它)


对于共享聚合:创建您自己的定义并将其与用法一起发布。

正确地说:UML术语聚合(您可能指的是)是
复合聚合。UML 2.5的第110页说:

composite
-表示属性以复合方式聚合,即复合对象负责组合对象的存在和存储(参见11.2.3中的部分定义)

如果您指的是共享聚合,请参见同一页。110:

shared
-表示属性具有共享聚合语义。共享聚合的精确语义因应用程序区域和建模者而异


tl;dr

区别很简单。如果聚合对象说再见,则必须销毁复合(聚合)对象。关联的项目不关心(或者引用的对象不会试图杀死它)

对于共享聚合
class DegreeProgram {    
  private List<Course> courses;
  ...
}