(57)【特許請求の範囲】
【請求項１】
新たな環境においても動作する環境に依存しないコンポーネントである環境非依存コンポーネント定義を保持する環境非依存コンポーネント定義ファイルと、
前記新たな環境においては動作しない環境に依存するコンポーネントである環境依存コンポーネント定義を保持する環境依存コンポーネント定義ファイルと、
アプリケーション環境定義を保持するアプリケーション環境定義ファイルと、
前記新たな環境において有効なプログラム言語である特定環境用コンポーネント定義テンプレートを保持する特定環境用コンポーネント定義テンプレートファイルと、
前記環境非依存コンポーネント定義ファイルと前記環境依存コンポーネント定義ファイルとを前記新たな環境においても動作するプログラムに変換する際の前記プログラムの記述に関する規則である特定環境用基本的記述ルールを保持する特定環境用基本的記述ルールファイルと、
前記環境依存コンポーネント定義ファイルの環境に依存する部分を前記特定環境用コンポーネント定義テンプレートファイルに保持されるプログラム言語に変換するプログラムであるカスタマイズ用メタプログラムを保持するカスタマイズ用メタプログラムファイルと、
前記各ファイルに保持されているデータを用いてプログラム自動生成処理の動作を制御するプログラム自動生成装置エンジンとを有して構成され、
一度作成されたコンポーネントを前記新たな環境で動作させる所定のコンポーネントターゲット環境ソースを構築することを特徴とするコンポーネントの自動生成装置。
【請求項２】
前記プログラム自動生成装置エンジンは、
前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルを読み込む第１の読込手段と、
前記第１の読込手段によって読み込んだ前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルから内部データを生成するアプリケーション生成手段と、
前記新たな環境に対応したＡＰＩを生成するコンポーネント生成手段と、
前記ＡＰＩ内容生成手段によって生成された前記ＡＰＩを前記内部データの中に生成するＡＰＩ内容生成手段と、
前記内部データから前記ＡＰＩ内容生成手段によって生成された前記ＡＰＩを除いたＢＯＤＹを前記カスタマイズ用メタプログラムファイルに保持されているカスタマイズ用メタプログラムで前記新たな環境で動作するプログラム言語に変換するＢＯＤＹ生成手段と、
を有して構成されたことを特徴とする請求項１に記載のコンポーネントの自動生成装置。
【請求項３】
前記コンポーネント生成手段は、
ソースコードが生成されるコンポーネントについて、該コンポーネントに対応する特定環境用コンポーネント定義テンプレートを読み込み内部データに反映させ、
前記コンポーネントの各抽象的ＡＰＩに対して前記ＡＰＩ内容生成手段を適用し、ターゲットプログラミング言語環境に対応したＡＰＩとその中身を内部データに生成し、
上位コンポーネントが前記コンポーネントを使う場合に必要な上位コンポーネント用のコードを内部データに生成し、
プログラム自動生成装置のコア部分が特定プログラミング言語環境に依存しないものになっており、特定プログラミング言語環境に依存する部分はプログラム自動生成装置に後付することを特徴とする請求項２記載のコンポーネントの自動生成装置。
【請求項４】
前記ＡＰＩ内容生成手段は、
前記コンポーネント生成手段によって生成された前記ＡＰＩを前記内部データに生成する手段とを有して構成されたことを特徴とする請求項２又は３に記載のコンポーネントの自動生成装置。
【請求項５】
前記ＢＯＤＹ生成手段は、
前記抽象的ＡＰＩで切り出された単位で前記コンポーネントの持つ機能の中身を定義するＢＯＤＹがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するＢＯＤＹを選んで前記メタプログラムを実行する第１の実行手段と、
前記ＢＯＤＹがプログラミング言語環境非依存の場合には、使用している抽象的ＡＰＩの部分を該抽象的ＡＰＩのＢＯＤＹで置き換えて再帰的に前記第１の実行手段を繰り返し実行する第２の実行手段と、
を有して構成されることを特徴とする請求項２から４のいずれか１項記載のコンポーネントの自動生成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンポーネントの自動生成装置および表現方法に関し、特に、一度開発されたコンポーネントの再利用化を図ったコンポーネントの自動生成装置に関する。
【０００２】
【従来の技術】
従来、コンポーネントの自動生成装置および表現方法は、例えば、一度作成したコンポーネントを異なる環境で再利用することを目的とし、そのための手段としてプログラム自動生成装置の技術分野に適用される。
【０００３】
従来のソフトウェア開発では、まずシステムを構成する各コンポーネントがどのプログラミング言語環境（プラットホーム、ＯＳ、言語、実装方式、通信方式、使用するブラックボックスのコンポーネント等）で開発するかを決め、各コンポーネントのソースコードを、そのＯＳ上の、その言語の、その実装方式で、人手で作成する。また、一度作成したコードを再利用するために、プログラム自動生成装置や変換装置が使われることがある。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記の従来技術では、その装置自体をたくさんのプログラミング言語環境に対応させることは非常に困難であり現実的でなく、下記のような問題点を伴う。
【０００５】
第１に、一度開発されたコンポーネントの再利用が困難であるということである。その理由は、一度開発されたソフトウェアコンポーネントを他の環境で動かそうとする場合は、ほとんど全ての部分に対してソースコードを人手で書き換えなければならない。また、初めにかけたコストと同じかそれ以上のコストをかけなければ、同機能を持つ他の環境で動作するソフトウェアコンポーネントを実現できない。
【０００６】
第２に、コンポーネントをプログラム自動生成装置を使って、同じソースコードから異なるプログラミング言語環境に対応するソースコードを自動生成する場合、プログラム自動生成装置自体をたくさんのプログラミング言語環境に対応させるには、コストが非常にかかり現実的ではないということである。その理由は、プログラム自動生成装置自体が特定のプログラミング言語環境に依存してしまい、他のプログラミング言語環境に対応するためには、プログラム自動生成装置自体の再利用が困難である。
【０００７】
本発明は、一度開発したソフトウェアコンポーネントをソースレベルで再利用し、そのコンポーネントを他の環境、例えば、他のプラットホーム、他のＯＳ、他の言語、他の実装方式、他の通信方式、他のブラックボックスのコンポーネント使用で動かす時のコストを削減できる、コンポーネントの自動生成装置を提供することを目的とする。
【０００８】
さらに詳述すれば、本発明は、その手段として、コンポーネントを本来プログラミング言語環境に依存しない業務ロジックの部分とプログラミング言語環境に依存する部分を分けて作成するコンポーネントの表現方式と、そこから複数のターゲットプログラミング言語環境でのコンポーネントのソースコードを自動生成するプログラム自動生成装置を、実現しやすい形で提供することにある。
【０００９】
【課題を解決するための手段】
請求項１記載のコンポーネントの自動生成装置は、新たな環境においても動作する環境に依存しないコンポーネントである環境非依存コンポーネント定義を保持する環境非依存コンポーネント定義ファイルと、前記新たな環境においては動作しない環境に依存するコンポーネントである環境依存コンポーネント定義を保持する環境依存コンポーネント定義ファイルと、アプリケーション環境定義を保持するアプリケーション環境定義ファイルと、前記新たな環境において有効なプログラム言語である特定環境用コンポーネント定義テンプレートを保持する特定環境用コンポーネント定義テンプレートファイルと、前記環境非依存コンポーネント定義ファイルと前記環境依存コンポーネント定義ファイルとを前記新たな環境においても動作するプログラムに変換する際の前記プログラムの記述に関する規則である特定環境用基本的記述ルールを保持する特定環境用基本的記述ルールファイルと、前記環境依存コンポーネント定義ファイルの環境に依存する部分を前記特定環境用コンポーネント定義テンプレートファイルに保持されるプログラム言語に変換するプログラムであるカスタマイズ用メタプログラムを保持するカスタマイズ用メタプログラムファイルと、前記各ファイルに保持されているデータを用いてプログラム自動生成処理の動作を制御するプログラム自動生成装置エンジンとを有して構成され、一度作成されたコンポーネントを前記新たな環境で動作させる所定のコンポーネントターゲット環境ソースを構築することを特徴とする。
【００１０】
請求項２記載の発明は、請求項１記載のコンポーネントの自動生成装置において、前記プログラム自動生成装置エンジンは、前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルを読み込む第１の読込手段と、前記第１の読込手段によって読み込んだ前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルから内部データを生成するアプリケーション生成手段と、前記新たな環境に対応したＡＰＩを生成するコンポーネント生成手段と、前記ＡＰＩ内容生成手段によって生成された前記ＡＰＩを前記内部データの中に生成するＡＰＩ内容生成手段と、前記内部データから前記ＡＰＩ内容生成手段によって生成された前記ＡＰＩを除いたＢＯＤＹを前記カスタマイズ用メタプログラムファイルに保持されているカスタマイズ用メタプログラムで前記新たな環境で動作するプログラム言語に変換するＢＯＤＹ生成手段と、を有して構成されたことを特徴とする。
【００１１】
請求項３記載の発明は、請求項２記載のコンポーネントの自動生成装置において、前記コンポーネント生成手段は、ソースコードが生成されるコンポーネントについて、該コンポーネントに対応する特定環境用コンポーネント定義テンプレートを読み込み内部データに反映させ、前記コンポーネントの各抽象的ＡＰＩに対して前記ＡＰＩ内容生成手段を適用し、ターゲットプログラミング言語環境に対応したＡＰＩとその中身を内部データに生成し、上位コンポーネントが前記コンポーネントを使う場合に必要な上位コンポーネント用のコードを内部データに生成し、プログラム自動生成装置のコア部分が特定プログラミング言語環境に依存しないものになっており、特定プログラミング言語環境に依存する部分はプログラム自動生成装置に後付することを特徴とする。
【００１２】
請求項４記載の発明は、請求項２又は３のいずれか１項記載のコンポーネントの自動生成装置において、前記ＡＰＩ内容生成手段は、前記コンポーネント生成手段によって生成された前記ＡＰＩを前記内部データに生成する手段とを有して構成されたことを特徴とする。
【００１３】
請求項５記載の発明は、請求項２から４のいずれか１項記載のコンポーネントの自動生成装置において、前記ＢＯＤＹ生成手段は、前記抽象的ＡＰＩで切り出された単位で前記コンポーネントの持つ機能の中身を定義するＢＯＤＹがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するＢＯＤＹを選んで前記メタプログラムを実行する第１の実行手段と、前記ＢＯＤＹがプログラミング言語環境非依存の場合には、使用している抽象的ＡＰＩの部分を該抽象的ＡＰＩのＢＯＤＹで置き換えて再帰的に前記第１の実行手段を繰り返し実行する第２の実行手段と、を有して構成されることを特徴とする。
【００１４】
【発明の実施の形態】
次に、添付図面を参照して本発明によるコンポーネントの自動生成装置および表現方法の実施の形態を詳細に説明する。図１から図２１を参照すると、本発明のコンポーネントの自動生成装置の一実施形態が示されている。
【００１５】
図１は、本実施形態のコンポーネントの自動生成装置の構成例を示し、また、図２は、図１中のプログラム自動生成装置エンジン１の構成例を示すブロック図である。
【００１６】
上記の図１を参照すると、本発明の第１の実施形態であるコンポーネントの自動生成装置は、環境非依存コンポーネント定義を保持する同ファイル群２、・・、２と、環境依存コンポーネント定義を保持する同ファイル群３、・・、３と、アプリケーション環境定義を保持する同ファイル４と、特定環境用コンポーネント定義テンプレートを保持する同ファイル群５、・・、５と、特定環境用基本的記述ルールを保持する同ファイル群６、・・、６と、カスタマイズ用メタプログラムを保持する同ファイル群７、・・、７と、プログラム自動生成装置のコア部分でありプログラム自動生成処理の処理動作を制御するプログラム自動生成装置エンジン１とから構成される。本構成のコンポーネントの自動生成装置により、コンポーネントターゲット環境ソースが構築されて同ファイル群８、・・、８へ保持される。
【００１７】
図２を参照すると、プログラム自動生成装置エンジン１は、アプリケーション生成手段１１、コンポーネント生成手段１２、ＡＰＩ内容生成手段１３、ＢＯＤＹ生成手段１４を有して構成される。これらの手段は、それぞれ次のように動作する。なお、ＡＰＩ（Application Programming Interface ）とは、一般的には、ＯＳやＤＢＭＳ（データベース管理システム）等の基本ソフトウェアをプログラム中から使うための関数セットのこと、およびアプリケーションプログラムを作成するときに使用するコンポーネントが持つ関数セットを指す。
【００１８】
アプリケーション生成手段１１は、環境非依存と依存のコンポーネント定義ファイル群２、３および環境定義ファイル４を読み込んで内部データにし、コンポーネント生成手段１２を適用し、このコンポーネント生成手段１２で生成される生成ソースコードを表す内部データから、実際の各コンポーネントのターゲット環境用のソースコード８、・・、８を生成する。
【００１９】
コンポーネント生成手段１２は、実際にソースコード８、・・、８が生成されるコンポーネントについて、そのコンポーネントに対応する特定環境用コンポーネント定義テンプレート５を読み込み、内部データに反映させ、そのコンポーネントの各抽象的ＡＰＩに対してＡＰＩ内容生成手段１３を適用し、ターゲットプログラミング言語環境に対応したＡＰＩと、その中身を内部データに生成する。また、上位コンポーネントがそのコンポーネントを使う場合に必要な上位コンポーネント用のコードを、内部データに生成する。
【００２０】
ＡＰＩ内容生成手段１３は、ターゲットプログラミング言語環境に対応したＡＰＩとその中身を生成することの設定を行い、ＢＯＤＹ生成手段１４を適用して、これらを内部データに生成する。
【００２１】
ＢＯＤＹ生成手段１４は、そのＢＯＤＹがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するＢＯＤＹを選んでそのメタプログラムを実行し、そのＢＯＤＹがプログラミング言語環境非依存の場合には、使用している抽象的ＡＰＩの部分をその抽象的ＡＰＩのＢＯＤＹで置き換えて再帰的にＢＯＤＹ生成手段１４を繰り返し実行し、実際に生成ソースコードのイメージを内部データに生成する。
【００２２】
なお、メタプログラムとは、抽象的ＡＰＩとＢＯＤＹで表現されたコンポーネントの記述からソースコードを自動生成する場合に、その自動生成の方法の一部をコンポーネントまたは抽象的ＡＰＩ単位に切り出したものであり、自動生成装置のコア部分に変更を加えることなく自動生成の方法を変更してカスタマイズ可能な形にするものである。
【００２３】
環境非依存コンポーネントとは、その各ＢＯＤＹが抽象的ＡＰＩだけを使用しているものを意味する。また、環境依存コンポーネントとは、その各ＢＯＤＹ中に、特定のプログラミング言語環境ではどのようなネイティブコードを書くかを記述してあるものを意味する。
【００２４】
（動作）
次に、図１、図２の構成ブロック図及び図３、図４、図５、図６、図７、図８のフローチャートを参照して、全体の動作例について詳細に説明する。
【００２５】
まず、図３において、アプリケーション生成手段１１の動作手順を説明する。
コンポーネント定義ファイル群２、３に保持された定義データとアプリケーション環境定義ファイル４に保持された環境定義とを読み込み、内部データを作成する（ステップＡ１）。次に、アプリケーション環境定義ファイル４でトップになっているトップのコンポーネントについて、コンポーネント生成手段１２を適用する（ステップＡ２）。さらに、マクロでない各コンポーネントについて、内部データからターゲットソースファイルを作成する（ステップＡ３）。
【００２６】
次に、図４において、コンポーネント生成手段１２の動作手順を説明する。
コンポーネント生成手段１２は、作成中または作成済みのコンポーネントか？ （チェックＪ１）、マクロコンポーネントか？ （チェックＪ２）、現在作成中のコンポーネントのテンプレート中に環境にマッチする部分があるか否か？ （チェックＪ３）を実行する。
【００２７】
これらのチェックＪ１〜Ｊ３を通過した、そのコンポーネントが従う特定環境用コンポーネント定義テンプレートファイル５を読み込み、テンプレート中のそのコンポーネントのアプリケーション環境定義ファイル４で指定されたプログラミング言語環境にマッチする部分を、内部データに反映させる（ステップＢ１）。次に、そのコンポーネントが使用している全てのコンポーネントについて、コンポーネント生成手段１２を再帰的に適用する（ステップＢ２）。次に、そのコンポーネントの全ての抽象的ＡＰＩについて、ＡＰＩ内容生成手段１３を適用する（ステップＢ３）。そのコンポーネントに付随しているコンポーネントメタプログラムを実行する（ステップＢ４）。
【００２８】
次に、図５において、ＡＰＩ内容生成手段１３の動作手順を説明する。
ＡＰＩ内容生成手段１３では、着目している抽象ＡＰＩの実際のＡＰＩとその中身を生成することを内部データに記し（ステップＣ１）、その抽象的ＡＰＩの特定プログラミング言語環境でのＡＰＩと、その内容を生成する設定とを行う。その後、その抽象的ＡＰＩのＢＯＤＹについてＢＯＤＹ生成手段１４を適用する（ステップＣ２）。
【００２９】
次に、図６において、ＢＯＤＹ生成手段１４の動作手順を説明する。
ＢＯＤＹ生成手段１４では、まず着目中のＢＯＤＹがプログラミング言語環境に依存するものか依存しないものかをチェックし（Ｋ１）、プログラミング言語環境に依存するものであった場合（各プログラミング言語環境でどう書くかのネイティブコードが書いてある場合）には（Ｋ２／ＹＥＳ）、ＢＯＤＹの中からアプリケーション環境定義で指定されるプログラミング言語環境のものを取り出し、それを新しいＢＯＤＹとし（Ｄ１）、次に、置き換えられたＢＯＤＹのＡＰＩメタプログラムを実行し、これによって生成コードの一部分を内部データに作成する（ステップＤ２）。
【００３０】
また、ＢＯＤＹ生成手段１４において、着目中のＢＯＤＹがプログラミング言語環境に依存しないものであった場合（ＢＯＤＹが抽象的ＡＰＩだけで書かれている場合）は（Ｋ１／ＮＯ）、そのＢＯＤＹをそのＢＯＤＹが使っている抽象的ＡＰＩのＢＯＤＹで置き換え、これにＢＯＤＹ生成手段を再帰的に適用し（ステップＤ３）、最後に、初めに着目していたＢＯＤＹのＡＰＩメタプログラムを実行し、これによって生成コードの一部分を内部データに作成する（ステップＤ４）。
【００３１】
上記の手順によれば、ＢＯＤＹ生成手段１４を再帰的に適用すること、およびＡＰＩメタプログラムの中から再帰的にＢＯＤＹ生成手段１４を適用することにより、生成コードが次第に内部データに生成されていく。引数やＡＰＩの対応付けは、実際にはＡＰＩメタプログラム中で行われる。実行するメタプログラムから戻る場所がＡＰＩ内容生成手段１３である場合、そのメタプログラムがターゲットプログラミング言語環境でのＡＰＩを生成する。
【００３２】
次に、ＡＰＩ内容生成手段１３からコンポーネント生成手段１２に戻ると、コンポーネントに付随しているコンポーネントメタプログラムを実行する（図４のステップＢ４）。
【００３３】
このコンポーネントメタプログラムは、上位コンポーネントがそのコンポーネントを使う場合に必要な上位コンポーネント用のコードを、内部データに生成する。最後に、コンポーネント生成手段１２からアプリケーション生成手段１１に戻ると、ソースを生成する各コンポーネントのターゲットソースのイメージが内部データに出来上がっており、その内部データから各コンポーネントのターゲットプログラミング言語環境でのソースコードファイルを生成する（図３のステップＡ３）。
【００３４】
一度作成したアプリケーションを新たな環境で動作させる場合、環境依存コンポーネント定義ファイル群３、・・、３と、プログラム自動生成装置エンジン１に後付けする特定環境用コンポーネント定義テンプレートファイル群５、・・、５と、特定環境用基本的記述ルールファイル群６、・・、６と、カスタマイズ用メタプログラムファイル群７、・・、７に追加のファイルの記述を行う。しかし、環境非依存コンポーネント定義ファイル群２、・・、２の記載は変更しない。この条件において、新たなプログラミング言語環境でのコンポーネントのターゲット環境ソースファイル群８、・・、８を生成する。
【００３５】
次に、本実施の形態の効果について説明する。
本実施の形態では、コンポーネントの定義に関して、プログラム自動生成装置エンジン１への入力を環境非依存コンポーネント定義ファイル２と環境依存コンポーネント定義ファイル３を明確に分離するというように構成されている。このため、プログラム自動生成装置側が新たなプログラミング言語環境に対応し、アプリケーション環境定義を作成すれば、環境非依存コンポーネント定義ファイル２に関してはそのまま再利用ができる。環境非依存コンポーネントについては、新たなプログラミング言語環境における記述部分が明確になっており、プログラム自動生成装置エンジン１が新たなプログラミング言語環境に対応すれば、その部分を書き加えるだけで、アプリケーション全体を作成することができる。
【００３６】
本実施の形態では、さらに、プログラム自動生成装置を異なるプログラミング言語環境に対応させる場合、自動生成において異なるプログラミング言語環境に対応するための部分を、特定環境用コンポーネント定義テンプレート群５と特定環境用基本的記述ルールファイル群６とカスタマイズ用メタプログラム群７として、プログラム自動生成装置エンジン１に後づけで追加するというように構成されている。このため、プログラム自動生成装置エンジン１をプログラミング言語環境に依存しないものとすることができる。これにより、プログラム自動生成装置エンジン１で既に対応したプログラミング言語環境での自動生成機能に影響を与えることなく、新たなプログラミング言語環境での自動生成機能を実現することができる。
【００３７】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
図８は、デフォルトＡＰＩメタプログラムの動作を示す流れ図であり、デフォルトで用意するＡＰＩメタプログラム（カスタマイズ用メタプログラムの一種）の動作の流れを示している。また、図９は、デフォルトで用意するコンポーネントメタプログラム（カスタマイズ用メタプログラムの一種）の動作の流れを示す。なお、図９、図１０は、環境非依存コンポーネント定義ファイル２の構成例である。
【００３８】
図１１、図１２は、環境依存コンポーネント定義ファイル３の構成例である。図１３は、アプリケーション環境定義ファイル４の構成例である。図１４、図１５は、プログラム自動生成装置エンジン１に後付けされた特定環境用コンポーネント定義テンプレートファイル５の構成例である。図１６は、プログラム自動生成装置エンジン１に後付けされた特定環境用基本的記述ルールファイル６の構成例である。
【００３９】
まず、アプリケーション生成手段１１のステップＡ１を実行した時点で、図１０の環境非依存コンポーネント定義（MyWindow) は、図１７に示されるような内部データになり、図１１の環境依存コンポーネント定義ファイル（MyButton）３は、図１８に示されるような内部データになる（図３のステップＡ１）。
【００４０】
次に、コンポーネント生成手段１２におけるステップＢ１で、各コンポーネントの特定環境用テンプレート定義（図１４、図１５）から各コンポーネントのプログラミング言語環境（アプリケーション環境定義で指定されるもので、図１３ではコンポーネントのプログラミング言語環境はJavaと指定される）に一致する部分を抜き出し、アプリケーション生成手段１１のステップＡ１を実行してできる生成コードを表す内部データにこれを反映させると（図４のステップＢ１）、図１９に示されるような内部データになる。
【００４１】
これは、図９、図１０の環境非依存コンポーネント定義（MyApp,MyWindow）と、図１１の環境依存コンポーネント定義（MyButton）とに対応する生成ソースの情報を持つが、その構成部分はいくつかが未定義のままか変更が加わる形になっている。
【００４２】
次に、コンポーネント生成手段１２のステップＢ３で、図１０で定義されるコンポーネント（MyWindow）についてそのコンポーネントが持つ抽象的ＡＰＩについてＡＰＩ内容生成手段１３を適用する。
【００４３】
まず。図１０で定義されるコンポーネント（MyWindow）の１番目のＡＰＩ、"$this の子部品を親を $parentとして作成する。"について、ＡＰＩ内容生成手段１３を適用した結果、内部データがどのようになるかを説明する。ＡＰＩ内容生成手段１３で、この抽象的ＡＰＩの特定プログラミング言語環境でのＡＰＩとその内容を生成するための設定を行い（図５のステップＣ１）、その抽象的ＡＰＩのＢＯＤＹ部分についてＢＯＤＹ生成手段１４を適用する（図５のステップＣ２）。
【００４４】
着目中のＢＯＤＹ部分は、"MyButton $btn を、親を $parentで作成する"というプログラミング言語環境に依存しないものなので、このＢＯＤＹを、抽象的ＡＰＩ"MyButton $btn を、親を $parentで作成する"のＢＯＤＹで置き換え、そのＢＯＤＹに関して再びＢＯＤＹ生成手段１４を適用する（図６のステップＤ３）。このＢＯＤＹ生成手段１４の中で着目中のＢＯＤＹは、コンポーネントMyButtonの抽象的ＡＰＩ"$this を、親を $parentで作成する"のＢＯＤＹであり、これはプログラミング言語環境依存なので、作成中のコンポーネントの指定されたプログラミング言語環境（Java）に一致する部分（図１１のenv Javaで括られた部分）で置き換える（図６のステップＤ１）。
【００４５】
次に、このＢＯＤＹのメタプログラム（図８に示されるデフォルトＡＰＩメタプログラム）を実行する（図６のステップＤ２）。このメタプログラムの実行によって、引数の$this と$parent で渡ってくるＢＯＤＹに対してＢＯＤＹ生成手段１４を適用し、引数がターゲットプログラミング言語環境でそれがどのように表現されるかを得、さらに図１１中のソース１、ソース２を、生成コードを表す内部データに入れる。しかし、この段階ではまだ上位コンポーネント（MyWindow）との関連付けが行われておらず、未定義の部分も含んでいる。
【００４６】
このＢＯＤＹ生成手段１４から戻ると、図６のステップＤ３の後に戻り、初めに着目していたＢＯＤＹのメタプログラム（図８に示されるデフォルトＡＰＩメタプログラム）を実行する（図６のステップＤ４）。このメタプログラムによって、生成コードの内部データでソース１、ソース２とそれを使用する上位コンポーネント（MyWindow）との関連付けが行われ、コンポーネントMyWindowに関する生成コードを表す内部データは、図１９で示されるものから図２０で示されるものに変わる。斜線で表した部分が変化した部分である。
【００４７】
図１０で定義されるコンポーネント（MyWindow）の２番目のＡＰＩ、３番目のＡＰＩについて同様のことを繰り返し、コンポーネントMyWindowに関する生成コードを表す内部データは、図２０で示されるものから図２１で示されるものに変わる。斜線で表した部分が変化した部分である。この時点で、コンポーネントMyWindowの生成コードを表す内部データからの未定義部分はなくなる。
【００４８】
コンポーネントMyWindowについてのコンポーネント生成手段１２から戻ると、次に、コンポーネントMyApp についてコンポーネント生成手段１２のステップＡ３を行い、MyWindowの場合と同様にして、MyApp の生成ソースを表す内部データを作成する。MyApp では、１番目の抽象的ＡＰＩ"main"のＢＯＤＹ中で、"MyWindow $wnd を作成する"という抽象的ＡＰＩを用いており、これは特定環境用基本的記述ルールで定義されているが、本発明の方式では、これを仮想の（マクロの）環境依存コンポーネント定義と同じように処理し、最終的に、MyWindowについての生成コードを表す内部データを同じように作成する。
【００４９】
トップのコンポーネントであるMyApp についてのコンポーネント生成手段１２から戻ると、次に、アプリケーション生成手段のステップＡ３を実行し、各コンポーネントについて、内部データからターゲットプログラミング言語環境でのソースファイルを作成する。コンポーネントMyWindowの場合であれば、図２１中のMyWindow.java というノードから、ループの無い有効グラフのノードを順にたどって、ソースの断片を順にファイルに出力することによって、実際のソースコードファイルが生成される。
【００５０】
図１３のアプリケーション環境定義では、プログラミング言語環境を"Java"と指定しているが、これを"C++, Windows"に変えて異なるプログラミング言語環境でこのアプリケーションを動作させる場合、図１１、図１２の環境依存コンポーネント定義に、"C++, Windows"の場合はどう書くかの記述を追加することと、図１４、図１５の特定環境用コンポーネント定義テンプレートに"C++, Windows"の場合の記述を追加することと、デフォルトメタプログラムが"C++, Windows"に対応していない場合はその場合のコードを追加することでアプリケーションを構成する各コンポーネントの"C++, Windows"のプログラミング言語環境でのソースファイルを自動生成する。
【００５１】
（効果）
第１の効果は、環境非依存コンポーネント定義がそのコンポーネントが動作する環境が変わってもそのまま再利用できることにある。その理由は、プログラム自動生成装置を動かす、プログラミング言語環境に対応したソースを生成するものにし、環境非依存コンポーネント定義の変更なく、異なるプログラミング言語環境でのターゲットソースを生成するためである。
【００５２】
第２の効果は、コンポーネントを他の環境で動かす場合、修正が容易になることである。その理由は、環境依存コンポーネントについては既に記述してある部分の変更の必要はなく、追加が必要なところは明確になっていて、そこを追加することで十分である。また、プログラム自動生成装置自体を、異なるプログラミング言語環境に対応させるコストが、従来に比べ低いためである。
【００５３】
第３の効果は、プログラム自動生成装置を従来に比べ、低いコストで多くのプログラミング言語環境に対応させることができることにある。その理由は、プログラム自動生成装置エンジンが、特定のプログラミング言語環境に依存しないものになっており、プログラミング言語環境に依存する部分は、特定環境用コンポーネント定義テンプレート群および特定環境用基本的記述ルール群およびカスタマイズ用メタプログラム群として役割を分離して、後付けで作成できるためである。
【００５４】
本発明は、一度開発したソフトウェアコンポーネントをソースレベルで再利用し、そのコンポーネントを他の環境（他のプラットホーム、他のＯＳ、他の言語、他の実装方式、他の通信方式、他のブラックボックスのコンポーネント使用）で動かす時の、コストを削減できる構成を提供するものである。
【００５５】
その手段として、コンポーネントを本来プログラミング言語環境に依存しない業務ロジックの部分と、プログラミング言語環境に依存する部分とを、分けて作成するコンポーネントの表現方式と、そこから複数のターゲットプログラミング言語環境でのコンポーネントのソースコードを自動生成するプログラム自動生成装置を、実現しやすい形で提供することにある。
【００５６】
本発明におけるコンポーネントの表現形式には２つの特徴がある。一つ目は、コンポーネントの定義を抽象的ＡＰＩ、ＢＯＤＹ、メタプログラムの３つの組み合わせの集合で表現することである。二つ目は、論理的には存在するが実際のインスタンスは生成されない仮想の（マクロの）コンポーネントの存在を許すことである。
【００５７】
本発明のコンポーネント表現方式では、プログラミング言語環境に依存しないコンポーネントの定義は、各抽象的ＡＰＩの中身を抽象的ＡＰＩだけを用いてＢＯＤＹを記述したコンポーネント定義であり、プログラミング言語環境に依存するコンポーネントの定義は、各抽象的ＡＰＩの中身をどのプログラミング言語環境の時にはどう書くかを記述したコンポーネントの定義である。プログラミング言語環境に依存するコンポーネント定義のＢＯＤＹは、ほぼターゲットプログラミング言語環境でのネイティブコードを記述し、変数の関係付け等で修正が必要なところは、ＢＯＤＹに書かれたネイティブコードを修正するメタプログラムを記述する。
【００５８】
これらのコンポーネントの定義から、ターゲットプログラミング言語環境用のソースコードを自動生成するプログラム自動生成装置を提供するので、プログラミング言語環境に依存しないコンポーネント定義については、プログラミング言語環境が変わってもターゲットプログラミング言語環境用のコードに書き換える必要はなく、環境非依存コンポーネントの再利用性が向上する。プログラミング言語環境に依存するコンポーネントについては、プログラミング言語環境が変わった場合、書き加えなければならない場所が明確になっており、既に書いてある部分を書き直す必要はない。
【００５９】
本発明のコンポーネント表現方式では、環境依存コンポーネントを実体のない仮想のコンポーネントとすることにより、それが持つ抽象的ＡＰＩは、メソッドやイベントだけでなく、式やステートメントも表すことができる。これにより、各プログラミング言語環境での基本的な記述ルールを環境依存コンポーネントとして扱うことができる。これにより、プログラム自動生成装置のコア部分に、各プログラミング言語環境での基本的な記述ルールを入れる必要がなく、プログラム自動生成装置のコア部分をプログラミング言語環境非依存にすることができる。
【００６０】
各プログラミング言語環境では、どういう構造のものが作成されるかを定義する部分を外後付けにすることにより、新たなプログラミング言語環境での自動生成機能を以前に作成したプログラミング言語環境での自動生成機能に影響を与えることなく追加することができる。このようにして、異なるプログラミング言語環境に対応したプログラム自動生成装置を実現するコストが削減される。
【００６１】
尚、上述の実施形態は本発明の好適な実施の一例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施が可能である。
【００６２】
【発明の効果】
以上の説明より明らかなように、本発明のコンポーネントの自動生成装置および表現方法は、環境非依存コンポーネント定義と、環境依存コンポーネント定義と、アプリケーション環境定義と、特定環境用コンポーネント定義テンプレートと、特定環境用基本的記述ルールと、カスタマイズ用メタプログラムとを保持し、各保持されているデータを用いてプログラム自動生成処理の動作を制御し、一度作成されたコンポーネントを新たな環境で動作させる場合に、それに関わる環境非依存コンポーネントに変更を加えず、この環境依存コンポーネントとプログラム自動生成装置に後付けする新たなプログラミング言語環境に対応する記述を追加し、既成のコンポーネントの新たなプログラミング言語環境のソースファイルを自動生成する。
【００６３】
このため、プログラム自動生成装置側が新たなプログラミング言語環境に対応し、アプリケーション環境定義を作成すれば、環境非依存コンポーネント定義に関してはそのまま再利用ができる。環境依存コンポーネントについては、新たなプログラミング言語環境における記述部分が明確になっており、プログラム自動生成装置が新たなプログラミング言語環境に対応すれば、その部分を書き加えるだけで、アプリケーション全体を作成することができる。
【００６４】
さらに、プログラム自動生成装置エンジンをプログラミング言語環境に依存しないものとすることができ、これにより、プログラム自動生成装置で既に対応したプログラミング言語環境での自動生成機能に影響を与えることなく、新たなプログラミング言語環境での自動生成機能を実現することができる。
【図面の簡単な説明】
【図１】本発明のコンポーネントの自動生成装置および表現方法の実施形態の、構成例を示すブロック図である。
【図２】図１中のプログラム自動生成装置エンジンの構成例を示すブロック図である。
【図３】アプリケーション生成手段の動作例を示す流れ図である。
【図４】コンポーネント生成手段の動作例を示す流れ図である。
【図５】ＡＰＩ内容生成手段の動作例を示す流れ図である。
【図６】ＢＯＤＹ生成手段における処理手順例を示すフローチャートである。
【図７】デフォルトコンポーネントメタプログラムの動作を示す流れ図である。
【図８】デフォルトＡＰＩメタプログラムの動作を示す流れ図である。
【図９】環境非依存コンポーネント定義（MyApp ）の構成例を示している。
【図１０】環境非依存コンポーネント定義（MyWindow）の構成例を示している。
【図１１】環境依存コンポーネント定義（MyButton）の構成例を示している。
【図１２】環境依存コンポーネント定義（MyDialog）の構成例を示している。
【図１３】アプリケーション環境定義の構成例を示している。
【図１４】特定環境用コンポーネント定義テンプレート（App ）の構成例を示している。
【図１５】特定環境用コンポーネント定義テンプレート（MainWindow）の構成例を示している。
【図１６】特定環境用基本的記述ルール（DefaultRule ）の構成例を示している。
【図１７】読み取り［イメージ］後のコンポーネント定義の内部データ（MyWindow）の構成例を示している。
【図１８】読み取り後のコンポーネント定義の内部データ（MyButton）の構成例を示している。
【図１９】読み込んだアプリケーション環境定義にMyApp とMyWindowについてコンポーネント定義テンプレートの適用後の内部データの構成例を示している。
【図２０】図１９でMyWindow部分についてのMyWindowのＡＰＩ−１を生成後の内部データの構成例を示している。
【図２１】図２０でMyWindow部分についてのMyWindowでＡＰＩ−２、ＡＰＩ−３を生成後の内部データの構成例を示している。
【符号の説明】
１  プログラム自動生成装置エンジン
２  環境非依存コンポーネント定義ファイル
３  環境依存コンポーネント定義ファイル
４  アプリケーション環境定義ファイル
５  特定環境用コンポーネント定義テンプレートファイル
６  特定環境用基本的記述ルールファイル
７  カスタマイズ用メタプログラムファイル
８  コンポーネントターゲット環境ソースファイル
１１  アプリケーション生成手段
１２  コンポーネント生成手段
１３  ＡＰＩ内容生成手段
１４  ＢＯＤＹ生成手段
【図１】
0003562435.tif 000002
【図２】
0003562435.tif 000003
【図３】
0003562435.tif 000004
【図４】
0003562435.tif 000005
【図５】
0003562435.tif 000006
【図６】
0003562435.tif 000007
【図７】
0003562435.tif 000008
【図８】
0003562435.tif 000009
【図９】
0003562435.tif 000010
【図１０】
0003562435.tif 000011
【図１１】
0003562435.tif 000012
【図１２】
0003562435.tif 000013
【図１３】
0003562435.tif 000014
【図１４】
0003562435.tif 000015
【図１５】
0003562435.tif 000016
【図１６】
0003562435.tif 000017
【図１７】
0003562435.tif 000018
【図１８】
0003562435.tif 000019
【図１９】
0003562435.tif 000020
【図２０】
0003562435.tif 000021
【図２１】
0003562435.tif 000022