UML - 链式 Class 参考

UML - Chained Class References

Class 男

public Box box;
private Gun gun;

public Man()
{
    gun = new Gun(this);
}

Class盒子

public Bullets bullets;

public Box() 
{
    bullets = new Bullets();
}

Class 子弹

public Bullets() {}

Class枪

private Man owner;
private Bullets bullets;

public Gun(Man owner)
{
    this.owner = owner;
    bullets = this.owner.box.bullets; 
}

classGun 的 UML 是什么?

这是我的想法:

Gun 具有 聚合 ManBullets
Gun dependencyBox

这是否正确?

基本上是的。但具体来说,Box 的依赖性已经给出,ManBox 有关联。所以你不需要那个。

不要太在意聚合,因为它只为模型增加了很少的额外语义。你有一个协会的事实通常就足够了。您可以轻松地开始与 "can X live without Y?" 争论,但这毫无意义。如果在数据库的外键约束上下文中使用复合聚合 and/or 以显示内存管理约束。

您可以使用告诉 { bullets in box are never bullets in gun} 等的约束来扩充模型。不要忘记多重性。

没错,使用聚合可能会造成混淆,但复合是一种强关联,有助于理解模型和关联。

在规范文档中,第 9.5.3 节进行了描述

据我了解,您可以在以下情况下使用组合:

- 复合对象负责 组合对象的存在和存储
- 零件对象最多包含在一个组合中
一次对象。如果删除复合对象,则其作为对象的所有部分实例也将随之删除。
- 请注意菱形方的基数,默认为 0..1

如果我可以帮助改进建议的模型,我总是尽量避免循环关联(可能是由于我的旧 C/C++ 编码没有垃圾收集器),所以我尽量避免 class 关联到class B 关联到 class C 关联到 class A。

希望这有帮助