![]() 第7回 振る舞いをUMLで表現する-ステートチャート図 河合昭男 (有)オブジェクトデザイン研究所 2003/4/19 第6回「振る舞いをUMLで表現する-相互作用図」は、オブジェクト間のコラボレーションを表現する相互作用図について説明しました。相互作用図はオブジェクト指向の基本的考え方である自律分散協調動作をモデリングするものです。UMLには、メッセージの時系列を重視するシーケンス図とオブジェクト間のコラボレーションを簡単に表現するコラボレーション図の2つのダイアグラムが定義されています。 今回は「振る舞いをUMLで表現する」の第2回として、UMLのもう1つの動的モデルであるステートチャート図について説明します。ステートチャート図はある特定のオブジェクトに注目して、そのライフサイクルをモデリングするものです。 はじめに前回の復習の意味で、最後に宿題として挙げておきました問題について考えてみましょう。前回の説明では、お母さんと妹が協力して弁当を作るというシナリオで相互作用モデルを作成しました。これとはちょっと違う視点で相互作用モデルを考えてみましょう。
Aさんは卵焼き弁当を欲しいと思ったとします。モデルに登場するオブジェクトは弁当箱、炊飯器、米びつ、フライパンおよび冷蔵庫です。冷蔵庫には卵が入っています。これらのオブジェクトが協力してAさんの要求をどのように達成すればよいかを、オブジェクトを擬人化してちょっと遊び心で考えてください。 子ども向け漫画やアニメの世界では、しばしば「もの」を擬人化することがあります。例えばディズニーの『美女と野獣』では、ろうそく、時計、ポットなどが人のように話したり歩いたりします。それぞれは自分の責務・役割を持っています。ろうそくは周りを照らし、時計は時刻を示し、ポットはお茶をサービスします。 このようなアニメ風のシナリオで弁当作りの問題を考えてみましょう。
このシナリオをUMLのコラボレーション図で表現したものを図2に示します。
さらに、このシナリを2通りのシーケンス図で表現したものを図3と図4で示します。図3は流れが理解しやすいようにリターンを記述しましたが、実際には図4のように省略するのが普通です。また図4には活性化区間を記述しています。再帰型メッセージはもう1つ小さな活性化区間を追加します。
第6回「振る舞いをUMLで表現する-相互作用図」の【責務と操作】の中で説明しましたが、メッセージは、呼ばれる側のクラスの操作と考えることができます。相互作用図に現れるメッセージをクラスの操作として図5にまとめます。
これらの操作により、各クラスはその責務を果たすことができます。Aさんに弁当を提供するために、これら5つのオブジェクトに必要な責務を割り当てたわけです。 操作名に「xxを取得する()」とあり何か変な感じがすると思いますが、操作名は呼び出す側を主語にするというのが1つのガイドラインです。 さて、弁当作成の相互作用モデルとして、人間をオブジェクトと考えた第1のモデルと「もの」を擬人化した第2のモデルを考えましたが、次は人間と「もの」を組み合わせた第3のモデルを考えてみましょう。ここではシナリオを見やすくするために個条書きにしました(図6)。
第3のモデルのコラボレーション図とシーケンス図は宿題としておきますので、皆さんで考えてください。
図7は、米びつの在庫量を属性で表現した例です。2合入っている状態から1合取り出すと1合入っている状態になります。そこからさらに1合取り出すと空の状態となり、そこに2合追加すると2合入っている状態に戻ります。これらの状態はオブジェクトの属性の値で表現することができます。
図8は、冷蔵庫の卵の在庫量をリンクで表現した例です。冷蔵庫に卵が2個入っている状態は「:冷蔵庫」と2つの「:卵」とのリンクで表現します。この状態から1個取り出すとリンクが1つ外れた状態となります。そこからさらに1個取り出すと「:冷蔵庫」と「:卵」のリンクは存在しない状態となります。そこへ2個追加すると2つリンクのある状態に戻ります。このようにリンクの有無で状態変化を示すこともあります。
次に「弁当箱」という1つのオブジェクトに注目してその状態の変化を追ってみましょう。 初期状態は空の状態です。次に弁当を作り始めると、ご飯と卵焼きのどちらが先に準備できるか分かりませんが、最終的に卵焼きとご飯が入った状態になります。次にAさんが食べ終わった後、また空になりますが汚れている状態です。洗うと最初の(きれいな)空の状態に戻ります(図9)。
ステートチャート図は、ある1つのオブジェクトに注目してその状態の変化をモデリングします。オブジェクトの生成から消滅までのライフサイクルを表現することもできます。 図9をUMLのステートチャート図で表現したものを図10に示します。オブジェクトの状態は角丸四角で表し、中に状態名を記入します。初期状態は黒丸で示します。ある状態から別の状態への状態遷移は矢印で関係付けます。状態遷移を引き起こすイベントを矢印の横に記述します。
以上、前回と今回の2回で、UMLの2つの動的モデル-相互作用図とステートチャート図について弁当作成のシナリオを使って説明しました。普通の図とUMLのダイアグラムを並べて表現しましたが、UMLのダイアグラムがごく自然でそんなに難しいものではないと感じていただければ幸いです。 次回は最終回として補足説明とまとめを行います。
【参考文献】 『まるごと図解 最新 オブジェクト指向がわかる』、河合昭男、技術評論社 『まるごと図解 最新UMLがわかる』、河合昭男、技術評論社【2002/12新刊】 『ゼロからわかるオブジェクト指向の世界』、岩田裕道+手島歩三、日刊工業新聞社 『Object-Oriented Methods:A Foundation』、James Martin+James Odell、Prentice Hall
|
![]() [an error occurred while processing this directive] |