【问题标题】:Association vs. Aggregation vs. Composition in JavaJava 中的关联 vs. 聚合 vs. 组合
【发布时间】:2013-01-28 01:42:00
【问题描述】:

我试图理解这些术语的含义。我举了几个例子:

聚合:Facebook 有一个用户

组成:facebook中的每个用户都有一个会话。

关联:人们使用浏览器

但我对 has auses a 我的例子感到困惑。为什么不能是用户 使用 facebook 帐户或 Facebook 使用 会话来验证用户?

在 OOP 方面有错吗?我在哪里错过了这个概念?

【问题讨论】:

标签: java oop


【解决方案1】:

使用关系意味着两件事

->两者都可以独立存在

->数据从整个分类器()流向部分分类器(浏览器

关系意味着两件事

->部分分类器(session)的生命周期取决于整个分类器(facebook)的生命周期

->数据通常只流向一个方向(即从整个分类器(facebook)到部分分类器(session))。

【讨论】:

  • 正确。此外,Association 是通用术语;聚合(使用 a)和组合(拥有 a)是关联的类型。
【解决方案2】:

This article from the Code Project 对主题做了简洁的解释。

首先,没有一成不变的方式来对领域进行建模,有几种方法可以对特定问题进行正确的建模。例如,您的初始示例使用 Facebook 类,而在您的后续操作中,您现在使用 Facebook Account 类型:使用一个或另一个(或两者)对您的模型有影响,但不会使其无效。

也就是说,根据代码项目网站,关联关系意味着:

  • 所有者:没有所有者
  • 一生:拥有自己的一生
  • 子对象:子对象都是独立的。

考虑到这一点,我不认为UserFacebook Account 之间存在关联关系,因为它们彼此高度依赖(假设用户指的是Facebook 用户),所以组合 可能是更好的关系。

我不确定您在 Session 类中指的是什么。如果是the period of time while the user is connected,那么说Facebook 使用会话进行身份验证是没有意义的,并且UserSession 之间的关联关系可能是一个聚合,因为一个用户可以在其中拥有多个会话一天,它是所有人的主人。

【讨论】:

    【解决方案3】:

    查看this wikipedia entry,它准确地讨论了聚合 VS 组合

    因此,用 Java 术语来说,Facebook 用户有一个名字(组成),而一个 Facebook 用户有一个朋友列表(聚合)

    【讨论】:

    • 您的示例很好,我对它们进行了一些更改以使其更清晰。我只会小心关联,它在 UML 术语中是正确的,但放入 Java 中,本质上意味着调用来自另一个对象的方法。我正在关注 Java,因为您将该标签添加到您的问题中。
    猜你喜欢
    • 2014-03-24
    • 2023-04-05
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多