如何在 UML 中对不同类型的字段和实体连接进行建模
How to modelling different types of fields and entities connection in UML
任务:
- Each field has place for multiple entities and have 1-10 neighbors.
The fields are different. Some of them are trapped and if an entity
steps on them they will not be able to leave. There are also
radioactive fields and if an entity spends too much time on them,
they dies. Fields can not be trapped and radioactive at the same time.
- There are two different entities. Some of them are able to escape from trapped fields (E1) and some of them are immune for radioactivity (E2). Entities can move between neighboring tiles.
从这里我得到了下面的 class 图(只有 classes):
所以我想知道如何表示如果 E1
踩到 Radioactive
并且它在那里停留的时间太长就死了?此外,当一个新的 E1
出现并且它没有在第一个出现时死亡时如何处理这种情况?
首先我尝试了类似的东西,但它无法处理那个事件
编辑:
我的解决方案:
第一个图(问题的第一个版本)
你的概括如果它们存在是在错误的方向,目前 Field 是 Trapped 和 Radioactive 和一个 Entity 是一个 E1 和一个 E2,但你想反过来.
无论如何,声明中没有任何内容说一个场不能既被捕获又具有放射性,在那种情况下,而不是使用概括来更好地使用属性。
对于 Entities 似乎只有 E1 和 E2 所以你可以使用泛化(反向)
第二张图
请注意,如果 Radioactive 实现了 Timer,这意味着其他人必须踢每个 Radioactive只有他们(没有其他 Field)。
关于死亡时间,如果E1和Radioactive的实例相同,则该属性可以是静态的。
我不明白 KillEntity 操作,因为 E1 被杀死的时间取决于每个实例何时进入该字段,所以不能一般
你至少可以处理 Field 在 Radioactive 中死亡的延迟,例如:
- 每次实体进入放射性时,实体被添加到dying 例如将持续时间初始化为 0
- 每次 Entity 在 Radioactive 中退出时 Entity 在 垂死
- 每次调用 tick 每次持续时间都会增加,当成为 timeToDie 时,相应的实体会从 dying 中移除 和操作 die 调用它
- dies 操作在 Entity 上没有注释,但在 E2 上表明实例已被杀死(也可以在 Entity 上抽象该操作并在 E1 上定义但不执行任何操作)
请注意,您可以将 class 关联替换为具有评估持续时间等限定符的关联
不过你也可以处理延迟死在E2 :
tick on Entity/E2 被 Radioactive 在它的 Fields 上,每次它自己被打勾时,tick 对 Entity 什么都不做,但管理E2 的持续时间在所需延迟后终止实例(可以再次显示静态属性)
每次 E2 移动到新的 Field 时长重置为 0
请注意您的多重性 1..*
是错误的,因为 Field 可能没有 Entity,相反的多重性是1 if a dead E2 留在 Radioactive else 0..1
任务:
- Each field has place for multiple entities and have 1-10 neighbors. The fields are different. Some of them are trapped and if an entity steps on them they will not be able to leave. There are also radioactive fields and if an entity spends too much time on them, they dies. Fields can not be trapped and radioactive at the same time.
- There are two different entities. Some of them are able to escape from trapped fields (E1) and some of them are immune for radioactivity (E2). Entities can move between neighboring tiles.
从这里我得到了下面的 class 图(只有 classes):
所以我想知道如何表示如果 E1
踩到 Radioactive
并且它在那里停留的时间太长就死了?此外,当一个新的 E1
出现并且它没有在第一个出现时死亡时如何处理这种情况?
首先我尝试了类似的东西,但它无法处理那个事件
编辑:
我的解决方案:
第一个图(问题的第一个版本)
你的概括如果它们存在是在错误的方向,目前 Field 是 Trapped 和 Radioactive 和一个 Entity 是一个 E1 和一个 E2,但你想反过来.
无论如何,声明中没有任何内容说一个场不能既被捕获又具有放射性,在那种情况下,而不是使用概括来更好地使用属性。
对于 Entities 似乎只有 E1 和 E2 所以你可以使用泛化(反向)
第二张图
请注意,如果 Radioactive 实现了 Timer,这意味着其他人必须踢每个 Radioactive只有他们(没有其他 Field)。
关于死亡时间,如果E1和Radioactive的实例相同,则该属性可以是静态的。
我不明白 KillEntity 操作,因为 E1 被杀死的时间取决于每个实例何时进入该字段,所以不能一般
你至少可以处理 Field 在 Radioactive 中死亡的延迟,例如:
- 每次实体进入放射性时,实体被添加到dying 例如将持续时间初始化为 0
- 每次 Entity 在 Radioactive 中退出时 Entity 在 垂死
- 每次调用 tick 每次持续时间都会增加,当成为 timeToDie 时,相应的实体会从 dying 中移除 和操作 die 调用它
- dies 操作在 Entity 上没有注释,但在 E2 上表明实例已被杀死(也可以在 Entity 上抽象该操作并在 E1 上定义但不执行任何操作)
请注意,您可以将 class 关联替换为具有评估持续时间等限定符的关联
不过你也可以处理延迟死在E2 :
tick on Entity/E2 被 Radioactive 在它的 Fields 上,每次它自己被打勾时,tick 对 Entity 什么都不做,但管理E2 的持续时间在所需延迟后终止实例(可以再次显示静态属性)
每次 E2 移动到新的 Field 时长重置为 0
请注意您的多重性 1..*
是错误的,因为 Field 可能没有 Entity,相反的多重性是1 if a dead E2 留在 Radioactive else 0..1