実はこの問題であれば、まだ静的構造図によって解決できます。頻繁に使われる概念ではありませんが、UMLには状態限定クラス(class in state)という考え方があり、それを利用すると以下のように記述できます。
クラスにおける状態をクラス名の後ろに続くかっこの中に記述することで、該当クラスのインスタンスがある状態であることを表します。ここでは、役者クラスが公演中という状態であるときには必ず1つの劇場と関連があり、稽古(けいこ)中もしくはオフの状態のときには劇場とは無関係であることが分かります。このようにしておくと、それぞれのインスタンスにおける状態において、多重度を正確に表現できることになります。
このように、クラス図は厳密な記述を施したつもりでもそこには実はいろいろなあいまいさが潜んでいます。では、そのあいまいさを排除するにはどうすればよいのでしょうか。それにはいくつかの方法があります。
1つは、そうしたクラス図に対する制約を、宣言的な記述で明確にすることです。もう1つは、クラス図以外のダイヤグラムを使用し、クラス図では表現できない部分を補完することです。
前者はいわゆる制約言語(OCL)を使うことを意味しますが、それはまた別の機会にしましょう。今回は、後者、つまりほかのダイヤグラムを利用し、表現不足な点を補完する方法を考えてみたいと思います。
ほかのダイヤグラムといっても、やはりいろいろあるのはいうまでもありません。静的なクラス図が苦手とする動的な振る舞いを表すダイヤグラムには、シーケンス図、コラボレーション図(UML 2.0ではコミュニケーション図)、ステートチャート図(同ステートマシン図)、アクティビティ図が存在し、それぞれが特徴を持ってクラス図を補完することができます。今回は状態の話のついでに、ステートチャート図に注目してみます。
Copyright © ITmedia, Inc. All Rights Reserved.