ステートマシン図/状態遷移表
概要
システムやクラスの状態とその振る舞いを記述するために、ステートマシン図を利用できます。ステートマシン図に加えて状態遷移表も利用でき、ステートマシン図と状態遷移表を切り替えながらシームレスに設計できます。
状態遷移表では遷移ありの箇所や遷移なしの箇所を強調表示したり、トリガが定義されていない遷移を確認したりできます。そして、遷移の代わりにそのトリガ を無視するもしくは起こり得ないという情報を注記することで、抜け漏れなく設計できます。
このページでは、ステートマシン図と状態遷移表を利用するための操作について、次の順で説明します。
- ステートマシン図を配置する
- 状態を定義する
- 遷移を定義する
- 状態遷移表で設計情報を記述する
また、ユーザーのモデリングを支援するために、次の機能を提供しています。
これらについても、順に説明します。
- モデルを検証する
- 表示内容を設定する
ステートマシン図を配置する
ステートマシン図を配置するには、以下の手順で行います。
- モデルナビゲータにてパッケージを選択し、コンテキストメニューの [モデルの追加] > [ステートマシン図] をクリックします。
- 選択したパッケージの子要素にステートマシン図が配置されます。
現在のバージョンでは、ディスプレイ設定の表示スケールが100%を超える値に設定されている場合、状態遷移表のセルのテキストが一部見切れてしまう場合があります。
この現象を回避するには、ディスプレイ設定の表示スケールを100%に設定してご利用ください。
その他の制約事項はこちらを参照してください。
状態を定義する
状態を定義するには、以下の手順で行います。
- 表示されているステートマシン図にツールボックスから [状態] をドラッグ&ドロップします。
- 表示されているステートマシン図または状態の子要素として新規に状態が追加されます。
ステートマシン図ではツールボックスで表示している以下の要素を配置できます。
アイコン | 名称 |
---|---|
状態 | |
入場点 | |
退場点 | |
開始 | |
終了 | |
履歴 | |
結合 | |
選択 | |
並行 | |
合流 | |
ノート | |
ラベル | |
シェイプ |
入場点・退場点は以下の要素のポートシェイプとして配置します。
- 状態
状態に振る舞いを追加する
入場時の処理を追加するには、以下の手順で行います。
- 状態を選択します。
- プロパティインスペクタの[振る舞い] > [入場時処理]フィールドをダブルクリックすると、編集状態になります。
- 入場時の処理を記述して編集を確定させると、状態に入場時処理が設定され、ステートマシン図上に入場時処理が表示されます。
ステートマシン図上で状態のボディにテキスト入力すると、表記フォーマットに従ってテキスト解析され、状態の各フィールド値に反映されます。
もちろん、各フィールド値を変更すれば図上のテキストに反映されます。
状態の振る舞いとテキスト表記フォーマットと各フィールド値との対応関係
状態に対する振る舞いは、以下のフォーマットに従ってテキスト表示・解析されます。
-
フォーマット:
<振る舞い> ::= ['entry / '<入場時処理>]['\n']['do / '<滞在時処理>]['\n']['exit / '<退場 時処理>]
- 例
入場時処理:set display on
滞在時処理:show distance
退場時処理:set display off
の場合、以下のテキスト表示になります。
entry / set display on
do / show distance
exit / set display off
- 例
状態にステレオタイプを追加する
ステレオタイプを追加するには、以下の手順で行います。
- 状態を選択します。
- プロパティインスペクタの[基本情報] > [ステレオタイプ]フィールドの[追加]ボタンをクリックすると、その選択肢が表示されます。
- ステレオタイプを選択して [OK] ボタンを押下すると、状態にステレオタイプが設定され、ステートマシン図上にステレオタイプが表示されます。
ステレオタイプの選択肢は、パッケージモデルの [詳細] ビューで定義できます。
追加したステレオタイプは、次の手順でステートマシン図から編集できます。
- 状態に表示されたステレオタイプをダブルクリックすると、編集状態になります。
- ステレオタイプを変更して編集を確定させると、ステートマシン図上に反映され、状態のステレオタイプが変更されます。
遷移を定義する
状態間の遷移を定義するには、以下の手順で行います。
- 遷移の始点となる状態の上にポインタを移動します。
- 状態の四方に表示される[▲]アイコンをドラッグして、遷移の終点となる状態にドロップします。
遷移にトリガを追加する
トリガを追加するには、以下の手順で行います。
- 遷移を選択します。
- プロパティインスペクタの[基本情報] > [トリガ]フィールドの[追加]ボタンをクリックすると、その選択肢が表示されます。
- トリガを選択して [OK] ボタンを押下すると、遷移にトリガが設定され、ステートマシン図上にトリガが表示されます。
ステートマシン図上で遷移のラベルにテキスト入力すると、表記フォーマットに従ってテキスト解析され、遷移の各フィールド値に反映されます。
もちろん、各フィールド値を変更すれば図上のテキストに反映されます。
遷移のテキスト表記フォーマットと各フィールド値との対応関係
遷移は以下のフォーマットに従ってテキスト表示・解析されます。
- フォーマット:
<遷移> ::= [<トリガの一覧>] ['[' <ガード> ']'] ['/' <効果>]
- 補足
<トリガの一覧>
は以下のフォーマットで表示されます。<トリガの一覧> ::= <トリガ>[','<トリガ>]*
- 例
トリガ:close
ガード:doorway -> isEmpty()
効果:closed
の場合、以下のテキスト表示になります。
close [doorway -> isEmpty()] / closed
- 補足
遷移にステレオタイプを追加する
ステレオタイプを追加するには、以下の手順で行います。
- 遷移を選択します。
- グレーアウトされている[<<stereotype>>]をダブルクリックすると、編集状態になります。
- 設定したいステレオタイプを入力すると、ステートマシン図の遷移にステレオタイプが表示され、遷移にステレオタイプが設定されます。
状態遷移表で設計情報を定義する
状態遷移表を表示する
状態遷移表でステートマシン図の設計情報を表示するには、以下の手順で行います。
- 次のマニュアルに従って、エディタの表示を [状態遷移表] ビューに切り替えます。
状態遷移表では以下の要素を状態として表示します。
アイコン | 名称 |
---|---|
開始 | |
入場点 | |
状態 | |
履歴 | |
選択 | |
並行 | |
合流 | |
結合 | |
退場点 | |
終了 |
状態は上記に記載された順番で整列されます。
ただし、以下の要素間では整列されません。
- 選択
- 並行
- 合流
- 結合
- サブ状態を含めたすべての状態が表示されます。
- トリガが設定されていない遷移は、
<なし>
列に表示されます。 - 結合されたセルを範囲選択すると、範囲外のセルも選択状態になる場合があります。
- 状態とトリガ(行と列)の位置は、[ビュー切り替え] コンボボックスの [状態-トリガ] と [トリガ-状態] を選択することで切り換えることができます。
状態を定義する
状態遷移表で状態を定義するには、以下の手順で行います。
- 状態遷移表のセルを選択して、次のいずれかの操作を行います。
- コンテキストメニューの [状態の追加(S)...] をクリックします。
- 状態遷移表 上部のツールバーに表示された[+]ボタンをクリックします。
- [状態を追加] ダイアログが表示されるので、追加する状態の名前を入力して確定します。
- 選択しているセルの下の行に2.で入力した名前の状態が新規に追加されます。
- 選択しているセルの行の要素(開始、入場点、状態、履歴、など)と同じ種類の要素で状態が追加されます。
- サブ状態を追加したい場合はコンテキストメニューの [サブ状態の追加(U)...] から、上記の操作手順と同様の手順で追加できます。
- 状態を削除したい場合は、削除したい行のセルを選択して、次のいずれかの操作を行ってください。
- コンテキストメニューの [状態を削除(D)] をクリックします。
- 状態遷移表 上部のツールバーに表示された [-] ボタンをクリックします。
- Deleteキーを押下します。
- 状態の定義が1行もない場合は [状態遷移表] ビューで状態の追加はできません。
[ステートマシン図] ビューに切り替え、状態を定義する に従って追加してください。
トリガを定義する
状態遷移表でトリガを定義するには、以下の手順で行います。
- 状態遷移表のセルを選択して、コンテキストメニューの [トリガの追加(T)...] をクリックします。
- [トリガを追加] ダイアログが表示されるので、追加したいトリガの名前を入力して確定します。
- 選択しているセルの右の列に2.で入力した名前のトリガが新規に追加されます。
- トリガを削除したい場合は、削除したい列のセルを選択して、コンテキストメニューの [トリガを削除(E)] から削除してください。
- トリガの定義が1列もない場合は [状態遷移表] ビューでトリガの追加はできません。
[ステートマシン図] ビューに切り替え、遷移を定義する > 遷移にトリガを追加する に従って追加してください。
遷移を定義する
状態遷移表で遷移を定義するには、以下の手順で行います。
- 状態遷移表のセルを選択して、コンテキストメニューの [遷移先の変更(C)...] をクリックします。
- 表示される ダイアログに従って、遷移先の状態を選択します。
- 選択しているセルに、遷移が追加されます。
- 選択したセルに既に遷移が定義されている場合、既存の遷移を削除してから遷移を追加します。
遷移に設定していたフィールド値(ガードや効果、振る舞い等)が削除されてしまうことにご注意ください。
- 遷移に注記を追加したい場合、次のいずれかの操作を行ってください。
- 無視(Ignore)の場合:コンテキストメニューの[無視にする(I)]をクリックします。
- 不可(NotHappen)の場合:コンテキストメニューの[不可にする(N)]をクリックします。
- 遷移を削除したい場合は、削除したい遷移のセルを選択して、コンテキストメニューの[セル値をクリア(L)]から削除してください。
- 遷移が定義されているセルが強調表示されます。
強調するセルの種別を変更したい場合は、状態遷移表上部のツールバーのドロップダウンリストから変更できます。 - 本設定はユーザーごとに保存されます。
遷移を追加する
状態遷移表で遷移を追加するには、以下の手順で行います。
- 状態遷移表のセルを選択して、コンテキストメニューの [遷移先の追加(A)...] をクリックします。
- 表示されるダイアログに従って、遷移先の状態を選択します。
- 選択しているセルに、遷移が追加されます。この操作では、既存の遷移は維持されます。
状態遷移表で遷移のセルにテキスト入力すると、表記フォーマットに従ってテキスト解析され、遷移の各フィールド値に反映されます。
もちろん、各フィールド値を変更すれば図上のテキストに反映されます。
遷移のテキスト表記フォーマットと各フィールド値との対応関係
遷移は以下のフォーマットに従ってテキスト表示・解析されます。
-
フォーマット:
<テキスト> ::= <遷移> [ <改行> <遷移> ] *
-
<遷移>
は以下のフォーマットで表示されます。<遷移> ::= ['['<ガード>']'] <遷移先状態の名前>
-
例: 1つのトリガが2つの条件付きの遷移を持つ場合、次のようにテキスト表示されます。
- 遷移1:
- 遷移先状態の名前:
清掃中
- ガード:
t>1
- 遷移先状態の名前:
- 遷移2:
- 遷移先状態の名前:
運転中
- ガード:
t<=1
- 遷移先状態の名前:
- テキスト表示
[t>1]清掃中 <改行>[t<=1]運転中
- 遷移1:
-
補足
- 選択しているステートマシン図で、
<遷移先状態の名前>
が見つからなかった場合、[情報ウィンドウ] > [出力]タブ > [状態遷移表]カテゴリ にエラーが通知されます。
エラー内容を元に、必要に応じて修正してください。 - 状態を削除した場合、その状態を
<遷移先状態の名前>
として定義していた<遷移>
は削除されます。 - 利用しているIMEによっては、セルの編集中に文字列の変換状態を確定させると、セルの編集状態 も併せて確定されます。
この現象を回避するには、IMEを切り替えてください。Microsoft IME ではこの現象が起きないことを確認しています。
- 選択しているステートマシン図で、
-
遷移をコピーして貼り付ける
状態遷移表で遷移をコピーして貼り付けるには、以下の手順で行います。
- コピーしたい遷移のセルを選択します。
- ctrl+c で選択中のセルをコピーします。
- 遷移を貼り付けたいセルを選択して ctrl+v を押下すると、コピーした遷移が貼り付けられます。
コピーしたい遷移のセルを選択するときに、ctrlを押下しながらセルをクリックして複数のセルを追加選択することで、それらのセルを一度にコピーして貼り付けることができます。
遷移の詳細を確認する
状態遷移表で遷移の詳細を確認するには、以下の手順で行います。
- 遷移を確認したい状態の行のセルを選択します。
- リボンから [表示] > [ペイン] > [インスペクタ] をクリックして、インスペクタを表示します。
- インスペクタ上部のタブで [遷移] が選択されていることを確認、もしくは、クリックして選択します。
- インスペクタに選択したセルの行の状態が持つ遷移と、そのフィールドが表示されます。
状態遷移表では次の遷移の詳細情報を確認することができます。
フィールド名 | 概要 |
---|---|
トリガ | 遷移が参照するトリガの名前 |
ガード | 遷移のガード |
効果 | 遷移の効果 |
遷移時振る舞い | 遷移が所有する遷移時振る舞いの名前 |
- トリガ、遷移時振る舞いのテキストボックスを変更すると、所有/参照先のモデルの名前が変更されます。
所有/参照先のモデルの付け替えが行われるわけではないことにご注意ください。
表示内容を設定する
モデルを変更することなく、関心のある情報のみを状態遷移表に表示できます。
トリガが定義されていない遷移を非表示にするには、以下の手順で行います。
- 状態遷移表上部のツールバーから [トリガなしを表示] ボタンをクリックします。
- トリガ<なし>の列の遷移が非表示になります。
- 本設定はユーザーごとに保存されます。
Excelにエクスポートする
状態遷移表をExcelにエクスポートするには、以下の手順で行います。
- 状態遷移表上部のツールバーから [Excelにエクスポート] ボタンをクリックします。
- [Excelへのエクスポート]ダイアログでExcelファイルのエクスポート先を決定し、保存します。
モデルを検証する
ステートマシン図で検証される内容は、次の通りです。
- 初期状態を終点とする遷移がないか
- 終了状態を始点とする遷移がないか
モデルを検証するには、以下の手順で行います。
- リボンから [UML] > [検証] > [整合チェック] を実行します。
- プロジェクト配下の全てのモデルに対し、不正な遷移を検出した場合は、エラー表示されます。
リボンの [ホーム] > [モデル] > [エラーチェック] ボタンをクリックすると、標準の検証に加え、全てのモデルに対し検証が行われます。
また、ステートマシン図上で新規に遷移を追加した際、追加した遷移のチェックがリアルタイムで 行われます。
表示内容を設定する
モデルを変更することなく、関心のある情報のみをステートマシン図に表示できます。
遷移の振る舞いの表示内容を設定するには、以下の手順で行います。
- 表示を切り換えたいステートマシン図を表示します。
- インスペクタの [UML図] タブの[遷移]グループの振る舞いチェックボックスのチェックを切り換えます。
ステートマシン図では次の要素の表示を切り換えることができます。
カテゴリ | 要素 |
---|---|
共通 | ステレオタイプ |
状態 | 振る舞い |
遷移 | ガード |
振る舞い |
制約事項
- ディスプレイ設定の表示スケールが100%を超える値に設定されている場合、状態遷移表のセルのテキストが一部見切れてしまう場合があります。
- 並行状態は定義できません。
- 状態の領域、リスト表示、機能は表現・記述できません。
- サブシステム状態は、UML標準の表記と異なり、状態名に下線を表示する表現となります。
- 状態名のスタイルで下線を指定できません。状態がサブマシン であるとき、自動的に下線が表示されます。
- インスペクタの [UML図] タブの[遷移]グループのチェックボックスを切り換えた際に、表示内容が即時更新されません。一度別のビューを表示した後で、再度ステートマシン図を表示することで表示内容が更新されます。
- 次の値は予約語として使用しています。状態の名前やガードに使用すると誤って解釈されることがあります。
- 「[」(半角角カッコ開き)、「]」(半角角カッコ閉じ)を含む文字列
- I
- N
- 状態遷移表ビューでは行列の要素数が多い場合、表示や編集時の応答に時間がかかることがあります。必要に応じて階層化してご利用ください。
- 状態遷移表ビューではクリップボード操作(コピー・切り取り・貼り付け)をする場合、リボンの [ホーム] > [クリップボード] のボタンではなく、状態遷移表上部のツールバーのボタンを使用してください。
- 状態遷移表ビューはドキュメント生成されません。
- 状態遷移表ビューのツールバーの [Excelにエクスポート] を実行しても、セル内容の揃え(配置方向)やセルの色は出力のExcelファイルに反映されません。
- 状態が行でトリガが列の状態遷移表のみに対応します。トリガが行で状態が列の状態遷移表や、前状態が行で次状態が列の状態遷移表には対応していません。
- 状態遷移表ビューのトリガなし列には注記を設定できません。
- 状態遷移表の表示中に状態、トリガを状態遷移表以外のビューで追加・削除しても、状態遷移表で表示内容が即時更新されません。ツールバーの [更新] を押下する、または一度別のビューを表示した後で再度状態遷移表を表示することで更新されます。
- 状態遷移表の表示中に新規追加した遷移の属性(トリガ、ガード)を状態遷移表以外のビューで編集しても、状態遷移表で表示内容が即時更新されません。ツールバーの [更新] を押下する、または一度別のビューを表示した後で再度状態遷移表を表示することで更新されます。
- 状態遷移表のツールバーの [+] で状態を追加した直後に、セルのテキスト編集ではその状態への遷移を作成できません。セルのコンテキストメニューの [遷移先の変更(C)...] を使用してください。
- ステートマシン図に関わるメタモデル(ステートマシン図、状態基底、トリガ)を派生した独自クラスのモデルがある場合、状態遷移表ビューを正しく表示できません。
- ステートマシン図の子要素に未ロードのモデルがある場合、状態遷移表ビューを正しく表示できません。
- 状態遷移表ビューでは状態名がユニークでなければなりません。同じ名前を複数の状態で利用した場合、遷移を誤認することがあります。
- 遷移に複数のトリガを割り当てた場合、状態遷移表ビューで遷移を誤認する場合があります。
- 将来向けの高度な機能拡張のために、各種ナビゲータのコンテキストメニューやリボンから状態遷移表のビュー定義を追加できます。
- 予約機能のため使わないでください。