3

ビヘイビア (メソッド本体) は、ステート マシンまたはアクティビティにすることができます。アクティビティは、手続き型コードと同等であるため、理解しやすいものです。

操作の動作としてステート マシンを使用する方法がわかりません。

その簡単な例を教えてください。

- -ノート - -

操作は仕様のみの要素です。OO プログラミング言語のメソッド シグネチャと考えてください。名前とパラメーターのリストがあります。

動作とは、(とりわけ)操作(または受信などの別の動作機能)が呼び出されたときに行うことです-メソッドの本体と想像してください。

4

2 に答える 2

2

「できるからといって、そうすべきだというわけではない」。

言い換えれば、操作の動作を定義するために状態モデルを使用することは合法かもしれませんが、そうすべきだという意味ではありません。それが役に立つシナリオに出くわしたことはありません。もちろん、それはそれらが存在しないという意味ではありません。これは、UML 仕様の一部にまとまりがないことの兆候でもあります。

操作 (囲んでいるクラスではない) がステートフルな動作をする場合に適しています。本当に不自然な例を使用するには、メソッドを考えてみましょうTcpConnection.close()。接続がすでに閉じられている場合、呼び出しclose()は効果がありません。接続が開いていた場合、呼び出すと接続がclose()閉じられます。

[ただし、メソッド固有の状態モデルの必要性が見つからなかった理由も示す例として. 状態モデルは実際には操作ではなくクラスに属します]。

h番目。

于 2013-07-03T08:30:38.020 に答える
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.)
    }

}
于 2013-07-04T23:02:45.120 に答える