有没有办法在运行时发生的 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 的图表中。
Docker Daemon 在 Container Network Interface 和 主机网络接口,带有docker 运行命令“发布端口”。
ECS Agent 通过 [=82 向 Docker Daemon 发送命令=] Socket 但它们之间没有直接的 has-a 或引用。
ECS Agent 与 ECS Scheduler 通信,但 ECS Agent 不直接了解 ECS Scheduler,直到代理加入集群并获取信息。
ECS 调度程序 更新 ELB 目标组 以将网络流量转发到 主机网络接口.
请建议我可以在 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)
- 借助 OCL post-条件,或
- 在相关的 activity 图表中,其中 activity/action 矩形对应于 class 图表中的操作。
使用 activity 图表时,您可以使用分区(或 'swim lanes')来表示活动对象。
问题
如果有办法在 class 图表中捕获动作或行为,如果可能的话,例如在 运行 时间创建 link 用于关联或更新对象状态。
背景
在我的理解中,Class Diagram是捕捉静态关系,比如class X has-a class-Y作为成员,或者有对[=的引用75=] Z。因此,我想捕获 运行 时间动作或行为并不意味着在 Class 图表中,但我想知道是否有一种方法可以注入正在发生的事情的知识在 运行 时间在 class 的对象中。
例如,在我试图捕获 AWS ECS ER 的图表中。
Docker Daemon 在 Container Network Interface 和 主机网络接口,带有docker 运行命令“发布端口”。
ECS Agent 通过 [=82 向 Docker Daemon 发送命令=] Socket 但它们之间没有直接的 has-a 或引用。
ECS Agent 与 ECS Scheduler 通信,但 ECS Agent 不直接了解 ECS Scheduler,直到代理加入集群并获取信息。
ECS 调度程序 更新 ELB 目标组 以将网络流量转发到 主机网络接口.
请建议我可以在 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)
- 借助 OCL post-条件,或
- 在相关的 activity 图表中,其中 activity/action 矩形对应于 class 图表中的操作。
使用 activity 图表时,您可以使用分区(或 'swim lanes')来表示活动对象。