由于聚合和合成是相关的,所以我们可以说它提供了对对象或其他任何事物之间关系的理解。
我贴出这个问题是因为我在采访中问了一个问题,那就是什么是组成和聚合。
因此,根据我的理解,我提出了我的想法,如下所示。
http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition
也参观了更多的地方。
我的基本解释是,聚合表示松散的关系,而组合则表示强烈的关系,并对此有明确的解释。
但是面试官侮辱了我,并说,,这是你说的理论概念,你说我想要完美的Java代码,它们有多么不同,并且告诉你,如果我给你一个小的应用程序,那么你如何确定这是聚合,这是组合?
所以,现在我想了解纯技术概念和Java代码,它们有什么不同,是什么?
发布于 2013-11-30 19:15:57
考虑一个简单的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对象都会随之删除。
聚合也是对象合成的一种类型,但不像组合那样强。它定义了“有A”关系。简单地说,如果A类有B类的引用,而删除B不影响A的存在,那么它就是聚合。你一定在某个时候用过它。
发布于 2018-03-24 09:16:52
A想在解释的答案中添加更多的信息
聚合是一种特殊的组合形式(关联是通过它们的对象建立的两个独立类之间的关系。关联可以是一对一、一对多、多对一、多对多的。
组合是一种受限的聚合形式,其中两个实体彼此高度依赖。
聚集与合成
-依赖关系:聚合意味着子节点可以独立于父级存在的关系。例如,“部门和员工”,删除“部门”,员工仍然存在。然而,组合意味着孩子不能独立于父母而存在的关系。例如:人和心,心并不独立于人。
-关系类型:聚合关系是“有-a”,组合是“部分--”关系。
-类型的关联:组合是强关联,而聚集是弱关联。
参考资料:https://www.geeksforgeeks.org/association-composition-aggregation-java/
https://stackoverflow.com/questions/20304116
复制相似问题