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

3
我想建立一个模型,当指定的时间已经过去时,属性就会随着类和序列图消失。
情况如下:工人在使用机器的工厂里工作。每台机器可以由0-10名工人使用。每个机器都有一个修理时间限制,在此期间工人必须对其进行维修。它还有一个时间限制,如果工人错过了维修时间,机器就会爆炸,工人或工人死亡(比第一个更大)。有不同的机器。其中一些具有较长的时间限制,而其他一些则具有较短的时间限制。所有机器都是机器润滑油,持续一段时间,直到逐渐失去强度而消失。这个值对于所有机器来说是相同的。
我的类图: enter image description here 我看到这种解决方案可以处理修复时间和爆炸时间,可以通过计算流逝的时间来处理修饰符,但我不知道tick如何增加修饰符值。 它是否像这样的属性一样运行? squence 最后,机器油消失是如何工作的?它只是一个必须删除的属性,但我不明白在哪里计算流逝的时间,然后将其删除。
编辑: enter image description here enter image description here enter image description here

1
你的专业似乎毫无用处,因为它们并没有改变“机器”的任何内容。此外,可导航性和SD与“机器”/“计时器”相矛盾。 - qwerty_so
1
为了强调@qwerty_so的评论,E1和E2可能不是类,而是Machine的实例=>如果您想显示它们,请使用对象图,它们不会出现在类图中。 - bruno
我假设每个不同的机器都有一个独特的新方法。我想知道如何在类图中出现这样的事件:Tick-->oilStrong-- (and) if oilStrong==0-->deleteOil() 或者 Tick-->elapsed_time++ (and) if elapsed_time=explodeTime-->Explode()。 - Tom
“has a new method”听起来像无意义的话。是什么让它独一无二?以不同的方式表现随机行为? - qwerty_so
唯一有意义可以被覆盖的是deleteOil操作,它在不同的专业化中会有不同的工作方式。 - qwerty_so
1个回答

2
您的序列图看起来不错。
但是,您的类图可能会引起误解:
- 类图是结构图,而不是行为图。因此,除非出现在属性或操作中,否则您不需要关心经过的时间。 - 在 Machine 和 Timer 之间的导航箭头并不符合所提出的序列图,因为该序列图假设 Timer 知道如何找到 Machine。 - 如果从一般层面考虑,worker 端点和 works 端点的关联不是同样的关联吗? - 经过时间的限定符不正确。
对于 Machine 和 Worker 之间基于时间的关联,您可以考虑将其作为多对多关联,并使用关联类定义时间段(开始时间和结束时间,从中可以计算出持续时间)。您可以在 这里 找到有关如何处理时间段的信息(尽管您不需要其他问题中提到的附加约束)。
编辑:检查您更新后的图表
类图看起来更好了。一些建议:
  • ClassSubclass1可能是MachineE1吗?
  • duration关联类是特定于Subclass还是通用于任何Class?在后一种情况下,应该在WorkerClass之间绘制它。不需要为Subclass重复它,因为特化自动继承其概括的关联、属性和操作。
  • 如果Timer必须向对象发送消息?因此,依赖关系似乎放错了位置。那么,它是否应该与它将发送消息的类的实例有一个关联?
  • Timer如何知道新的Duration对象?它需要知道持续时间对象吗,还是它可以将滴答声发送到机器,然后由机器将其转发到持续时间?
在序列图中,独立于上述建议的影响,重要的是要意识到生命线不代表类,而是属于类的对象。因此,类名应该以:或对象名和:开头。
如果您选择进行勾选转发,则第二个图将集成在第一个图中。然而,如果您保留它,您应该问自己如何检查持续时间是否为elapsed_time==timeExplode,因为timeExplode是机器的属性,而不是持续时间的属性。

我不明白为什么如果序列看起来很好,限定词就不正确。本质上,我想在类图上模拟这样的经过时间事件: Tick-->elapsed_time++ (and) if elapsed_time=explodeTime-->Explode() 或者 Tick-->oilStrong-- (and) if oilStrong==0-->deleteOil() - Tom
1
@tom 限定符用于识别另一侧的不同对象(例如寻址哈希表)。您使用它的方式是错误的。 - qwerty_so
@Christophe 我添加了一个新的类图(仅保留了主要属性和方法)和2个序列。现在我使用关联类。这个解决方案更好吗? - Tom
@Christophe 我做了一些更改,所以我更新了我的图表。是的,类和子类等于原始版本,并且持续时间关联类特定于子类。 - Tom
@Christophe,你能看一下我的新图表吗?它们更接近解决方案了吗? - Tom
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接