UML - 关联或聚合(简单的代码片段)

2024-04-29

有多少书自相矛盾,真让我抓狂。

Class A {} class B {void UseA(A a)} //some say this is an association,
no reference is held but communication is possible
Class A {} class B {A a;} //some say this is
    aggregration, a reference is held

但许多人说,持有引用仍然只是一个关联,并且为了聚合,他们使用列表 - 恕我直言,这是相同的,它仍然是一个引用。

我很困惑,我想了解这个问题。

例如。这里:http://aviadezra.blogspot.cz/2009/05/uml-association-aggregation-composition.html http://aviadezra.blogspot.cz/2009/05/uml-association-aggregation-composition.html- 强关联和聚合之间有什么区别,在这两种情况下,作者都使用字段来存储引用。

另一个例子: 据说这是协会:

这就是聚合:

public class Professor {
  // ...
}

public class Department {
  private List<Professor> professorList;
  // ..

}

再说一遍,有什么区别?这两种情况都有参考意义


这个问题已经并且将会以许多不同的变体被多次提出,因为许多人,包括许多知名开发人员,对这些在 UML 中定义的术语的含义感到困惑。由于这个问题被问了很多次,所以也被回答了很多次。参见,例如这个答案 https://stackoverflow.com/questions/734891/aggregation-versus-composition/27889087#27889087。我将尝试总结 UML 定义。

两个类之间的关联不是通过方法参数建立的,而是通过引用属性(类属性)建立的,其范围/类型是关联的类。如果方法参数的类型是类,则这不会建立关联,而是建立关联依赖性关系。

在查看关联的编码方式之前,必须首先理解关联的逻辑概念。对象类型之间的关联对这些类型的对象之间的关系进行分类。例如,协会Committee-has-ClubMember-as-chair,在下面所示的类图中可视化为连接线,可以对关系进行分类:FinanceCommittee-has-PeterMiller-as-chair、RecruitmentCommittee-has-SusanSmith-as-chair 和 AdvisoryCommittee-has-SarahAnderson-as -chair,其中对象 PeterMiller、SusanSmith 和 SarahAnderson 属于类型ClubMember,并且对象 FinanceCommittee、RecruitmentCommittee 和 AdvisoryCommittee 的类型为Committee.

关联始终通过引用属性进行编码,其范围/类型是关联的类。比如说像这样

class Committee { ClubMember chair; String name;}

在 UML 中,聚合和组合被定义为特殊形式的关联,其预期含义是对部分-整体关系进行分类。在聚合的情况下,与组合相反,整体的部分可以与其他整体共享。下面的聚合示例对此进行了说明,其中一门课程可以属于多个学位课程。

组合物的定义特征是具有独占(或不可共享)的部分。组合可能具有整体与其部分之间的生命周期依赖性,这意味着当整体被破坏时,其所有部分也随之被破坏。然而,这仅适用于某些合成情况,不适用于其他情况,因此它不是一个定义特征。一个组合的例子如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UML - 关联或聚合(简单的代码片段) 的相关文章

  • Rails:如何限制 has_many 关联中的项目数量(来自父级)

    我想限制协会中的项目数量 我想确保用户拥有的东西不超过 X 件 这个问题之前被问过 https stackoverflow com questions 7863618 rails 3 1 limit user created objects
  • 继承与聚合[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 UML 活动图上显示异步操作

    我即将绘制 记录一些客户端 服务器连接建立代码 以更好地理解它 有几个操作是在单独的线程中异步完成的 连接线程 数据接收线程等 我应该在单独的图表上显示它们吗 我更愿意将其放在单个图表上以掌握整体视图 但不知道如何在活动图上表示它 我不确定
  • 聚合、组合、关联、直接关联

    我正在复习面向对象编程方面的知识 在类之间的关系主题下 我遇到了一些对我来说有点模糊的关系 我知道依赖项 uses a 和继承 is a 但我对聚合 组合 关联和直接关联有点不熟悉 另外 其中哪一个是 has a 关系 有些可以与关联互换使
  • 自引用 has_many 的问题:通过 Rails 中的关联

    我今天正在阅读有关自引用 has many through 数据情况的内容 因为我正在尝试构建一个使用它们的 Rails 应用程序 我找到了这个示例情况 http blog hasmanythrough com 2007 10 30 sel
  • 组合:使用特征来避免转发功能?

    假设我们有两个班级 A and B 当使用组合来建模时 has a or 根据 实施 关系 例如B has a A 相对于继承的缺点之一是B不包含公共功能A它需要 为了获得访问A的公共功能 需要提供转发功能 与继承相反 其中B将继承所有A的
  • Hibernate 单向一对多关联 - 为什么连接表更好?

    在本文档中 向下滚动到单向部分 http docs jboss org hibernate stable annotations reference en html single entity mapping association col
  • UML 设计类图:具有另一个类作为属性的类?

    我很难弄清楚如何将特定场景建模为 UML 设计类图 假设我有以下情况 我有一个名为 CPoint 的类 它有两个属性 x 和 y R2 平面中的坐标 另外 我有一个名为 CLine 的类 它应该有两个 CPoint 作为属性 这对代码来说非
  • 如何用序列图来展示一个类与另一个类之间的关系,以该类的实例的实例作为输入?

    我将使用之前的相同示例question https stackoverflow com questions 66934927 how to represent the relationship between an instance of
  • Javadoc 插入 UML 图

    有没有办法将图像嵌入到我的 JavaDoc 中 基本上我想在一些文档中包含一些 UML 图来解释我的类的层次结构 Thanks 查看本节 http www oracle com technetwork java javase documen
  • Dia:图表编辑器:盒子对象的限制?

    如标题所示 我尝试为 hte 3d 图形引擎 ogre3d 开发尽可能少的方案 问题是大图方案 Ogre Root 类需要相当多的从它下降的箭头 用关系箭头连接框的模型是它们只能通过边界周围的特定点 称为 关节 或其他东西 进入 退出 但现
  • 如何在 UML 序列图中显示实例化?

    如何显示 Web 服务器实例化视图并重新获得流的控制权 也许我没有使用正确的图表类型 非常感谢 Ruben 的答案中的图表是正确的 但缺少一般的 UML 答案 当 创建 线 在本例中为虚线 连接到所创建生命线的框 标签 顶部时 它会创建另一
  • UML状态图中守卫和事件的区别

    我以为我可以区分event and guard 但我遇到了一个与守卫类似的事件 counter gt 4 pin is high switch on event 我将变量计数器从小于 4 的某个值更改为大于 4 的值作为事件 这是否意味着事
  • Rails:基于关联值的ActiveRecord查询

    我有 2 个型号 Report and Server具有belongs to 和has many 关系 我使用创建了一个访问器方法delegate这允许Report来查找其关联的Server company id 现在 我想运行一个查询Re
  • 类图中的组合和依赖之间的区别?

    我知道 有人就这个案例问过同样的问题 但我仍然不明白 我需要一个具体的答案 谢谢你 D 既然冈努斯没有正确解释构图的含义 我就只好这么做了 正如 Gangnus 所解释的 聚合是一种特殊形式协会具有预期含义部分 整体关系 但没有精确的语义
  • 如何在时序图上表示 if 条件 1 else if 条件 2?

    我想知道 如何在序列图上表示 if cond1 else if cond2 语句 if condition1 Do something else if condition2 Do something else if 我不确定是否有两个独立的
  • 在用例建模中分解 CRUD

    我有一个后续问题用例图中的 CRUD https stackoverflow com questions 7772399 crud in a use case diagram 如果我需要分解复杂的用例 例如 管理用户 假设这很复杂 可以将它
  • 如何在 UML 中正式记录 C# 属性?

    在 UML 类图中记录类的 C 属性的正确方法是什么 我还没有决定这是否是我的答案 但我想我会把它扔在那里以便讨论 这看起来可以接受吗 它是属性类型的实例 其中元数据值放入下面的标记值中 我刚刚弄清楚如何添加自定义立体类型 该箭头只是一个标
  • Ruby on Rails 中的三重连接

    我对 Ruby on Rails 中的关联有疑问 应用程序中有项目 用户 角色和组 项目属于一个有用户的组 一个用户可以属于多个不同的组 但只能在该组中拥有一个特定的角色 例如 在一个组中 用户是项目所有者 但在另一个组中 他是作家 使用
  • 这是正确的 UML 活动图吗?

    这是活动图截图 https i stack imgur com 575VU jpg 这是对的吗 如果不是 我做错了什么 从语法上讲 这个带有分区的活动图似乎几乎是正确的 起始节点应该是实心 黑色 圆圈 最终节点应该有一个内部实心 黑色 圆圈

随机推荐