首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java代码中的聚合与组合

Java代码中的聚合与组合
EN

Stack Overflow用户
提问于 2013-11-30 18:38:47
回答 2查看 24.2K关注 0票数 3

由于聚合和合成是相关的,所以我们可以说它提供了对对象或其他任何事物之间关系的理解。

我贴出这个问题是因为我在采访中问了一个问题,那就是什么是组成和聚合。

因此,根据我的理解,我提出了我的想法,如下所示。

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

聚合、联系和组合

Java中的关联与聚合与组合

也参观了更多的地方。

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-11-30 19:15:57

考虑一个简单的LinkedList类示例。LinkedList是由Nodes组成的。这里,LinkedList类是拥有的对象。当它被摧毁时,它中包含的所有Nodes都会被抹去。如果从列表中删除了Node对象,则LinkedList对象仍然存在。

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

代码语言:javascript
运行
复制
class LinkedList {

 Node head;
 int size; 
}

这是构图。

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

代码语言:javascript
运行
复制
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的存在,那么它就是聚合。你一定在某个时候用过它。

票数 11
EN

Stack Overflow用户

发布于 2018-03-24 09:16:52

A想在解释的答案中添加更多的信息

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

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

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

  • 它是关系的一部分。
  • 在组成上,这两个实体是相互依赖的。
  • 当两个实体之间存在组合时,如果没有另一个实体,组合对象就不可能存在。

聚集与合成

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

-关系类型:聚合关系是“有-a”,组合是“部分--”关系。

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

参考资料:https://www.geeksforgeeks.org/association-composition-aggregation-java/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20304116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档