班主任
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
这是正确的吗?
答案 0 :(得分:1)
基本上是的。但具体而言,Box
的依赖关系已经与Man
与Box
关联。所以你不需要那个。
不要过多关注聚合,因为它只会给模型增加非常少的额外语义。你有一个关联的事实通常就足够了。你可以很容易地开始争论“没有Y可以生活吗?”但这毫无意义。如果在数据库的外键约束和/或显示内存管理约束的上下文中使用复合聚合。
您可以使用告诉{ bullets in box are never bullets in gun}
等的约束来扩充模型。不要忘记多重性。
答案 1 :(得分:0)
使用聚合可能会令人困惑,但复合是一种强大的关联,有助于理解模型和关联。
在规范文档中,它描述了第9.5.3节
据我所知,您可以在以下情况下使用合成:
- 复合对象负责
组合物体的存在和储存
- 零件对象最多包含一个复合材料
一次一个对象。如果删除了复合对象,则会删除所有作为对象的零件实例
- 请注意,钻石边的基数,默认为0..1
如果我可以帮助改进建议的模型,我总是尽量避免循环关联(可能是由于我的旧C / C ++编码没有垃圾收集器),所以我尽量避免与关联到类C的类B关联的类A A级
希望这有帮助