序論
UML(統合モデリング言語)の状態図は、システムの動的挙動をモデル化する強力なツールであり、イベントに応じてシステムが状態間をどのように遷移するかを捉えます。ソフトウェア工学において、組み込みシステム、ユーザインターフェース、ビジネスプロセスなど複雑な挙動を持つシステムの設計や分析に広く利用されています。本ケーススタディでは、温度制御システム(おそらくサーモスタットやHVACシステムで使用される)のUML状態図に焦点を当て、主要なUMLの概念を説明します。また、先進的なUMLモデリングツールであるVisual Paradigmを用いた、このような図の作成手順を段階的に説明しています。理解を深めるために、自動販売機や交通信号システムといった追加の例も含まれており、状態図の汎用性を示しています。
温度制御システムの概要
温度制御システムは、環境条件に基づいて加熱モードと冷却モードの間を切り替えることで、所定の温度を維持します。システムの挙動は以下の通りモデル化されます:
- 状態:
- アイドル:システムは非動作状態であり、温度の変化を待機している。
- 冷却:温度が所定のレベルを超えた場合、システムは環境を積極的に冷却する。
- 加熱:加熱プロセスを管理する複合状態で、以下の内容を含む:
- 起動中:加熱システムが初期化される。
- 稼働中:加熱システムが温度を積極的に維持する。
- 最終状態:システムの終了を表す状態であり、アイドル状態から到達可能である可能性がある。
- 遷移:
- 初期状態からアイドル状態へ:システムはアイドル状態で開始される(イベントは指定なし)。
- アイドル状態から冷却状態へ:tooHot(desiredTemp)によってトリガーされ、ここでdesiredTempは目標温度を表す。
- 冷却状態からアイドル状態へ:atTempによってトリガーされ、温度が所定のレベルに達していることを示す。
- アイドル状態からHeating.Activatingへ:tooCold(desiredTemp)によってトリガーされる。
- Heating.Activating状態からHeating.Active状態へ:ready / turnOnによってトリガーされ、turnOnがアクションとして実行される。
- Heating.Active状態からアイドル状態へ:atTempによってトリガーされる。
- アイドル状態から最終状態へ:明示的に詳細が記載されていないが、終了条件として暗に示されている。
- イベント:
- tooHot(希望温度): 温度が希望レベルを超える。
- tooCold(希望温度): 温度が希望レベルを下回る。
- atTemp: 温度が希望レベルに達する。
- ready: 加熱システムは動作可能状態にある。
- アクション:
- turnOn: ActivatingからActiveへの遷移中に実行され、加熱機構を起動する。
この図は、システムのライフサイクルを効果的に捉えており、温度変化への対応や加熱・冷却プロセスの管理方法を示している。

UML状態図の主要な概念
UML状態図は、システムの動作をモデル化するためのUML標準の一部である。イベント駆動型システムにおいて特に有用であり、状態の変化は特定のイベントによって引き起こされる。以下の項目は、温度制御システムからの例を用いて説明し、追加の例によって補強されている。
- 状態:
- 状態は、システムのライフサイクル中の特定の状態や状況を表し、特定の活動を実行するか、イベントを待機する。
- 例(温度制御):Idle状態はシステムが非動作状態であることを示し、CoolingおよびHeatingは温度制御がアクティブな状態を表す。
- 例(自動販売機):自動販売機には、Idle(ユーザー入力を待機中)、Selecting(ユーザーが商品を選択中)、Dispensing(商品を提供中)などの状態があるかもしれない。
- 例(信号機):状態には、Red(停止)、Green(進行)、Yellow(注意)がある。
- 遷移:
- 遷移は、イベントによって引き起こされる状態の変化を示す有向矢印であり、通常、関連するアクションやガード条件を伴う。
- 例(温度制御):IdleからCoolingへの遷移は、tooHot(希望温度)によって引き起こされ、高温を示している。
- 例(自動販売機):ユーザーが選択を確認したとき(selectItem)、SelectingからDispensingへの遷移が発生する。
- 例(信号機):GreenからYellowへの遷移は、タイマーイベント(timerExpired)によって引き起こされる。
- イベント:
- イベントは、ユーザー操作、システム信号、または時間ベースのトリガーなどの遷移を引き起こす刺激です。
- 例(温度制御):イベント atTemp は、冷却または加熱状態からアイドル状態への戻りを引き起こす。
- 例(自動販売機):イベント insertCoin は、アイドル状態から選択状態への遷移を引き起こす。
- 例(信号機):イベント timerExpired は、赤、緑、黄の間を循環する遷移を引き起こす。
- アクション:
- アクションは、遷移中、状態の進入時、または状態の退出時に実行される活動である。
- 例(温度制御):アクション turnOn は、加熱・活性化状態から加熱・活性状態への遷移時に実行される。
- 例(自動販売機):アイテムの発行というアクションは、発行状態への遷移時に発生する。
- 例(信号機):アクション updateSignal は、遷移中に信号表示を更新する可能性がある。
- 初期状態と終了状態:
- 初期状態(実心円)はシステムの開始点を示し、終了状態(同心円を含む円)は終了を示す。
- 例(温度制御):初期状態はアイドル状態へ導き、終了状態はアイドル状態から到達可能であり、システムの電源が切れた場合などに発生する可能性がある。
- 例(自動販売機):初期状態はアイドル状態へ導き、終了状態はシステムのシャットダウンを表す可能性がある。
- 例(信号機):終了状態は、システム障害や保守モードを表す可能性がある。
- 複合状態:
- 複合状態はネストされた部分状態を含み、複雑な振る舞いの階層的モデル化を可能にする。
- 例(温度制御):加熱状態は複合状態であり、活性化状態と活性状態という部分状態を含む。
- 例(自動販売機): 支払い状態は複合状態である可能性があり、カード処理や現金処理などのサブ状態を含む。
- 例(信号機): 緊急モードのような複合状態は、点滅するライトや手動制御のサブ状態を含む可能性がある。
- ガード条件:
- ガード条件は、遷移が発生するためには真でなければならないブール式である。
- 例(温度制御): [温度 > 目標温度 + しきい値] のようなガードは、温度が目標値を著しく上回った場合にのみ tooHot 遷移が発生することを保証できる。
- 例(自動販売機): [支払い金額十分] のようなガードは、十分な金額が投入された場合にのみ、発送状態への遷移が発生することを保証する。
- 例(信号機): [緊急信号受信] のようなガードは、緊急状態への遷移をトリガーする可能性がある。
これらの概念はUML標準に基づいており、温度制御システムやその他の例に見られるように、システムの挙動を正確にモデル化することを可能にする。
Visual Paradigmを用いたUML図の作成
Visual Paradigmは、状態図やその他のUMLアーティファクトの作成を簡素化する強力なUMLモデリングツールである。直感的なインターフェース、ドラッグアンドドロップ機能、構文チェックやチーム協働機能などの特徴を備えている。以下は、温度制御システムの図のような状態図を作成するためのステップバイステップガイドである。
- インストールと設定:
- Visual Paradigmを公式ウェブサイトからダウンロードするか、クラウドベースの図作成のためにVisual Paradigm Onlineを使用する。
- アプリケーション内の「新規プロジェクト」を選択して、新しいプロジェクトを作成する。
- 状態図の作成:
- プロジェクトエクスプローラーで右クリックし、「図の追加」>「状態機械図」を選択して、空のキャンバスを開く。
- 状態の追加:
- 「状態」ツールを使用して、キャンバス上に状態をドラッグアンドドロップし、「アイドル」、「冷却」、「加熱」と名付ける。
- 加熱のような複合状態の場合、状態を作成し、サブ状態(起動中、稼働中)をサブ図機能を使用して、またはネストされた状態を描画することでその中に追加する。
- 遷移の追加:
- 「遷移」ツールを使用して、元の状態から目的の状態へクリックしてドラッグすることで、状態を接続する。
- 遷移にイベントとアクションをラベル付けしてください。たとえば [tooHot(desiredTemp)] または ready / turnOn など。
- 初期状態と最終状態を追加する:
- 「初期状態」ツールを使用して実心の円を追加し、Idleに接続してください。
- 「最終状態」ツールを使用して同心円を含む円を追加し、必要に応じてIdleから接続してください。
- イベントとアクションにラベルを付ける:
- 遷移をダブルクリックして、イベント(例:tooCold(desiredTemp))とアクション(例:turnOn)を指定してください。
- 必要に応じてガード条件を含めてください。たとえば [temperature > desiredTemp + threshold]。
- 検証と修正:
- Visual Paradigmの構文チェック機能を使用して、UML準拠を確認してください。
- 整列ツールを使用してレイアウトを調整し、明確さと読みやすさを確保してください。
- ドキュメントの生成と共有:
- 共有のために図をPNG、JPG、SVG、またはPDF形式でエクスポートしてください。
- 「Doc. Composer」機能を使用して詳細なドキュメントを生成してください。
- Visual Paradigm Onlineを使用すると、チームメンバーとリアルタイムで共同作業できます。
Visual Paradigmの機能:
- リソースカタログ:図の間で要素を再利用して一貫性を保つ。
- サブ図:加熱のような複雑な複合状態を管理する。
- コード工学:図からコードを生成したり、逆にコードから図を生成したりする。
- チーム協働:同時編集とクラウドストレージをサポートする。
温度制御システムの例としてのワークフロー:
- 初期状態をIdleに接続して開始する。
- CoolingおよびHeating状態を追加し、HeatingにはActivatingおよびActiveのサブ状態を含める。
- 遷移を設定する:IdleからCoolingへ(tooHot(desiredTemp))、CoolingからIdleへ(atTemp)、IdleからHeating.Activatingへ(tooCold(desiredTemp))、ActivatingからActiveへ(ready / turnOn)、ActiveからIdleへ(atTemp)。
- Idleから最終状態を追加する。
- 構文を確認し、図をエクスポートする。
追加の例
理解を深めるために、以下の2つのUML状態図の例を示す。
- 自動販売機:
- 状態:
- Idle: ユーザーからの入力を待機中。
- Selecting: ユーザーが商品を選択する。
- Payment: ユーザーが支払いを行う。
- Dispensing: 商品が払い出される。
- Returning Change: お釣りが返却される。
- 遷移:
- Idle → Selecting:insertCoinによってトリガーされる。
- Selecting → Payment:selectItemによってトリガーされる。
- Payment → Dispensing:paymentConfirmedによってトリガーされ、ガード[paymentSufficient]を伴う。
- Dispensing → Returning Change:itemDispensedによってトリガーされ、action dispenseChangeを伴う。
- Returning Change → Idle:changeReturnedによってトリガーされる。
- ユースケース: この図は自動販売機の取引プロセスをモデル化し、すべてのステップ(硬貨投入、選択、支払い、払い出し)が明確に定義されていることを保証する。
- 状態:
- 交通信号システム:
- 状態:
- 赤:車両は停止する。
- 緑:車両は進行する。
- 黄:車両は停止を準備する。
- 遷移:
- 赤 → 緑:タイマー満了時に発動 [期間 = 30秒]。
- 緑 → 黄:タイマー満了時に発動 [期間 = 30秒]。
- 黄 → 赤:タイマー満了時に発動 [期間 = 5秒]。
- ユースケース:この循環図は、交通管理システムに役立つ交通信号の予測可能な動作をモデル化している。
- 状態:
- 注文処理システム:
- 状態:
- 受注済:注文は顧客によって提出される。
- 処理中:注文は支払いおよび在庫確認を経る。
- 出荷済:注文が発送される。
- 配送完了:注文が顧客に到着する。
- キャンセル済: 注文はキャンセルされました。
- 遷移:
- 注文済み → 処理中: orderVerified によってトリガーされ、[支払い有効 && 在庫あり] のガード条件を伴う。
- 処理中 → 発送済み: orderPacked によってトリガーされ、notifyCustomer というアクションを実行する。
- 発送済み → 配送完了: deliveryConfirmed によってトリガーされる。
- 注文済み → キャンセル: customerCancel によってトリガーされる。
- 処理中 → キャンセル: paymentFailed または inventoryUnavailable によってトリガーされる。
- ユースケース: この図は、支払い検証のような重要な意思決定ポイントを強調しながら、電子商取引の注文ライフサイクルをモデル化しています。
- 状態:
これらの例は、UML状態図が、消費者電子機器からビジネスプロセスやインフラシステムに至るまで、さまざまな分野で柔軟に活用できることを示しています。
結論
UML状態図は、システムの動的動作をモデル化する上で非常に価値があり、状態、遷移、イベントの明確で視覚的な表現を提供します。温度制御システムの例は、階層状態やイベント駆動型の遷移といった複雑な動作をどのように捉えているかを示しています。自動販売機、信号機、注文処理システムといった追加の例は、さまざまなシナリオにわたるその適用可能性を示しています。Visual Paradigmは、使いやすいインターフェース、構文チェック、共同作業機能を備えており、初心者から経験豊富なデザイナーまで、開発プロセスを効果的に支援します。UML状態図とVisual Paradigmのようなツールを活用することで、開発者は堅牢で保守性の高いシステムを設計し、ステークホルダーに設計内容を効果的に伝えることができます。
主要な引用: