これはFM-AMラジオの状態マシン図である。
on 状態のサブ状態では、FMとAMが切り替えられるようになっていて、FM状態のときにevAMが起きるとAM状態に、AM状態のときにevFMが起きると FM状態に遷移する。また、on状態のサブ状態には、浅い履歴疑似状態が設定されていて、初めて入ったときはFMが、2回目以降入ったときは、前回選ばれていたほうの音源が鳴る。
そのFM-AMラジオに機能拡張の仕様変更が着た。これは4つの音源を切り替えられるCDラジオの状態マシン図である。
on 状態は、コンポジット状態であり、そのサブ状態には、FM、CD、AM、および、TVの4つの状態があり、on状態であれば、それぞれに対応する4つのイベントがいつ起きても、その状態に直接遷移する。たとえば、evCD が起きれば、FM、AM、TVいずれからでも、CD状態に遷移する。
このような場合、状態が4つ、イベントが4つあるので、遷移が4 x 3=12本となり、とても見にくいモデルとなってしまう。そんなときに次のモデルのように描くと、すっきり描くことができる。
on状態を起点とする遷移を書くと、それはon状態であればいつでも、という意味になる。on状態のときはどこであっても、evFMがあれば、FM状態に遷移する。
これをAny Stateパターンと言う。 リアルタイムUMLワークショップという本の中で、ブルースダグラスさんが命名している。
リアルタイムUMLワークショップ [大型本]
ブルース・ダグラス (著), 鈴木 尚志 (翻訳)
http://www.amazon.co.jp/dp/4798121118/
このように、Any Stateパターンを使うと、12本の遷移を4本で済ませることができる。