連載第8-2回
UMLの基礎と応用

(株)NTTデータ 技術開発本部 副本部長
山本修一郎



状態図の編集

 それでは、ラショナル社のROSE[7]を用いて状態図を作成してみよう。ROSEでは、状態図を状態マシン図と呼ぶブラウズメニューバーで「状態マシン図」を選択すると、新規状態マシン図のポップアップメニューが出てくるので図の種類でステートチャートを選択する。図2にROSEで使用できる図形要素に関するツールバーの構成を示す。

図2 ツールバーの構成
図2 ツールバーの構成

 履歴標識はツールバーにはないが、状態に関する仕様ウィンドウの基本タブで[状態/アクティビティ履歴] チェックボックスをオンにすれば、この状態の内部に履歴標識が提示される。また、基本タブで[状態/アクティビティ履歴] と[サブ状態/アクティビティ履歴] チェックボックスをオンにすると、この状態内のすべてのネスト状態に対する履歴標識H*が設定される。

 ROSEでは状態の仕様ウィンドウで内部遷移としてのアクションを追加できる。たとえば状態を示す矩形の上でマウスをダブルクリックして仕様ウィンドウを開き、アクションタブを選択してマウスの右ボタンを押せば、アクションを追加できる。最初はEntry型のアクションとして登録されるが、アクションの契機を、アクションタブ上でアクションをダブルクリックしてアクション仕様ウィンドウを開けば、アクションの契機が「いつ」かをプルダウンメニューで選択できる。このメニュでは、「入状時」「退状時」「Do」「イベント発生時」のいずれかを選ぶ。これは、それぞれentry、exit、do、eventに対応している。しかし、状態図上での表示、状態仕様ウィンドウとアクション仕様ウィンドウでのメニュー表示がこのように日本語と英語がバラバラで使われていて一貫性がないのが残念だ。たとえば状態図では、以下のように表示される。

・入状:entryを選択すると状態図の内部遷移区画では「入状」と表示される。

・終了:exitを選択すると状態図の内部遷移区画では「終了」と表示される。exitを「退状」と訳す本もある。ROSEでもアクションメニューでは退状時と表示される。

・do:doを選択すると状態図の内部遷移区画ではそのまま「do」と表示される。

・イベント:eventを選択すると状態図の内部遷移区画では「イベント」と表示される。

 仕様ウィンドウでは英語表記のままなのだから、状態図上でも英語でいいのではないだろうか。部分的に日本語になっていても、あまり有難味は感じられないが、どうだろうか?

 状態遷移ラベルをダブルクリックすると、状態遷移仕様ウィンドウが提示される。詳細タブを選ぶと、状態遷移で記述すべき項目として、ガード条件、アクション、送信イベント、送信引数、送信先が表形式で入力できるので、構文を意識する必要がない点は便利だ。状態遷移仕様で入力した内容に従って状態遷移図ではラベルが構文に従って正しく組み立てられて表示される。

階層的な状態図の例

 ICカードを用いた顧客口座処理業務に対して、ROSEで作成した複合状態をもつ階層的な状態図の例を図3に示す。

図3 複合状態を持つ状態図の例
図3 複合状態を持つ状態図の例

 この図でとくに注意した点を列挙すると次のようになる。

・ICカードが挿入されていない状態と挿入されている状態を分ける。

・ICカードが挿入されている状態をさらに、ICカードの保持中と排出中の2つに分ける。

・ICカード保持中の状態を処理段階に応じて、暗証番号入力中、不正カード検出、口座チェック中、口座処理中に詳細化する。

・複合状態からの状態遷移を正常終了、異常終了、キャンセルなどのイベントに着目して具体化する。

・複合状態の内部状態から同じイベントで外部状態へ遷移する場合、内部状態から複数の状態遷移を記述するのではなく、複合状態からの状態遷移としてまとめる。たとえばカード排出中状態を導入することにより、異常終了、正常終了、キャンセルなどのイベントごとにカード排出の状態遷移を個別に用意するのではなく、カード排出中状態へのこれらのイベントからの状態遷移と、カード排出状態からの外部遷移に分けて状態遷移を分かりやすく記述できる。

並行領域の編集

 ROSEでは、点線により並行状態にある複数の部分状態領域を仕切ることはできないので、同期線だけで並行状態を表現する必要がある。また、遷移の分岐点、合流点、並行状態間の同期に対する表記法も用意されていない。さらに、状態領域を示す点線が記述できないので、この領域線の上に記述する同期状態も記述できない。状態遷移の分岐点や合流点は、状態図を簡潔に記述するための記法なので意味的に等価な状態図を、すこし便宜的だがROSEでも記述することはできる。たとえば、分岐点や合流点に対する擬似的な状態を導入すればいい。あるいは、状態遷移の本数は増えるけれども、状態遷移を分岐や合流させずにそのまますべての状態遷移を記述することもできる。

 同期状態については円のなかに同期遷移の個数の上限値を記述することができるので、ROSEでは意味的に等価な内容を記述するには、注釈で示すことになるだろう。

振舞い図の中での状態図の位置付け

 状態図では一つのオブジェクトの状態に着目して振舞いを記述する。これに対して、複数のオブジェクト間の相互作用を記述する場合は、シーケンス図やコラボレーション図やアクティビティ図を用いる。シーケンス図では時間順序に着目して振舞いを記述する。コラボレーション図ではオブジェクト間の相互関係に着目して振舞いを記述する。アクティビティ図では作業の流れに着目して振舞いを記述する。また、状態図が他の振舞い図と異なる点として、シーケンス図やコラボレーション図では特定のシナリオに従ったオブジェクト間の相互作用を記述するが、状態図ではすべての可能性のあるメッセージの系列を表現できることである。たとえば、複数のシーケンス図で記述されたシナリオのインスタンスの集合に出現するオブジェクトに対して、一つの状態図が対応して、これらのシナリオで記述されたメッセージに関する状態遷移を記述することになる。

 また、システム全体を一つの大きな複合オブジェクトとみなすこともできる。この場合は、システムの外部であるアクタとのメッセージに着目して巨視的なレベルで状態図を作成することになる。システムレベルの状態図では、システムの構成要素が同時並行的に存在する複合状態を記述する必要がある。たとえば、クライアント・サーバーシステムに対するシステムレベルの状態図では、クライアントとサーバーに関するシステムの状態を同時に並行して記述することになる。

 ラーマン[8]はユースケースやシステム全体に対して、外部イベントに基づいて状態図を作成することを薦めている。ラーマンの本では主にビジネス情報システムへのUMLの適用法を述べており、内部イベントに基づいて状態図を作成するのは推奨していない。問題分野を理解する上ではこのような状態図の適用法も有効であろう。通信分野やリアルタイム系のシステムについては電文やメッセージなどのイベントに対して状態図を作成する方がより正確な分析や設計ができる。ビジネス系でもクライアントサーバー型のシステムの場合、やはり状態図を用いたほうが通信手順が重要な場合には適していると思われる。

クラス図と状態図の関係

 図4にJavaCardのアプレット(カードレット)に関するクラス図と状態図の対応関係を示す。

図4 クラス図と状態図
図4 クラス図と状態図

 この図では、状態図のイベントがクラスの操作に対応している。ただし、一般にはクラス操作ごとにオブジェクトが異なる状態に遷移するとはいえない。

 たとえば、オブジェクトにひとつの状態だけを持たせておき、この状態に関する内部遷移にクラス操作を対応付けることもできる。しかし、このような場合には、状態遷移図をあえて作成する必要はないと思われる。

 図4の例では、各状態が明確な意味を持っており、状態図を記述しておくことが良い設計にもつながる。

まとめ

 本稿では状態図について紹介した。また、ROSEによる状態図の編集や状態図の位置付けなどについて述べた。シーケンス図から状態図を作成する方法なども提案されているので、別の機会に紹介することにしたい。
 次回はアクティビティ図(Activity Diagram)について説明しよう。

参考文献
[1] David Harel,Statecharts:A Visual Formalism for Complex Systems,Science of Computer Programming,Vol.8,1987.この文献は次のサイトから入手できる。
[2] David Harel,http://www.wisdom.weizmann.ac.il/~harel/index.html
[3] Unified Modeling Language (UML), version 1.4,
http://www.omg.org/technology/documents/formal/uml.htm
[4]ブーチ著、UMLユーザーガイド、ピアソン・エデュケーション(原著名The Unified Modeling Language User Guide,1998)
[5]ファウラ-、スコット著羽生田監訳、UMLモデリングのエッセンス第2版 翔泳社2000.
[6] エリクソン、ペンカー著、杉本他訳、UMLガイドブック、トッパン(原著名UML Toolkit,1997)。
[7] 日本ラショナルソフトウェア、http://www.rational.co.jp/
[8] ラーマン著今野、依田監訳、実践UML パターンによるオブジェクト指向開発ガイド、ピアソン・エデュケーション(原著名Applying UML and patterns an introduction to object-oriented design)1998.

●執筆者にメールを出す
yamamotosui@nttdata.co.jp
連載第9回へ >>
・連載第1回

・連載第2回

・連載第3回

・連載第4回

・連載第5回

・連載第6回

・連載第7回

・連載第8回

・連載第9回

・連載第10回

・連載第11回

・連載第12回

・連載第13回

・連載第14回

・連載第15回

・連載第16回

・連載第17回