我想模拟两个人之间的伙伴关系。我的第一个想法是使用协会。协会的两端必须以不同的方式命名。因此我需要两个角色:partner1
和 partner2
。这反过来又允许每个人有两个伙伴。不完全是我想要的。
我的第二个尝试是使用属性 partner
。这里的问题是,一个人的伙伴的伙伴应该是这个人,但模型没有捕捉到这一点。当然,我们可以使用具有这种效果的约束,但我更喜欢使用图形符号的解决方案。
第三个选项(在下面的评论中建议)使用一个额外的类 Partnership
。这可行,但如果它没有任何属性,它只会使模型变得比必要的更复杂。
最优雅的解决方案是一个关联,其中两个 member ends
都是相同的 partner
属性。但是这是不允许的,因为成员端属性是唯一的。因此它不能包含相同的属性两次。这是规范中的错误吗?这真的是一个罕见的案例吗?它发生在所有递归关联中,其中双方的角色相同。
最佳答案
这是一个对称部分关联的例子。这种关联只能在适当约束的帮助下建模,如以下模型所示:
只有在定义了关联构造型(如“对称”)中使用的相应约束关键字时,才能避免附加的显式约束/不变量。不幸的是,UML 2.5 不提供这样的构造型,但我们可以像这样自由添加它:
[我在提交答案后才阅读上面“bruno”的评论。 “bruno”正确指出了约束主要部分的必要性:self.partner.partner = self
。]
https://stackoverflow.com/questions/54981938/
相关文章:
android - 在自定义 Camera2 API 上显示矩形边界框(覆盖),以便仅捕获框内的图像
c# - .NET Core 2 中的 Startup.cs 中的 "IConfiguration
python-3.x - 在将多头 pandas 数据帧输出到 excel 时摆脱索引
c++ - Cmake 仅包含 header 目标来自仅 header 目标
unity3d - 应该如何使用 Unity 的 ExecuteEvents.Execute?
angular - 由于内存问题,compodoc 未生成图形
ionic-framework - Ionic3 - 电子邮件编辑器 - 对象(...)不是函数
kubernetes - 如何在 OSX 上使用 Kubernetes 持久本地卷和 Minikub