(57)【特許請求の範囲】
【請求項１】
それぞれが受け持つ責務が明確な複数の階層に属する複数のコンポーネントフレームワークと、
フレームワークコアと
を備え、
前記フレームワークコアは、コンピュータを第１接続制御手段として機能させ、前記複数のコンポーネントフレームワークのそれぞれは、コンピュータを第２接続制御手段として機能させ、
前記第１接続制御手段は、前記複数のコンポーネントフレームワークのそれぞれに属するコンポーネントと、他の階層に属する他のコンポーネントとの接続制御のうち、前記複数の階層に共通する制御を行い、
前記第２接続制御手段は、前記接続制御のうち、前記複数の階層のそれぞれが受け持つ責務に依存した制御を行う
フレームワーク。
【請求項２】
請求項１に記載のフレームワークにおいて、
前記第２接続制御手段は、接続元コンポーネントから接続先コンポーネントへのアクセスする入り口を一元管理するためのプラグインコンポーネントファサードを生成する手段を備え、
前記プラグインコンポーネントファサードには、接続先コンポーネントによって責務の実現手段が登録される
フレームワーク。
【請求項３】
請求項１又は２に記載のフレームワークにおいて、
前記第１接続制御手段と２接続制御手段の少なくとも一方は、コンポーネントの接続先となる前記他のコンポーネントが登録された設定ファイルに基づいて、コンポーネントの接続先を決定する手段を備える
フレームワーク。
【請求項４】
請求項１から３のいずれか１項に記載のフレームワークが記録された記憶装置と、
前記フレームワークを実行するＣＰＵと
を具備する
コンピュータシステム。
【請求項５】
それぞれが受け持つ責務が明確な複数の階層に属する複数のコンポーネントフレームワークと、フレームワークコアとを備えるフレームワークをコンピュータが実行することで実現されるシステム構築方法において、
コンピュータが、前記フレームワークコアを実行することで実現される第１ステップと、
前記コンピュータが、前記コンポーネントフレームワークを実行することで実現される第２ステップと
を具備し、
前記第１ステップは、前記複数のコンポーネントフレームワークのそれぞれに属するコンポーネントと、他の階層に属する他のコンポーネントとの接続制御のうち、前記複数の階層に共通する制御を行うステップを含み、
前記第２ステップは、前記接続制御のうち、前記複数の階層のそれぞれが受け持つ責務に依存した制御を行うステップを含む
システム構築方法。
【請求項６】
請求項５に記載のシステム構築方法において、
前記第２ステップは、接続元コンポーネントから接続先コンポーネントへのアクセスする入り口を一元管理するためのプラグインコンポーネントファサードを生成するステップを備え、
前記プラグインコンポーネントファサードには、接続先コンポーネントによって責務の実現手段が登録される
システム構築方法。
【請求項７】
請求項５又は６に記載のシステム構築方法において、
前記第１ステップと前記第２ステップの少なくとも一方は、コンポーネントの接続先となる前記他のコンポーネントが登録された設定ファイルに基づいて、コンポーネントの接続先を決定するステップを更に備える
システム構築方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンポーネント指向によるシステム構築に関し、特にコンポーネント間を接続するフレームワーク、及びシステム構築方法に関する。
【背景技術】
【０００２】
特定の機能を実現するソフトウェアコンポーネント（ソフトウェア部品）を複数組み合わせることで、様々な機能を有する１つのシステム（ソフトウェア）を構成することができる（コンポーネント指向設計）。例えば、印刷コンポーネント、ファクシミリコンポーネント、コピーコンポーネント、スキャナコンポーネントを搭載することで、印刷機能、ファクシミリ機能、コピー機能、スキャナ機能を有する複合機が構成される。以下では、ソフトウェアコンポーネントを単にコンポーネントと称す。
【０００３】
複数のコンポーネントを備えるシステムでは、一部のコンポーネントを変更することで、当該コンポーネントに係る機能の仕様を変更することが可能である。例えば、ユーザ毎に設計された印刷コンポーネントを搭載することで、複合機におけるコピー機能をユーザに応じた仕様に変更することができる。この際、新たに搭載するコピーコンポーネントは、他のコンポーネントの接続仕様に対応するように設計する必要がある。又、コンポーネント間を接続する場合、接続先となるコンポーネントの接続仕様（拡張仕様）を考慮する必要がある。
【０００４】
例えば、図１に示すように、レーザセンサコンポーネント６０１の接続仕様に対応したレーザ出力装置コンポーネント５０１を、レーザ砲コンポーネント６０２に接続する場合を説明する。レーザ砲コンポーネント６０２の接続仕様がレーザセンサコンポーネント６０１と同じ場合、ソースコードを変更することなくレーザ出力装置コンポーネント５０１をレーザ砲コンポーネント６０２に接続することができる。しかし、レーザ砲コンポーネント６０２とレーザセンサコンポーネント６０１の接続仕様が異なる場合、レーザ出力装置コンポーネント５０１のソースコードを修正し、レーザ砲コンポーネント６０２に接続可能なレーザ出力コンポーネント５０２を設計する必要がある。すなわち、仕様（性能）が同じレーザ出力装置コンポーネント“ｔｙｐｅＡ”を、接続先コンポーネントと同じ数だけ設計しなければならず、設計コストが増大してしまう。
【０００５】
このようなソースコードの修正に要する工数を低減するため、コンポーネント間の接続用のグルーコンポーネントを利用することが、例えば、特開２００９−２３８２２９に記載されている（特許文献１参照）。
【０００６】
特許文献１に記載の技術を図１に示す一例に適応した場合、図２に示すように、レーザ出力装置コンポーネント５０１とレーザセンサコンポーネント６０１との間を接続するグルーコンポーネント７０１と、レーザ出力装置コンポーネント５０１とレーザ砲コンポーネント６０２との間を接続するグルーコンポーネント７０２とが用意される。この場合、接続先の仕様に応じたグルーコンポーネント７０１、７０２を用意できれば、レーザ出力装置コンポーネント５０１自体のソースコードを変更しなくても接続先を変更できるため、接続先を考慮せずにレーザ出力装置コンポーネント５０１の設計や利用が可能となる。
【０００７】
しかし、設計者は、グルーコンポーネントを作成する際、接続したいコンポーネント間の接続仕様を考慮しなければならない。又、接続元と接続先のコンポーネントの組合せに対応した数だけグルーコンポーネントを設計しなければならないため、特許文献１に記載の方法では、設計コスト低減を抜本的に解決することはできない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−２３８２２９
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、コンポーネントの接続仕様を考慮せずにコンポーネントの接続先を変更可能なフレームワーク、及びコンピュータシステムを提供することにある。
【００１０】
本発明の他の目的は、コンポーネントの接続仕様を考慮せずにソフトウェアにコンポーネントを追加可能なフレームワーク、及びコンピュータシステムを提供することにある。
【００１１】
本発明の更に他の目的は、コンポーネント指向ソフトウェア開発における開発コストを低減することにある。
【課題を解決するための手段】
【００１２】
上記の課題を解決するために、本発明は、以下に述べられる手段を採用する。その手段を構成する技術的事項の記述には、［特許請求の範囲］の記載と［発明を実施するための形態］の記載との対応関係を明らかにするために、［発明を実施するための形態］で使用される番号・符号が付加されている。ただし、付加された番号・符号は、［特許請求の範囲］に記載されている発明の技術的範囲を限定的に解釈するために用いてはならない。
【００１３】
本発明によるフレームワークは、それぞれが受け持つ責務が明確な複数の階層に属する複数のコンポーネントフレームワークとフレームワークコアとを備える。フレームワークコアは、コンピュータを第１接続制御手段として機能させる。又、複数のコンポーネントフレームワークのそれぞれは、コンピュータを第２接続制御手段として機能させる。第１接続制御手段は、複数のコンポーネントフレームワークのそれぞれに属するコンポーネントと、他の階層に属する他のコンポーネントとの接続制御のうち、複数の階層に共通する制御を行う。第２接続制御手段は、複数のコンポーネントフレームワークのそれぞれに属するコンポーネントと、他の階層に属する他のコンポーネントとの接続制御のうち、複数の階層のそれぞれが受け持つ責務に依存した制御を行う。
【００１４】
本発明に係るコンピュータシステムは、上記フレームワークが記録された記憶装置と、上記フレームワークを実行するＣＰＵとを具備する。
【００１５】
本発明によるシステム構築方法は、それぞれが受け持つ責務が明確な複数の階層に属する複数のコンポーネントフレームワークと、フレームワークコアとを備えるフレームワークをコンピュータが実行することで実現される。本発明によるシステム構築方法は、コンピュータが、フレームワークコアを実行することで実現される第１ステップと、コンピュータが、コンポーネントフレームワークを実行することで実現される第２ステップとを具備する。第１ステップは、複数のコンポーネントフレームワークのそれぞれに属するコンポーネントと、他の階層に属する他のコンポーネントとの接続制御のうち、複数の階層に共通する制御を行うステップを含む。第２ステップは、複数のコンポーネントフレームワークのそれぞれに属するコンポーネントと、他の階層に属する他のコンポーネントとの接続制御のうち、複数の階層のそれぞれが受け持つ責務に依存した制御を行うステップを含む。
【発明の効果】
【００１６】
本発明によれば、コンポーネントの接続仕様を考慮せずにコンポーネントの接続先を変更することができる。
【００１７】
又、コンポーネントの接続仕様を考慮せずにソフトウェアシステムにコンポーネントを追加することができる。
【００１８】
更に、コンポーネント指向ソフトウェア開発における開発コストを低減することができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、従来技術によるコンポーネント間の接続方法における問題点の一例を示す図である。
【図２】図２は、特許文献１によるコンポーネント間の接続方法における問題点の一例を示す図である。
【図３】図３は、本発明によるコンポーネント間の接続アーキテクチャの一例を示す概念図である。
【図４】図４は、本発明によるコンポーネントの階層化構造の一例を示す概念図である。
【図５】図５は、本発明によるコンピュータシステムの構成の一例を示す図である。
【図６】図６は、本発明に係る設定ファイルの構造の一例を示す図である。
【図７】図７は、本発明によるコンピュータシステムの構成を示す機能ブロック図である。
【図８】図８は、本発明によるコンポーネント指向ソフトウェア構築における初期化動作の概要を示すシーケンス図である。
【図９】図９は、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の概要を示すシーケンス図である。
【図１０】図１０は、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の概要を示す図である。
【図１１】図１１は、本発明に係るコンポーネント、コンポーネントフレームワーク、及びフレームワークコアの依存関係の一例を示すコンポーネント図である。
【図１２Ａ】図１２Ａは、本発明に係るフレームワークコアの構造の一例を示すクラス図である。
【図１２Ｂ】図１２Ｂは、本発明に係るフレームワークコアの構造の一例を示すクラス図である。
【図１３Ａ】図１３Ａは、本発明に係るフレームワークコアとコンポーネントフレームワークとの接続関係の一例を示すクラス図である。
【図１３Ｂ】図１３Ｂは、本発明に係るフレームワークコアとコンポーネントフレームワークとの接続関係の一例を示すクラス図である。
【図１３Ｃ】図１３Ｃは、本発明に係るフレームワークコアとコンポーネントフレームワークとの接続関係の一例を示すクラス図である。
【図１３Ｄ】図１３Ｄは、本発明に係るフレームワークコアとコンポーネントフレームワークとの接続関係の一例を示すクラス図である。
【図１３Ｅ】図１３Ｅは、本発明に係るフレームワークコアとコンポーネントフレームワークとの接続関係の一例を示すクラス図である。
【図１３Ｆ】図１３Ｆは、本発明に係るフレームワークコアとコンポーネントフレームワークとの接続関係の一例を示すクラス図である。
【図１４Ａ】図１４Ａは、本発明に係る第２階層のコンポーネントの構造の一例を示すクラス図である。
【図１４Ｂ】図１４Ｂは、本発明に係る第２階層のコンポーネントの構造の一例を示すクラス図である。
【図１５Ａ】図１５Ａは、本発明に係る第３階層のコンポーネントの構造の一例を示すクラス図である。
【図１５Ｂ】図１５Ｂは、本発明に係る第３階層のコンポーネントの構造の一例を示すクラス図である。
【図１６Ａ】図１６Ａは、本発明に係る第３階層のコンポーネントの構造の他の一例を示すクラス図である。
【図１６Ｂ】図１６Ｂは、本発明に係る第３階層のコンポーネントの構造の他の一例を示すクラス図である。
【図１７Ａ】図１７Ａは、本発明に係る第４階層のコンポーネントの構造の一例を示すクラス図である。
【図１７Ｂ】図１７Ｂは、本発明に係る第４階層のコンポーネントの構造の一例を示すクラス図である。
【図１８Ａ】図１８Ａは、本発明によるコンポーネント指向ソフトウェア構築における初期化動作の詳細を示すシーケンス図である。
【図１８Ｂ】図１８Ｂは、本発明によるコンポーネント指向ソフトウェア構築における初期化動作の詳細を示すシーケンス図である。
【図１９Ａ】図１９Ａは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｂ】図１９Ｂは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｃ】図１９Ｃは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｄ】図１９Ｄは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｅ】図１９Ｅは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｆ】図１９Ｆは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｇ】図１９Ｇは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｈ】図１９Ｈは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｉ】図１９Ｉは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図１９Ｊ】図１９Ｊは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の詳細を示すシーケンス図である。
【図２０Ａ】図２０Ａは、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の詳細を示すシーケンス図である。
【図２０Ｂ】図２０Ｂは、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の詳細を示すシーケンス図である。
【図２０Ｃ】図２０Ｃは、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の詳細を示すシーケンス図である。
【図２０Ｄ】図２０Ｄは、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の詳細を示すシーケンス図である。
【図２０Ｅ】図２０Ｅは、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の詳細を示すシーケンス図である。
【発明を実施するための形態】
【００２０】
以下、添付図面を参照しながら本発明の実施の形態を説明する。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示している。
【００２１】
以下、添付図面を参照して、本発明によるコンピュータシステムの構築方法、コンピュータシステム、及びコンピュータシステムの動作について実施の形態を説明する。本実施の形態では、コンポーネント指向ソフトウェア構築によって構築されたコンピュータシステムについて、戦闘シミュレータを一例に説明する。
【００２２】
（アーキテクチャ）
図３は、本発明によるコンポーネント間の接続アーキテクチャ（コンポーネントの拡張アーキテクチャ）の一例を示す概念図である。図３を参照して、本発明に係るフレームワークは、コンポーネント３間の接続処理のうち、複数の階層に共通する制御を行うフレームワークコア１と、コンポーネント３間の接続処理のうち階層化された責務に応じた処理を行うコンポーネントフレームワーク２の２層構造となっている。フレームワークコア１は、コンポーネント３が持つ設定ファイル４を取得し、設定ファイル４の記述で要求されている接続先となるコンポーネント３を２層構造のフレームワークに接続されたコンポーネント３から検索して特定する。フレームワークコア１は、特定した接続先コンポーネント３と設定ファイル４の参照先のコンポーネント３との間の接続処理を行う。その際、コンポーネント３が属する階層に応じた接続処理は、コンポーネントフレームワーク２が行う。コンポーネント間の接続処理に関するクラスは、フレームワークコア１、コンポーネントフレームワーク２、コンポーネント３において継承関係を持つ。又、オブジェクト指向言語の特性の１つであるポリモフィズムを利用することで、フレームワークコア１からコンポーネントフレームワーク２、フレームワークコア１からコンポーネント３の特定のメソッド（関数）を呼び出すことができる。本発明では、この２つの特徴によって、図３で示した複数の階層を越えた接続処理が実現される。
【００２３】
図３に示す一例では、フレームワークコア１上に第ｎ階層のコンポーネントフレームワーク２−ｎと第ｎ＋１階層のコンポーネントフレームワーク２−（ｎ＋１）が構築されている。又、２つのコンポーネント３−ｎＡ、３−ｎＢが第ｎ階層のコンポーネントフレームワーク２−ｎに属し、コンポーネント３−（ｎ＋１）が第ｎ＋１層のコンポーネントフレームワーク２−（ｎ＋１）に属している。
【００２４】
本願発明によるコンピュータシステムでは、コンポーネント３間の接続（コンポーネント３の拡張）に関わる基本処理は、フレームワークコア１が行う。但し、コンポーネント３間の接続（コンポーネント３の拡張）に関わる接続処理において、コンポーネントフレームワーク２に応じた差分（階層毎に受け持つ責務に依存した処理）は、コンポーネントフレームワーク２が担う。又、コンポーネント３の接続先コンポーネント（拡張先コンポーネント）は、コンポーネント３毎に設定された設定ファイル４によって指定される。システム構築の際、コンポーネント３間の接続は下層側から上層側に対して行われる。この際、フレームワークコア１は、例えば、設定ファイル４−ｎＡに基づいてコンポーネント３−ｎＡの接続先となるコンポーネント３を特定し、設定ファイル４−ｎＢに基づいてコンポーネント３−ｎＢの接続先となるコンポーネント３を特定する。
【００２５】
コンポーネント３−（ｎ＋１）は、コンポーネントフレームワーク２−（ｎ＋１）に接続することにより、コンポーネント３−（ｎ＋１）の接続先として指定されたコンポーネント３−ｎＡ、３−ｎＢのいずれか又は双方とプラグイン接続する。これにより、コンポーネント３−ｎＡ、３−ｎＢからコンポーネント３−（ｎ＋１）へアクセスする入り口として、コンポーネントフレームワーク２−（ｎ＋１）からプラグインコンポーネントファサードが提供される。その後、コンポーネント３−（ｎ＋１）が、プラグインコンポーネントファサードに対し責務をアタッチ（登録）することで、コンポーネント３−ｎＡ、３−ｎＢのいずれか又は双方とコンポーネント３−（ｎ＋１）とが接続される。
【００２６】
図３（ａ）に示す一例では、設定ファイル４−ｎＡによって、コンポーネント３−ｎＡの接続先としてコンポーネント３−（ｎ＋１）が指定される。これにより、コンポーネント３−（ｎ＋１）は、フレームワークコア１及びコンポーネントフレームワーク２−（ｎ＋１）、２−ｎを介してコンポーネント３−ｎＡと接続される。本願発明では、設定ファイル４を変更することで、コンポーネント３間の接続先を変更することができる。例えば、図３（ａ）で示した設定ファイル４−ｎＡからコンポーネント３−（ｎ＋１）を接続先とする指定をはずし、設定ファイル４−ｎＢにコンポーネント３−（ｎ＋１）を接続先として指定することを規定する。これにより、図３（ｂ）で示すように、コンポーネント３−ｎＢの接続先としてコンポーネント３−（ｎ＋１）が指定され、当該コンポーネント間が接続されることとなる。すなわち、本発明によるコンピュータシステムでは、設定ファイル４を変更するだけでコンポーネント３の接続先を変更することが可能となる。又、コンポーネント３間の接続は、フレームワークコア１及びコンポーネントフレームワーク２において行われているため、接続先を変更するために、グルーコンポーネントを用意することや、コンポーネント３のソースコードを変更する必要はない。
【００２７】
本発明に係る問題領域は、それぞれの階層が受け持つ責務が明確な複数の階層を有する。このため、コンポーネント３が有する責務に応じて、当該コンポーネントが属する階層が決まる。尚、問題領域とは、システム化の対象となる領域（Ｐｒｏｂｌｅｍ  Ｄｏｍａｉｎ）を示し、ワードプロセッサ、複合機、戦闘シミュレータ等に例示される。図４は、本発明によるコンポーネントの階層化構造の一例を示す概念図である。図４に示すように、第ｎ階層に責務Ｃ、Ｄが割り当てられ、第ｎ＋１階層に責務Ｅが割り当てられている場合、責務Ｃ、Ｄを有するコンポーネント３−ｎＡや責務Ｄを有するコンポーネント３−ｎＢは、第ｎ階層に属し、責務Ｅを有するコンポーネント３−（ｎ＋１）は、第ｎ＋１階層に属することとなる。
【００２８】
階層が受け持つ責務を明確化することで、コンポーネントフレームワーク２が呼び出す責務が階層毎に明確となる。これにより、階層間におけるコンポーネント３の接続のうち責務の呼び出しに関する処理を、コンポーネントフレームワーク２において吸収することが可能となる。例えば、図４に示す一例では、第ｎ階層のコンポーネントフレームワーク２−ｎは、第ｎ＋１階層が受け持つ責務Ｅを事前に把握している（そのように設計される）。このため、第ｎ＋１階層のコンポーネント責務の実現手段がアタッチ（登録）される第ｎ＋１階層用のプラグインコンポーネントファサードを用意することで、第ｎ層に属するコンポーネント３−ｎは、当該ファサードを介して第ｎ＋１階層のコンポーネント責務を呼び出すことが可能となる。この際、プラグインコンポーネントファサードは、接続先（拡張先）のコンポーネントに対応して用意される。このため、コンポーネントフレームワーク２−ｎは、第ｎ階層に属するコンポーネント３−ｎＡ、３−ｎＢの第ｎ＋１層における接続先コンポーネント３さえ特定できれば、当該コンポーネント３間を接続することが可能となる。本発明では、設定ファイル４によって接続先のコンポーネントを指定できるため、設定ファイル４を変更することで、コンポーネント３のコード（接続仕様）を変更することなく、コンポーネント３の接続先（拡張先）を変更することが可能となる。
【００２９】
（ハードウェア構成）
図５及び図６を参照して、本発明によるコンピュータシステム９００のハードウェア構成の一例を説明する。図５は、本発明によるコンピュータシステムの構成の一例を示す図である。図５を参照して、本発明によるコンピュータシステム９００は、バスを介して相互に接続されるＣＰＵ９０１、インタフェース９０２、記憶装置９０３を具備する。記憶装置９０３は、フレームワーク９０４、アプリケーションプログラム９０５、設定ファイル９０６を格納する。
【００３０】
ＣＰＵ９０１は、記憶装置９０３内のフレームワーク９０４やアプリケーションプログラム９０５を実行し、問題領域に応じた処理（例えば戦闘シミュレーション）を行う。この際、記憶装置９０３からの各種データやプログラムは図示しないＲＡＭに一時格納され、ＣＰＵ９０１は、ＲＡＭ内のデータを用いて各種処理を実行する。
【００３１】
インタフェース９０２は、他のコンピュータシステム、出力装置（例示：モニタ、プリンタ）、あるいは入力装置（例示：キーボード、マウス）との間を接続するインタフェースである。アプリケーションプログラム９０５や設定ファイル９０６は、インタフェース９０２を介してコンピュータシステム９００に入力される。又、ＣＰＵ９０１における演算処理結果や、記憶装置９０３内に格納された各種データは、インタフェース９０２を介して他のコンピュータシステムや出力装置に出力される。
【００３２】
フレームワーク９０４は、フレームワークコア１やコンポーネントフレームワーク２を含むフレームワークの機能を実現するためのプログラムである。アプリケーションプログラム９０５は、複数のコンポーネント３（ソフトウェア部品）を含む。例えば、車両コンポーネント３−２、レーザセンサコンポーネント３−３Ａ、レーザ砲コンポーネント３−３Ｂ、出力装置コンポーネント３−４が、アプリケーションプログラム９０５として記憶装置９０３に格納される。
【００３３】
設定ファイル９０６は、複数のコンポーネント３に設定された複数の設定ファイル４を含む。例えば、車両コンポーネント３−２、レーザセンサコンポーネント３−３Ａ、レーザ砲コンポーネント３−３Ｂ、出力装置コンポーネント３−４に対応付けられた設定ファイル４−２、４−３Ａ、４−３Ｂ、４−４が設定ファイル９０６として設定される。
【００３４】
図６は、設定ファイル４の構造の一例を示す図である。設定ファイル４は、テキスト形式やＸＭＬ形式等のメタデータで実現され、コンポーネント３を識別するコンポーネント識別子４０１に対応づけられたアタッチ先情報４０２、拡張先情報４０３、アクティベータクラス４０４を備える。コンポーネント識別子４０１は、設定ファイル４が対応付けられたコンポーネント３を特定する識別子である。アタッチ先情報４０２は、当該コンポーネント３のアタッチ（登録）先となるコンポーネントフレームワーク２を特定する情報である。拡張先情報４０３は、当該コンポーネント３の拡張先となるコンポーネント３を特定する識別子を含む。アクティベータクラス４０４は、コンポーネント識別子４０１によって特定されたコンポーネント３のアクティベータクラス（接続処理の具象クラス）を特定する情報を含む。
【００３５】
ＣＰＵ９０１は、図５に示すフレームワーク９０４及びアプリケーションプログラム９０５を実行することで、問題領域に応じた機能（例えば、戦闘シミュレータ、ワードプロセッサ、複合機）を実現する。例えば、レーザ砲及びレーザセンサを搭載した車両の動作等を検証するための戦闘シミュレータが実現される。
【００３６】
（システム構築方法及びシステム構築後の動作の概要）
図７から図１０を参照して、本発明によるソフトウェアシステムの構築方法、及び構築後の処理実行動作の概要を説明する。図７は、本発明によるコンピュータシステムの構成を示す機能ブロック図である。ＣＰＵ９０１は、コンポーネント３−ｎを実行することでコンポーネント本体３−ｎ１及びコンポーネント固有接続処理部３−ｎ２として機能し、３−（ｎ＋１）を実行することで、コンポーネント本体３−（ｎ＋１）１及びコンポーネント固有接続処理部３−（ｎ＋１）２として機能する。又、ＣＰＵ９０１は、コンポーネントフレームワーク２−ｎを実行することでコンポーネントフレームワーク第ｎ層固有処理部２−ｎ１として機能し、コンポーネントフレームワーク２−（ｎ＋１）を実行することでコンポーネントフレームワーク第ｎ＋１層固有処理部２−（ｎ＋１）１として機能する。更に、ＣＰＵ９０１は、フレームワークコア１を実行することでフレームワークメイン１１１及びフレームワーク共通処理部１２１として機能する。以下、図８〜図１０を参照して、図７に示す機能ブロックの動作について説明する。
【００３７】
図７に示したコンポーネントフレームワーク共通処理部１２１、コンポーネントフレームワーク第ｎ層固有処理部２−ｎ１、コンポーネント固有接続処理部３−ｎ２のそれぞれに対応するクラスは承継関係にあり、継承先の処理部（例えば、コンポーネントフレームワーク共通処理部１２１の継承先となるコンポーネントフレームワーク第ｎ層固有処理部２−ｎ１や、コンポーネントフレームワーク第ｎ層固有処理部２−ｎ１の承継先となるコンポーネント固有接続処理部３−ｎ２）においてオーバーライドすることで、ポリモフィズムが実現される。これにより、コンポーネントフレームワーク共通処理部１２１、コンポーネントフレームワーク第ｎ層固有処理部２−ｎ１、コンポーネント固有接続処理部３−ｎ２は、図８から図１０に示す第ｎ階層接続処理部１００ｎとして機能する。同様に、コンポーネントフレームワーク共通処理部１２１、コンポーネントフレームワーク第ｎ＋１層固有処理部２−（ｎ＋１）１、コンポーネント固有接続処理部３−（ｎ＋１）２は、ポリモフィズムにより図８から図１０に示す第ｎ＋１階層における接続処理部１００ｎとして機能する。
【００３８】
先ず、図８を参照して、本発明によるシステム構築における初期化動作（コンポーネントフレーム間の接続動作）の概要を説明する。図８は、本発明によるコンポーネント指向ソフトウェア構築における初期化動作の概要を示すシーケンス図である。
【００３９】
フレームワークメイン１１は、コンポーネントフレームワーク共通処理部１２１に初期化を要求する（ステップＳ１）。これに応じてコンポーネントフレームワーク共通処理部１２１は、各階層（ここでは第ｎ階層及び第ｎ＋１階層）における拡張情報インスタンス、コンポーネントアクティベータインスタンスを生成する（ステップＳ２）。詳細には、コンポーネントフレームワーク共通処理部１２１は、各階層に属するコンポーネント３と拡張先コンポーネントとを対応付けた拡張情報を階層毎に生成する。又、コンポーネントフレームワーク共通処理部１２１は、各階層に属する（接続する）コンポーネント３のコンポーネントアクティベータインスタンスを生成する。コンポーネントアクティベータインスタンスは以降で、前記で生成された拡張情報を用いて、コンポーネント３を構成するインスタンスの生成、及び拡張関係にあるコンポーネント３間を接続する役割を担う。
【００４０】
コンポーネントフレームワーク共通処理部１２１は、各階層に属するコンポーネント３の有無をフレームワークメイン１１に通知する（ステップＳ３）。それに応じてフレームワークメイン１１は、コンポーネントフレームワーク共通処理部１２１に、拡張フレームワークを設定する（ステップＳ４、Ｓ５）。これにより、第ｎ階層のコンポーネントフレームワークから拡張先の第ｎ＋１階層のコンポーネントフレームワークにアクセスすることが可能となる。
【００４１】
例えば、第ｎ＋３階層に属するコンポーネント３が存在しない場合、フレームワークメイン１１は、第n+２階層接続処理部（図示なし）のコンポーネントフレームワーク共通処理部１２１に対して、第ｎ＋３階層に対する拡張先なしを示すｎｕｌｌ（拡張先なし）を渡す（図示なし）。又、第ｎ＋２階層に属するコンポーネント３が存在する場合、フレームワークメイン１１は、第n＋１階層接続処理部１００（n＋１）のコンポーネントフレームワーク共通処理部１２１に対し第ｎ＋２階層のコンポーネントフレームワークアクティベータインスタンスを渡す（ステップＳ４）。更に、第ｎ＋１階層に属するコンポーネント３が存在する場合、フレームワークメイン１１は、第n階層接続処理部１００nのコンポーネントフレームワーク共通処理部１２１に対して第ｎ＋１階層のコンポーネントフレームワークアクティベータインスタンスを渡す（ステップＳ５）。これにより、第ｎ階層のコンポーネントフレームワーク２−ｎは、拡張先の第ｎ＋１階層のコンポーネントフレームワーク２−（ｎ＋１）のコンポーネントフレームワークアクティベータにアクセス可能となり、第ｎ＋１階層のコンポーネントフレームワーク２−（ｎ＋１）は、拡張先の第ｎ＋２階層のコンポーネントフレームワーク２−（ｎ＋１）のコンポーネントフレームワークアクティベータにアクセス可能となる。
【００４２】
次に、図９を参照して、本発明によるシステム構成動作（コンポーネント間の接続動作）についての概要を説明する。図９は、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の概要を示すシーケンス図である。
【００４３】
フレームワークメイン１１１によるシステム構成処理に応じて、コンポーネントフレームワーク共通処理部１２１は、ステップＳ２で生成した拡張情報インスタンスを用いて拡張情報を取得する（ステップＳ１１、Ｓ１２）。これにより、コンポーネントフレームワーク共通処理部１２１は、各階層間を跨いで接続予定のコンポーネント３を把握する。ここでは、コンポーネントフレームワーク共通処理部１２１は、第ｎ階層に属するコンポーネント３−ｎ（ベースコンポーネント）と当該コンポーネント３−ｎの拡張先コンポーネント３−（ｎ＋１）との組み合わせを接続予定のコンポーネントとして把握する。
【００４４】
続いて、コンポーネントフレームワーク共通処理部１２１は、プラグインコンポーネントファサードの生成処理を実行する（ステップＳ１３、Ｓ１４）。ここでは、コンポーネントフレームワーク共通処理部１２１及びコンポーネントフレームワーク第ｎ層固有処理部２−ｎ１の継承先であるコンポーネント固有接続処理部３−ｎ２において、プラグインコンポーネントファサードのインスタンスが生成される。詳細には、第ｎ階層のコンポーネント固有接続処理部３−ｎ２は、第ｎ＋１階層のファサードクラスを参照して、第ｎ＋１階層用のプラグインコンポーネントファサードのインスタンスを生成する。以降、処理の呼び出し側となるベースコンポーネント（ここではコンポーネント３−ｎ）はプラグインコンポーネントファサードインスタンスを介して、拡張先コンポーネント（ここではコンポーネント３−（ｎ＋１））に対する処理を行うこととなる。又、コンポーネントフレームワーク共通処理部１２１は、コンポーネントタスク及びコンポーネントクラス群の生成処理を実行する（ステップＳ１５）。ここでは、コンポーネントフレームワーク共通処理部１２１及びコンポーネントフレームワーク第ｎ層固有処理部２−ｎ１の継承先であるコンポーネント固有接続処理部３−ｎ２において、コンポーネントタスク及びコンポーネントクラス群のインスタンスが生成される。続いて、コンポーネントフレームワーク共通処理部１２１は、生成した第ｎ階層のコンポーネントタスクのインスタンスをフレームワークメイン１１１にアタッチ（登録）する（ステップＳ１６）。これにより、フレームワークメイン１１１は、第ｎ階層のコンポーネントタスクを利用することが可能となる。ステップＳ１１からＳ１６の動作は、第ｎ＋１階層接続処理部１００（ｎ＋１）でも同様に行われる。
【００４５】
コンポーネントフレームワーク共通処理部１２１は、第ｎ階層から拡張先の第ｎ＋１階層に対しプラグイン接続を実行する（ステップＳ１７）。この際、コンポーネントフレームワーク共通処理部１２１は、ステップＳ１４において生成したプラグインコンポーネントファサードのインスタンスを第ｎ階層接続処理部１００ｎから第ｎ＋１階層接続処理部に渡す。以降、第ｎ＋１階層接続処理部１００（ｎ＋１）における処理に移行する。コンポーネントフレームワーク共通処理部１２１は、ステップＳ２で生成した拡張情報インスタンスを用いて拡張情報を取得する（ステップＳ１８）。これにより、コンポーネントフレームワーク共通処理部１２１は、各階層間を跨いで接続予定のコンポーネント３を把握する。ここでは、第ｎ＋１階層に属するコンポーネント３（ベースコンポーネント）と第ｎ＋２階層に属する拡張先コンポーネントとの組み合わせを接続予定のコンポーネントとして把握する。
【００４６】
続いて、コンポーネントフレームワーク共通処理部１２１は、プラグインコンポーネントファサードの生成処理を実行する（ステップＳ１９、Ｓ２０）。ここでは、コンポーネントフレームワーク共通処理部１２１及びコンポーネントフレームワーク第ｎ＋１層固有処理部２−（ｎ＋１）１の継承先であるコンポーネント固有接続処理部３−（ｎ＋１）２において、プラグインコンポーネントファサードのインスタンスが生成される。詳細には、第ｎ＋１階層のコンポーネント固有接続処理部３−（ｎ＋１）２は、第ｎ＋２階層のファサードクラスを参照して、第ｎ＋２階層用のプラグインコンポーネントファサードのインスタンスを生成する。以降、処理の呼び出し側となるベースコンポーネント（ここではコンポーネント３−（ｎ＋１））はプラグインコンポーネントファサードインスタンスを介して、拡張先コンポーネント（ここではコンポーネント３−（ｎ＋２））に対する処理を行うこととなる。又、コンポーネントフレームワーク共通処理部１２１は、コンポーネントタスク及びコンポーネントクラス群の生成処理を実行する（ステップＳ２１）。ここでは、コンポーネントフレームワーク共通処理部１２１及びコンポーネントフレームワーク第ｎ＋１層固有処理部２−（ｎ＋１）１の継承先であるコンポーネント固有接続処理部３−（ｎ＋１）２において、コンポーネントタスク及びコンポーネントクラス群のインスタンス（コンポーネント責務以外）が生成される。更に、コンポーネントフレームワーク第ｎ＋１層固有処理部２−（ｎ＋１）１は、コンポーネント責務の生成処理を実行する（ステップＳ２２）。ここでは、コンポーネントフレームワーク第ｎ＋１層固有処理部２−（ｎ＋１）１の継承先であるコンポーネント固有接続処理部３−（ｎ＋１）２においてコンポーネント責務が生成される。第ｎ＋１階層における責務の数だけステップＳ２２の処理が繰り返される。
【００４７】
続いて、コンポーネントフレームワーク共通処理部１２１は、生成した第ｎ＋１階層のコンポーネントタスク及びコンポーネント責務のインスタンスをベースコンポーネントである、第ｎ階層の第ｎ階層接続処理部１００ｎに登録する（ステップＳ２３）。詳細には、第ｎ＋１階層のコンポーネントタスク及びコンポーネント責務のインスタンスは、ステップＳ１４において生成されたプラグインコンポーネントファサードに登録される。これにより、第ｎ階層のコンポーネント本体３−ｎ１は、当該プラグインコンポーネントファサードを介して第ｎ＋１階層のコンポーネントタスク及び責務を呼び出すことが可能となる。
【００４８】
尚、第ｎ＋１階層に属するコンポーネントの接続先（拡張先）のコンポーネントが第ｎ＋２階層に存在する場合、コンポーネントフレームワーク共通処理部１２１は、ステップＳ１７と同様に、第ｎ＋２階層に対し、プラグイン接続を実行する（ステップＳ２４）。この際、コンポーネントフレームワーク共通処理部１２１は、ステップＳ２０において生成したプラグインコンポーネントファサードのインスタンスを第ｎ＋１階層接続処理部１００（ｎ＋１）から第ｎ＋２階層接続処理部（図示なし）に渡す。以降、第ｎ＋２階層においてステップＳ１８〜Ｓ２４と同様な処理が実行されることにより、第ｎ＋１階層のコンポーネント本体３−（ｎ＋１）１は、第ｎ＋２階層のコンポーネントタスク及び責務を呼び出すことが可能となる。尚、第ｎ＋２階層のコンポーネントの拡張先が設定されていない場合、ステップＳ２０及びステップＳ２４の処理は省略される。
【００４９】
次に、図１０を参照して、システム構築後のタスク処理について説明する。図１０は、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の概要を示す図である。
【００５０】
フレームワークメイン１１１は、コンポーネント本体３−ｎ１の初期化を要求する（ステップＳ３１）。ここでフレームワークメイン１１１は、ステップＳ１６においてアタッチされたタスクに初期化を要求する。コンポーネント本体３−ｎ１は、初期化要求に応じて、コンポーネントタスク、コンポーネント３−ｎ内のクラス群インスタンス、第ｎ＋１階層に対するプラグインコンポーネントファサードインスタンスを初期化する（ステップＳ３２）。続いて、コンポーネント本体３−ｎ１は、第ｎ＋１階層のコンポーネント本体３−（ｎ＋１）１の初期化を要求する（ステップＳ３３）。ここでは、コンポーネント本体３−ｎ１は、ステップＳ２２においてアタッチされたタスクに対し、ステップＳ１４で生成された第ｎ＋１階層に対するコンポーネントプラグインコンポーネントファサードを介して、初期化の要求を行う。コンポーネント本体３−（ｎ＋１）１は、初期化要求に応じてコンポーネントタスク、コンポーネント３−（ｎ＋１）内のクラス群、第ｎ＋２階層に対するプラグインコンポーネントファサードを初期化する（ステップＳ３４）。更に、コンポーネント本体３−（ｎ＋１）１は、第ｎ＋２階層のコンポーネント本体（図示なし）に初期化を要求する（図示なし）。ここでは、コンポーネント本体３−（ｎ＋１）１は、ステップＳ２３と同様な方法により第ｎ＋２階層からアタッチされたタスクに対し、第ｎ＋２階層に対するコンポーネントプラグインコンポーネントファサードを介して初期化の要求を行う。第ｎ＋２階層のコンポーネント本体は、これに応じてコンポーネントタスク及びコンポーネント３−（ｎ＋２）内のクラス群を初期化する（図示なし）。
【００５１】
コンポーネント本体３−ｎ１、３−（ｎ＋１）１の初期化が終了すると、フレームワークメイン１１はコンポーネント本体３−ｎ１に対し処理開始を要求する（ステップＳ３７）。ここでは、ステップＳ１６において第ｎ階層からアタッチされたタスクに対して処理開始が要求される。コンポーネント本体３−ｎ１は、処理要求に応じて第ｎ階層コンポーネントのクラス群における処理を実行する（ステップＳ３８）。又、コンポーネント本体３−ｎ１は、クラス群の処理を実行し、第ｎ＋１階層用のプラグインコンポーネントファサードを介して第ｎ＋１階層の責務の処理を要求する（ステップＳ３９）。ここでは、ステップＳ２３において第ｎ＋１階層からアタッチされたタスク及び責務に対して処理開始が要求される。コンポーネント本体３−（ｎ＋１）１は、クラス群及び責務の処理を実行し、プラグインコンポーネントファサードを介して第ｎ＋２階層の責務の処理を要求する（ステップＳ３９）。ここでは、ステップＳ２３と同様な方法により第ｎ＋２階層からアタッチされたタスク及び責務に対して処理開始が要求される。第ｎ＋２階層のコンポーネント本体（図示なし）は、クラス群及び責務の処理を実行する（図示なし）。
【００５２】
以上のように、本発明によるシステム構築方法によれば、第１接続制御手段として機能するフレームワークメイン１１１及びコンポーネントフレームワーク共通処理部１２１によって、拡張元となるコンポーネント（ベースコンポーネント）と拡張先コンポーネントとの間が接続される。又、コンポーネント間接続処理において、コンポーネントの責務に依存する制御（ステップＳ２２）は、第２接続制御手段として機能するコンポーネントフレームワーク第ｎ層固有処理部２−ｎ１、コンポーネントフレームワーク第ｎ＋１層固有処理部２−（ｎ＋１）１、・・・によって行われる。コンポーネントフレームワーク共通処理部１２１にアタッチされ得る責務は階層毎に予め決められている。このため、コンポーネントフレームワーク共通処理部１２１は、拡張先のコンポーネント３の属する階層に応じた責務を受け取ることが可能となり、階層間をまたぐコンポーネント３の接続が可能となる。この際、拡張先となるコンポーネント３は、設定ファイル４によって決めることができるため、コンポーネント３やフレームワークのソースコードを変更することなくコンポーネント３の拡張が可能となる。
【００５３】
（コンピュータシステムのソフトウェア構造）
次に、図１１１から図１７を参照して、戦闘シミュレータを一例に、本発明によるコンピュータシステムのソフトウェア構造の詳細を説明する。図１１から図１７に示す一例では、コンポーネントフレームワーク２は、問題領域（戦闘シミュレータ）の特徴から、その責務に応じて４つの階層、すなわち、第１階層（部隊層）の部隊コンポーネントフレームワーク（Ｕｎｉｔ  Ｆｌａｍｅｗｏｒｋ）２−１、第２層（装備品層）の装備品コンポーネントフレームワーク（Ｏｂｊｅｃｔ  Ｆｌａｍｅｗｏｒｋ）２−２、第３層（要素層）の要素コンポーネントフレームワーク（Ｅｌｅｍｅｎｔ  Ｆｌａｍｅｗｏｒｋ）２−３、第４層（原始層）の原始コンポーネントフレームワーク（Ｐｒｉｍｉｔｉｖｅ  Ｆｌａｍｅｗｏｒｋ）２−４に区分される。
【００５４】
図１１は、本発明に係るコンポーネント３、コンポーネントフレームワーク２、及びフレームワークコア１の依存関係の一例を示すコンポーネント図である。図１１を参照して、コンポーネント３は、コンポーネントフレームワーク２に依存し、コンポーネントフレームワーク２は、フレームワークコア１に依存する。このため、コンポーネント３が変更されてもコンポーネントフレームワーク２やフレームワークコアを変更する必要はない。
【００５５】
又、コンポーネント３は、その責務に応じて階層毎に区分可能な複数のコンポーネント３−２〜３−４を含む。ここでは一例として、装備品層に属する戦車コンポーネント３−２、要素層に属するレーザセンサコンポーネント３−３Ａ及びレーザ砲コンポーネント３−３Ｂ、原始層に属するレーザ出力装置コンポーネント３−４が設定される。
【００５６】
戦車コンポーネント３−２は、装備品コンポーネントフレームワーク２−２に依存し、レーザセンサコンポーネント３−３Ａ及びレーザ砲コンポーネント３−３Ｂは、要素コンポーネントフレームワーク２−３に依存し、レーザ出力装置コンポーネント３−４は、原始コンポーネントフレームワーク２−４に依存する。又、本一例では、部隊コンポーネントフレームワーク４−１に依存するコンポーネント３はない。コンポーネントフレームワーク２−１〜２−４は、フレームワークコア１に依存する。尚、コンポーネントフレームワーク２−１〜２−４のそれぞれに属する（依存する）コンポーネント３の数は、１つとは限らず複数であっても設定されなくても良い。
【００５７】
又、コンポーネント３−２〜３−４のそれぞれには、設定ファイル４−２〜４−４が紐付けられている。設定ファイル４−２は、戦車コンポーネント３−２に紐付けられ、コンポーネント識別子４０１（Ｃｏｍｐｏｏｎｅｎｔ−ＩＤ）として戦車を示す“ＴＡＮＫ”、アタッチ先情報４０２（Ａｔｔａｃｈｅｄ  Ｆｌａｍｅｗｏｒｋ）として装備品フレームワークを示す“Ｏｂｊｅｃｔ  Ｆｌａｍｅｗｏｒｋ”、拡張先情報４０３（Ｅｘｔｅｎｔｉｏｎ−Ｃｏｍｐｏｎｅｎｔｓ−ＩＤ）としてレーザセンサを示す“ｌａｓｅｒ−ｓｅｎｓｏｒ”、アクティベータクラス４０４（Ａｃｔｉｖａｔｏｒ−Ｃｌａｓｓ）として戦車アクティベータを示す“戦車Ａｃｔｉｖａｔｏｒ”を備える。設定ファイル４−２により、“ＴＡＮＫ”によって識別される戦車コンポーネント３−２は、装備品フレームワークに属し（接続し）、その拡張先としてレーザセンサが指定され、そのアクティベータとして戦車アクティベータが生成される。
【００５８】
設定ファイル４−３Ａには、コンポーネント識別子４０１（Ｃｏｍｐｏｏｎｅｎｔ−ＩＤ）としてレーザセンサを示す“ｌａｓｅｒ−ｓｅｎｓｏｒ”、アタッチ先情報４０２（Ａｔｔａｃｈｅｄ  Ｆｌａｍｅｗｏｒｋ）として要素フレームワークを示す“Ｅｌｅｍｅｎｔ  Ｆｌａｍｅｗｏｒｋ”、拡張先情報４０３（Ｅｘｔｅｎｔｉｏｎ−Ｃｏｍｐｏｎｅｎｔｓ−ＩＤ）としてレーザ出力装置を示す“ｌａｓｅｒ−ｇｅｎｅｒａｔｏｒ”、アクティベータクラス４０４（Ａｃｔｉｖａｔｏｒ−Ｃｌａｓｓ）としてレーザセンサアクティベータ“レーザセンサＡｃｔｉｖａｔｏｒ”を備える。設定ファイル４−３Ａにより、“ｌａｓｅｒ−ｇｅｎｅｒａｔｏｒ”によって識別されるレーザセンサコンポーネント３−３Ａは、要素フレームワークに属し（接続し）、その拡張先としてレーザ出力装置が指定され、そのアクティベータとしてレーザセンサアクティベータが生成される。
【００５９】
設定ファイル４−３Ｂには、コンポーネント識別子４０１（Ｃｏｍｐｏｏｎｅｎｔ−ＩＤ）としてレーザ砲を示す“ｌａｓｅｒ−ｇｕｎ”、アタッチ先情報４０２（Ａｔｔａｃｈｅｄ  Ｆｌａｍｅｗｏｒｋ）として要素フレームワークを示す“Ｅｌｅｍｅｎｔ  Ｆｌａｍｅｗｏｒｋ”、拡張先情報４０３（Ｅｘｔｅｎｔｉｏｎ−Ｃｏｍｐｏｎｅｎｔｓ−ＩＤ）としてレーザ出力装置を示す“ｌａｓｅｒ−ｇｅｎｅｒａｔｏｒ”、アクティベータクラス４０４（Ａｃｔｉｖａｔｏｒ−Ｃｌａｓｓ）としてレーザ砲アクティベータ“レーザ砲Ａｃｔｉｖａｔｏｒ”を備える。設定ファイル４−３Ｂにより、“ｌａｓｅｒ−ｇｕｎ”によって識別されるレーザ砲コンポーネント３−３Ｂは、要素フレームワークに属し（接続し）、その拡張先としてレーザ出力装置が指定され、そのアクティベータとしてレーザ砲アクティベータが生成される。
【００６０】
設定ファイル４−４には、コンポーネント識別子４０１（Ｃｏｍｐｏｏｎｅｎｔ−ＩＤ）としてレーザ出力装置を示す“ｌａｓｅｒ−ｇｅｎｅｒａｔｏｒ”、アタッチ先情報４０２（Ａｔｔａｃｈｅｄ  Ｆｌａｍｅｗｏｒｋ）として原始フレームワークを示す“Ｐｒｉｍｉｔｉｖｅ  Ｆｌａｍｅｗｏｒｋ”、アクティベータクラス４０４（Ａｃｔｉｖａｔｏｒ−Ｃｌａｓｓ）としてレーザ出力装置アクティベータ“レーザ出力装置Ａｃｔｉｖａｔｏｒ”を備える。尚、設定ファイル４−４には、拡張先情報４０３（Ｅｘｔｅｎｔｉｏｎ−Ｃｏｍｐｏｎｅｎｔｓ−ＩＤ）は設定されていない。設定ファイル４−４により、“ｌａｓｅｒ−ｇｅｎｅｒａｔｏｒ”によって識別されるレーザ出力装置コンポーネント３−４は、原始フレームワークに属し（接続し）、その拡張先は指定されず、そのアクティベータとしてレーザ出力装置アクティベータが生成される。
【００６１】
以上のような、設定ファイル４−２〜４−４により、コンポーネント２−２〜２−４の拡張先となるコンポーネント３を特定することが可能となる。
【００６２】
図１２Ａ及び図１２Ｂは、本発明に係るフレームワークコア１の構造の一例を示すクラス図である。図１２Ａ及び図１２Ｂを参照して、図１１を参照して、フレームワークコア１は、クラスとして、フレームワークコアクラス１０、コンポーネントフレームワークアクティベータクラス１１、コンポーネントアクティベータクラス１２、拡張情報クラス１３、プラグインコンポーネントＩＤクラス１４、コンポーネントタスククラス１５、プラグインコンポーネントファサードクラス１６、コンポーネント責務クラス１７を備える。
【００６３】
フレームワークコアクラス１０には、オペレーション（操作）として“周期演算処理等”や“アタッチタスク”等が規定されている。ここでは、一例としてシステム構築（コンポーネントの拡張）やシミュレータとしての周期演算処理について規定されているが、これに限らない。フレームワークコアクラス１０は、コンポーネントフレームワークアクティベータクラス１１のインスタンスであるベースコンポーネントを保持する。コンポーネントタスククラス１５のインスタンスであるコンポーネントタスクを保持する。
【００６４】
コンポーネントフレームワークアクティベータクラス１１、コンポーネントアクティベータクラス１２は、インスタンスを活性化する役割を担う。コンポーネントフレームワークアクティベータクラス１１は、フレームワークコアクラス１０に関連し、オペレーションとして“初期化する”、“システムを構成する”、“プラグイン接続する”、“拡張フレームワークを設定する”が規定される。ここで“初期化する”は、仮想関数で規定されているため、ポリモフィズムにより継承先クラスにおいて具象化されたメソッドが実行される。又、コンポーネントフレームワークアクティベータクラス１１には０以上のコンポーネントアクティベータクラス１２が関連する。コンポーネントアクティベータクラス１２には、オペレーションとして“コンポーネント生成”、“プラグインコンポーネント生成”、“責務マップ生成”、“プラグインコンポーネントファサード生成”、“内部インスタンス生成”、“タスク生成”等が規定されている。ここで“責務マップ生成”、“プラグインコンポーネントファサード生成”、“内部インスタンス生成”、“タスク生成”は、仮想関数で規定されているため、ポリモフィズムにより継承先クラスにおいて具象化されたメソッドが実行される。
【００６５】
拡張情報クラス１３は、コンポーネントフレームワークアクティベータクラス１１に対して１又は複数存在し、集約の関係にある。拡張情報クラス１３には、オペレーションとして“ベースコンポーネント取得”、“拡張コンポーネントＩＤ取得”が規定される。これにより、拡張情報クラス１３は、コンポーネントアクティベータ１２のインスタンスであるベースコンポーネントアクティベータを１つ取得するとともに、プラグインコンポーネントＩＤクラス１４のインスタンスであるプラグインＩＤを０以上取得する。すなわち、ベースコンポーネント１つに対し拡張情報クラス１３は１つ存在し、拡張情報クラス１３によって、ベースコンポーネントのインスタンスとして取得されるコンポーネントアクティベータは、０以上のプラグインコンポーネントＩＤに対応付けられる。尚、プラグインコンポーネントＩＤクラス１４には、設定ファイル４から拡張コンポーネントＩＤを取得するオペレーションが規定される。
【００６６】
コンポーネントタスククラス１５、プラグインコンポーネントファサードクラス１６は、コンポーネント間の接続後の動作を担うクラスである。コンポーネントタスククラス１５には、オペレーションとして“初期化する”、“周期通知”、“周期処理”が規定される。ここで“初期化する”、“周期処理”は、仮想関数で規定されているため、ポリモフィズムにより継承先クラスにおいて具象化されたメソッドが実行される。プラグインコンポーネントファサードクラス１６には、オペレーションとして“初期化する”、“周期通知”、“アタッチタスク”、“アタッチ責務”が規定される。ここで“アタッチ責務”は、仮想関数で規定されているため、ポリモフィズムにより継承先クラスにおいて具象化されたメソッドが実行される。プラグインコンポーネントファサードクラス１６は、コンポーネントタスククラス１５からタスクインスタンスを取得するとともに、コンポーネント責務クラス１７の継承先の責務インスタンスを取得する。フレームワークコア１におけるコンポーネント責務インスタンス１７には、  “実行する”がオペレーションとして規定される。ここで“実行する”は、仮想関数で規定されているため、ポリモフィズムにより継承先クラスにおいて具象化されたメソッドが実行される。
【００６７】
図１３Ａから図１３Ｆを参照して、本発明に係るフレームワークコア１とコンポーネントフレームワーク２との接続関係の一例を説明する。図１３Ａから図１３Ｆは、本発明に係るフレームワークコア１とコンポーネントフレームワーク２との接続関係の一例をクラス図である。コンポーネントフレームワーク２は、図１２Ａ及び図１２Ｂに示すフレームワークコア１のクラスを継承し、階層毎に異なる責務依存部分を差分で設計されたものとなる。
【００６８】
図１３Ａから図１３Ｆを参照して、第１階層の部隊コンポーネントフレームワーク２−１は、クラスとして、部隊フレームワークアクティベータクラス２０１（ＵｎｉｔＦｌａｍｅｗｏｒｋＡｃｔｉｖａｔｏｒ）、部隊コンポーネントアクティベータクラス２１１（ＵｎｉｔＣｏｍｐｏｒｎｅｎｔＡｃｔｉｖａｔｏｒ）、部隊タスククラス２２１（Ｕｎｉｔタスク）を備える。
【００６９】
第２階層の装備品コンポーネントフレームワーク２−２は、クラスとして、装備品フレームワークアクティベータクラス２０２（ＯｂｊｅｃｔＦｌａｍｅｗｏｒｋＡｃｔｉｖａｔｏｒ）、装備品コンポーネントアクティベータクラス２１２（ＯｂｊｅｃｔＣｏｍｐｏｒｎｅｎｔＡｃｔｉｖａｔｏｒ）、装備品タスククラス２２２（Ｏｂｊｅｃｔタスク）、装備品コンポーネントファサードクラス２３２（ＯｂｊｅｃｔＣｏｍｐＦａｃａｄｅ）、移動責務クラス２４２Ａ、待機責務クラス２４２Ｂを備える。
【００７０】
第３階層の要素コンポーネントフレームワーク２−３は、クラスとして、要素フレームワークアクティベータクラス２０３（ＥｌｅｍｅｎｔＦｌａｍｅｗｏｒｋＡｃｔｉｖａｔｏｒ）、要素コンポーネントアクティベータクラス２１３（ＥｌｅｍｅｎｔＣｏｍｐｏｒｎｅｎｔＡｃｔｉｖａｔｏｒ）、要素タスククラス２２３（Ｅｌｅｍｅｎｔタスク）、要素コンポーネントセンサファサードクラス２３３Ａ（ＥｌｅｍｅｎｔＣｏｍｐセンサＦａｃａｄｅ）、要素コンポーネント砲ファサードクラス２３３Ｂ（ＥｌｅｍｅｎｔＣｏｍｐ砲Ｆａｃａｄｅ）、識別責務クラス２４３Ａ、探知責務クラス２４３Ｂ、攻撃責務クラス２４３Ｃを備える。
【００７１】
第４階層の原始コンポーネントフレームワーク２−４は、クラスとして、原始フレームワークアクティベータクラス２０４（ＰｒｉｍｉｔｉｖｅＦｌａｍｅｗｏｒｋＡｃｔｉｖａｔｏｒ）、原始コンポーネントアクティベータクラス２１４（ＰｒｉｍｉｔｉｖｅＣｏｍｐｏｒｎｅｎｔＡｃｔｉｖａｔｏｒ）、原始タスククラス２２４（Ｐｒｉｍｉｔｉｖｅタスク）、原始コンポーネントファサードクラス２３４（ＰｒｉｍｉｔｉｖｅＣｏｍｐＦａｃａｄｅ）、出力責務クラス２４４を備える。
【００７２】
部隊フレームワークアクティベータクラス２０１、装備品フレームワークアクティベータクラス２０２、要素フレームワークアクティベータクラス２０３、原始フレームワークアクティベータクラス２０４は、コンポーネントフレームワークアクティベータクラス１１を継承する。例えば、コンポーネントフレームワークアクティベータクラス１１で規定された“初期化する”は、仮想関数で規定されているため、継承先の部隊フレームワークアクティベータクラス２０１、装備品フレームワークアクティベータクラス２０２、要素フレームワークアクティベータクラス２０３、原始フレームワークアクティベータクラス２０４において具象化されたメソッドが実行される。
【００７３】
部隊コンポーネントアクティベータクラス２１１、装備品コンポーネントアクティベータクラス２１２、要素コンポーネントアクティベータクラス２１３、原始コンポーネントアクティベータクラス２１４は、コンポーネントアクティベータクラス１２を継承する。例えば、コンポーネントアクティベータクラス１２で規定された“責務マップ生成”は、仮想関数で規定されているため、継承先の部隊コンポーネントアクティベータクラス２１１、装備品コンポーネントアクティベータクラス２１２、要素コンポーネントアクティベータクラス２１３、原始コンポーネントアクティベータクラス２１４において具象化されたメソッドが実行される。
【００７４】
部隊タスククラス２２１、装備品タスククラス２２２、要素タスククラス２２３、原始タスククラス２２４は、コンポーネントタスククラス１５を継承する。例えば、コンポーネントタスククラス１５で規定された“周期処理”は、仮想関数で規定されているため、継承先の部隊タスククラス２２１、装備品タスククラス２２２、要素タスククラス２２３、原始タスククラス２２４において具象化されたメソッドが実行される。
【００７５】
装備品コンポーネントファサードクラス２３２、要素コンポーネントセンサファサードクラス２３３Ａ、要素コンポーネント砲ファサード２３３Ｂ、原始コンポーネントファサードクラス２３４は、プラグインコンポーネントファサードクラス１６を継承する。例えば、プラグインコンポーネントファサードクラス１６で規定された“アタッチ責務”は、仮想関数で規定されているため、継承先の装備品コンポーネントファサードクラス２３２、要素コンポーネントセンサファサードクラス２３３Ａ、要素コンポーネント砲ファサード２３３Ｂ、原始コンポーネントファサードクラス２３４において具象化されたメソッドが実行される。
【００７６】
移動責務クラス２４２Ａ、待機責務クラス２４２Ｂ、識別責務クラス２４３Ａ、探知責務クラス２４３Ｂ、攻撃責務クラス２４３Ｃ、出力責務クラス２４４は、コンポーネント責務クラス１７を継承する。例えば、責務クラス１７で規定された“実行する”は、仮想関数で規定されているため、継承先の移動責務クラス２４２Ａ、待機責務クラス２４２Ｂ、識別責務クラス２４３Ａ、探知責務クラス２４３Ｂ、攻撃責務クラス２４３Ｃ、出力責務クラス２４４クラスにおいて具象化されたメソッドが実行される。
【００７７】
コンピュータシステム９００には、汎用クラスとして、コンポーネント３を特定するコンポーネントＩＤと拡張情報インスタンスとが対応付けられて登録された拡張情報一覧１０１（マップ）が設定されることが好ましい。これにより、コンポーネントフレームワークアクティベータクラス１１は、コンポーネントＩＤを検出キー（Ｋｅｙ）として拡張情報インスタンスを取得できる。又、拡張先コンポーネントを特定するプラグインコンポーネントＩＤは、プラグインコンポーネントＩＤ一覧１０２（片方向線形リスト）に登録されることが好ましい。拡張情報クラス１３はここからプラグインコンポーネントＩＤを取得できる。更に、コンポーネントタスクインスタンスは、片方向線形リスト１０３として登録されることが好ましい。フレームワークコア１０は、ここからコンポーネントインスタンスを取得できる。更に、コンピュータシステム９００には、汎用クラスとして、コンポーネント責務インスタンスと所定の検索Ｋｅｙとが対応付けられて登録された責務マップ１０４が設定されることが好ましい。プラグインコンポーネントファサード１６は、所定の文字列を検索Ｋｅｙとして責務マップ１０４からコンポーネント責務インスタンスを取得できる。
【００７８】
図１４Ａ及び図１４Ｂは、本発明に係る第２階層（装備品層）の戦車コンポーネント３−２の構造の一例を示すクラス図である。戦車コンポーネント３−２は、クラスとして戦車アクティベータクラス３１２、戦車タスククラス３２２、戦車のクラス群３３２、移動責務クラス３４２Ａ、待機責務クラス３４２Ｂを備える。
【００７９】
戦車アクティベータクラス３１２は、装備品コンポーネントアクティベータクラス２１２を継承し、オペレーションとして“プラグインコンポーネントファサード生成”、“内部インスタンス生成”、“タスク生成”等が規定されている。戦車タスククラス３２２は、装備品タスククラス２２２を継承し、オペレーションとして“周期処理”や“初期化する”が規定される。移動責務クラス３４２Ａは移動責務クラス２４２Ａを継承し、待機責務クラス３４２Ｂは待機責務クラス２４２Ｂを継承する。戦車のクラス群３３２は、戦車タスククラス３２２、移動責務クラス３４２Ａ、待機責務クラス３４２Ｂに関連し（誘導され）、オペレーションとして“初期化する”、“周期処理をする”、“移動する”、“待機する”が規定される。すなわち、コンポーネント責務クラス１７における“実行する”は、戦車のクラス群３３２において具象化された“移動する”、“待機する”を実行する。
【００８０】
装備品コンポーネントアクティベータクラス２１２は、上層の要素コンポーネントファサードインスタンスを拡張コンポーネントＩＤに対応付けて登録したファサード一覧１０５−２（マップ）を生成する。戦車のクラス群３３２は、ファサード一覧１０５−２から拡張コンポーネントＩＤを検索Ｋｅｙとして要素コンポーネントファサードインスタンスを取得し、要素コンポーネントファサード２３３（例えば要素コンポーネントセンサファサード２３３Ａ）にアクセスする。
【００８１】
図１５Ａ及び図１５Ｂは、本発明に係る第３階層（要素層）のレーザセンサコンポーネント３−３Ａの構造の一例を示すクラス図である。レーザセンサコンポーネント３−３Ａは、クラスとしてレーザセンサアクティベータクラス３１３Ａ、レーザセンサタスククラス３２３Ａ、レーザセンサのクラス群３３３Ａ、識別責務クラス３４３Ａ、探知責務クラス３４３Ｂを備える。
【００８２】
レーザセンサアクティベータクラス３１３Ａは、要素コンポーネントアクティベータクラス２１３を継承し、オペレーションとして“プラグインコンポーネントファサード生成”、“内部インスタンス生成”、“タスク生成”等が規定されている。レーザセンサタスククラス３２３Ａは、要素タスククラス２２３を継承し、オペレーションとして“周期処理”や“初期化する”が規定される。識別責務クラス３４３Ａは識別責務クラス２４３Ａを継承し、探知責務クラス３４３Ｂは探知責務クラス２４３Ｂを継承する。識別責務クラス３４３Ａ及び探知責務クラス３４３Ｂには、オペレーションとして“実行する”が規定される。レーザセンサのクラス群３３３Ａは、レーザセンサタスククラス３２３Ａ、識別責務クラス３４３Ａ、探知責務クラス３４３Ｂに関連し（誘導され）、オペレーションとして“初期化する”、“周期処理”、“識別処理”、“探知処理”、“レーザ放射処理”等が規定される。すなわち、コンポーネント責務クラス１７における“実行する”は、レーザセンサのクラス群３３３Ａにおいて具象化された“識別処理”、“探知処理”を実行する。尚、レーザセンサタスククラス３２３Ａ、レーザセンサのクラス群３３３Ａ、識別責務クラス３４３Ａ、探知責務クラス３４３Ｂは、レーザセンサアクティベータ３１３Ａによって生成される。
【００８３】
要素コンポーネントアクティベータクラス２１３は、上層の原始コンポーネントファサードインスタンスを拡張コンポーネントＩＤに対応付けて登録したファサード一覧１０５−３（マップ）を生成する。レーザセンサのクラス群３３３Ａは、ファサード一覧１０５−３から拡張コンポーネントＩＤを検索Ｋｅｙとして原始コンポーネントファサードインスタンスを取得し、原始コンポーネントファサード２３４にアクセスする。
【００８４】
図１６Ａ及び図１６Ｂは、本発明に係る第３階層（要素層）のレーザ砲コンポーネント３−３Ｂの構造の一例を示すクラス図である。レーザ砲コンポーネント３−３Ｂは、クラスとしてレーザ砲アクティベータクラス３１３Ｂ、レーザ砲タスククラス３２３Ｂ、レーザ砲のクラス群３３３Ｂ、攻撃責務クラス３４３Ｃを備える。
【００８５】
レーザ砲アクティベータクラス３１３Ｂは、要素コンポーネントアクティベータクラス２１３を継承し、オペレーションとして“プラグインコンポーネントファサード生成”、“内部インスタンス生成”、“タスク生成”等が規定されている。レーザ砲タスククラス３２３Ｂは、要素タスククラス２２３を継承し、オペレーションとして“周期処理”や“初期化する”が規定される。攻撃責務クラス３４３Ｃは攻撃責務クラス２４３Ｃを継承し、オペレーションとして“実行する”が規定される。レーザ砲のクラス群３３３Ｂは、レーザ砲タスククラス３２３Ｂ、攻撃責務クラス３４３Ｃに関連し（誘導され）、オペレーションとして“初期化する”、“周期処理”、“攻撃処理”、“エネルギー密度算出処理”等が規定される。すなわち、コンポーネント責務クラス１７における“実行する”は、レーザ砲のクラス群３３３Ｂにおいて具象化された“攻撃処理”、“エネルギー密度算出処理”を実行する。尚、レーザ砲タスククラス３２３Ｂ、レーザ砲のクラス群３３３Ｂ、識別責務クラス３４３Ａ、探知責務クラス３４３Ｂは、レーザ砲アクティベータ３１３Ｂによって生成される。
【００８６】
要素コンポーネントアクティベータクラス２１３は、上層の原始コンポーネントファサードインスタンスを拡張コンポーネントＩＤに対応付けて登録したファサード一覧１０５−３（マップ）を生成する。レーザ砲のクラス群３３３Ｂは、ファサード一覧１０５−３から拡張コンポーネントＩＤを検索Ｋｅｙとして原始コンポーネントファサードインスタンスを取得し、原始コンポーネントファサード２３４にアクセスする。
【００８７】
図１７Ａ及び図１７Ｂは、本発明に係る第４階層（原始層）のレーザ出力装置コンポーネント３−４の構造の一例を示すクラス図である。レーザ出力装置コンポーネント３−４は、クラスとしてレーザ出力装置アクティベータクラス３１４、レーザ出力装置タスククラス３２４、レーザ出力装置のクラス群３３４、出力責務クラス３４４を備える。
【００８８】
レーザ出力装置アクティベータクラス３１４は、原始コンポーネントアクティベータクラス２１４を継承し、オペレーションとして“プラグインコンポーネントファサード生成”、“内部インスタンス生成”、“タスク生成”等が規定されている。レーザ出力装置タスククラス３２４は、原始タスククラス２２４を継承し、オペレーションとして“周期処理”や“初期化する”が規定される。出力責務クラス３４４は出力責務クラス２４４を継承し、“実行する”が規定される。レーザ出力装置のクラス群３３４は、レーザ出力装置タスククラス３２４、出力責務クラス３４４に関連し（誘導され）、オペレーションとして“初期化する”、“周期処理”、“放射強度演算”等が規定される。すなわち、コンポーネント責務クラス１７における“実行する”は、レーザ出力装置のクラス群３３４において具象化された“放射強度演算”等を実行する。尚、レーザ出力装置タスククラス３２４、レーザ出力装置のクラス群３３４、出力責務クラス３４４は、レーザ出力装置アクティベータ３１４によって生成される。
【００８９】
（コンピュータシステムのソフトウェアシステム構築及び構築後の動作の詳細）
図１１から図１７Ｂに示したアーキテクチャの元に設計されたコンピュータシステム９００において、ソフトウェア構築及び構築後の動作の詳細を、図１８Ａから図２０Ｅを参照して説明する。以下では、図１２Ａから図１７Ｂに示されたクラスに対応するプログラムをＣＰＵ９０１によって実行することで実現されるオブジェクトに、それぞれ同じ符号を付して説明する。すなわち、クラスに対応するオブジェクトは、図１８Ａから図２０Ｅに示す動作の主体として機能する。又、符号に使用される“ｎ”はオブジェクトが属する階層“第ｎ階層”に対応する自然数である。
【００９０】
図１８Ａ及び図１８Ｂを参照して、本発明によるコンポーネント指向ソフトウェア構築における初期化動作の詳細を説明する。図１８Ａ及び図１８Ｂは、本発明によるコンポーネント指向ソフトウェア構築における初期化動作の詳細を示すシーケンス図である。
【００９１】
図示しないが、フレームワークコア１０は、初期化動作の前に、コンポーネントフレームワークアクティベータ２０ｎを生成する。本一例では、部隊フレームワークアクティベータ２０１、装備品フレームワークアクティベータ２０２、要素フレームワークアクティベータ２０３、原始フレームワークアクティベータ２０４の４階層のコンポーネントフレームワークアクティベータ２０ｎが生成される。
【００９２】
フレームワークコア１０は、コンポーネントフレームワークアクティベータ２０ｎに初期化を要求する（ステップＳ１０１）。これに応じてコンポーネントフレームワークアクティベータ２０ｎは、初期化するとともに、拡張情報インスタンスを格納するための拡張情報一覧１０１（マップ）を生成する（ステップＳ１０２）。ここで、コンポーネントフレームワーク２−ｎに接続する（属する）コンポーネント３−ｎがある場合、コンポーネントフレームワークアクティベータ２０ｎはコンポーネントアクティベータ３１ｎを生成する（ステップＳ１０３）。コンポーネントフレームワーク２−ｎに接続する（属する）コンポーネント３の有無は、設定ファイル４−ｎの拡張先情報４０３により確認できる。例えば、図１１に示す設定ファイル４−２の拡張先情報４０３により、戦車コンポーネント３−２の拡張先がレーザセンサコンポーネント３−３Ａであることを確認できる。あるいは、設定ファイル４−３Ａ、４−３Ｂのそれぞれの拡張先情報４０３により、レーザセンサコンポーネント３−３Ａ、レーザ砲コンポーネント３−３Ｂのそれぞれの拡張先がレーザ出力先コンポーネント３−４であることを確認できる。更に、設定ファイル４−４の拡張先情報４０３により、レーザ出力装置コンポーネント３−４の拡張先がないことを確認できる。
【００９３】
コンポーネントアクティベータ３１ｎはプラグインコンポーネントＩＤインスタンスを格納するためのプラグインコンポーネントＩＤ一覧１０２を生成する（ステップＳ１０４）。ここで、コンポーネント３−ｎに対し拡張先コンポーネントがある場合、コンポーネントアクティベータ３１ｎは拡張先のコンポーネント３を特定するプラグインコンポーネントＩＤインスタンス１４を生成する（ステップＳ１０５）。ここでは、設定ファイル４−ｎから取得した拡張先情報４０３を引数としてプラグインコンポーネントＩＤインスタンス１４を生成する。続いてコンポーネントアクティベータ３１ｎは、生成したプラグインコンポーネントＩＤインスタンス１４をプラグインコンポーネントＩＤ一覧１０２に登録する（ステップＳ１０６）。ステップＳ１０５、Ｓ１０６の処理は、拡張先のコンポーネントがある間続けられる。すなわち、拡張するコンポーネント３の全てのコンポーネントＩＤに対応するプラグインコンポーネントＩＤインスタンス１４が、プラグインコンポーネントＩＤ一覧１０２に登録される。
【００９４】
コンポーネントフレームワークアクティベータ２０ｎは、コンポーネントアクティベータ３１ｎとプラグインコンポーネントＩＤ一覧１０２を引数として拡張情報インスタンス１３を生成する（ステップＳ１０７）。拡張情報インスタンス１３によってコンポーネントアクティベータクラス１２とプラグインコンポーネントＩＤクラス１４とが紐付けられる。続いて、コンポーネントフレームワークアクティベータ２０ｎは、生成した拡張情報インスタンス１３と、ベースコンポーネントであるコンポーネント３−ｎの識別子であるコンポーネントＩＤとを対応付けて、拡張情報一覧１０１（マップ）に登録する（ステップＳ１０８）。
【００９５】
ステップＳ１０３からステップＳ１０８の処理は、コンポーネントフレームワーク２−ｎに属する全てのコンポーネント３−ｎに対して行われる。これにより、当該第ｎ階層に属するコンポーネント３−ｎの数だけ拡張情報インスタンス１３が生成され、拡張情報一覧１０１に登録されることとなる。
【００９６】
コンポーネントフレームワークアクティベータ２０ｎは、第ｎ階層に接続するコンポーネント３−ｎの有無を、ステップＳ１０１の要求の応答としてフレームワークコア１０に通知する（ステップＳ１０９）。フレームワークコア１０は、接続コンポーネントを有する全てのコンポーネントフレームワークアクティベータ２０ｎに対し、拡張フレームワーク設定する（ステップＳ１１０）。この際、拡張側のコンポーネントフレームワークアクティベータ２０（ｎ＋１）のインスタンスを渡す。一方、第ｎ＋１階層のコンポーネントフレームワーク２−（n＋１）に接続するコンポーネント３−（ｎ＋１）がない場合は、フレームワークコア１０は、第n階層のコンポーネントフレームワークアクティベータ２０nへの拡張フレームワークの設定を行わず、例えば、当該コンポーネントフレームワークアクティベータ２０ｎにｎｕｌｌを渡す。
【００９７】
以上のような動作により、コンポーネントフレームワークアクティベータ２０ｎは、拡張先の第ｎ＋１階層のコンポーネントフレームワークアクティベータ２０（ｎ＋１）にアクセスすることが可能となる。
【００９８】
図１９Ａから図１９Ｊを参照して、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作（コンポーネント間の接続動作）の詳細を説明する。図１９Ａ及び図１９Ｂは、本発明によるコンポーネント指向ソフトウェア構築におけるシステム構成動作の全体を示すシーケンス図であり、図１９Ｃから図１９Ｊは、図１９Ａ及び図１９Ｂにおける（１）から（８）の動作を示すシーケン図である。
【００９９】
図１９Ｃを参照して、図１９Ａにおける（１）の動作うち、ステップＳ２０１〜Ｓ２０４を説明する。フレームワークコア１０は、システム構成をコンポーネントフレームワークアクティベータ２−ｎに要求する（ステップＳ２０１）。コンポーネントフレームワークアクティベータ２０ｎは、システム構成要求に応じて、拡張情報一覧１０１（マップ）から拡張情報インスタンス１３を取り出す（ステップＳ２０２）。続いてコンポーネントフレームワークアクティベータ２０ｎは、拡張情報インスタンス１３から、ベースコンポーネントのコンポーネントアクティベータインスタンスを取得する（ステップＳ２０３）。ここでコンポーネントフレームワークアクティベータ２０ｎは、自身が所属する第ｎ階層のコンポーネントアクティベータ３１ｎのインスタンスを取得する。又、コンポーネントフレームワークアクティベータ２０ｎは、拡張情報インスタンス１３から、拡張コンポーネントＩＤを片方向線形リストとして取得する。詳細には、コンポーネントフレームワークアクティベータ２０ｎは、プラグインコンポーネントＩＤ一覧１０２を取得する（ステップＳ２０４）。これにより、コンポーネントフレームワークアクティベータ２０ｎは、自身に属するコンポーネント３−ｎ（ベースコンポーネント）と当該コンポーネント３の拡張先コンポーネント３−（ｎ＋１）との組み合わせを把握することが可能となる。
【０１００】
図１９Ｃ〜図１９Ｅを参照して、図１９Ａにおける（１）〜（３）の動作うち、ステップＳ２０５〜Ｓ２１７を説明する。コンポーネントフレームワークアクティベータ２０ｎは、拡張先を指定するプラグインコンポーネントＩＤ一覧のインスタンスを引数として、コンポーネントインスタンスの生成をコンポーネントアクティベータ３１ｎに要求する（ステップＳ２０５）。コンポーネントアクティベータ３１ｎは、コンポーネント生成要求に応じて、第ｎ＋１階層用のプラグインコンポーネントファサード２３（ｎ＋１）、コンポーネント内クラス群２３ｎ、コンポーネントタスク３２ｎを生成する（ステップＳ２０６〜Ｓ２１５）。又、コンポーネントアクティベータ３１ｎは、フレームワークコア１０にコンポーネントタスク３２ｎをアタッチする（ステップＳ２１６）。又、コンポーネントアクティベータ３１ｎは、ステップＳ２０５のコンポーネント生成要求の応答として、コンポーネントフレームワークアクティベータ２０ｎに対し、第ｎ＋１階層用のプラグインコンポーネントファサード２３（ｎ＋１）を渡す（ステップＳ２１７）。
【０１０１】
詳細には、コンポーネントアクティベータ３１ｎは、ステップＳ２０５におけるコンポーネント生成要求に応じて、プラグインコンポーネントファサードの生成処理に移行する（ステップＳ２０６）。ここでは、先ずコンポーネントアクティベータ３１ｎは、拡張先となる第ｎ＋１階層用のプラグインコンポーネントファサードインスタンスを登録するためのファサード一覧１０５−ｎ（マップ）を生成する（ステップＳ２０７）。続いて、コンポーネントアクティベータ３１ｎは、ステップＳ２０５において通知されたプラグインコンポーネントＩＤ一覧１０２からプラグインコンポーネントＩＤを取得する（ステップＳ２０８）。コンポーネントアクティベータ３１ｎは、取得したプラグインコンポーネントＩＤインスタンスで特定したプラグインコンポーネントＩＤ１４により拡張コンポーネントＩＤを取得する（ステップＳ２０９）。
【０１０２】
コンポーネントアクティベータ３１ｎは、プラグインコンポーネントＩＤで特定したコンポーネントに対するプラグインコンポーネントファサード２３（ｎ＋１）を生成する（ステップＳ２１０）。続いてコンポーネントアクティベータ３１ｎは、作成したプラグインコンポーネントファサードのインスタンスとプラグインコンポーネントＩＤとを対応づけてファサード一覧１０５−ｎに登録する（ステップＳ２１１）。
【０１０３】
ステップＳ２０８からステップ２１１の処理は、プラグインコンポーネントＩＤ一覧に登録された全てのコンポーネント３−（ｎ＋１）（拡張先）に対して行われる。これにより、設定ファイル４−ｎにおいて拡張先として設定された全てのコンポーネント３−（ｎ＋１）に対するプラグインコンポーネントファサード２３（ｎ＋１）が、生成される。以降、処理の呼び出し側となるベースコンポーネント（ここではコンポーネント３−ｎ）はプラグインコンポーネントファサード２３（ｎ＋１）を介して、拡張先コンポーネント（ここではコンポーネント３−（ｎ＋１））に対する処理を行うこととなる。
【０１０４】
コンポーネントアクティベータ３１ｎは、内部インスタンスの生成処理に移行し、プラグインコンポーネントファサード２３（ｎ＋１）を引数としてコンポーネント内クラス群３３ｎを生成する（ステップＳ２１２、Ｓ２１３）。続いてコンポーネントアクティベータ３１ｎは、タスク生成処理に移行し、コンポーネントタスク３２ｎを生成する（ステップＳ２１４、Ｓ２１５）。
【０１０５】
コンポーネントアクティベータ３１ｎは、生成したコンポーネントタスク３２ｎをフレームワークコア１０にアタッチする（ステップＳ２１６）。これにより、フレームワークコア１０は、第ｎ階層のコンポーネントタスク３２ｎを呼び出すことが可能となる。又、コンポーネントアクティベータ３１ｎは、ステップＳ２０５におけるコンポーネント生成要求の応答として、ｎ＋１階層用のファサード一覧１０５−ｎを、第ｎ階層のコンポーネントフレームワークアクティベータ２０ｎに渡す（ステップＳ２１７）。
【０１０６】
図１９Ｆを参照して、図１９Ａにおける（４）の動作ステップＳ２１８〜Ｓ２２０を説明する。コンポーネントフレームワークアクティベータ２０ｎは、プラグインコンポーネントＩＤ一覧１０２からプラグインコンポーネントＩＤインスタンスを取得する（ステップＳ２１８）。ここで、コンポーネントフレームワークアクティベータ２０ｎは、ステップＳ２０４において取得したプラグインコンポーネントＩＤ一覧インスタンスにより特定したプラグインコンポーネントＩＤ１４を、プラグインコンポーネントＩＤ一覧１０２から取得する。続いて、コンポーネントフレームワークアクティベータ２０ｎは、取得したプラグインコンポーネントＩＤ１４によりプラグインコンポーネントＩＤを取得する（ステップＳ２１９）。
【０１０７】
コンポーネントフレームワークアクティベータ２０ｎは、第ｎ＋１階層のコンポーネントフレームワークアクティベータ２０（ｎ＋１）にプラグイン接続する（ステップＳ２２０）。ここでコンポーネントフレームワークアクティベータ２０ｎは、ステップＳ２１７においてコンポーネントアクティベータ３１ｎから渡されたファサード一覧１０５−ｎと、ステップ２１９において取得したプラグインコンポーネントＩＤを引数として、第ｎ＋１階層のコンポーネントフレームワークアクティベータ２０（ｎ＋１）に対しプラグイン接続する。以降、第ｎ＋１階層における処理となる。
【０１０８】
図１９Ｇから図１９Ｈを参照して、図１９Ａにおける（５）〜（７）の動作のうち、ステップＳ２２１〜Ｓ２３５を説明する。コンポーネントフレームワークアクティベータ２０（ｎ＋１）は、第ｎ階層からのプラグイン接続に応じて、拡張情報一覧１０１（マップ）から拡張情報インスタンス１３を取り出す（ステップＳ２２１）。ここでコンポーネントフレームワークアクティベータ２０（ｎ＋１）は、プラグイン接続の引数であるプラグインコンポーネントＩＤをＫｅｙとして拡張情報一覧１０１から拡張情報インスタンスを取得する。続いてコンポーネントフレームワークアクティベータ２０（ｎ＋１）は、拡張情報インスタンス１３から、ベースコンポーネントとなるコンポーネントのコンポーネントアクティベータインスタンスを取得する（ステップＳ２２３）。ここでコンポーネントフレームワークアクティベータ２０（ｎ＋１）は、自身が所属する第ｎ＋１階層のコンポーネントアクティベータ３１（ｎ＋１）のインスタンスを取得する。又、コンポーネントフレームワークアクティベータ２０（ｎ＋１）は、拡張情報インスタンス１３から、拡張コンポーネントＩＤを片方向線形リストとして取得する。詳細には、コンポーネントフレームワークアクティベータ２０（ｎ＋１）は、プラグインコンポーネントＩＤ一覧１０２のインスタンスを取得する（ステップＳ２２２）。これにより、コンポーネントフレームワークアクティベータ２０（ｎ＋１）は、自身に属するコンポーネント３−（ｎ＋１）（ベースコンポーネント）と当該コンポーネント３の拡張先コンポーネントとの組み合わせを把握することが可能となる。
【０１０９】
続いて、コンポーネントフレームワークアクティベータ２０（ｎ＋１）は、拡張先を指定するプラグインコンポーネントＩＤ一覧のインスタンスを引数として、プラグインコンポーネントインスタンスの生成をコンポーネントアクティベータ３１（ｎ＋１）に要求する（ステップＳ２２４）。コンポーネントアクティベータ３１（ｎ＋１）は、プラグインコンポーネント生成要求に応じて、第ｎ＋２階層用のプラグインコンポーネントファサード２３（ｎ＋２）、コンポーネント内クラス群３３（ｎ＋１）、コンポーネントタスク３２（ｎ＋１）、コンポーネント責務３４（ｎ＋１）を生成する（ステップＳ２２５〜Ｓ２３４、Ｓ２３６〜２３９）。又、コンポーネントアクティベータ３１（ｎ＋１）は、プラグインコンポーネントファサード２３（ｎ＋１）にコンポーネントタスク３２（ｎ＋１）をアタッチする（ステップＳ２３５）。
【０１１０】
詳細には、コンポーネントアクティベータ３１（ｎ＋１）は、プラグインコンポーネント生成要求に応じて、プラグインコンポーネントファサードの生成処理に移行する（ステップＳ２２５）。ここでは、先ずコンポーネントアクティベータ３１（ｎ＋１）は、拡張先となる第ｎ＋２階層用のプラグインコンポーネントファサードインスタンスを登録するためのファサード一覧１０５−（ｎ＋２）（マップ）を生成する（ステップＳ２２６）。続いて、コンポーネントアクティベータ３１（ｎ＋１）は、ステップＳ２２４において通知されたプラグインコンポーネントＩＤ一覧１０２からプラグインコンポーネントＩＤインスタンスを取得する（ステップＳ２２７）。コンポーネントアクティベータ３１（ｎ＋１）は、取得したプラグインコンポーネントＩＤインスタンスによりプラグインコンポーネントＩＤを取得する（ステップＳ２２８）。
【０１１１】
コンポーネントアクティベータ３１（ｎ＋１）は、プラグインコンポーネントＩＤで特定したコンポーネントに対するプラグインコンポーネントファサード２３（ｎ＋２）を生成する（ステップＳ２２９）。続いてコンポーネントアクティベータ３１（ｎ＋１）は、作成したプラグインコンポーネントファサードのインスタンスとプラグインコンポーネントＩＤとを対応づけてファサード一覧１０５−（ｎ＋１）に登録する（ステップＳ２３０）。
【０１１２】
ステップＳ２２７からステップ２３０の処理は、プラグインコンポーネントＩＤ一覧に登録された全てのコンポーネント３−（ｎ＋２）に対して行われる。これにより、設定ファイル４−（ｎ＋１）において拡張先として設定された全てのコンポーネント３−（ｎ＋２）に対するプラグインコンポーネントファサード２３（ｎ＋２）が、生成される。以降、処理の呼び出し側となるベースコンポーネント（ここではコンポーネント３−（ｎ＋１））はプラグインコンポーネントファサード２３（ｎ＋２）を介して、拡張先コンポーネント（ここではコンポーネント３−（ｎ＋２））に対する処理を行うこととなる。
【０１１３】
コンポーネントアクティベータ３１（ｎ＋１）は、内部インスタンスの生成処理に移行し、プラグインコンポーネントファサード２３（ｎ＋２）を引数としてコンポーネント内クラス群３３（ｎ＋１）を生成する（ステップＳ２３１、Ｓ２３２）。続いてコンポーネントアクティベータ３１（ｎ＋１）は、タスク生成処理に移行し、コンポーネントタスク３２（ｎ＋１）を生成する（ステップＳ２３３、Ｓ２３４）。
【０１１４】
コンポーネントアクティベータ３１（ｎ＋１）は、生成したコンポーネントタスク３２（ｎ＋１）をベースコンポーネント側で生成されたプラグインコンポーネントファサード２３（ｎ＋１）にアタッチする（ステップＳ２３５）。これにより、プラグインコンポーネントファサード２３（ｎ＋１）は、第ｎ＋１階層のコンポーネントタスク３２（ｎ＋１）を呼び出すことが可能となる。
【０１１５】
図１９Ｉ及び図１９Ｊを参照して、図１９Ａにおける（７）〜（８）の動作のうち、ステップＳ２３６〜Ｓ２４２を説明する。コンポーネントアクティベータ３１（ｎ＋１）は、ステップＳ２２４におけるコンポーネント生成要求が、プラグインコンポーネントの生成要求であることからコンポーネント責務を生成し、プラグインコンポーネントファサード２３（ｎ＋１）にアタッチする（ステップＳ２３６〜Ｓ２４０）。詳細には、コンポーネントアクティベータ３１（ｎ＋１）は、先ず責務マップ１０４−（ｎ＋１）を生成する（ステップＳ２３７）。続いてコンポーネントアクティベータ３１（ｎ＋１）は、コンポーネント責務３４（ｎ＋１）を生成し、これを責務名に対応付けて責務マップ１０４−（ｎ＋１）に登録する（ステップＳ２３８、Ｓ２３９）。ステップＳ２３８、Ｓ２３９の処理は、コンポーネント３−（ｎ＋１）の責務数だけ行われる。コンポーネントアクティベータ３１（ｎ＋１）は、責務マップ１０４−（ｎ＋１）をプラグインコンポーネントファサード２３（ｎ＋１）にアタッチする（ステップＳ２４０）。これにより、プラグインコンポーネントファサード２３（ｎ＋１）は、第ｎ＋１階層のコンポーネント責務３４（ｎ＋１）を呼び出すことが可能となる。
【０１１６】
又、コンポーネントアクティベータ３１（ｎ＋１）は、ステップＳ２２４におけるプラグインコンポーネント生成要求の応答として、ｎ＋２階層用のファサード一覧１０５−（ｎ＋２）を、第ｎ＋１階層のコンポーネントフレームワークアクティベータ２０（ｎ＋１）に渡す（ステップＳ２４１）。コンポーネントフレームワークアクティベータ２０（ｎ＋１）は、ステップＳ２４１においてコンポーネントアクティベータ３１（ｎ＋１）から渡されたファサード一覧１０５−（ｎ＋１）と、ステップ２２８）において取得したプラグインコンポーネントＩＤを引数として、第ｎ＋２階層のコンポーネントフレームワークアクティベータ２０（ｎ＋２）に対し、プラグイン接続する。以降、ステップＳ２２１〜Ｓ２４２の処理と同様に第ｎ＋２階層における処理となる。
【０１１７】
ステップＳ２１８〜Ｓ２４２の処理は、プラグインコンポーネントＩＤ一覧１０２に含まれる全てのプラグインコンポーネントＩＤに対して行われる。すなわち、ベースコンポーネントに対応する拡張先コンポーネントの数だけ、ステップＳ２１８〜Ｓ２４２の処理が行われる。尚、拡張先がない場合、ステップＳ２２０、Ｓ２４２の処理は省略される。
【０１１８】
以上のような動作により、ベースコンポーネントである第ｎ階層のコンポーネント３−ｎと、拡張先コンポーネントである第ｎ＋１階層のコンポーネント３−（ｎ＋１）が接続される。
【０１１９】
拡張先のコンポーネントは、設定ファイル４−ｎによって決まるため、設定ファイル４−ｎの拡張先情報４０３を変更することで、容易に拡張先コンポーネントを変更することができる。この際、本発明によるコンポーネント責務は階層毎に決まっているため、すなわち、階層間で呼び出すコンポーネント責務が決まっているため、ベースコンポーネント側のプラグインコンポーネントファサード２３（ｎ＋１）に拡張側のコンポーネント責務３４（ｎ＋１）をアタッチすることで、コンポーネント間の接続が可能となる。
【０１２０】
次に、図２０Ａから図２０Ｅを参照して、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の詳細を説明する。図２０Ａは、本発明によるコンポーネント指向ソフトウェア構築よって構築されたシステムにおける処理動作の全体を示すシーケンス図であり、図２０Ｂから図２０Ｅは、図２０Ａにおける（１）から（４）の動作を示すシーケン図である。
【０１２１】
図２０Ｂを参照して、図２０Ａにおける（１）の動作（ステップＳ３０１〜Ｓ３０５）を説明する。フレームワークコア１０は、コンポーネントタスク３２ｎに初期化を要求する（ステップＳ３０１）。ここでフレームワークコア１０は、ステップＳ２１６においてアタッチされたコンポーネントタスク３２ｎの初期化を要求する。コンポーネントタスク３２ｎは、コンポーネント３−ｎ内のクラス群３３ｎに初期化を要求する（ステップＳ３０２）。コンポーネント内のクラス群３３ｎは、第ｎ＋１階層用ファサード一覧１０５−（ｎ＋１）から、初期化対象となる拡張先コンポーネントに対応するプラグインコンポーネントファサード２３（ｎ＋１）のインスタンスを取得する（ステップＳ３０３）。続いて、コンポーネント内のクラス群３３ｎは、取り出したプラグインコンポーネントファサード２３（ｎ＋１）を介して第ｎ＋１階層のコンポーネントタスク３２（ｎ＋１）に初期化を要求する（ステップＳ３０４、Ｓ３０５）。ここでプラグインコンポーネントファサード２３（ｎ＋１）は、ステップＳ２３５においてアタッチされたコンポーネントタスク３２（ｎ＋１）に対し初期化を要求する。
【０１２２】
図２０Ｃを参照して、図２０Ａにおける（２）の動作（ステップＳ３０６〜Ｓ３０９）を説明する。第ｎ階層から初期化を要求されたコンポーネントタスク３２（ｎ＋１）は、コンポーネント３−（ｎ＋１）内のクラス群３３（ｎ＋１）に初期化を要求する（ステップＳ３０６）。コンポーネント内のクラス群３３（ｎ＋１）は、第ｎ＋２階層用ファサード一覧１０５−（ｎ＋２）から、初期化対象となる拡張先コンポーネントに対応するプラグインコンポーネントファサード２３（ｎ＋２）のインスタンスを取得する（ステップＳ３０７）。続いて、取り出したプラグインコンポーネントファサード２３（ｎ＋２）を介して、第ｎ＋２階層のコンポーネントタスク３２（ｎ＋２）に初期化を要求する（ステップＳ３０８、Ｓ３０９）。以降、第ｎ＋２階層において、ステップＳ３０６〜Ｓ３０９と同様な動作により初期化処理が実行される。
【０１２３】
尚、ステップＳ３０３〜Ｓ３０９の処理は、ｎ＋１階層用ファサード一覧１０５−（ｎ＋１）に登録された全てのプラグインコンポーネントファサード２３（ｎ＋１）に対して行われる。又、ステップＳ３０６〜Ｓ３０９の処理は、ｎ＋２階層用ファサード一覧１０５−（ｎ＋２）に登録された全てのプラグインコンポーネントファサード２３（ｎ＋２）に対して行われる。
【０１２４】
次に、ステップＳ３０３〜Ｓ３０９の処理によって初期化されたシステムにおいて周期処理が行われる場合を一例に、本システムにおけるシステム構築後の処理動作を説明する。
【０１２５】
図２０Ｄ及び図２０Ｅを参照して、図２０Ａにおける（３）及び（４）の動作のうち、ステップＳ４０１〜Ｓ４１１を説明する。コンポーネント３の初期化後、フレームワークコア１０はコンポーネントタスク３２ｎに対して周期通知する（ステップＳ４０１）。ここでは、ステップＳ２１６においてアタッチされたコンポーネントタスク３２ｎに対して周期通知される。コンポーネントタスク３２ｎは、周期通知に応じて周期処理を開始するとともに、コンポーネント３−ｎ内のクラス群３３ｎに周期通知する（ステップＳ４０２、Ｓ４０３）。コンポーネント内のクラス群３３ｎは、第ｎ＋１階層用ファサード一覧１０５−（ｎ＋１）から、処理を行う拡張先コンポーネントに対応するプラグインコンポーネントファサード２３（ｎ＋１）のインスタンスを取得する（ステップＳ４０４）。この際、コンポーネント内のクラス群３３ｎは、周期処理するコンポーネントのプラグインコンポーネントＩＤをＫｅｙとして、第ｎ＋１階層用ファサード一覧１０５−（ｎ＋１）からプラグインコンポーネントファサード２３（ｎ＋１）のインスタンスを取得する。続いて、コンポーネント内のクラス群３３ｎは、取り出したプラグインコンポーネントファサード２３（ｎ＋１）に周期通知する（ステップＳ４０５）。プラグインコンポーネントファサード２３（ｎ＋１）は、これに応じて第ｎ＋１階層のコンポーネントタスク３２（ｎ＋１）に周期通知する（ステップＳ４０６）。ここでプラグインコンポーネントファサード２３（ｎ＋１）は、ステップＳ２３５においてアタッチされたコンポーネントタスク３２（ｎ＋１）に対し周期通知する。
【０１２６】
コンポーネントタスク３２（ｎ＋１）は、周期通知に応じて周期処理を開始するとともに、コンポーネント３−（ｎ＋１）内のクラス群３３（ｎ＋１）を周期処理する（ステップＳ４０７、Ｓ４０８）。コンポーネント内のクラス群３３（ｎ＋１）は、第ｎ＋２階層用ファサード一覧１０５−（ｎ＋２）から、処理を行う拡張先コンポーネントに対応するプラグインコンポーネントファサード２３（ｎ＋２）のインスタンスを取得する（ステップＳ４０９）。この際、コンポーネント内のクラス群３３（ｎ＋１）は、周期処理するコンポーネントのプラグインコンポーネントＩＤをＫｅｙとして、第ｎ＋２階層用ファサード一覧１０５−（ｎ＋２）からプラグインコンポーネントファサード２３（ｎ＋２）のインスタンスを取得する。続いて、コンポーネント内のクラス群３３（ｎ＋１）は、取り出したプラグインコンポーネントファサード２３（ｎ＋２）に対し周期通知する（ステップＳ４１０）。プラグインコンポーネントファサード２３（ｎ＋２）は、これに応じて第ｎ＋２階層のコンポーネントタスク３２（ｎ＋２）に周期通知する（ステップＳ４１１）。以降、第ｎ＋２階層において、ステップＳ４０７〜Ｓ４１１と同様な動作により処理が実行される。
【０１２７】
図２０Ｄ及び図２０Ｅを参照して、図２０Ａにおける（３）及び（４）の動作のうち、ステップＳ４１２〜Ｓ４１７を説明する。コンポーネント３−ｎ内のクラス群３３ｎは、ステップＳ４０３の周期処理に応じて、プラグインコンポーネントファサード２３（ｎ＋１）に対し第ｎ＋１階層の責務を実行する（ステップＳ４１２）。ここでコンポーネントのクラス群３３ｎは、第ｎ＋１階層のコンポーネントフレームワーク２−（ｎ＋１）に定義された責務のメソッドを呼び出す。プラグインコンポーネントファサード２３（ｎ＋１）は、第ｎ＋１階層のコンポーネント責務３４（ｎ＋１）を実行する（ステップＳ４１３）。
【０１２８】
コンポーネント責務３４（ｎ＋１）は、コンポーネント３−（ｎ＋１）のクラス群３３（ｎ＋１）に対し責務を満たす処理を実施する（ステップＳ４１４）。コンポーネント内のクラス群３３（ｎ＋１）は、第ｎ＋２階層用ファサード一覧１０５−（ｎ＋２）から処理を実行する拡張先コンポーネントに対応するプラグインコンポーネントファサード２３（ｎ＋２）のインスタンスを取得する（ステップＳ４１５）。続いて、コンポーネント内のクラス群３３（ｎ＋１）は、取り出したプラグインコンポーネントファサード２３（ｎ＋２）に対し第ｎ＋２階層の責務を実施する（ステップＳ４１６）。プラグインコンポーネントファサード２３（ｎ＋２）は、これに応じて第ｎ＋２階層のコンポーネント責務３４（ｎ＋２）を実行する（ステップＳ３０９）。以降、第ｎ＋２階層において、ステップＳ４１４〜Ｓ４１７と同様な動作により処理が実行される。又、ステップＳ４１５〜Ｓ４１７の処理は、第ｎ＋２層の責務を実行する場合に実施される。
【０１２９】
以上のように、本発明によるシステム構築方法によれば、フレームワークコア１による拡張フレームワークの設定（ステップＳ１１０）によってコンポーネントフレームワークアクティベータ２０ｎ間が接続され、第ｎ階層のコンポーネントフレームワークアクティベータ２０ｎによって生成されたプラグインコンポーネントファサード２３（ｎ＋１）に第ｎ＋１階層のタスクや責務がアタッチされることで、コンポーネントと拡張先コンポーネントとが接続される。システム構築後は、プラグインコンポーネントファサード２３（ｎ＋１）を介して第ｎ階層と第ｎ＋１階層のコンポーネント間が接続される。本発明では、プラグインコンポーネントファサード２３（ｎ＋１）にアタッチされ得る責務は階層毎に予め決められている。このため、ステップＳ４１２において第ｎ階層のコンポーネント内クラス群３３ｎは、第ｎ＋１階層から呼び出すメソッド等を予め知ることができる。従って、階層毎に割り当てられた責務を有するコンポーネントは、その接続仕様を変更することなく、他の階層に属するコンポーネントと接続することが可能となる。設計者は、コンポーネント間の接続仕様を考慮する必要がなくなるため、コンポーネント３の機能開発のみに注力できる。又、コンポーネント３の接続先は、設定ファイル４に応じて変更できるため、ユーザはコンポーネントのコードを気にせず用にコンポーネントの接続を変更することが可能となる。
【０１３０】
又、依存関係は、コンポーネントからフレームワーク方向のみなので、フレームワークはコンポーネント変更の影響を受けず、プログラム制御はフレームワークコア上で動作し、差分のみポリモフィズムでコンポーネントフレームワークやコンポーネントにおいて処理するため高品質となる。
【０１３１】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。図５に示す一例では、１つのコンピュータシステム９００によって実現されるシミュレータや電子機器（例えばワードプロセッサや複合機）として説明したがこれに限らない。例えば、それぞれがＣＰＵやインタフェースを有し独立の機能をもつ複数の装置（例示：マイコン、ＩＣセンサ）によってコンピュータシステム９００が構成されても構わない。この場合、複数の装置のそれぞれに記録されたコンポーネントが、インタフェースを介してマスタとなる装置に入力され、１つのソフトウェアシステムとして機能する。例えば、フレームワーク９０４と戦車コンポーネント３−２が記録された記憶装置を持つ戦車に、レーザセンサコンポーネント３−３Ａが記録された記憶装置を持つレーザセンサが搭載された場合、上述の方法により、戦車コンポーネント３−２とレーザセンサコンポーネント３−３Ａを接続して１つのシステムを形成してもよい。
【符号の説明】
【０１３２】
１        ：フレームワークコア
２        ：コンポーネントフレームワーク
３        ：コンポーネント
４        ：設定ファイル
１０      ：フレームワークコア
１２      ：コンポーネントアクティベータ
１３      ：拡張情報クラス
１４      ：プラグインコンポーネントＩＤ
１５      ：コンポーネントタスククラス
１６      ：プラグインコンポーネントファサード
１７      ：コンポーネント責務
２０ｎ    ：コンポーネントフレームワークアクティベータ
２３      ：プラグインコンポーネントファサード
２３ｎ    ：コンポーネント内クラス群
３１ｎ    ：コンポーネントアクティベータ
３２ｎ    ：コンポーネントタスク
３３ｎ    ：クラス群
３４      ：コンポーネント責務
１０１    ：拡張情報一覧
１０２    ：プラグインコンポーネントＩＤ一覧
１０３    ：片方向線形リスト
１０４    ：責務マップ
４０１    ：コンポーネント識別子
４０２    ：アタッチ先情報
４０３    ：拡張先情報
４０４    ：アクティベータクラス
９００    ：コンピュータシステム
９０２    ：インタフェース
９０３    ：記憶装置
９０４    ：フレームワーク
９０５    ：アプリケーションプログラム
９０６    ：設定ファイル
【図１】
0005791558.tif 000002
【図２】
0005791558.tif 000003
【図３】
0005791558.tif 000004
【図４】
0005791558.tif 000005
【図５】
0005791558.tif 000006
【図６】
0005791558.tif 000007
【図７】
0005791558.tif 000008
【図８】
0005791558.tif 000009
【図９】
0005791558.tif 000010
【図１０】
0005791558.tif 000011
【図１１】
0005791558.tif 000012
【図１２Ａ】
0005791558.tif 000013
【図１２Ｂ】
0005791558.tif 000014
【図１３Ａ】
0005791558.tif 000015
【図１３Ｂ】
0005791558.tif 000016
【図１３Ｃ】
0005791558.tif 000017
【図１３Ｄ】
0005791558.tif 000018
【図１３Ｅ】
0005791558.tif 000019
【図１３Ｆ】
0005791558.tif 000020
【図１４Ａ】
0005791558.tif 000021
【図１４Ｂ】
0005791558.tif 000022
【図１５Ａ】
0005791558.tif 000023
【図１５Ｂ】
0005791558.tif 000024
【図１６Ａ】
0005791558.tif 000025
【図１６Ｂ】
0005791558.tif 000026
【図１７Ａ】
0005791558.tif 000027
【図１７Ｂ】
0005791558.tif 000028
【図１８Ａ】
0005791558.tif 000029
【図１８Ｂ】
0005791558.tif 000030
【図１９Ａ】
0005791558.tif 000031
【図１９Ｂ】
0005791558.tif 000032
【図１９Ｃ】
0005791558.tif 000033
【図１９Ｄ】
0005791558.tif 000034
【図１９Ｅ】
0005791558.tif 000035
【図１９Ｆ】
0005791558.tif 000036
【図１９Ｇ】
0005791558.tif 000037
【図１９Ｈ】
0005791558.tif 000038
【図１９Ｉ】
0005791558.tif 000039
【図１９Ｊ】
0005791558.tif 000040
【図２０Ａ】
0005791558.tif 000041
【図２０Ｂ】
0005791558.tif 000042
【図２０Ｃ】
0005791558.tif 000043
【図２０Ｄ】
0005791558.tif 000044
【図２０Ｅ】
0005791558.tif 000045