2. モデル・図の作成 |
2.6 コンポーネント図 |
![]() |
今度は、開発環境内の実際のソフトウェアの構成を考えてみよう。これを表したものが「コンポーネント図」なんだよ。 | |||||||||||||||||
|
||||||||||||||||||
![]() |
実装の局面を示し、ソースコードの構造と実行時の実装の構造を表す図を実装図というんだよ。実装図には2種類あって、1つがここで作成する「コンポーネント図」で、コードそのものの構造を表すんだ。もう1つは「配置図」といって、実行時のシステムの構造を表すもので、この後に作成するよ。 | |||||||||||||||||
![]() |
コンポーネント図は、コンポーネントとコンポーネント間の依存関係を使って表せばいいのですか? | |||||||||||||||||
![]() |
そうだよ。コンポーネントには、ソースコードのコンポーネント、バイナリコードのコンポーネント、そして実行可能なコンポーネントなどがあるんだよ。あるコンポーネントはコンパイル時に、あるものはリンク時に、そしてあるものは実行時に存在するんだ。2つ以上の時点で存在するものもあるよ。また、場合によっては、関連するドキュメントを含むこともあるんだよ。 | |||||||||||||||||
![]() |
分かりました。 | |||||||||||||||||
![]() |
||||||||||||||||||
![]() |
そして、コンポーネント間に依存関係を引くことで、クライアントのコンポーネントが何らかの方法でサプライアのコンポーネントに依存していることを示すんだ。例えば、コンパイルやリンクをするのにどのファイルが必要かを示したりするんだよ。C++では、コンパイルの依存関係は「#include」命令によって表されるんだ。 | |||||||||||||||||
![]() |
なるほど、そういうことですか。 | |||||||||||||||||
![]() |
「注文」クラスについて見てみよう。C++の場合は、ヘッダファイル(.h)と実装ファイル(.cpp)がセットとして存在するから、図2.6.1のようにヘッダファイルを#includeすることになるんだよ。 |
|||||||||||||||||
|
||||||||||||||||||
![]() |
クラスは、複数のファイルにマッピングされることもあるのですね? | |||||||||||||||||
![]() |
そうだよ。また、複数のクラスをひとつのファイルに入れてもいいんだよ。 | |||||||||||||||||
![]() |
Jun先輩、コンポーネント図は、クラス図やシーケンス図を考慮しながら、物理的なファイルの依存関係に着目して作成すればいいのですね。 | |||||||||||||||||
![]() |
そういうことだよ。では、今回のモデルについてコンポーネント図を作成してみようか。ここでは、「ドメイン」パッケージに含まれるクラスが、コンポーネントにどう割り当てられているかを考えてみよう。 | |||||||||||||||||
|
図2.6.2 Chen君が作成したコンポーネント図
|
![]() |
今回のモデルでは、ひとつのクラスがヘッダファイルと実装ファイルの2つのコンポーネントに対応しています。ヘッダファイルには<<Package Specification>>、実装ファイルには<<Package Body>>というステレオタイプをそれぞれ付けています。各コンポーネントには、図2.6.3で示している各クラスの定義が含まれていますから、クラス間の関係を考えながら依存関係を引きました。 | ||||||||||||||||
|
|||||||||||||||||
![]() |
よく考えたね。 | ||||||||||||||||
|
|||||||||||||||||
![]() |
次は、配置図を作成しよう。 | ||||||||||||||||