【チュートリアル】 - 設計編

bn_comp.gif (1256 バイト)

2. モデル・図の作成
2.6 コンポーネント図
jun 今度は、開発環境内の実際のソフトウェアの構成を考えてみよう。これを表したものが「コンポーネント図」なんだよ。
 
<<コンポーネント図 >>
◆コンポーネント図ってどんな図?
  • 開発環境内のソフトウェアモジュール構成を表現する。
  • クラスやオブジェクトの実装コンポーネントへの割り当てを表示したり、ソースコードや実行モジュールの間の依存関係(コンパイルやリンクの順序など)を表現したりする。
◆コンポーネント図

 wd_com.gif (2088 バイト)

コンポーネント
  • コンパイルやリンクや実行の単位で、システムの物理的構造を組み立てるブロックの役目を果たす。
  • いろいろな種類のコンポーネントを定義することができる。(exe、dll、main program、header、module、formなど)
依存関係
  • コンポーネント間の使用関係。

 

 

jun 実装の局面を示し、ソースコードの構造と実行時の実装の構造を表す図を実装図というんだよ。実装図には2種類あって、1つがここで作成する「コンポーネント図」で、コードそのものの構造を表すんだ。もう1つは「配置図」といって、実行時のシステムの構造を表すもので、この後に作成するよ。
chen コンポーネント図は、コンポーネントとコンポーネント間の依存関係を使って表せばいいのですか?
jun そうだよ。コンポーネントには、ソースコードのコンポーネント、バイナリコードのコンポーネント、そして実行可能なコンポーネントなどがあるんだよ。あるコンポーネントはコンパイル時に、あるものはリンク時に、そしてあるものは実行時に存在するんだ。2つ以上の時点で存在するものもあるよ。また、場合によっては、関連するドキュメントを含むこともあるんだよ。
chen 分かりました。
2_6_1
jun そして、コンポーネント間に依存関係を引くことで、クライアントのコンポーネントが何らかの方法でサプライアのコンポーネントに依存していることを示すんだ。例えば、コンパイルやリンクをするのにどのファイルが必要かを示したりするんだよ。C++では、コンパイルの依存関係は「#include」命令によって表されるんだ。
chen なるほど、そういうことですか。
jun 「注文」クラスについて見てみよう。C++の場合は、ヘッダファイル(.h)と実装ファイル(.cpp)がセットとして存在するから、図2.6.1のようにヘッダファイルを#includeすることになるんだよ。

 

図2.6.1 C++における、コンポーネントの関係:「注文」クラスの例

composample2.gif (1128 バイト)
wd_com2.gif (7716 バイト) wd_com3.gif (7606 バイト)


chen クラスは、複数のファイルにマッピングされることもあるのですね?
jun そうだよ。また、複数のクラスをひとつのファイルに入れてもいいんだよ。
chen Jun先輩、コンポーネント図は、クラス図やシーケンス図を考慮しながら、物理的なファイルの依存関係に着目して作成すればいいのですね。
jun そういうことだよ。では、今回のモデルについてコンポーネント図を作成してみようか。ここでは、「ドメイン」パッケージに含まれるクラスが、コンポーネントにどう割り当てられているかを考えてみよう。

 

27_tit_5.jpg (12577 バイト)

 

 

図2.6.2 Chen君が作成したコンポーネント図

compo1new

 

chen 今回のモデルでは、ひとつのクラスがヘッダファイルと実装ファイルの2つのコンポーネントに対応しています。ヘッダファイルには<<Package Specification>>、実装ファイルには<<Package Body>>というステレオタイプをそれぞれ付けています。各コンポーネントには、図2.6.3で示している各クラスの定義が含まれていますから、クラス間の関係を考えながら依存関係を引きました。
 

図2.6.3 Chen君が作成したコンポーネント図の補足:クラスとコンポーネントの対応表

コンポーネント クラス
Customer 顧客
Order 注文
Order Line 注文商品
Delivery 配送
Delivery Center 配送センター
Inventory 在庫
Product 商品

 

jun よく考えたね。
 

bn_note_com.gif (1598 バイト)

 

jun 次は、配置図を作成しよう。

 

Prev. Next Home Top