序列图中alt和opt片段的区别是什么?

85
UML序列图中altopt片段有什么区别?

3
这是需要翻译的内容: 比较这张图片 http://www.uml-diagrams.org/sequence-diagrams-combined-fragment.html#operator-alt 和这张图片 http://www.uml-diagrams.org/sequence-diagrams-combined-fragment.html#operator-opt - xmojmr
5个回答

153

alt用于描述工作流的备选场景。只会执行其中一个方案。

opt用于描述工作流中的可选步骤。

例如,对于在线购物网站购买顺序图,您可以使用opt来描述用户如何在希望时添加礼品包装。alt可用于描述两种付款方式:使用信用卡或电汇转账。

示例:序列图中的alt和opt部分

UML规范中,这些含义在第17.12.15节中描述。 optalt是两种不同的运算符类型,以下是规范如何描述它们:

alt

InteractionOperatorKind alt表示CombinedFragment代表行为选择。最多选择其中一个操作数。所选操作数必须具有在此交互点评估为true的显式或隐式保护表达式。如果操作数没有保护,则暗示一个隐式真实的保护。

opt

InteractionOperatorKind opt表示CombinedFragment代表行为选择,其中操作数(唯一)发生或不发生任何事情。选项在语义上等同于具有非空内容的一个操作数和第二个操作数为空的替代CombinedFragment。


这是正确的答案。我想强调一下(因为这里有其他回答说了不同的事情),opt 只有一个操作数,所以要么发生某些事情,要么什么也不会发生,而 alt 定义了多种可选行为。根据 UML 规范:“interactionOperator alt 表示 CombinedFragment 代表行为的选择。最多只能选择一个操作数。”与“interactionOperator opt 表示 CombinedFragment 代表行为的选择,其中要么发生(唯一的)操作数,要么什么也不会发生。”--请注意 sole - dsteinhoefel
在两个最受欢迎的回复之间有一些遗漏。根据你的说法,opt是“可选的”,而根据其他人的说法,它只是一个“if”。单词“optional”具有意义,就像做出选择一样。用户可以做出选择,程序不能,但它可以根据参数做类似的事情。但是,程序也可以做一些看起来完全不像选择的事情,比如在出现错误时打印消息(其他所有内容都相同)。请有人澄清它是否只是一个“if”,还是它确实具有某种含义。 - DPM
序列图描述了一组交互序列。图中的opt片段表示该图描述了两个可能的交互序列 - 一个包含opt片段中的交互,另一个则不包含。描述条件可以从某些确定性计算(2+2==4)到用户选择(选择红色药丸)再到随机事件(原子衰变)。这取决于图表作者的意图。 - Roman-Stop RU aggression in UA
你使用了哪个软件/网站绘制这个特定的时序图? - deirdreamuel
1
@deirdreamuel 我使用了PlantUML。请注意,最近更改了默认主题,因此如果您想使用答案中的颜色方案,请使用skin rose - Roman-Stop RU aggression in UA
在你的看法中,opt是“不必要的”,在另一个人的看法中,它只是“如果”。表达“不一定”有一个意思,就像选择时一样。用户可以做出选择,程序不能,但它可以做类似的事情,例如根据参数执行“sth”。程序也可以做一些与选择完全不同的事情,例如在出现错误时打印消息(其他所有内容保持不变)。请澄清这是否只是一个“if”,还是它真的很重要。 - Protect children of Donbas2014

26

Alt是替代流程(SWITCH或if. 带有两个路径的 IF)Opt是只带有一个路径的IF。如果您使用Opt,代码将会执行或者不执行!


12

UML - 时序图 Alt vs Opt

alt - if else
opt - 单一条件

enter image description here


-2

Alt(alternative)确实与"if"类似,但都不仅限于只有两个选择,实际上都可以有很多"else"选项,根据需要而定。例如://if (a=b) then a++; else if (a>b) then a--; else b++。无论如何,如果Alt是被调用的代码的一部分,Alt将会执行。

而Opt(Optional)即使包含在被调用的序列或代码中,也不一定会被执行。通常,要执行Opt序列需要来自用户的外部交互,用户进行决策时会呈现许多选项(比如选择在线支付方式)。在这种特殊情况下,与Alt序列相反,如果支付方式是"信用卡"、"PayPal"或"预付款",代码将具有3个Opt序列,每个序列只有一个流程,但只有一个Opt序列会被实际执行。

希望对您有所帮助!

祝好, SD


-6

它们基本上是相同的。

alt 更多地用于多个选择,例如 C 编程语言中的 switch 语句组。而 opt 更多地用于仅有两个选择,例如 if 语句。

但是,如果你看到这两个概念交替使用,请不要感到惊讶。


哇,谢谢,我从来没有想到过,这有所帮助,但是我必须在实际情况下看到它:D - ettozyame
6
不对!ALT表示替代,而OPT表示可选(请参见@Roman Konoval的回答)... - ufo
因为这并不是真的,所以被踩了,opt 意味着一个可以执行或不执行的唯一选择,而 alt 意味着多个选择中只有一个将被执行。请参见我对第一个答案的评论,引用了 UML 规范。 - dsteinhoefel

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