Java代码中的聚合和组合
因为聚合和合成是相关联的,或者说它提供了对对象或其他任何事物之间关系的理解 我之所以发布这个问题,是因为我在采访中问了一个问题,即组成和汇总是什么 因此,根据我的理解,我给出了我的想法如下 还参观了很多 我的基本解释是,聚合表示松散的关系,而组合表示强烈的关系,并且与此相关的解释清晰 但是面试官侮辱了我,说这是一个理论概念,你说我想要完美的Java代码,它们之间有什么不同,还告诉我如果我给你一个小应用程序,那么你如何确定这是聚合,这是组合?Java代码中的聚合和组合,java,relationship,aggregation,composition,Java,Relationship,Aggregation,Composition,因为聚合和合成是相关联的,或者说它提供了对对象或其他任何事物之间关系的理解 我之所以发布这个问题,是因为我在采访中问了一个问题,即组成和汇总是什么 因此,根据我的理解,我给出了我的想法如下 还参观了很多 我的基本解释是,聚合表示松散的关系,而组合表示强烈的关系,并且与此相关的解释清晰 但是面试官侮辱了我,说这是一个理论概念,你说我想要完美的Java代码,它们之间有什么不同,还告诉我如果我给你一个小应用程序,那么你如何确定这是聚合,这是组合? 因此,现在我想了解纯技术概念和Java代码,它们
因此,现在我想了解纯技术概念和Java代码,它们在哪些方面不同,是什么?考虑一个
LinkedList
类的简单示例。LinkedList
由节点组成。这里,LinkedList
类是所属对象。当它被销毁时,其中包含的所有节点都将被擦除。如果从列表中删除了节点
对象,则链接列表
对象仍将存在
组合的实现使得一个对象包含另一个对象
class LinkedList {
Node head;
int size;
}
这就是作文
另一个例子,考虑一个<代码>圆>代码>类,它有一个<代码>点<代码>类,用来定义它的中心坐标。如果删除了
圆
,则其中心将随之删除
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
有一个条目
类。如果删除了HashMap
对象,则映射中包含的所有条目
对象都会随之删除
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";
}
}
聚合也是一种类型,但不如合成那么强大。它定义了“有”关系。简单地说,如果类A有一个类B的引用,移除B不会影响A的存在,那么它就是聚合。您一定在某个时候使用过它。A希望在解释的答案中添加其他信息
聚合是一种特殊的关联形式(关联是通过对象建立的两个独立类之间的关系。关联可以是一对一、一对多、多对一、多对多)
- 聚合表示Has-A关系李>
- 这是一种单向关联,即单向关系。例如,部门可以
有员工,但反之亦然是不可能的,因此是单向的
本质上李>
- 在聚合中,两个条目可以单独存在
这意味着终止一个实体不会影响另一个实体
组合是一种受限的聚合形式,其中两个实体彼此高度依赖。
- 它代表了关系的一部分李>
- 在组合中,两个实体相互依赖李>
- 当两人之间有一个组合时
实体,合成的对象在没有其他实体的情况下不能存在
聚合与合成
-依赖关系:聚合意味着子级可以
独立于父对象存在。例如,部门和
员工,删除部门,员工仍然存在。鉴于
组合意味着子级不存在的关系
独立于父母。例子:人与心,心与心无关
独立于人而存在
-关系类型:聚合关系
是“has-a”,构成是“部分”关系
-关联类型:组合是一种强关联,而聚合是一种强关联
这是一种软弱的联想
参考资料:还有,在java代码中是否有任何具体的方法来区分这两种语言?你的例子真的很好,但面试官真的把我踢开了。当你给我链接时,我已经读过了,我也给了同样的关于汽车的例子,但他说我“这是一个理论概念,这种讨论永远不会结束!!!我只是想知道如何实现组合和聚合?它们在实现上有哪些不同?“我不知道面试官需要什么?还有什么与此相关的吗?@NiravKamani我不知道如何区分它们。对于作文来说,两者之间存在着很强的关系。HashMap就是一个很好的例子。不知道你的面试官的期望是什么,可能是你可以给出JavaAPI的例子或者你工作过的项目的例子。不要被这样的面试官惹恼,因为有时候他们自己对基本原理不清楚。祝你好运