关联、聚合和组合

Posted

技术标签:

【中文标题】关联、聚合和组合【英文标题】:association, aggregation and composition 【发布时间】:2012-07-01 05:12:14 【问题描述】:

我正在处理这个问题。我正在创建数学问题,每个问题都有回应。例如。

如果我的问题是关于“5x + 15 = 2 的结果?”,我将只等待一个答案(作为整数)。 如果我的问题是“给我这个形状的面积和许可人”,我将等待两个答案(作为双打)。 在另一个中,我将等待一个字符串作为响应 另外,我可以针对各种数据类型获得多个答案或响应。

我最大的问题是。

班级问题和回答之间的关系如何。我还在处理这应该是关联、聚合还是组合。

谢谢。

编辑:太好了,这是一个组合。最后一件事,根据上面的句子,我该如何表示设计?这些是我的一些想法,但我想我错了。

public class Question

    public Response _response;
    //public List<Response>
    //public Dictionary<string, Response>

    public Question()
    
        this._response = new Response();
    


public class Response


【问题讨论】:

【参考方案1】:

关联是一种所有对象都有自己的生命周期并且没有所有者的关系。让我们以老师和学生为例。多个学生可以与单个教师关联,单个学生可以与多个教师关联,但对象之间没有所有权,并且都有自己的生命周期。两者都可以独立创建和删除。

聚合是一种特殊的关联形式,其中所有对象都有自己的生命周期,但存在所有权:子对象不能属于另一个父对象。让我们以部门和老师为例。单个教师不能属于多个部门,但如果我们删除部门,教师对象不会被破坏。我们可以将其视为“具有”关系。

组合又是一种特殊的聚合形式,我们可以将其称为“死亡”关系。它是一种强大的聚合类型。子对象没有它们的生命周期,如果父对象被删除,所有子对象也将被删除。让我们再举一个 House 和 room 之间关系的例子。一个房子可以包含多个房间,一个房间没有独立的生命,一个房间不能属于两个不同的房子。如果我们删除房子,它的房间将被自动删除。让我们再举一个问题和选项之间的关系示例。单个问题可以有多个选项,一个选项不能属于多个问题。如果我们删除一个问题,它的选项也将被删除。

【讨论】:

【参考方案2】:

这两者之间存在关联。

问题构成答案。

这样做的原因是 - 聚合和组合都是关联。组合意味着子对象的生命周期取决于其父对象——没有父对象,子对象不能存在。

这正是你的情况。因此 - 组成。

【讨论】:

好!你会推荐什么来编写这个组合(请观看编辑) 这并不重要。选择一种适合您需求的组合类型(例如,您的 ORM 框架支持)。

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

UML类图关系(泛化、继承、实现、依赖、关联、聚合、组合)

UML类图(下):关联聚合组合依赖

关联,聚合和组合有什么区别?

C++:关联、聚合和组合

关联、组合和聚合 - 使用 java 实现

依赖关联聚合和组合之间区别