如何将状态机图表示为UML中的操作的行为?

时间:2013-06-30 11:06:34

标签: behavior uml state-machine state-diagram

行为(方法主体)可以是状态机或活动 - 活动易于理解,因为它们等同于过程代码。

我不明白状态机如何用作操作的行为?

你能提供一个简单的例子吗?

--- ---注

Operation是一个仅限规范的元素 - 将其想象为OO编程语言中的方法签名。它有一个名称和参数列表。

行为是(除其他事项外)操作(或其他行为特征,如接收)在调用时的作用 - 将其想象为方法的主体。

2 个答案:

答案 0 :(得分:2)

“只是因为你的意思并不代表你应该”。

换句话说:使用状态模型来定义操作的行为可能是合法的 - 但这并不意味着你应该这样做。我从来没有遇到过它会有用的场景;但当然这并不意味着它们不存在。这也是一些UML规范缺乏凝聚力的症状。

在操作(而不是封闭类)具有有状态行为的情况下是适当的。要使用一个非常人为的例子:考虑一个方法TcpConnection.close()。如果连接已关闭,则调用close()将无效。如果连接已打开,则调用close()将关闭它。

[但是:作为一个例子,也说明了为什么我从未发现需要特定于方法的状态模型。状态模型真的属于类,而不是操作]。

第h

答案 1 :(得分:2)

了解什么是行为的最简单方法:它可以更改成员变量的值。 例如。

class MyClass
{
    public Integer i = 0;
    public void Operation1(){
        i++; //This could be an interpretation of of opaque action from an Activity
    };
    public void RunStateMachine(){
        //You can use state's entry/doActivity/exit behavior. E.g. put "i++" in any of them
        //You can use transition's effect behavior. E.g. put "i++" in it
        //state's entry/doActivity/exit, transition's effect can specify to another behavior, e.g. run another Activity or statemachine, 
        //UML provides a good recursive way to let user to model what ever they wanted.

        //NOTE: When using statemachine as behavior, you should know that the context (e.g. MyClass my = new MyClass(); here my is the context) of the statemachine 
        //is expecting an EventOccurence if the transitions has triggers. 
        //If no triggers are defined in any of the transitions in a statemachine, it can be think of being downgraded as an activity
        // (well, it is not conforming to UML, but you can think in that way.)
    }

}