【问题标题】:How to model different return values of a function in a UML Activity-Diagram?如何在 UML 活动图中对函数的不同返回值进行建模?
【发布时间】:2014-05-09 08:23:50
【问题描述】:

请参见以下代码示例。 如何在 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 块。

更新

下图有意义吗?

【问题讨论】:

    标签: c uml activity-diagram


    【解决方案1】:

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

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

    【讨论】:

    • 你的意思是一个名字像“return OPEN”的动作吗?
    • 没错。请查看更新后的图表...注意活动结束现在是 CLOSE、OPEN... 而不是“return xxx”。这更清晰,更接近事实,因为 ActivityEnd 本身不返回任何内容。它只是标记 ActivityEnd 的类型。
    • 以防万一 - 使用 ObjectFlow 将对象与其他元素连接起来。
    • 在对象节点中,sw_state_t是对象类型,OPEN是对象状态吗?如何配置 EA?
    • 在模型的某处添加一个名为 sw_state_t 的枚举元素(通常它是一个类,但你在这里处理一个枚举)。然后只需将它(作为实例)拖放到活动图上。最后设置对象的名称。在我的模型中,我总是创建一个类模型来指定领域概念及其关系。后来我在其他图中使用类/对象(比如这个)。这种做法在不同模型之间提供了很好的可追溯性,并允许更正式和更准确的规范。
    【解决方案2】:

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

    我会这样做:

    【讨论】:

      【解决方案3】:
      1. 您的一个函数示例太小,缺少更广泛的上下文。用于的 read_input 函数的结果是什么,后续操作,它如何集成到周围的系统中。正如@PsiX 所暗示的那样,它可能太细了。如果没有更广泛的视图,对单个小段代码进行建模就没有多大意义。

      2. 我自己不是专家,还在学习中→some links to explanations of the activity diagrams that are useful in my opinion, especially Conrad Bock's articles

        在您的情况下,对结果建模的方式将取决于您希望如何建模其余部分的方式,即更广泛的上下文。

      3. 如果您想专注于 控制流,那么您可以使用例如“发送信号行动”的做法。 ARIS Event-Driven Process Chain (EPC) 视觉语言使用“发送事件”/“接收事件”建模,它在其中发挥着重要作用。我不确定它在多大程度上适合 UML 活动图概念,但它似乎是“合法的”

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

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2016-07-10
        • 1970-01-01
        相关资源
        最近更新 更多