【问题标题】: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
{
}

【问题讨论】:

    标签: c# oop composition aggregation


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      这两者之间存在关联。

      问题构成答案。

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

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

      【讨论】:

      • 好!你会推荐什么来编写这个组合(请观看编辑)
      • 这并不重要。选择一种适合您需求的组合类型(例如,您的 ORM 框架支持)。
      猜你喜欢
      • 2014-11-04
      • 2016-06-27
      • 1970-01-01
      • 2013-05-14
      • 2012-11-14
      • 2014-03-24
      • 2017-01-20
      • 2013-01-28
      • 2017-06-24
      相关资源
      最近更新 更多