当前位置: 首页 > 知识库问答 >
问题:

Java代码中的聚合和组合

濮阳
2023-03-14

因为聚合和组成是相关的关联,或者我们可以说它给出了对对象或其他任何东西之间关系的理解。

我发布这个问题是因为我在采访中问了一个问题,什么是组成和聚合。

所以根据我的理解,我给出了我的想法,如下所示。

http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition

聚集、关联和组合

Java中的关联、聚合和组合

也参观了更多。

我的基本解释是,聚合表示松散关系,而组合表示强关系,并对此进行了明确解释。

但是面试官侮辱了我,说这是一个理论概念,你说我想要完美的Java代码,它们是如何不同的,还告诉我如果我给你一个小应用程序,你如何识别这是聚合,这是组合?

所以现在我想了解纯技术概念和Java代码,它们有什么不同,是什么?

共有2个答案

凌钊
2023-03-14

A 想在解释的答案中添加其他信息

聚合是Assosation的一种特殊形式(关联是通过对象建立的两个独立类之间的关系。关联可以是一对一、一对多、多对一、多对多)

  • 聚合表示 Has-A 关系。
  • 它是一种单向
  • 关联,即单向关系。例如,部门可以有员工,但反之亦然是不可能的,因此本质上是单向的。
  • 在聚合中,两个条目都可以单独生存,这意味着结束一个实体不会影响另一个实体。

组合是一种受限的聚合形式,其中两个实体高度依赖彼此。

  • 它代表关系的一部分。
  • 在组合中,两个实体都是相互依赖的。
  • 当两个实体之间存在组合时,组合对象不能没有另一个实体而存在。

聚合vs组合

-依赖性:聚合意味着子级可以独立于父级存在的关系。例如,部门和员工,删除部门和员工仍然存在。而组合意味着子级不能独立于父级存在的关系。例如:人类和心脏,心脏不独立于人类存在。

-关系类型:聚合关系是“has-a ”,组合是“part-of”关系。

-关联类型:组合是强关联,而聚合是弱关联。

参考:https://www . geeks forgeeks . org/association-composition-aggregation-Java/

寿阳华
2023-03-14

考虑一个简单的 LinkedList示例链接列表节点组成。这里 LinkedList 类是拥有对象。当它被销毁时,其中包含的所有节点都会被擦除。如果从列表中删除了节点对象,则链接列表对象仍将存在。

组合的实现使得一个对象包含另一个对象。

class LinkedList {

 Node head;
 int size; 
}

这是构图。

另一个例子,考虑一个< code>Circle类,它有一个< code>Point类,用于定义其中心的坐标。如果删除了< code >圆,则其圆心也会随之删除。

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 对象都将随之删除。

聚合也是对象组合的一种类型,但不如组合强。它定义了“HAS A”关系。用非常简单的话来说,如果类A具有类B的引用,并且删除B不会影响A的存在,那么它就是聚合。你一定在某个时候用过它。

 类似资料:
  • 我试图确认我对关联、聚合的代码外观的理解 聚合:哈斯-a。它具有另一种类型的现有对象 组成:由另一个对象组成 协会:我对此有两种看法。 > 当一个类与另一个类相关联时。因此,上述两个都是关联的示例。 关联是一种较弱的聚合形式,其中类不保留对其接收的对象的引用。 我的理解正确吗?我在这里和这里阅读了相互矛盾的文章,所以我真的不确定该遵循哪一个。我的理解似乎符合第一个环节。我觉得第二个环节是错误的,或

  • 假设我们有两个名为Point和Line的类。Line类有两个构造函数。这是Point类的代码。 这是Line类的代码。 如您所见,Line类有两个构造函数。第一个构造函数是组合的例子,而第二个构造函数是集合的例子。现在,关于这个案子我们能说些什么?一个类可以同时有聚合和合成吗?谢谢你的回答。

  • 问题内容: 我想知道如何在python中以 UML术语 实现组合和聚合。 如果我了解: 聚合: class B: pass class A(object): def init(self): self.B = B 组成: 在其他语言中,我将其实现为指向B的指针。我猜这是python中的指针。 这样对吗? 问题答案: 如果我正确理解,聚合与组合是关于对象对其成员的职责(例如,如果删除实例,是否还要删除

  • 我知道聚合和组合之间的概念差异。有人能用实例告诉我它们之间在Java中的实现区别吗?

  • 请考虑以下情况: 我如何在类图上表示< code>A和< code>B之间的关系?如果< code>B只保存一个< code>A(而不是一个数组),我会使用组合/聚合,但是在这种情况下,我不确定应该做什么。非常感谢你的帮助!

  • 问题内容: 我试图理解这些术语的含义。我举了一些例子,例如: 汇总:Facebook 有一个 用户 组成:facebook 中的 每个用户 都有一个 会话。 协会:人们 使用 浏览器 但是我对 具有 和 使用我的 示例感到困惑。为什么不能是用户 使用 Facebook帐户或Facebook 使用 会话来认证用户? 就OOP而言,这是错误的吗?我在哪里想念这个概念? 问题答案: 该 使用 关系意味着