在 UML 中建模基于时间的属性和方法

Modelling time based attributes and methods in UML

我想建模一个在指定时间过去后发生的方法和一个随着 class 和序列图消失的属性。

情况是这样的:工人们在使用机器的工厂里工作。每台机器可供 0-10 名工人使用。每台机器都有维修时间限制,工人必须在规定的时间内进行维修。它也有一个时间限制,如果工人错过维修,机器爆炸并且一个或多个工人死亡(比第一个更大)。有不同的机器。其中一些时间限制较长,一些时间限制较短。所有的机器都是机器上油的,持续一段时间,它会逐渐失去力量,直到消失。此值对所有机器都相同。

我的 class-图表:

我看到 repaireTime 和 explodeTime 的这个解决方案可以处理 qualifires 计算经过的时间,但我没有看到 tick 如何增加限定符值。它的行为像这样的属性吗?

最后请问机油消是怎么操作的?这只是一个必须删除的属性,但我不知道在哪里计算经过的时间然后删除它。

编辑:

你的序列图看起来没问题。

您的 class 图具有误导性:

  • class图是结构图,不是行为图。所以你并不真正关心经过的时间,除非它出现在 属性 或操作中。
  • MachineTimer 之间的导航箭头不利于建议的序列图,它假定 Timer 知道找到 Machine
  • worker结束的联想,和works结束的联想,如果从一般层面考虑,到底不是同一个联想?
  • 经过时间的限定符不正确。

对于 MachineWorker 之间的基于时间的关联,您可以考虑将其设为多对多关联,关联 class 定义时隙(开始和结束时间,您可以从中计算持续时间)。您可能会找到 here 一些关于如何使用时间段的信息(尽管您不需要其他问题中提到的额外约束)。

编辑:查看更新后的图表

class 图表看起来更好。一些建议:

  • ClassSubclass1 大概是 MachineE1 ?
  • duration 关联 class 是特定于 Subclass 还是对任何 Class 通用?在后一种情况下,您应该在 WorkerClass 之间绘制它。没有必要为 Subclass 重复它,因为特化会自动继承其泛化的关联、属性和操作。
  • 如果Timer有发送消息给对象?因此,依赖关系似乎放错了地方。它不应该与 classes 关联到它应该发送消息的实例吗?
  • Timer 如何知道新的 Duration 对象?它是否需要知道 Duration 对象,或者它不能将 ticks 发送到机器,机器会将 ticks 转发到持续时间?

在序列图中,独立于上述建议的影响,重要的是要认识到生命线不代表 classes,而是属于 class 的对象es。因此,class 名称前面应该有一个 : 或一个对象名称和一个 :.

如果您要进行滴答转发,则第二个图表将集成到第一个图表中。然而,如果你要保留它,你应该问问自己 Duration 如何检查 elapsed_time==timeExplode 因为 timeExplode 是机器的 属性 而不是持续时间。