Java代码中的聚合和组合

Java代码中的聚合和组合,java,relationship,aggregation,composition,Java,Relationship,Aggregation,Composition,因为聚合和合成是相关联的,或者说它提供了对对象或其他任何事物之间关系的理解 我之所以发布这个问题,是因为我在采访中问了一个问题,即组成和汇总是什么 因此,根据我的理解,我给出了我的想法如下 还参观了很多 我的基本解释是,聚合表示松散的关系,而组合表示强烈的关系,并且与此相关的解释清晰 但是面试官侮辱了我,说这是一个理论概念,你说我想要完美的Java代码,它们之间有什么不同,还告诉我如果我给你一个小应用程序,那么你如何确定这是聚合,这是组合? 因此,现在我想了解纯技术概念和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的例子或者你工作过的项目的例子。不要被这样的面试官惹恼,因为有时候他们自己对基本原理不清楚。祝你好运