UML - 链式类引用

时间:2017-03-04 19:50:34

标签: java c# class uml aggregation

班主任

public Box box;
private Gun gun;

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

Class Box

public Bullets bullets;

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

班级项目符号

public Bullets() {}

Class Gun

private Man owner;
private Bullets bullets;

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

的UML是什么?

以下是我的想法:

聚合 男子子弹
Box

依赖

这是正确的吗?

2 个答案:

答案 0 :(得分:1)

基本上是的。但具体而言,Box的依赖关系已经与ManBox关联。所以你不需要那个。

enter image description here

不要过多关注聚合,因为它只会给模型增加非常少的额外语义。你有一个关联的事实通常就足够了。你可以很容易地开始争论“没有Y可以生活吗?”但这毫无意义。如果在数据库的外键约束和/或显示内存管理约束的上下文中使用复合聚合。

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

答案 1 :(得分:0)

使用聚合可能会令人困惑,但复合是一种强大的关联,有助于理解模型和关联。

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

据我所知,您可以在以下情况下使用合成:

  - 复合对象负责 组合物体的存在和储存
  - 零件对象最多包含一个复合材料
一次一个对象。如果删除了复合对象,则会删除所有作为对象的零件实例   - 请注意,钻石边的基数,默认为0..1

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

希望这有帮助