我有以下代码(就像伪代码一样):
switch (expression)
{
case (ONE)
{
#if(FLAG==ON)
Function1()
#endif
break;
}
case(TWO)
{
if(x==y)
{
Function2();
expression = THREE;
}
break;
}
case(THREE)
{
Function3();
}
default:
{
Function4:
break;
}
}
我尝试创建一个 UML 事件图(参见附件),但不确定我在某些方面是否正确:
- 这 2 个“流程最终”点是否已正确映射,或者它们应该合并为一个“流程最终”点? -另请注意,最后一个 CASE 没有break语句。
非常感谢您的任何反馈!
最佳答案
情况二有一个break
,因此它之后不会调用情况三。即使情况二将表达式设置为三
,但此时不会计算表达式,因此情况三不会被执行。
情况三必须调用默认情况,因为它没有 break
。
从表达式
决策节点到ActivityFinalNode的未标记连接是错误的。该路径在伪代码中不存在,因为 switch 语句始终执行至少一种情况或默认情况。此外,退出表达式
决策节点的所有流都必须有一个防护(例如,[表达式== ONE]
)。对于该决策节点,每个守卫必须与所有其他守卫分离。
FlowFinalNode(带有 X 的节点)与 ActivityFinalNode(带有圆圈的节点)严格来说也没有相同的含义。您应该仅使用 FlowFinalNode 来结束 fork 的控制线程。 (根据规范:“FlowFinalNode 是通过消耗提供给它的 token 来终止流的 FinalNode。”)无论哪种情况,在此模型中,只有当 FlowFinalNode 或 ActivityFinalNode 下面没有更多代码时,FlowFinalNode 或 ActivityFinalNode 才是正确的。 switch case 因为 break
仅结束 switch case。
此外,流不会“流过”合并节点,它们以箭头的边界结束。如果我是你的助教,你会因此而扣分,也会因为其中带有标签的决策节点而扣分,而这不在 UML 标准中。 哦,对了,还有守卫上缺少的方括号。
uml-diagrams.org如果您不想阅读上层结构本身,那么这是一个非常好的 UML 资源。
关于switch-statement - 我的伪代码与我的 UML 事件图匹配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35720415/