关联、聚合和组合
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 框架支持)。以上是关于关联、聚合和组合的主要内容,如果未能解决你的问题,请参考以下文章