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 - 关联或聚合(简单的代码片段) 的相关文章

  • 关联注入还是依赖注入?

    我正在研究依赖注入模式 我看过很多例子 其中一个典型的例子就是以XxxService XxxRepository为例 但我认为 根据UML概念 类XxxRepository应该是类XxxService的关联 为什么不称这种情况为关联注入 但
  • Javadoc 插入 UML 图

    有没有办法将图像嵌入到我的 JavaDoc 中 基本上我想在一些文档中包含一些 UML 图来解释我的类的层次结构 Thanks 查看本节 http www oracle com technetwork java javase documen
  • 如何*真正*编写 UML 基数?

    我想一劳永逸地知道如何编写 UML 基数 因为我经常不得不争论它们 所以非常欢迎证明和来源 如果我想解释一下a Mother可以有几个Children but a Child有且仅有一个Mother 我应该写 Mother 1 Child
  • 如何使用 js/uml 对 JavaScript 文件进行逆向工程?

    Goal 我的目标是从我的 JavaScript 项目 由多个 js 文件组成 中获取 UML 模型并将其存储为 XMI 我已经走了多远 我在网上搜索了一下 发现js uml是第一个去的地方 我已经设法让 js uml 插件与 Eclips
  • Rails:基于关联值的ActiveRecord查询

    我有 2 个型号 Report and Server具有belongs to 和has many 关系 我使用创建了一个访问器方法delegate这允许Report来查找其关联的Server company id 现在 我想运行一个查询Re
  • 在用例建模中分解 CRUD

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

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

    是否有 UML XMI 文件的 XSD 标头仅包含名称空间引用
  • 有什么办法可以自动生成UML图吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 MySQL 数据库 我想生成它的关系图 有没有一个工具可以连接到数据库并自动为我生成它 是的
  • Android Studio 上的代码 Iris 插件

    我正在尝试使代码 iris 插件在 Android studio 上工作 我按右键单击 gt 创建代码虹膜图 然后我收到一条通知 表明我的图表已准备就绪 但我不知道该图何时存储 创建的文件的名称是什么以及如何打开它 有任何想法吗 CODE
  • 创建UML图时应该编写构造函数吗?

    我有一项作业要求我为实际的 Java 程序创建 UML 图 但程序中有几个构造函数方法 我很困惑 我是否应该将这些构造函数方法添加到图中 根据 UML 规范 2 5 版第 11 4 4 节 构造函数是一个具有所属类类型的单个返回结果参数的操
  • 如何设计/规划Web应用程序开发?

    我有兴趣学习如何在多个开发团队场景中设计 规划 Web 应用程序开发 担任 项目经理 主管 的角色 成功的 Web 应用程序开发需要哪些 文档 需要哪些 UML 图以及需要到什么程度 在设计 计划阶段 是否需要根据用例对每个类进行图表化 类
  • 在多个模型中与 has_many :through 建立关联

    请帮助了解该怎么做 project payments有这棵树 Project Stages Costs Payments 项目 rb has many stages has many costs through gt stages stag
  • Rails 查询连接关联表与别名

    我有一个模型Edge属于另一个模型Node通过不同的外键两次 def Edge lt ActiveRecord Base belongs to first class name Node belongs to second class na
  • Pear PHP UML 类图 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建现有代码的图形表示 我尝试使用 VS PHP 使用 Visual Studios 201
  • UML:一对多关系表示?

    我是 UML 新手 还不太理解其表示法 这是我对图的理解 The system has many doctors Doctors can have many patients however patients can only have o
  • [GoF]-ConcreteSubject 可以覆盖通知方法吗?

    我正在模拟一种情况 其中存在 通知框 观察者 list1 list2 list3 这个科目 现在我会制作一张图表 其中使用观察者模式描述每个列表实现不同类型的notify 这一事实 例如 列表状态的某些变化只需要按照某些标准通知给某些观察者
  • 强制执行 has_many 但当前只有一个关联的“rails 方式”是什么?

    我有一个简单的 Rails 应用程序 其中包含模型项目和阶段 一个项目有许多阶段 但一次只能有一个阶段处于活动状态 即 当前 我仍然希望其他阶段可以访问 但当前阶段应该是应用程序的主要锚点 关于如何实现此要求的决定对我如何处理模型访问 验证
  • 如何在rails中创建带有外键别名的装置?

    我有两个模型 App and User 其中App有一个创造者 他是User app rb class App lt ActiveRecord Base belongs to creator class name User end user
  • 我可以在用例中扩展参与者吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我可以在用例中扩展参与者吗 例如我有

随机推荐