状態モデリングとステートチャート図のわな(前編)UML BASIC LECTURE(4/4 ページ)

» 2004年10月08日 12時00分 公開
[羽生田栄一(取締役会長), 岡村敦彦,豆蔵]
前のページへ 1|2|3|4       

ステートチャート図と UML 2.0

 実は、UML 2.0 ではステートチャート図は存在しません。「えっ!」と思われる方もいるかもしれませんが、まあ安心してください。まったくなくなるわけではなく、名前が変わるのです。新しい名称は、「ステートマシン図」(ないしは「状態マシン図」)です。

 UMLリファレンスマニュアルを見てみると「ステートチャート図」の説明には「状態マシンを示すダイヤグラム」となっています。なるほど、これでは名称を変えた方がよさそうですね。

 変わったのは名前だけではなく、実際にはメタモデルの要素が大きく変更されていますが、ユーザーから見たときの基本的な使い方は、これまでとの互換性を維持するためほとんど変わりません。主な変更点は以下のとおりです。

2種類の状態マシン:振る舞い状態マシンとプロトコル状態マシン

これまでもステートチャート図ではオブジェクトの振る舞いと、プロトコル(操作、メソッド等)の起動の順序の両方を表現することができましたが、2.0 ではその区別が明確となり、メタモデル上でも区別されています。プロトコル状態マシンでは、各トリガに事前/事後条件を指定できます

状態マシンのモジュール化

entry/exit ポイントの概念を導入することで、コンポーネントとしての状態マシンをサブマシンとして記述できるようになりました

状態マシンの継承

後述

 そのほかにも状態マシンの終了方法や Regionという概念の採用などがありますが、今回はこの中でも興味をそそられる状態マシンの継承について見てみたいと思います。

状態マシンの汎化関係

 オブジェクト指向を最も特徴付ける概念といってもよい考え方に汎化・特化(併せて汎化関係)があります。クラス図ではよく利用されるこの汎化関係という概念は、そのほかのダイヤグラムではあまり意識されていませんでした。ステートチャート図も例外ではなく、オブジェクトの状態を継承したい場合には、UML 1.x ではノートで記述しておくのが一般的でした。しかしよく考えてみればそれも不便な話で、オブジェクトがクラスのインスタンスであるならば、対象オブジェクトのスーパークラスの振る舞いはサブクラスにおいても同様の振る舞いが必要となるにもかかわらず、その状態での振る舞いを適切に記述する手段がない、というのもオブジェクトモデル記述言語としてはイマイチな話です。UML 2.0 ではこのもどかしさを解消し、すっきりと記述できるようになりました。

 例えば、先ほどのモデルの例における オフ→稽古(けいこ)→公演という状態遷移は、何も芝居に限ったことではなく、音楽家や舞踊家などの表現者にも共通で当てはまる推移といえます。従って、演劇以外の芸術表現活動も考慮に入れた汎用的なモデルとする場合には、もう少し配慮が必要です。

ALT 図6 「時間芸術表現者」という抽象クラス

 一応、ここでは絵画や彫刻のような空間芸術とは異なった表現をする「時間芸術表現者」という抽象クラスを考えて、役者や音楽家たちを具象クラスとしてみます。こうしたクラス階層のときに、スーパークラスの時間芸術表現者の状態マシンでは共通する状態遷移を記述しておきます。なお、「稽古」という言葉もより一般的にするため、「練習」にします。

ALT 図7 共通する状態遷移を記述する

 そして特化した役者クラスのみに発生する状態遷移として、練習(稽古)中の詳細な状態遷移を拡張されたサブ状態の中に記述します。

ALT 図8 詳細な状態遷移を拡張されたサブ状態の中に記述

 スーパークラスに存在している状態は破線で表記し、拡張された状態を実線で記述します。こうしておくと、スーパークラスでの「練習中」状態を、サブクラスではコンポジット状態として拡張して新しい「本読み」「立ち稽古」「通し稽古」という状態が追加されたことが分かります。

 このようにクラス間の継承ツリーの中での状態の差分を明確にすることが可能になったわけですが、このときに注意しなければならないのは、あくまでもクラスの汎化関係の中ではサブクラスはスーパークラスの振る舞いを継承している、いい換えるとサブクラスのインスタンス・オブジェクトはそのスーパークラスのオブジェクトとも見なせるというオブジェクト指向の基本原則です(これを難しく『Liskovの置換原理』などということがあります)。つまり、サブクラス側で新しい状態やアクションの追加はできても、スーパークラスで持っている状態を削除することはできない、ということを忘れないでください。

 今回は UML 2.0の変更点の中から状態の継承を取り上げましたが、機会があればほかのトピックも取り上げてみたいと思います。


参考文献
▼「UMLリファレンスマニュアル」(J. ランボーほか、ピアソンエデュケーション)
▼「青ひげ公の城」(寺山修司、新書館)


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ