我有以下 UML ,其中包含类 School ,该类(在我的示例中是 )只能有一个 TeacherRoom < / strong>。
我的问题现在是此 UML 的正式表示法,还是我应该删除 << use >> 关联,因为它很明显? 很明显,因为我正在将 TeacherRoom 的实例保存在我的 School 实例中?
答案 0 :(得分:3)
您在类teacherRoom : TeacherRoom
中拥有属性School
的事实意味着School
正在使用TeacherRoom
,因此不需要≪use≫依赖性。
您还具有与TeacherRoom的构图关联。这意味着,除了该属性外,您还与TeacherRoom具有第二个关系。因此,您可以删除其中任何一个。
答案 1 :(得分:2)
根据我对UML 2.5.1规范的10.4节的理解,使用依赖描述了给定组件需要接口或服务的事实。
所以我将其删除,因为这与“学校”由“ TeacherRoom”组成的事实无关。
我的第二点是您的“ teacherRoom”属性,它的含义与您的作品大致相同,因此我将其中之一(属性或组成)删除。
答案 2 :(得分:1)
自从您写信
只能有一个[我打错打字机] TeacherRoom 。
您需要在关联的右侧添加一个多重性Linear
(并根据评论和回答删除菱形)。同样,除了在1
中使用属性之外,还应在关联中使用角色名称School
,并通过添加点使其成为拥有的属性。
关于合成的一些补充说明:合成是(我个人的印象)比实际建立模型更容易引起混淆(只是寻找有关其语义的问题和/或寻找错误的用法)。更糟的是,共享聚合导致(并引起)更多的混乱。现在,在许多版本中,UML 2.5将空心的东西定义为什么:没有。只需阅读第26页的方框即可。 110.回到填充的一个,复合聚合。基本上,这是关于对象的生存期的,因此是否有对象的所有者负责其生存期。当您制造由车轮组成的汽车时,这显然是不对的,因为在不连接汽车的情况下,车轮将继续运转。只有汽车不再是汽车。但这将通过在轮子上附加4的倍数来表示。任何不完全是四个轮子的汽车都不再是汽车。完全没有构图。
那么您可以在哪里使用复合聚合呢?我只考虑2个应用程序。一种是用于存储代理。在计算的早期,当像我这样的恐龙与容量为20 MB的橱柜大小的硬盘一起作战时,这是很重要的!仅少数边界情况仍需要进行内存管理的指示。第二种情况是安全性。指示必须删除某些东西及其父对象。那仍然有效。但这是复合聚合唯一真正的应用。