*begin *back *foward *end *contents

開発モデル編

第17章 動的構造モデル




 動的構造モデルとは、オブジェクトの動的な振る舞いをとらえるためのモデルであり、その目的は静的構造モデルの妥当性を検証したり、クラスのメソッド設計に対して基本的な指針となる振る舞い関係を決定することにある。
 Dropの動的構造モデルの図式表現は、UML表記法をベースとした表記を使う。ただし、中には、Drop独自に表記を拡張し新たな図としているものもある。そのような図には、Dropマークを付けている。
表17-1に動的構造モデルの表記図一覧を示す。


インスタンス図 オブジェクトの関連構造を示すにふさわしいシステム状態のスナップショットをイメージする *
コラボレーション図 インスタンス図にメッセージの送信順番を加えたもの
UML
シーケンス図 オブジェクト間のメッセージ送信の流れを時間軸でとらえたもの
UML
状態インスタンス図 重要なイベントに着目し、その実行前と実行後をインスタンス図の変化で表す *
状態図 状態と状態を引き起こすイベントを表す
UML
表17-1 動的構造モデルの表記図一覧



 動的構造モデルの中心となる表記は、コラボレーション図とシーケンス図である。コラボレーション図とは、ソフトウェアが動作する際、設計に重要となるオブジェクト同士の協調動作にスポットをあて、そのオブジェクト動作イメージにメッセージ交換の順序を付加したものである。シーケンス図は、オブジェクト動作イメージを協調せず、メッセージの流れを厳密にとらえようとするものである。
 上記図で利用頻度がもっとも少ないと思われる図は、状態図と状態インスタンス図である。状態図は対象システムの中に複雑な状態を持つとき、それをモデル化するものであり、状態にクリテイカルなシステムでは重要となるモデルである。(利用頻度は問題領域によって異なるだろうが..)
 動的構造モデルは、下記の項目に分けて解説をおこなう。

表記法 表記の説明
解説 表記法の詳細について解説
使い方 記述のための説明と表記のノウハウ
オブジェクトモデルの検証 クラス図に対する検証項目
Drop利用フェーズ Drop開発サイクルで使われるフェーズ
注意事項 使う必要のない場合、代替できる表記について
利用例 実際の利用事例





17.1 インスタンス図

*表記法

sorry this is image

図17-1 インスタンス図



*解説
 クラス図中の文字列にアンダーラインを付けることで、クラスからソフトウェア実行時に作成されるインスタンスを示すことができる。このインスタンス図は、主にソフトウェアのダイナミックな動作をとらえるモデルの図式表現である。一般的にインスタンスの記述は、インスタンス名と属性を省略したA形式が多く使われる。インスタンス図の中でインスタンス名が重要な役割(たとえば社員クラスの社長インスタンス)を表すものならDが使われる。また、属性値を表した方がモデル表現上理解性が高まるのならBまたはCを使うこともできる。
 Eは、インスタンス間のリンクを表す。このようにリンクがあるインスタンス同士は、メッセージ交換をおこなうことができる。このメッセージ交換まで表す図がコラボレーション図である。

*使い方
 インスタンス同士が実際にどのような関係を持つのかを図により説明するものであり、クラス図の理解性を高めるための補足として使用される。インスタンス図は、開発システムの動作中のオブジェクトを写真に撮るようなものである。つまり、システムのある状態を想定して模擬的に作成される事例のようなものである。このようにインスタンス図はクラスの関連構造の明確化が目的であり、クラス図のようにモデルの静的側面だけでは表しにくいシステムの重要な動作側面について補足・検証するものといえる。

*オブジェクトモデルの検証
*Drop利用フェーズ
 問題領域分析やコンポーネント分析フェーズ


*注意事項
 すべてのシステム状態に対してインスタンス図を使う必要はない。クラス図で表現できるインスタンスのリンクパターンが複雑で理解しづらいものを対象として作成するとよい。クラス図により十分理解できるようなインスタンスのリンク構造であるならばインスタンス図を作成する必要はない。

*利用例
 利用例を図17-2に示す。インスタンス図はクラス図を補足するために使用する。図では、社員オブジェトと顧客オブジェクトの多対多という関連をインスタンス同士のリンクによって具体的に示している例である。クラス図からインスタンス図に引かれている矢印は、この図を解説するためにつけた補足であり実際には記述しない。
 この図のように、インスタンス図をクラス図とペアにして使うことで、クラス図の理解性を高めることができる。




sorry this is image

図17-2 インスタンス図利用例





17.2 コラボレーション図


*表記法

sorry this is image

図17-3 コラボレーション図



*解説
 コラボレーション図は、「17.1 インスタンス図」にメッセージの順序を記述したものである。図のようにインスタンスを重ね合わせることでインスタンス集合を示すこともできる。また、イベントとは、一連の動作を引き起こすきっかけとなるものであり、それは他のオブジェクトからのメッセージであったりウインドウシステムからのイベントであったりする。
記述方法の詳細は以下のとおりである。

sorry this is image

図17-4 コラボレーションのメッセージタイプ










*使い方
 システムの利用ケースを例にとり、オブジェクトインスタンス間のメッセージの流れをとらえるもの。それぞれのメッセージには名前と順番を記述する。また、この図によってオブジェクト以外のリソース(たとえばデータベースとオブジェクトの連携)との関係を示すこともある。

*オブジェクトモデルの検証



*Drop利用フェーズ
システム共通設計フェーズ、コンポーネント分析フェーズ、コンポーネント設計・実装フェーズ、アプリケーション設計・実装フェーズ

*注意事項
 コラボレーション図は、頭に描くオブジェクトの動作イメージに近いものである。しかしながら、複雑なメッセージの流れを厳密にとらえるのは不得手である。このような場合は、シーケンス図の方がよいだろう。
 コラボレーション図は、アプリケーションの機能を複数のオブジェクトインスタンスで実現しているケースで、その関連が複雑で頭で考えにくい場合に使用するとよい。このときは、ラフスケッチによってあらゆるケースをコラボレーション図で記述し、機能をシミュレーションするのである。その結果、オブジェクトの仕様が具体化されたり、クラス間の連携の際の問題を発見したりすることができる。
 コラボレーション図は他のモデルと同じく、すべての機能に対して記述するものではない。あくまでオブジェクト同士のメッセージ交換が複雑なものを対象とする。

*利用例
 ここでは、社員検索システムを例に取り、コンポーネント開発においてコラボレーション図がどのように使われるかを順序を追って解説する。なお、ここで取り上げるクラスは、システム共通コンポーネントとして設計されていくという前提の基に話を進める。



17.3 シーケンス図


*表記法

sorry this is image

図17-8 シーケンス図



*解説
 シーケンス図は、1つのシーンを実現するための手順(シナリオ)を基にメッセージの流れを時間順に表したものである。図中の横線がメッセージを表し、縦線はオブジェクト(インスタンスまたはクラス)だけでなく、コンポーネントやサブシステムなども表す。オブジェクト内部の記述形式やメッセージタイプはコラボレーション図と同一の形式となる。
 縦太枠が示す活動中とは、メッセージを処理中もしくは他のオブジェクトにメッセージを送り出している状態、つまり、そのオブジェクトがメッセージに対して活動状態であることを示している。また、オブジェクトライフラインとは、オブジェクトインスタンスの生命線であり、インスタンスが破壊されるときは「X」を付けることもできる。
 リアルタイムな要求が必要とされるものについては、区間をA-Bのように指定し、その処理時間を示すことも可能である。

*使い方
 シーケンス図は、1つの機能を発生させるイベントを基に、オブジェクトが処理の役割分担をおこなう手順を記述したものである。これによって個々のオブジェクトのメッセージ処理手順が明確化される。オブジェクトはできるだけ手順性を持たせないように設計しなければならない。しかし、複数のオブジェクトの連携によって1つの機能を果たす場合は、必ずメツセージを受け渡す順序が発生するものである。しかも、オブジェクト間のメッセージ交換だけではなくソフトウェア上のオブジェクトではない部品やユーザともメッセージ交換が必要となる。このような複雑なメッセージ交換をおこなう箇所を抽出してモデル化することで、個々のオブジェクトがメッセージ受けた際のメソッドの手続きを具体化する。




*オブジェクトモデルの検証

*Drop利用フェーズ
 アプリケーション設計・実装フェーズ、システム共通設計フェーズ、コンポーネント設計・実装フェーズ


*注意事項
 シーケンス図は、限定されたオブジェクト同士が多くのメッセージ交換を行う問題に適している。たとえばクライアント・サーバーにおける非同期オブジェクト通信などのように固定されたオブジェクト同士がプロトコルに従ってメッセージを交換し合うようなパターンを厳密に示すには、コラボレーション図よりも適しているだろう。

*利用例
 ここでは、コラボレーション図で取り上げた同じ例題を使ってシーケンス図の特徴を解説する。



17.4 状態インスタンス図

*表記法
sorry this is image

図17-12 状態インスタンス図





*解説
 インスタンス図を応用して、インスタンスのリンク状態を何らかのイベントにより変化させる際にその前後の構造を記述する。このような図をDropでは状態インスタンス図と呼び、何らかのイベントによってもたらされるインスタンス同士のリンクの変化とインスタンスの属性値の変化を具体的に示し、イベントによって変化するインスタンスと属性値についての説明を補足する。

*使い方
 状態インスタンス図のパターンを正確に洗い出すことでアプリケーションの仕様を限定し、責任範囲を明確にできる。また、クラス図では伝えられないオブジェクト間の動的側面を仕様化するものである。
 この図は、複雑なデータ関連構造を持つ問題領域にて、その複雑性を解消するために、抽象化したデータモデルを実現しているようなデータ中心の基幹系アプリケーションにおいて有用となる。すなわち、抽象化されたデータモデルの関連構造から具体的に派生されるリンクの関係を重要なイベントの前後の構造として書き表すことがができる。
 状態インスタンス図によってオブジェクトのテスト項目を洗い出すこともできる。1つのイベントに対する前後のインスタンスリンクの構造を試験項目として記述するのである。

*オブジェクトモデルの検証

*Drop利用フェーズ
 アプリケーション設計・実装フェーズ、システム共通設計フェーズ

*注意事項
 状態インスタンス図は、何かのきっかけを基に、複数のインスタンスが協調し合って処理を実現した結果、インスタンスリンクの構造に変化が発生するようなパターンに対して使用する。自然言語だけで説明がた足りるようなパターンについては記述する必要はない。

*利用例
 利用例を図17-13に示す。

sorry this is image

図17-13 状態インスタンス図利用例





17.5 状態図

*表記法
sorry this is image

図17-14 状態図



*解説
 状態図とは、与えられた時刻において、有限数の状態の中からただ1つの状態をとるように記述される。図中の線は事象と呼ばれ、状態Aから状態Bに変化させるための刺激と考える。状態図は、オブジェクト内部の状態をとらえたり、問題領域に存在する現実世界の状態をとらえるために使用する。オブジェクト内部の状態をとらえる際には、状態はオブジェクトの属性となり、事象は、そのオブジェクトの操作の一部もしくは、そのオブジェクトをアクセスする他のオブジェクトの操作の一部となる。

*使い方
 状態図はある状態から遷移できる状態をすべて記述することを要求される。これによって、分析段階では、問題領域の動的側面を詳細に把握することができる。また、設計段階ではプログラムロジックの曖昧性をなくすことが可能となる。


*オブジェクトモデルの検証

*注意事項
 対象とする問題にもよるが、状態図は、オブジェクトメッセージやシーケンス図と比べて利用頻度が少ないだろう。状態図は、複雑な状態管理を必要とする部分のみの利用に止めなければならない。



*Drop利用フェーズ
 問題領域分析、コンポーネント分析、アプリケーション設計・実装フェーズ、システム共通設計フェーズ、コンポーネント設計・実装フェーズ

*利用例
 図17-15は、「備品管理システム」の問題領域分析フェーズにおいて状態図を使用した例である。この例では、登録備品の使用状態、廃棄状態、未使用状態があることを示している。これらは、問題領域中に本質的に存在する状態である。



sorry this is image

図17-15 状態図利用事例




*注意事項
 状態図を使うことで、むやみに不必要な状態を作り出してはならない。あくまで問題領域をソフトウェア化する際に複雑な状態がそこに含まれている時に、それをモデル化することで単純な状態になるよう整理することが主目的である。
 また、対象問題にもよるが問題領域分析フェーズでの利用は注意が必要である。あくまで、要求の中で状態管理が複雑なものだけを対象としなければならない。このフェーズで状態図を使うと議論の中心がソフトウェア領域になりがちである。



*begin *back *foward *end *contents