オブジェクト指向開発〜動的分析その3/メッセージシーケンス

メッセージシーケンス分析。

オブジェクト指向でのプログラムの動き

ある製品を売り出すまでを考えると、そこには複数の部署がそれぞれの仕事を担当し、それらが組合わさる事で最終的な販売までたどり着く。このようにシステムは、複数のクラスが協力し合う様にして構成される。
静的分析では、インスタンスが対話する様な情報の受け渡しやお互いの操作のパスを「クラス間関連」として分析した。動的分析ではそれを参考にして、どのような操作がどのような順序でクラス間で行われているかを分析する。これを一般的に『メッセージシーケンス』と言う。

メッセージシーケンスの分析

メッセージシーケンスを分析するために作成する図には、『シーケンス図』と『コラボレーション図』という2つの記法がある。これらの記法はまだ過渡期にあり、様々な手法が考案されている。ここでは、一般的な手法を利用する。

シーケンス図

メッセージシーケンスの分析対象は、プログラム全体の流れ。単に処理の流れを追うだけでなく、「それを誰がするのか」に注目し、それぞれの処理を持つ倉明日インスタンスを中心的な単位として図を記述していく。シーケンス図はその処理を時間軸で記述するための物。
オブジェクト指向では、色々な物を「オブジェクト」と呼ぶが、以降「クラスのインスタンス」を「オブジェクト」と呼ぶ事にする。

シーケンス図の記述方法

『シナリオ』と呼ばれる、一連の処理の流れを自然言語で記述した文章を用意する。このシナリオは、『分析を行う処理の流れの仕様』と言える。シーケンス図の主役は、シナリオに登場するオブジェクトたち。
図の第一段階は、オブジェクトを横軸として、横に並べて配置する。各オブジェクトの下には縦軸として破線を引いておく。この縦軸は、時間を表す。
次に、ある処理について考える。その処理が行われている事を表すために、縦長の長方形を時間軸(破線)上に配置する。この長方形が存在する間は、オブジェクトが処理をしている事を意味する。他のオブジェクトに処理をさせる場合は、その長方形上から矢印をオブジェクトに向かって書き、対象のオブジェクトの時間軸上にも同様に長方形を配置する。矢印上には、何をするのかを表すメッセージを記述する。メッセージが戻る様な場合は、既に配置した長方形の上に重ねて戻り処理用の長方形を配置し、そこに向けて矢印を書く。
シーケンス図の基準になるオブジェクトは左側に記述する。

シーケンス図を作成する際の注意

メッセージと操作を同じ物として考えがちだが、実際の処理が「操作」でそれを起動するのが「メッセージ」。メッセージはあくまでも2つのオブジェクト間でかわされる物。
プログラムの実行時には、同じクラスから生成されたインスタンスであっても必ず同じ処理をするとは限らない。つまり、シーケンス図に同じクラスから生成された別のインスタンスが横に並ぶという事もあり得る。
シーケンス図では、オブジェクトの実際の働きに注目する事になる。そのため、システムが「いかにすれば動くのか」という視点から考えがちになる。その結果、問題領域を観察的視点から分析するのではなく、システムを強引に動かす様なメッセージのやり取りを作ってしまいがち。
シーケンス図を基準にすると、同じ処理をするにしても別の図を書く事が出来る。シーケンス図で分かるのは、それがきちんと動作するかどうか。どれもが動作するのであれば、それ以上の判断は困難。システムの成り立ちから、より適した処理を判断するためには、クラス図を参考にするのが一番。

コラボレーション図

オブジェクトの動的なメッセージのやり取りは、クラスの静的関連と非常に密接な関わりがある。シーケンス図だけでは分かりにく、全体的なオブジェクト間の関連を補完するために『コラボレーション図』がある。図が表現している事自体はシーケンス図と同じだが、その表現方法が異なる。

オブジェクトの表記
オブジェクトは四角で囲まれる。オブジェクトの名前を書き、その名前には下線が引かれる。
メッセージの表記
オブジェクトの間に、矢印とメッセージが書かれる。このメッセージには、行われる順番が分かる様に数字が振られる。メッセージに階層がある場合は、2.1 などの様に順次番号を割り振っていく。ただし、このような方法で処理の流れを把握する事には限界があるため、この場合はシーケンス図を利用する方がいい。

コラボレーション図は、動的であるオブジェクト間の操作の構造を静的に参照するための図。メッセージのやり取りの、「時間軸での把握」はシーケンス図、「全体構造の把握」はコラボレーション図という様に、目的に応じて使い分けるといい。

メッセージシーケンス分析の実際

2つの図を全てのオブジェクトについて作ると、それは大変な量になってしまう。実際、メッセージシーケンスの分析を行うのは、かなりメインの処理に近い部分の操作。つまり、システムの大まかな動きを決めるときに使う手法と考えていい。

プロフィール

このブログ記事について

このページは、koshigoeが2005年12月17日 22:42に書いたブログ記事です。

ひとつ前のブログ記事は「Google Personalized Homepageのwidgetが作れない」です。

次のブログ記事は「widgetをGoogle Baseでホスティング」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。