有没有办法在运行时发生的 class 图中指定一个动作

Is there a way to specify an action in a class diagram that happens at runtime

问题

如果有办法在 class 图表中捕获动作或行为,如果可能的话,例如在 运行 时间创建 link 用于关联或更新对象状态。

背景

在我的理解中,Class Diagram是捕捉静态关系,比如class X has-a class-Y作为成员,或者有对[=的引用75=] Z。因此,我想捕获 运行 时间动作或行为并不意味着在 Class 图表中,但我想知道是否有一种方法可以注入正在发生的事情的知识在 运行 时间在 class 的对象中。

例如,在我试图捕获 AWS ECS ER 的图表中。

请建议我可以在 class 图表中捕获 "publish port" 或 "update TargetGroup" 的 UML 方法,如果有的话。

其他

如果图中的符号有任何错误或不正确的使用,请更正。非常感谢。

两个答案(关于行为):

  • 是的,你可以做到。

  • 不,你不能那样做。

那又怎样? Class 图旨在显示 class 之间的静态关系。 classes 之间关联的原因仅出于设计原因。架构师有一种感觉,由于描述的(用例)行为,它应该是那样的。解决后(虽然不是具体的),您可以对各种行为(使用 activity 或序列图)进行建模,这些行为说明了实现用例的某些协作。由于这个设计步骤,可能需要调整静态关系。这可能会再次影响显示的行为。甚至可以得出需要调整用例活动的结论(甚至可以证明该需求无法通过某种方式实现,因为...)。

您可以制作 activity 带有调用行为的图表,或者在为协作创建的序列图中显示消息,而不是破坏关联。

更好的方法是将静态 class 设计的相关部分另外放在 SD 或 AD 上。根据 UML 规范,您可以(并且应该)在所有图表上混合所有 UML 元素(如果它有助于传达设计原因)。


对于端口:您将在组件图中显示它们。端口是组件的元素并显示接口。这些通常委托给实现或需要接口的组件内部的 classes。您将在边界上将端口显示为小方块。我没有在操作室中看到它们的列表(这可能不正确)。如果完全是文本,则需要一个单独的隔间,标记为 "list of ports" 或类似内容。只是把它们和属性放在一行是不对的。

UML 在将 class 建模与行为(即 event/action)建模集成方面相当糟糕。

然而,在相应的classA中以操作的形式对活动对象(类型A)的动作进行建模是很自然的。

然后您可以表达它们的效果(例如,更改对象的 属性 的值,或创建一个新的 link)

  1. 借助 OCL post-条件,或
  2. 在相关的 activity 图表中,其中 activity/action 矩形对应于 class 图表中的操作。

使用 activity 图表时,您可以使用分区(或 'swim lanes')来表示活动对象。