Java 代码中的聚合和组合

Posted

技术标签:

【中文标题】Java 代码中的聚合和组合【英文标题】:Aggregation and Composition in Java Code 【发布时间】:2013-12-16 17:36:39 【问题描述】:

由于聚合和组合是相关的关联,或者我们可以说它给出了对对象或其他任何事物之间关系的理解。

我发布这个问题是因为我在面试中问了一个问题,即组合和聚合是什么。

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

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

Aggregation, Association and Composition

Association vs. Aggregation vs. Composition in Java

并且还访问了更多。

我的基本解释是,Aggregation 表示松散的关系,而 Composition 表示强烈的关系,并且对此进行了明确的解释。

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

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

【问题讨论】:

Check this 以及 【参考方案1】:

考虑一个LinkedList 类的简单示例。 LinkedListNodes 组成。这里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 对象也会随之删除。

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

【讨论】:

在 java 代码中有什么特殊的方法可以区分它们吗?你的例子真的很好,但面试官真的把我赶走了。正如你给我的链接我已经读过它我也给出了与汽车相关的相同例子,但他说我“这是理论概念,这种类型的讨论永远不会结束!! !我只需要你将如何实现组合和聚合?它们在实现方面有何不同?“。我不知道面试官需要什么?还有什么与此相关的吗? @NiravKamani 我不知道区分它们的任何具体方法。对于组合,存在很强的关系。 HashMap 就是一个很好的例子。不知道你的面试官的期望是什么,可能你可以给出 java api 的例子或者你工作过的项目的例子。不要被这样的面试官惹恼,因为有时他们自己也不清楚基本面。祝你好运!【参考方案2】:

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

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

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

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

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

聚合与组合

- 依赖关系: 聚合意味着孩子可以 独立于父母而存在。例如,部门和 员工,删除部门,员工仍然存在。然而 组合暗示了一种孩子不能存在的关系 独立于父母。示例:人与心,心不 与人类分开存在。

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

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

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

【讨论】:

以上是关于Java 代码中的聚合和组合的主要内容,如果未能解决你的问题,请参考以下文章

什么是java聚合工程

java中的组合和聚合有啥区别? [复制]

java 聚合和组合的区别?

java 里聚合到底啥意思啊?和类比有啥好处和坏处啊?望高手指点。急急急!!!

组合和聚合问题 Java

同一类的Java组合和聚合?