序列图 UML if else 基于决策

Sequence Diagram UML if else based on decision

是否可以在基于参与者决定的序列图中使用 if else,例如,如果参与者认为价格足够合理,则执行 if,如果价格不合理,则执行 else,如下所示:

谢谢

是的,但是...

组合的片段 alt 可能有几个操作数,由水平线分隔并受到保护,由 [Reasonable price] 之类的交互约束或 [else] 保护。如果我们照章办事:

An InteractionConstraint is shown in square brackets covering the lifeline where the first event occurrence will occur, positioned above that event (...).

这个图形说明很重要(即使我是第一个忘记它的人)。因此,[Reasonable price] 应该覆盖演员的生命线。实际上,如果您不这样做,您的读者会隐式地进行映射,但图表可能会更加模糊。

为什么?

重要的是要认识到这个图形指令隐藏了更深层次的现实:在你的情况下,如果是演员主动开始相关的 alt 操作数并发送一些消息,那么演员应该能够评估 [Reasonable price] 是否适用。

我们应该记住,序列图描述了交互的可能执行路径(UML 术语中的“跟踪”,因为执行路径对太多人来说意味着太多的事情):

Interactions are units of behavior of an enclosing Classifier.

The semantics of an Interaction is given as a pair of sets of traces. The two trace sets represent valid traces and invalid traces.

A trace is a sequence of event occurrences (...)

并且由于序列图是由其生命线之间的交互组成的,因此应根据可用知识评估守卫,即启动操作数的生命线的知识(在某些情况下,还包括封闭分类器的知识) .

这不是明确的UML要求,而是考虑到封装原则和潜在可见性约束的逻辑推导。它使模型更有用并避免了不切实际的期望。反之,如果参与生命线none有一个window看天,看看天气如何,守卫[beautiful weather]会是什么倾向?

结论

如果您的演员在图中有生命线,请确保警卫遮住它。

如果你的 actor 在图中没有生命线,这个守卫在句法上仍然是正确的。但是问问你自己,互动的哪个参与者可以同时知道价格并确定什么是合理的价格。