我的伪代码是否与我的 UML Activity 图匹配?
Does My Pseudocode Match My UML Activity Diagram?
我有以下代码(只是伪代码):
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 activity 图(见附件)但不确定我在某些方面是否正确:
- 这 2 个 "flow final" 点是否正确映射,或者它们应该合并为一个 "flow final" 点?
-还要注意最后一个 CASE 没有 break 语句。
如有任何反馈,我们将不胜感激!
案例二有一个break
,因此以后不会调用案例三。即使情况二将表达式设置为 three
,此时表达式还没有被计算,因此情况三将不会被执行。
案例三必须调用默认案例,因为它没有 break
.
从 expression
决策节点到 ActivityFinalNode 的未标记连接是错误的。该路径在伪代码中不存在,因为 switch 语句总是至少执行一种情况或默认情况。此外,所有退出 expression
决策节点的流都必须有一个守卫(例如,[expression == ONE]
)。对于此决策节点,每个守卫都必须与所有其他守卫分离。
FlowFinalNode(带有 X 的节点)与 ActivityFinalNode(带有圆圈的节点)的含义也不完全相同。您应该仅使用 FlowFinalNode 来结束分叉的控制线程。 (来自规范:“FlowFinalNode 是一个 FinalNode,它通过消耗提供给它的令牌来终止流。”)在任何一种情况下,在此模型中,只要没有更多代码在下面,FlowFinalNode 或 ActivityFinalNode 都是正确的switch case 因为 break
只结束 switch case。
此外,流程不会“流经”合并节点,它们以箭头结束于边界。如果我是你的助教,你会因此而失分,以及其中带有标签的决策节点,这不在 UML 标准中。
哦对了,还有卫兵上缺少的方括号。
uml-diagrams.org 是一个非常好的 UML 资源,如果你不想阅读上层结构本身的话。
实际上您的代码表示状态机而不是 activity 流。
当然,你也可以写成activity,但好像不太合理
FWIW:您将条件编译 (#if) 建模为流程。这是完全错误的。你需要两个模型。一种是#if 为真,另一种是假。这不是运行时条件。
我有以下代码(只是伪代码):
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 activity 图(见附件)但不确定我在某些方面是否正确:
- 这 2 个 "flow final" 点是否正确映射,或者它们应该合并为一个 "flow final" 点? -还要注意最后一个 CASE 没有 break 语句。
如有任何反馈,我们将不胜感激!
案例二有一个break
,因此以后不会调用案例三。即使情况二将表达式设置为 three
,此时表达式还没有被计算,因此情况三将不会被执行。
案例三必须调用默认案例,因为它没有 break
.
从 expression
决策节点到 ActivityFinalNode 的未标记连接是错误的。该路径在伪代码中不存在,因为 switch 语句总是至少执行一种情况或默认情况。此外,所有退出 expression
决策节点的流都必须有一个守卫(例如,[expression == ONE]
)。对于此决策节点,每个守卫都必须与所有其他守卫分离。
FlowFinalNode(带有 X 的节点)与 ActivityFinalNode(带有圆圈的节点)的含义也不完全相同。您应该仅使用 FlowFinalNode 来结束分叉的控制线程。 (来自规范:“FlowFinalNode 是一个 FinalNode,它通过消耗提供给它的令牌来终止流。”)在任何一种情况下,在此模型中,只要没有更多代码在下面,FlowFinalNode 或 ActivityFinalNode 都是正确的switch case 因为 break
只结束 switch case。
此外,流程不会“流经”合并节点,它们以箭头结束于边界。如果我是你的助教,你会因此而失分,以及其中带有标签的决策节点,这不在 UML 标准中。 哦对了,还有卫兵上缺少的方括号。
uml-diagrams.org 是一个非常好的 UML 资源,如果你不想阅读上层结构本身的话。
实际上您的代码表示状态机而不是 activity 流。
当然,你也可以写成activity,但好像不太合理
FWIW:您将条件编译 (#if) 建模为流程。这是完全错误的。你需要两个模型。一种是#if 为真,另一种是假。这不是运行时条件。