【问题标题】:How to modelling different types of fields and entities connection in UML如何在 UML 中建模不同类型的字段和实体连接
【发布时间】:2020-11-21 18:59:04
【问题描述】:

任务:

  • 每个字段都有多个实体的位置,并且有 1-10 个邻居。 领域不同。他们中的一些人被困住了,如果一个实体 踩在他们身上,他们将无法离开。还有 放射性场,如果一个实体在它们上面花费太多时间, 他们死了。场不能同时被困和放射性。
  • 有两个不同的实体。他们中的一些人能够从被困场中逃脱(E1),其中一些人对放射性免疫(E2)。实体可以在相邻图块之间移动。

从这里我得到了以下类图(只有类):

所以我想知道如果E1 踩到Radioactive 并且如果它在那里停留太久会死掉,我该如何表示?此外,当新的E1 出现并且在第一个E1 出现时它不会死时,它如何处理这种情况?

首先我尝试了这样的事情,但它无法处理该事件

编辑: 我的解决方案:

【问题讨论】:

    标签: uml class-diagram


    【解决方案1】:

    第一个图表(关于问题的第一个版本)

    如果存在,您的概括是在错误的方向,目前一个 Field 是一个 Trapped 和一个 Radioactive 和一个 Entity 是一个 E1 和一个 E2,但你想要反过来。

    无论如何,声明中没有任何内容说一个场不能同时被捕获和放射性,在这种情况下,而不是使用概括来更好地使用属性。

    对于 Entities 似乎只有 E1E2 所以你可以使用泛化(反向)

    第二张图

    注意如果 Radioactive 实现了一个 Timer,这意味着其他人必须踢每个 Radioactive 并且只有他们(没有其他 Field)。

    关于死亡时间,如果 E1Radioactive 的实例相同,则该属性可以是静态的。

    我不明白操作 KillEntity 因为 E1 被杀死的那一刻取决于每个实例何时进入该字段,因此不能通用

    您至少可以处理 Radioactive 中的 Field 的延迟死亡,例如:

    • 每次 Entity 进入 Radioactive 时,Entity 都会添加到 dying 中,例如将持续时间初始化为0
    • 每次 EntityRadioactive 中退出时,Entitydying 中被移除
    • 每次 tick 被调用,每次持续时间都会增加,当成为 timeToDie 时,相应的实体会从 dying 和操作 中移除死了就叫它了
    • dies 操作在 Entity 上没有记录,但在 E2 上表示该实例已被杀死(也可以将该操作抽象在实体并在E1上定义但什么也不做)

    请注意,您可以将类关联替换为带有评估持续时间等的限定符的关联

    但你也可以处理E2中的延迟死亡:

    • Entity/E2 上的

      tickRadioactive 应用到其 Fields 上, tickEntity 不执行任何操作,而是管理 E2 上的持续时间以在所需延迟后终止实例(可以再次显示静态属性)

    • 每次 E2 移动到一个新的 Field 时长都会重置为 0


    注意你的多重性 1..* 是错误的,因为一个 Field 可能没有 Entity,在另一边,如果一个死的 E2,多重性是 1 em> 留在放射性 else 0..1

    【讨论】:

    • 我更正了第一个图表错误的概括方向,还补充说一个字段不能同时是两个。
    • @Anonymous 是在放射性场中死亡的时间对于非 E2 场总是相同的?
    • 未指定,所以可以是一样的。
    • @Anonymous 实体如何“决定”移动(如果允许)和“选择”哪个字段?为什么精确地说一个字段有 1..10 个邻居?
    • 因为他们可以随时在相邻字段之间移动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2023-04-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多