switch-statement - 我的伪代码与我的 UML 事件图匹配吗?

标签 switch-statement uml flowchart

我有以下代码(就像伪代码一样):

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语句。

非常感谢您的任何反馈!

enter image description here

最佳答案

情况二有一个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/

相关文章:

java - 不同switch case中的变量不能重名?

oop - 类图中的聚合和类属性

recursion - 如何用流程图表示递归函数?

android-activity - 如何正确分支到 Activity 图流程中的早期操作?

javascript - 有没有 Visustin 的(免费)替代品,我需要从现有的 JavaScript 代码创建流程图

javascript - 如何在 JavaScript 中实现步进决策流程?

Java 8,如何使用流实现 switch 语句?

java - 匿名数组索引而不是 switch 语句?

Javascript html5 canvas 随机切换语句

uml - umlet 的标记语言规范是什么?