UML 共享聚合是否意味着不存在循环?

2023-11-29

In short

共享聚合似乎只表达了一种简单的关联。它显然是一个“建模安慰剂”,没有客观理由使用它(除非在建模者就特定附加语义达成一致的特定上下文中)。

然而,一些消息来源声称共享聚合将意味着实例聚合图中不存在循环。这将使聚合成为图建模领域的强大工具。

但我在规格中找不到这些说法的任何证据。我是否错过了一些间接证据(例如几个约束的相互作用)?

更多细节

报价单

在他们的书中统一建模语言参考手册,第二版、Booch、Jacobson 和 Rumbaugh 关于(共享)聚合的主张:

聚合和关联之间的区别通常是品味问题,而不是语义差异。请记住,聚合就是关联。聚合传达了这样的思想:聚合本质上是其各部分的总和。事实上,它添加到关联中的唯一真正的语义是聚合链接的链不能形成循环的约束,然而,了解这一点通常很重要。 (...)尽管聚合附加的语义很少,但每个人都认为它是必要的(出于不同的原因)。将其视为建模安慰剂。

其他消息灵通的来源(例如uml-diagrams.org和几篇学术论文)也认为有向无环图是理所当然的。

根据 UML 规范进行验证

这些书是 2004 年的,基于 UML 2.0。但这种说法大部分还是得到了证实UML 2.5.1 规范。共享聚合在其中的定义非常模糊,与简单关联相比没有任何客观优势(第 112 页):

有时,属性用于模拟使用一个实例将一组实例组合在一起的情况;这称为聚合。为了表示这种情况,Property 有一个 AggregationKind 类型的聚合属性; (...)
...
共享: 指示该属性具有共享聚合语义。共享聚合的精确语义因应用程序领域和建模者而异。

另一个关于聚合的子句可以防止一些特殊的循环情况(p.200):

如果关联是二进制的,并且另一端未标记为共享或复合聚合,则关联的一端属性只能标记为共享或复合聚合。

但我没有找到任何证据表明“聚合链接的链可能不会形成循环“在一般情况下。我也没有发现其他属性,例如传递性和反对称性,可以用来推断不存在循环。

UML 发明者的主张现在已经过时了吗?或者我是否错过了当前规范中可以导出此声明的某些内容?


你的分析是正确的。 UML 2 没有为共享聚合提供任何语义。

However

UML 1 说:

两种聚合都定义了传递的反对称关系(即实例形成有向非循环图)。

我不知道,为什么这个没有被接管到UML 2。我只能推测这是一个把婴儿和洗澡水一起倒掉的案例。有些人想要绝对清楚地表明,该规范将共享聚合的语义开放给特定领域的解释。他们忘记了它实际上是有一些语义的,无论多么弱。

我对此的看法

我们的情况是这样的:关于这个主题的大量书籍和网站、UML 1 规范和常识都同意,整体与部分的关系,无论是共享的还是复合的,都是非循环的。 UML 2 没有提及这个主题。

因此,我将共享聚合解释为非循环。当然,我会在建模指南中记录这种解释。然而,我并不认为它会让我的图表的很多读者感到困惑,即使他们没有阅读我的指南,因为它无论如何都符合他们的期望。

最后一点:除非确实需要,否则不要使用聚合。根据我的经验,这会引起很多不必要的讨论。

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

UML 共享聚合是否意味着不存在循环? 的相关文章

随机推荐

  • 在 python 中使用绘制数据的微型版本作为图例句柄

    有没有办法使用 matplotlib 中的图形中绘制的线作为图例中的句柄 例如 我在想 在这个基本代码中 而不是图例中的直线 有一个我绘制为手柄的正弦波的小版本 import matplotlib pyplot as plt import
  • 在 RDLC 报告中添加数据集时 Visual Studio 2013 崩溃

    当我尝试将数据集添加到 asp net 项目中的任何 RDLC 报告时 Visual Studio 停止工作并重新启动 我尝试使用 VS 2012 和 2015 添加数据集 两次尝试都产生了与您相同的错误 这种情况只发生在我的 VS 项目之
  • Windows 8.1 64 位中的 IBM MobileFirst Platform 安装

    我正在使用我的办公室笔记本电脑 Lenovo vV310 8GB RAM 64 位操作系统 Windows 8 1 过去几天我一直在尝试修复 IBM Mobile First Platform 的安装问题 我从链接下载了 IBM Mobil
  • HTML5 直播

    对于学校 我需要建立一个 HTML5 直播网站 他们有一个一直在使用的 Flash 流播放器 但现在希望它改用 HTML5 我怎样才能做到这一点 我尝试使用视频标签 但无法正常工作 下面是我的代码 有人能指出我正确的方向吗
  • 将两个同名的 .swift 文件添加到项目中

    我正在尝试将 swagger 客户端集成到我的项目中 我能够从 swagger 生成类 Swagger for swift 3 使用 Alamofire 进行 newtork 操作 问题是生成的类名称之一是 Response Alamofi
  • 无法打开该文件,因为您无权查看该文件

    imageData NSData dataWithContentsOfURL self pdfFileUrl options NSDataReadingMappedAlways error error NSLog error localiz
  • sublime 3 制表符和空格不匹配

    我已经浏览网页3次了 但仍然没有解决方案 我有一个简单的 js 文件 我希望我的制表符是 4 个空格而不是 2 个 我将首选项设置更改为选项卡大小为 4 更改了语法特定设置 一切 但仍然是同样的问题 有任何想法吗 Click On状态栏上的
  • 如何将图片保存到localStorage并在下一页显示?

    所以 基本上 我需要上传单个图像 将其保存到 localStorage 然后将其显示在下一页上 目前 我上传了 HTML 文件
  • Jquery ui 选项卡的不同动画

    我正在使用 jquery ui 选项卡小部件 我没有使用 jquery 主题 因为我更喜欢做我自己的 css 和东西 我已经让它工作了 但我想要的是当单击不同的选项卡时 选项卡内容具有不同的动画效果 我想要的是新的选项卡内容从左侧滑入 目前
  • 软删除实体的导航属性

    我有 2 个实体 我是我的数据库 它们看起来像 Vehicles Id VehicleNumber IsDeleted WorkerId Workers Id Name Address 在我的 edmx 中 VehicleId Id Veh
  • 将 Azure 文件服务 CloudFileShare 映射为云服务每个实例上的虚拟目录

    我有一个天蓝色的云服务 我正在尝试升级该服务以实现高可用性 并且我已订阅了已在预览门户中启用的 Microsoft Azure 文件服务预览版 我已经创建了一个新的存储帐户 并且可以看到该存储帐户现在有一个文件端点位于 https
  • 序列化 Collat​​or 实例

    我正在尝试序列化InstitutionResultView类的一些对象 它基本上是包装器番石榴的 TreeMultimap import java io Serializable import java text Collator impo
  • R 数据表中的最小值不等于特定值

    如何从 R 数据表中找到除特定值之外的最小值 例如 数据表中可能存在零 目标是找到最小非零值 我尝试使用sapply with min 但不确定如何指定我们拥有的额外标准 以使最小值不等于某个值 更一般地说 我们如何从数据表中找到不等于可能
  • 如何将 DesignInstance 与 Caliburn.Micro 结合使用

    我正在使用 Caliburn Micro 我有这个 WPF 视图 在设计时在名字等基本属性上成功使用示例数据 但找不到复杂类型的属性和集合的视图
  • 发布版本中未触发命令

    我的主页上有一个按钮可以导航到下一个视图 这在我的 Windows PC Visual Studio 2017 上的模拟 Android 设备 Android 8 1 加速 x86 上的调试构建中非常有效 从我的角度来看 该按钮绑定到我的视
  • 如何在 CakePHP 中使用 cookie 进行身份验证?

    我正在尝试使用我的域中其他页面设置的 cookie 来验证用户身份 假设我使用 cakephp 编写了 needpassword example com cookie 是由 auth example com 生成的 使用 Perl CGI
  • 使用循环运行 Gulp 任务

    我的 Gulp 任务有问题 我使用一个任务来创建多个带有 gulp mustache 的 html 文件 这样我最后就有两个文件 index de html 和 index en html 我有一个 json 文件 其中包含字符串 一切都很
  • 如何在 gnuplot 创建的 png 文件中添加希腊字符

    我使用的是 FreeBSD 系统的商业服务器 没有 root 帐户 我用我的帐户安装 gnuplot 但是 我无法设置字体 因此 我将字体文件复制到我的主目录中 例如 usr fonts 然后 我在 gnuplot 文件中使用以下脚本 se
  • 刷新J表

    我有一个从 Vector 创建的 JTable 如何刷新 JTable 以显示添加到 Vector 的新数据 当 TableModel 发生更改时 您的 JTable 应该自动更新 我在这里迈出了一步 但我猜测您没有使用自己的 TableM
  • UML 共享聚合是否意味着不存在循环?

    In short 共享聚合似乎只表达了一种简单的关联 它显然是一个 建模安慰剂 没有客观理由使用它 除非在建模者就特定附加语义达成一致的特定上下文中 然而 一些消息来源声称共享聚合将意味着实例聚合图中不存在循环 这将使聚合成为图建模领域的强