4

例如,请参见以下代码。如何在 UML 活动图中对函数的不同返回值进行建模?

typedef enum {CLOSED, OPEN, UNKNOWN} sw_state_t;

sw_state_t read_input(int index)
{
    uint8_t sw_state;

    if (spi_read(&sw_state) == STATUS_OK) {
       if (sw_state & (1 << index))
           return CLOSED;
       else
           return OPEN;
    }

    return UNKNOWN;
}

我想展示的是函数返回的值。我拥有的是一个带有一个输入 ActivityParameter 和一个输出 ActivityParameter 的 Activity 块。

更新

下图有意义吗?

在此处输入图像描述

4

3 回答 3

6

使用数据对象,因为它们是活动的输出。然后将对象与活动链接起来

查看您的图表,就在每个相关的 ActivityFinal(返回 OPEN、CLOSED、UNKNOWN)之前添加一个操作以通过以下方式返回相应的对象。然后用 OutputParameter 连接每个对象。

在此处输入图像描述

于 2014-05-09T09:02:10.027 回答
1

我认为你的图表太细了。为什么你需要内部结构?

我会这样做:

简单的

于 2014-05-09T09:05:46.940 回答
0
  1. 您的一个功能示例太小,缺少更广泛的上下文。用于的 read_input 函数的结果是什么,后续操作,它如何集成到周围的系统中。正如@PsiX 所暗示的那样,它可能太细了。如果没有更广泛的视图建模单个小段代码没有多大意义。

  2. 我自己不是专家,还在学习→一些我认为有用的活动图解释的链接,尤其是康拉德·博克的文章

    在您的情况下,对结果进行建模的方式将取决于您想要对其余部分建模的方式,即更广泛的上下文。

  3. 如果您想专注于控制流,那么您可以使用例如“发送信号操作”方法。“发送事件”/“接收事件”建模由ARIS 事件驱动流程链 (EPC)视觉语言使用,它在其中发挥着重要作用。我不确定它与 UML 活动图概念的匹配程度如何,但它似乎是“合法的”

    专注于控制流

  4. 如果您想专注于数据流,那么您可以使用电路的工作方式(无论如何我相信它是“引脚”概念的来源)。该活动将通过其中一个输出引脚发送数据令牌。它会将其中一根输出线设置为高电平。设置其中一位,返回一个枚举值。

    关注数据流

于 2014-05-10T05:47:08.140 回答