由于聚合和组合是相关联的,或者我们可以说它可以理解对象或其他任何东西之间的关系。
我发布了这个问题,因为我在采访中问了一个问题,即组成和聚合是什么。
根据我的理解,我给出了我的想法,如下所示。
http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition
Aggregation, Association and Composition
Association vs. Aggregation vs. Composition in Java
并且还访问了更多。
我的基本解释是聚合表明关系松散,而作文表明关系密切,并且与此有关的明确解释。
但是面试官侮辱了我并且说这是理论上的概念,你说我想要完美的Java代码,在这些代码中它们如何区别,并告诉我是否会给你一个小的应用程序然后你如何识别它这是聚合,这是作文?
所以现在我想了解纯技术概念和Java代码,它们的区别在于它们是什么?它是什么?
答案 0 :(得分:8)
考虑一个LinkedList
类的简单示例。 LinkedList
由Nodes
组成。这里LinkedList
类是拥有对象。当它被销毁时,其中包含的所有Nodes
都将被删除。如果从列表中删除Node
对象,则LinkedList
对象仍然存在。
实现组合使得对象包含另一个对象。
class LinkedList {
Node head;
int size;
}
这是作文。
另一个例子,考虑一个Circle
类,它有一个Point
类,用于定义其中心的坐标。如果删除Circle
,则会删除其中心。
class Circle {
private float radius;
private Point center;
public Circle(Point center, float radius) {
this.center = center;
this.radius = radius;
}
public void setRadius(float radius) {
this.radius = radius;
}
public void setCenter(Point center) {
this.center = center;
}
public float getRadius() {
return radius;
}
public Point getCenter() {
return center;
}
class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public void setY(int y) {
this.y = y;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public int getX() {
return x;
}
}
@Override
public String toString() {
return "Center: " + "(" + center.getX() + "," + center.getY() + ")" + "\nRadius: " + this.getRadius()
+ " centimeters";
}
}
来自java集合api的组合示例:HashMap
具有Entry
类。如果删除HashMap
对象,则会删除地图中包含的所有Entry
个对象。
聚合也是一种Object Composition但不如合成强。它定义了“HAS A”关系。如果A类具有B类的引用并且删除B不会影响A的存在则使用非常简单的单词,那么它就是聚合。你必须在某个时候使用它。
答案 1 :(得分:0)
A想在解释的答案中添加其他信息
聚合是Assosation的一种特殊形式(关联是通过对象建立的两个独立类之间的关系。关联可以是一对一,一对多,多对一,多对 - 对多)强>
组合是一种限制形式的聚合,其中两个实体高度依赖彼此。
汇总与成分
- 依赖关系:聚合意味着孩子可以的关系 独立于父母存在。例如,部门和 员工,删除部门和员工仍然存在。而 构图意味着孩子不能存在的关系 独立于父母。例如:人与心,心不 与人类分开存在。
- 关系类型:聚合关系 是“has-a”,组成是“部分”关系。
- 关联类型:组合是一种强大的关联,而聚合 是一个弱小的协会。
参考:https://www.geeksforgeeks.org/association-composition-aggregation-java/