1

初心者として、Visio を使用して CD ライター用のステート マシンを開発しようとしています。以下はデバイスの操作/トランザクションであり、添付されているのは私がこれまでに行ったことの図であり、正確に表現されているかどうかは不明です.

Device operation 
  • ロードボタン - ドロワーを開き、開いている場合は閉じます (空の CDR をロードします)。

  • 書き込みボタン - CDR へのドキュメントの記録を開始します。書き込みプロセスで緑色のライトが点灯
    し、完了すると消灯します。cdr が書き込まれると、ライターは停止します。

  • 検証ボタン - 以前に cdr に記録されたドキュメントを検証し、プロセス中に緑色のライトが点灯し、完了すると消灯し、デバイスが停止します

  • キャンセルボタン - 記録中または検証中にいつでもプロセスを停止します

  • キャンセル ボタン - CD ライターが空であるか、検証または録音中でない場合は無効

  • 書き込みボタン – CD ライターが空の場合、および録音または検証プロセス中は無効です。

  • ベリファイは、CD ライタが録音中でないときにのみ開始できます。

    ここに画像の説明を入力

4

3 に答える 3

1

遷移のトリガーとして明示的なイベントを指定する必要があります。

現在のステート マシンでは、各遷移 (最初の頂点を離れる遷移を除く) には効果がありますが、トリガーはありません。より正確には、これらはデフォルトの完了イベントによってトリガーされるため、自動です。

さらに、すべての遷移が同じイベントに反応するため、ステート マシンは非決定論的です。たとえば、 stateloadedでは、Recording、empty、loaded への遷移はすべて完了イベントに反応します。完了イベントが送出されると、これらの遷移は競合していると言われ、そのうちの 1 つが非決定論的に選択されます。これはあなたが望むものではないと確信しています。

UML 仕様を読み、遷移のトリガーを定義します。

于 2014-04-30T06:56:03.610 に答える
1
  • 「空」から「空」への遷移を描写する必要はありません。アクションや状態遷移のない遷移はステートマシン図に描く必要がないからです。(状態遷移テーブルは、このような場合に欠落している遷移のチェックによく使用されます。)
  • "loaded" と "Idle" は同じ状態として 1 つに表すことができます
  • 「青信号」を表すために、記録の開始アクションとして「青信号をオンにする」と記述し、終了アクションとして「青信号をオフにする」と記述します。

これが私が描いた図です。実際のモデルでは、トレイの状態 (開いているか閉じているか) を考慮する必要がありますが、以下のサンプル図にはありません。

ここに画像の説明を入力

于 2014-05-12T05:47:34.730 に答える