JP3562435B2 - コンポーネントの自動生成装置 - Google Patents
コンポーネントの自動生成装置Info
- Publication number
- JP3562435B2 JP3562435B2 JP2000115885A JP2000115885A JP3562435B2 JP 3562435 B2 JP3562435 B2 JP 3562435B2 JP 2000115885 A JP2000115885 A JP 2000115885A JP 2000115885 A JP2000115885 A JP 2000115885A JP 3562435 B2 JP3562435 B2 JP 3562435B2
- Authority
- JP
- Japan
- Prior art keywords
- environment
- component
- api
- programming language
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
【0001】
【発明の属する技術分野】
本発明は、コンポーネントの自動生成装置および表現方法に関し、特に、一度開発されたコンポーネントの再利用化を図ったコンポーネントの自動生成装置に関する。
【0002】
【従来の技術】
従来、コンポーネントの自動生成装置および表現方法は、例えば、一度作成したコンポーネントを異なる環境で再利用することを目的とし、そのための手段としてプログラム自動生成装置の技術分野に適用される。
【0003】
従来のソフトウェア開発では、まずシステムを構成する各コンポーネントがどのプログラミング言語環境(プラットホーム、OS、言語、実装方式、通信方式、使用するブラックボックスのコンポーネント等)で開発するかを決め、各コンポーネントのソースコードを、そのOS上の、その言語の、その実装方式で、人手で作成する。また、一度作成したコードを再利用するために、プログラム自動生成装置や変換装置が使われることがある。
【0004】
【発明が解決しようとする課題】
しかしながら、上記の従来技術では、その装置自体をたくさんのプログラミング言語環境に対応させることは非常に困難であり現実的でなく、下記のような問題点を伴う。
【0005】
第1に、一度開発されたコンポーネントの再利用が困難であるということである。その理由は、一度開発されたソフトウェアコンポーネントを他の環境で動かそうとする場合は、ほとんど全ての部分に対してソースコードを人手で書き換えなければならない。また、初めにかけたコストと同じかそれ以上のコストをかけなければ、同機能を持つ他の環境で動作するソフトウェアコンポーネントを実現できない。
【0006】
第2に、コンポーネントをプログラム自動生成装置を使って、同じソースコードから異なるプログラミング言語環境に対応するソースコードを自動生成する場合、プログラム自動生成装置自体をたくさんのプログラミング言語環境に対応させるには、コストが非常にかかり現実的ではないということである。その理由は、プログラム自動生成装置自体が特定のプログラミング言語環境に依存してしまい、他のプログラミング言語環境に対応するためには、プログラム自動生成装置自体の再利用が困難である。
【0007】
本発明は、一度開発したソフトウェアコンポーネントをソースレベルで再利用し、そのコンポーネントを他の環境、例えば、他のプラットホーム、他のOS、他の言語、他の実装方式、他の通信方式、他のブラックボックスのコンポーネント使用で動かす時のコストを削減できる、コンポーネントの自動生成装置を提供することを目的とする。
【0008】
さらに詳述すれば、本発明は、その手段として、コンポーネントを本来プログラミング言語環境に依存しない業務ロジックの部分とプログラミング言語環境に依存する部分を分けて作成するコンポーネントの表現方式と、そこから複数のターゲットプログラミング言語環境でのコンポーネントのソースコードを自動生成するプログラム自動生成装置を、実現しやすい形で提供することにある。
【0009】
【課題を解決するための手段】
請求項1記載のコンポーネントの自動生成装置は、新たな環境においても動作する環境に依存しないコンポーネントである環境非依存コンポーネント定義を保持する環境非依存コンポーネント定義ファイルと、前記新たな環境においては動作しない環境に依存するコンポーネントである環境依存コンポーネント定義を保持する環境依存コンポーネント定義ファイルと、アプリケーション環境定義を保持するアプリケーション環境定義ファイルと、前記新たな環境において有効なプログラム言語である特定環境用コンポーネント定義テンプレートを保持する特定環境用コンポーネント定義テンプレートファイルと、前記環境非依存コンポーネント定義ファイルと前記環境依存コンポーネント定義ファイルとを前記新たな環境においても動作するプログラムに変換する際の前記プログラムの記述に関する規則である特定環境用基本的記述ルールを保持する特定環境用基本的記述ルールファイルと、前記環境依存コンポーネント定義ファイルの環境に依存する部分を前記特定環境用コンポーネント定義テンプレートファイルに保持されるプログラム言語に変換するプログラムであるカスタマイズ用メタプログラムを保持するカスタマイズ用メタプログラムファイルと、前記各ファイルに保持されているデータを用いてプログラム自動生成処理の動作を制御するプログラム自動生成装置エンジンとを有して構成され、一度作成されたコンポーネントを前記新たな環境で動作させる所定のコンポーネントターゲット環境ソースを構築することを特徴とする。
【0010】
請求項2記載の発明は、請求項1記載のコンポーネントの自動生成装置において、前記プログラム自動生成装置エンジンは、前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルを読み込む第1の読込手段と、前記第1の読込手段によって読み込んだ前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルから内部データを生成するアプリケーション生成手段と、前記新たな環境に対応したAPIを生成するコンポーネント生成手段と、前記API内容生成手段によって生成された前記APIを前記内部データの中に生成するAPI内容生成手段と、前記内部データから前記API内容生成手段によって生成された前記APIを除いたBODYを前記カスタマイズ用メタプログラムファイルに保持されているカスタマイズ用メタプログラムで前記新たな環境で動作するプログラム言語に変換するBODY生成手段と、を有して構成されたことを特徴とする。
【0011】
請求項3記載の発明は、請求項2記載のコンポーネントの自動生成装置において、前記コンポーネント生成手段は、ソースコードが生成されるコンポーネントについて、該コンポーネントに対応する特定環境用コンポーネント定義テンプレートを読み込み内部データに反映させ、前記コンポーネントの各抽象的APIに対して前記API内容生成手段を適用し、ターゲットプログラミング言語環境に対応したAPIとその中身を内部データに生成し、上位コンポーネントが前記コンポーネントを使う場合に必要な上位コンポーネント用のコードを内部データに生成し、プログラム自動生成装置のコア部分が特定プログラミング言語環境に依存しないものになっており、特定プログラミング言語環境に依存する部分はプログラム自動生成装置に後付することを特徴とする。
【0012】
請求項4記載の発明は、請求項2又は3のいずれか1項記載のコンポーネントの自動生成装置において、前記API内容生成手段は、前記コンポーネント生成手段によって生成された前記APIを前記内部データに生成する手段とを有して構成されたことを特徴とす る。
【0013】
請求項5記載の発明は、請求項2から4のいずれか1項記載のコンポーネントの自動生成装置において、前記BODY生成手段は、前記抽象的APIで切り出された単位で前記コンポーネントの持つ機能の中身を定義するBODYがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するBODYを選んで前記メタプログラムを実行する第1の実行手段と、前記BODYがプログラミング言語環境非依存の場合には、使用している抽象的APIの部分を該抽象的APIのBODYで置き換えて再帰的に前記第1の実行手段を繰り返し実行する第2の実行手段と、を有して構成されることを特徴とする。
【0014】
【発明の実施の形態】
次に、添付図面を参照して本発明によるコンポーネントの自動生成装置および表現方法の実施の形態を詳細に説明する。図1から図21を参照すると、本発明のコンポーネントの自動生成装置の一実施形態が示されている。
【0015】
図1は、本実施形態のコンポーネントの自動生成装置の構成例を示し、また、図2は、図1中のプログラム自動生成装置エンジン1の構成例を示すブロック図である。
【0016】
上記の図1を参照すると、本発明の第1の実施形態であるコンポーネントの自動生成装置は、環境非依存コンポーネント定義を保持する同ファイル群2、・・、2と、環境依存コンポーネント定義を保持する同ファイル群3、・・、3と、アプリケーション環境定義を保持する同ファイル4と、特定環境用コンポーネント定義テンプレートを保持する同ファイル群5、・・、5と、特定環境用基本的記述ルールを保持する同ファイル群6、・・、6と、カスタマイズ用メタプログラムを保持する同ファイル群7、・・、7と、プログラム自動生成装置のコア部分でありプログラム自動生成処理の処理動作を制御するプログラム自動生成装置エンジン1とから構成される。本構成のコンポーネントの自動生成装置により、コンポーネントターゲット環境ソースが構築されて同ファイル群8、・・、8へ保持される。
【0017】
図2を参照すると、プログラム自動生成装置エンジン1は、アプリケーション生成手段11、コンポーネント生成手段12、API内容生成手段13、BODY生成手段14を有して構成される。これらの手段は、それぞれ次のように動作する。なお、API(Application Programming Interface )とは、一般的には、OSやDBMS(データベース管理システム)等の基本ソフトウェアをプログラム中から使うための関数セットのこと、およびアプリケーションプログラムを作成するときに使用するコンポーネントが持つ関数セットを指す。
【0018】
アプリケーション生成手段11は、環境非依存と依存のコンポーネント定義ファイル群2、3および環境定義ファイル4を読み込んで内部データにし、コンポーネント生成手段12を適用し、このコンポーネント生成手段12で生成される生成ソースコードを表す内部データから、実際の各コンポーネントのターゲット環境用のソースコード8、・・、8を生成する。
【0019】
コンポーネント生成手段12は、実際にソースコード8、・・、8が生成されるコンポーネントについて、そのコンポーネントに対応する特定環境用コンポーネント定義テンプレート5を読み込み、内部データに反映させ、そのコンポーネントの各抽象的APIに対してAPI内容生成手段13を適用し、ターゲットプログラミング言語環境に対応したAPIと、その中身を内部データに生成する。また、上位コンポーネントがそのコンポーネントを使う場合に必要な上位コンポーネント用のコードを、内部データに生成する。
【0020】
API内容生成手段13は、ターゲットプログラミング言語環境に対応したAPIとその中身を生成することの設定を行い、BODY生成手段14を適用して、これらを内部データに生成する。
【0021】
BODY生成手段14は、そのBODYがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するBODYを選んでそのメタプログラムを実行し、そのBODYがプログラミング言語環境非依存の場合には、使用している抽象的APIの部分をその抽象的APIのBODYで置き換えて再帰的にBODY生成手段14を繰り返し実行し、実際に生成ソースコードのイメージを内部データに生成する。
【0022】
なお、メタプログラムとは、抽象的APIとBODYで表現されたコンポーネントの記述からソースコードを自動生成する場合に、その自動生成の方法の一部をコンポーネントまたは抽象的API単位に切り出したものであり、自動生成装置のコア部分に変更を加えることなく自動生成の方法を変更してカスタマイズ可能な形にするものである。
【0023】
環境非依存コンポーネントとは、その各BODYが抽象的APIだけを使用しているものを意味する。また、環境依存コンポーネントとは、その各BODY中に、特定のプログラミング言語環境ではどのようなネイティブコードを書くかを記述してあるものを意味する。
【0024】
(動作)
次に、図1、図2の構成ブロック図及び図3、図4、図5、図6、図7、図8のフローチャートを参照して、全体の動作例について詳細に説明する。
【0025】
まず、図3において、アプリケーション生成手段11の動作手順を説明する。
コンポーネント定義ファイル群2、3に保持された定義データとアプリケーション環境定義ファイル4に保持された環境定義とを読み込み、内部データを作成する(ステップA1)。次に、アプリケーション環境定義ファイル4でトップになっているトップのコンポーネントについて、コンポーネント生成手段12を適用する(ステップA2)。さらに、マクロでない各コンポーネントについて、内部データからターゲットソースファイルを作成する(ステップA3)。
【0026】
次に、図4において、コンポーネント生成手段12の動作手順を説明する。
コンポーネント生成手段12は、作成中または作成済みのコンポーネントか? (チェックJ1)、マクロコンポーネントか? (チェックJ2)、現在作成中のコンポーネントのテンプレート中に環境にマッチする部分があるか否か? (チェックJ3)を実行する。
【0027】
これらのチェックJ1〜J3を通過した、そのコンポーネントが従う特定環境用コンポーネント定義テンプレートファイル5を読み込み、テンプレート中のそのコンポーネントのアプリケーション環境定義ファイル4で指定されたプログラミング言語環境にマッチする部分を、内部データに反映させる(ステップB1)。次に、そのコンポーネントが使用している全てのコンポーネントについて、コンポーネント生成手段12を再帰的に適用する(ステップB2)。次に、そのコンポーネントの全ての抽象的APIについて、API内容生成手段13を適用する(ステップB3)。そのコンポーネントに付随しているコンポーネントメタプログラムを実行する(ステップB4)。
【0028】
次に、図5において、API内容生成手段13の動作手順を説明する。
API内容生成手段13では、着目している抽象APIの実際のAPIとその中身を生成することを内部データに記し(ステップC1)、その抽象的APIの特定プログラミング言語環境でのAPIと、その内容を生成する設定とを行う。その後、その抽象的APIのBODYについてBODY生成手段14を適用する(ステップC2)。
【0029】
次に、図6において、BODY生成手段14の動作手順を説明する。
BODY生成手段14では、まず着目中のBODYがプログラミング言語環境に依存するものか依存しないものかをチェックし(K1)、プログラミング言語環境に依存するものであった場合(各プログラミング言語環境でどう書くかのネイティブコードが書いてある場合)には(K2/YES)、BODYの中からアプリケーション環境定義で指定されるプログラミング言語環境のものを取り出し、それを新しいBODYとし(D1)、次に、置き換えられたBODYのAPIメタプログラムを実行し、これによって生成コードの一部分を内部データに作成する(ステップD2)。
【0030】
また、BODY生成手段14において、着目中のBODYがプログラミング言語環境に依存しないものであった場合(BODYが抽象的APIだけで書かれている場合)は(K1/NO)、そのBODYをそのBODYが使っている抽象的APIのBODYで置き換え、これにBODY生成手段を再帰的に適用し(ステップD3)、最後に、初めに着目していたBODYのAPIメタプログラムを実行し、これによって生成コードの一部分を内部データに作成する(ステップD4)。
【0031】
上記の手順によれば、BODY生成手段14を再帰的に適用すること、およびAPIメタプログラムの中から再帰的にBODY生成手段14を適用することにより、生成コードが次第に内部データに生成されていく。引数やAPIの対応付けは、実際にはAPIメタプログラム中で行われる。実行するメタプログラムから戻る場所がAPI内容生成手段13である場合、そのメタプログラムがターゲットプログラミング言語環境でのAPIを生成する。
【0032】
次に、API内容生成手段13からコンポーネント生成手段12に戻ると、コンポーネントに付随しているコンポーネントメタプログラムを実行する(図4のステップB4)。
【0033】
このコンポーネントメタプログラムは、上位コンポーネントがそのコンポーネントを使う場合に必要な上位コンポーネント用のコードを、内部データに生成する。最後に、コンポーネント生成手段12からアプリケーション生成手段11に戻ると、ソースを生成する各コンポーネントのターゲットソースのイメージが内部データに出来上がっており、その内部データから各コンポーネントのターゲットプログラミング言語環境でのソースコードファイルを生成する(図3のステップA3)。
【0034】
一度作成したアプリケーションを新たな環境で動作させる場合、環境依存コンポーネント定義ファイル群3、・・、3と、プログラム自動生成装置エンジン1に後付けする特定環境用コンポーネント定義テンプレートファイル群5、・・、5と、特定環境用基本的記述ルールファイル群6、・・、6と、カスタマイズ用メタプログラムファイル群7、・・、7に追加のファイルの記述を行う。しかし、環境非依存コンポーネント定義ファイル群2、・・、2の記載は変更しない。この条件において、新たなプログラミング言語環境でのコンポーネントのターゲット環境ソースファイル群8、・・、8を生成する。
【0035】
次に、本実施の形態の効果について説明する。
本実施の形態では、コンポーネントの定義に関して、プログラム自動生成装置エンジン1への入力を環境非依存コンポーネント定義ファイル2と環境依存コンポーネント定義ファイル3を明確に分離するというように構成されている。このため、プログラム自動生成装置側が新たなプログラミング言語環境に対応し、アプリケーション環境定義を作成すれば、環境非依存コンポーネント定義ファイル2に関してはそのまま再利用ができる。環境非依存コンポーネントについては、新たなプログラミング言語環境における記述部分が明確になっており、プログラム自動生成装置エンジン1が新たなプログラミング言語環境に対応すれば、その部分を書き加えるだけで、アプリケーション全体を作成することができる。
【0036】
本実施の形態では、さらに、プログラム自動生成装置を異なるプログラミング言語環境に対応させる場合、自動生成において異なるプログラミング言語環境に対応するための部分を、特定環境用コンポーネント定義テンプレート群5と特定環境用基本的記述ルールファイル群6とカスタマイズ用メタプログラム群7として、プログラム自動生成装置エンジン1に後づけで追加するというように構成されている。このため、プログラム自動生成装置エンジン1をプログラミング言語環境に依存しないものとすることができる。これにより、プログラム自動生成装置エンジン1で既に対応したプログラミング言語環境での自動生成機能に影響を与えることなく、新たなプログラミング言語環境での自動生成機能を実現することができる。
【0037】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
図8は、デフォルトAPIメタプログラムの動作を示す流れ図であり、デフォルトで用意するAPIメタプログラム(カスタマイズ用メタプログラムの一種)の動作の流れを示している。また、図9は、デフォルトで用意するコンポーネントメタプログラム(カスタマイズ用メタプログラムの一種)の動作の流れを示す。なお、図9、図10は、環境非依存コンポーネント定義ファイル2の構成例である。
【0038】
図11、図12は、環境依存コンポーネント定義ファイル3の構成例である。図13は、アプリケーション環境定義ファイル4の構成例である。図14、図15は、プログラム自動生成装置エンジン1に後付けされた特定環境用コンポーネント定義テンプレートファイル5の構成例である。図16は、プログラム自動生成装置エンジン1に後付けされた特定環境用基本的記述ルールファイル6の構成例である。
【0039】
まず、アプリケーション生成手段11のステップA1を実行した時点で、図10の環境非依存コンポーネント定義(MyWindow) は、図17に示されるような内部データになり、図11の環境依存コンポーネント定義ファイル(MyButton)3は、図18に示されるような内部データになる(図3のステップA1)。
【0040】
次に、コンポーネント生成手段12におけるステップB1で、各コンポーネントの特定環境用テンプレート定義(図14、図15)から各コンポーネントのプログラミング言語環境(アプリケーション環境定義で指定されるもので、図13ではコンポーネントのプログラミング言語環境はJavaと指定される)に一致する部分を抜き出し、アプリケーション生成手段11のステップA1を実行してできる生成コードを表す内部データにこれを反映させると(図4のステップB1)、図19に示されるような内部データになる。
【0041】
これは、図9、図10の環境非依存コンポーネント定義(MyApp,MyWindow)と、図11の環境依存コンポーネント定義(MyButton)とに対応する生成ソースの情報を持つが、その構成部分はいくつかが未定義のままか変更が加わる形になっている。
【0042】
次に、コンポーネント生成手段12のステップB3で、図10で定義されるコンポーネント(MyWindow)についてそのコンポーネントが持つ抽象的APIについてAPI内容生成手段13を適用する。
【0043】
まず。図10で定義されるコンポーネント(MyWindow)の1番目のAPI、"$this の子部品を親を $parentとして作成する。"について、API内容生成手段13を適用した結果、内部データがどのようになるかを説明する。API内容生成手段13で、この抽象的APIの特定プログラミング言語環境でのAPIとその内容を生成するための設定を行い(図5のステップC1)、その抽象的APIのBODY部分についてBODY生成手段14を適用する(図5のステップC2)。
【0044】
着目中のBODY部分は、"MyButton $btn を、親を $parentで作成する"というプログラミング言語環境に依存しないものなので、このBODYを、抽象的API"MyButton $btn を、親を $parentで作成する"のBODYで置き換え、そのBODYに関して再びBODY生成手段14を適用する(図6のステップD3)。このBODY生成手段14の中で着目中のBODYは、コンポーネントMyButtonの抽象的API"$this を、親を $parentで作成する"のBODYであり、これはプログラミング言語環境依存なので、作成中のコンポーネントの指定されたプログラミング言語環境(Java)に一致する部分(図11のenv Javaで括られた部分)で置き換える(図6のステップD1)。
【0045】
次に、このBODYのメタプログラム(図8に示されるデフォルトAPIメタプログラム)を実行する(図6のステップD2)。このメタプログラムの実行によって、引数の$this と$parent で渡ってくるBODYに対してBODY生成手段14を適用し、引数がターゲットプログラミング言語環境でそれがどのように表現されるかを得、さらに図11中のソース1、ソース2を、生成コードを表す内部データに入れる。しかし、この段階ではまだ上位コンポーネント(MyWindow)との関連付けが行われておらず、未定義の部分も含んでいる。
【0046】
このBODY生成手段14から戻ると、図6のステップD3の後に戻り、初めに着目していたBODYのメタプログラム(図8に示されるデフォルトAPIメタプログラム)を実行する(図6のステップD4)。このメタプログラムによって、生成コードの内部データでソース1、ソース2とそれを使用する上位コンポーネント(MyWindow)との関連付けが行われ、コンポーネントMyWindowに関する生成コードを表す内部データは、図19で示されるものから図20で示されるものに変わる。斜線で表した部分が変化した部分である。
【0047】
図10で定義されるコンポーネント(MyWindow)の2番目のAPI、3番目のAPIについて同様のことを繰り返し、コンポーネントMyWindowに関する生成コードを表す内部データは、図20で示されるものから図21で示されるものに変わる。斜線で表した部分が変化した部分である。この時点で、コンポーネントMyWindowの生成コードを表す内部データからの未定義部分はなくなる。
【0048】
コンポーネントMyWindowについてのコンポーネント生成手段12から戻ると、次に、コンポーネントMyApp についてコンポーネント生成手段12のステップA3を行い、MyWindowの場合と同様にして、MyApp の生成ソースを表す内部データを作成する。MyApp では、1番目の抽象的API"main"のBODY中で、"MyWindow $wnd を作成する"という抽象的APIを用いており、これは特定環境用基本的記述ルールで定義されているが、本発明の方式では、これを仮想の(マクロの)環境依存コンポーネント定義と同じように処理し、最終的に、MyWindowについての生成コードを表す内部データを同じように作成する。
【0049】
トップのコンポーネントであるMyApp についてのコンポーネント生成手段12から戻ると、次に、アプリケーション生成手段のステップA3を実行し、各コンポーネントについて、内部データからターゲットプログラミング言語環境でのソースファイルを作成する。コンポーネントMyWindowの場合であれば、図21中のMyWindow.java というノードから、ループの無い有効グラフのノードを順にたどって、ソースの断片を順にファイルに出力することによって、実際のソースコードファイルが生成される。
【0050】
図13のアプリケーション環境定義では、プログラミング言語環境を"Java"と指定しているが、これを"C++, Windows"に変えて異なるプログラミング言語環境でこのアプリケーションを動作させる場合、図11、図12の環境依存コンポーネント定義に、"C++, Windows"の場合はどう書くかの記述を追加することと、図14、図15の特定環境用コンポーネント定義テンプレートに"C++, Windows"の場合の記述を追加することと、デフォルトメタプログラムが"C++, Windows"に対応していない場合はその場合のコードを追加することでアプリケーションを構成する各コンポーネントの"C++, Windows"のプログラミング言語環境でのソースファイルを自動生成する。
【0051】
(効果)
第1の効果は、環境非依存コンポーネント定義がそのコンポーネントが動作する環境が変わってもそのまま再利用できることにある。その理由は、プログラム自動生成装置を動かす、プログラミング言語環境に対応したソースを生成するものにし、環境非依存コンポーネント定義の変更なく、異なるプログラミング言語環境でのターゲットソースを生成するためである。
【0052】
第2の効果は、コンポーネントを他の環境で動かす場合、修正が容易になることである。その理由は、環境依存コンポーネントについては既に記述してある部分の変更の必要はなく、追加が必要なところは明確になっていて、そこを追加することで十分である。また、プログラム自動生成装置自体を、異なるプログラミング言語環境に対応させるコストが、従来に比べ低いためである。
【0053】
第3の効果は、プログラム自動生成装置を従来に比べ、低いコストで多くのプログラミング言語環境に対応させることができることにある。その理由は、プログラム自動生成装置エンジンが、特定のプログラミング言語環境に依存しないものになっており、プログラミング言語環境に依存する部分は、特定環境用コンポーネント定義テンプレート群および特定環境用基本的記述ルール群およびカスタマイズ用メタプログラム群として役割を分離して、後付けで作成できるためである。
【0054】
本発明は、一度開発したソフトウェアコンポーネントをソースレベルで再利用し、そのコンポーネントを他の環境(他のプラットホーム、他のOS、他の言語、他の実装方式、他の通信方式、他のブラックボックスのコンポーネント使用)で動かす時の、コストを削減できる構成を提供するものである。
【0055】
その手段として、コンポーネントを本来プログラミング言語環境に依存しない業務ロジックの部分と、プログラミング言語環境に依存する部分とを、分けて作成するコンポーネントの表現方式と、そこから複数のターゲットプログラミング言語環境でのコンポーネントのソースコードを自動生成するプログラム自動生成装置を、実現しやすい形で提供することにある。
【0056】
本発明におけるコンポーネントの表現形式には2つの特徴がある。一つ目は、コンポーネントの定義を抽象的API、BODY、メタプログラムの3つの組み合わせの集合で表現することである。二つ目は、論理的には存在するが実際のインスタンスは生成されない仮想の(マクロの)コンポーネントの存在を許すことである。
【0057】
本発明のコンポーネント表現方式では、プログラミング言語環境に依存しないコンポーネントの定義は、各抽象的APIの中身を抽象的APIだけを用いてBODYを記述したコンポーネント定義であり、プログラミング言語環境に依存するコンポーネントの定義は、各抽象的APIの中身をどのプログラミング言語環境の時にはどう書くかを記述したコンポーネントの定義である。プログラミング言語環境に依存するコンポーネント定義のBODYは、ほぼターゲットプログラミング言語環境でのネイティブコードを記述し、変数の関係付け等で修正が必要なところは、BODYに書かれたネイティブコードを修正するメタプログラムを記述する。
【0058】
これらのコンポーネントの定義から、ターゲットプログラミング言語環境用のソースコードを自動生成するプログラム自動生成装置を提供するので、プログラミング言語環境に依存しないコンポーネント定義については、プログラミング言語環境が変わってもターゲットプログラミング言語環境用のコードに書き換える必要はなく、環境非依存コンポーネントの再利用性が向上する。プログラミング言語環境に依存するコンポーネントについては、プログラミング言語環境が変わった場合、書き加えなければならない場所が明確になっており、既に書いてある部分を書き直す必要はない。
【0059】
本発明のコンポーネント表現方式では、環境依存コンポーネントを実体のない仮想のコンポーネントとすることにより、それが持つ抽象的APIは、メソッドやイベントだけでなく、式やステートメントも表すことができる。これにより、各プログラミング言語環境での基本的な記述ルールを環境依存コンポーネントとして扱うことができる。これにより、プログラム自動生成装置のコア部分に、各プログラミング言語環境での基本的な記述ルールを入れる必要がなく、プログラム自動生成装置のコア部分をプログラミング言語環境非依存にすることができる。
【0060】
各プログラミング言語環境では、どういう構造のものが作成されるかを定義する部分を外後付けにすることにより、新たなプログラミング言語環境での自動生成機能を以前に作成したプログラミング言語環境での自動生成機能に影響を与えることなく追加することができる。このようにして、異なるプログラミング言語環境に対応したプログラム自動生成装置を実現するコストが削減される。
【0061】
尚、上述の実施形態は本発明の好適な実施の一例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施が可能である。
【0062】
【発明の効果】
以上の説明より明らかなように、本発明のコンポーネントの自動生成装置および表現方法は、環境非依存コンポーネント定義と、環境依存コンポーネント定義と、アプリケーション環境定義と、特定環境用コンポーネント定義テンプレートと、特定環境用基本的記述ルールと、カスタマイズ用メタプログラムとを保持し、各保持されているデータを用いてプログラム自動生成処理の動作を制御し、一度作成されたコンポーネントを新たな環境で動作させる場合に、それに関わる環境非依存コンポーネントに変更を加えず、この環境依存コンポーネントとプログラム自動生成装置に後付けする新たなプログラミング言語環境に対応する記述を追加し、既成のコンポーネントの新たなプログラミング言語環境のソースファイルを自動生成する。
【0063】
このため、プログラム自動生成装置側が新たなプログラミング言語環境に対応し、アプリケーション環境定義を作成すれば、環境非依存コンポーネント定義に関してはそのまま再利用ができる。環境依存コンポーネントについては、新たなプログラミング言語環境における記述部分が明確になっており、プログラム自動生成装置が新たなプログラミング言語環境に対応すれば、その部分を書き加えるだけで、アプリケーション全体を作成することができる。
【0064】
さらに、プログラム自動生成装置エンジンをプログラミング言語環境に依存しないものとすることができ、これにより、プログラム自動生成装置で既に対応したプログラミング言語環境での自動生成機能に影響を与えることなく、新たなプログラミング言語環境での自動生成機能を実現することができる。
【図面の簡単な説明】
【図1】本発明のコンポーネントの自動生成装置および表現方法の実施形態の、構成例を示すブロック図である。
【図2】図1中のプログラム自動生成装置エンジンの構成例を示すブロック図である。
【図3】アプリケーション生成手段の動作例を示す流れ図である。
【図4】コンポーネント生成手段の動作例を示す流れ図である。
【図5】API内容生成手段の動作例を示す流れ図である。
【図6】BODY生成手段における処理手順例を示すフローチャートである。
【図7】デフォルトコンポーネントメタプログラムの動作を示す流れ図である。
【図8】デフォルトAPIメタプログラムの動作を示す流れ図である。
【図9】環境非依存コンポーネント定義(MyApp )の構成例を示している。
【図10】環境非依存コンポーネント定義(MyWindow)の構成例を示している。
【図11】環境依存コンポーネント定義(MyButton)の構成例を示している。
【図12】環境依存コンポーネント定義(MyDialog)の構成例を示している。
【図13】アプリケーション環境定義の構成例を示している。
【図14】特定環境用コンポーネント定義テンプレート(App )の構成例を示している。
【図15】特定環境用コンポーネント定義テンプレート(MainWindow)の構成例を示している。
【図16】特定環境用基本的記述ルール(DefaultRule )の構成例を示している。
【図17】読み取り[イメージ]後のコンポーネント定義の内部データ(MyWindow)の構成例を示している。
【図18】読み取り後のコンポーネント定義の内部データ(MyButton)の構成例を示している。
【図19】読み込んだアプリケーション環境定義にMyApp とMyWindowについてコンポーネント定義テンプレートの適用後の内部データの構成例を示している。
【図20】図19でMyWindow部分についてのMyWindowのAPI−1を生成後の内部データの構成例を示している。
【図21】図20でMyWindow部分についてのMyWindowでAPI−2、API−3を生成後の内部データの構成例を示している。
【符号の説明】
1 プログラム自動生成装置エンジン
2 環境非依存コンポーネント定義ファイル
3 環境依存コンポーネント定義ファイル
4 アプリケーション環境定義ファイル
5 特定環境用コンポーネント定義テンプレートファイル
6 特定環境用基本的記述ルールファイル
7 カスタマイズ用メタプログラムファイル
8 コンポーネントターゲット環境ソースファイル
11 アプリケーション生成手段
12 コンポーネント生成手段
13 API内容生成手段
14 BODY生成手段
【発明の属する技術分野】
本発明は、コンポーネントの自動生成装置および表現方法に関し、特に、一度開発されたコンポーネントの再利用化を図ったコンポーネントの自動生成装置に関する。
【0002】
【従来の技術】
従来、コンポーネントの自動生成装置および表現方法は、例えば、一度作成したコンポーネントを異なる環境で再利用することを目的とし、そのための手段としてプログラム自動生成装置の技術分野に適用される。
【0003】
従来のソフトウェア開発では、まずシステムを構成する各コンポーネントがどのプログラミング言語環境(プラットホーム、OS、言語、実装方式、通信方式、使用するブラックボックスのコンポーネント等)で開発するかを決め、各コンポーネントのソースコードを、そのOS上の、その言語の、その実装方式で、人手で作成する。また、一度作成したコードを再利用するために、プログラム自動生成装置や変換装置が使われることがある。
【0004】
【発明が解決しようとする課題】
しかしながら、上記の従来技術では、その装置自体をたくさんのプログラミング言語環境に対応させることは非常に困難であり現実的でなく、下記のような問題点を伴う。
【0005】
第1に、一度開発されたコンポーネントの再利用が困難であるということである。その理由は、一度開発されたソフトウェアコンポーネントを他の環境で動かそうとする場合は、ほとんど全ての部分に対してソースコードを人手で書き換えなければならない。また、初めにかけたコストと同じかそれ以上のコストをかけなければ、同機能を持つ他の環境で動作するソフトウェアコンポーネントを実現できない。
【0006】
第2に、コンポーネントをプログラム自動生成装置を使って、同じソースコードから異なるプログラミング言語環境に対応するソースコードを自動生成する場合、プログラム自動生成装置自体をたくさんのプログラミング言語環境に対応させるには、コストが非常にかかり現実的ではないということである。その理由は、プログラム自動生成装置自体が特定のプログラミング言語環境に依存してしまい、他のプログラミング言語環境に対応するためには、プログラム自動生成装置自体の再利用が困難である。
【0007】
本発明は、一度開発したソフトウェアコンポーネントをソースレベルで再利用し、そのコンポーネントを他の環境、例えば、他のプラットホーム、他のOS、他の言語、他の実装方式、他の通信方式、他のブラックボックスのコンポーネント使用で動かす時のコストを削減できる、コンポーネントの自動生成装置を提供することを目的とする。
【0008】
さらに詳述すれば、本発明は、その手段として、コンポーネントを本来プログラミング言語環境に依存しない業務ロジックの部分とプログラミング言語環境に依存する部分を分けて作成するコンポーネントの表現方式と、そこから複数のターゲットプログラミング言語環境でのコンポーネントのソースコードを自動生成するプログラム自動生成装置を、実現しやすい形で提供することにある。
【0009】
【課題を解決するための手段】
請求項1記載のコンポーネントの自動生成装置は、新たな環境においても動作する環境に依存しないコンポーネントである環境非依存コンポーネント定義を保持する環境非依存コンポーネント定義ファイルと、前記新たな環境においては動作しない環境に依存するコンポーネントである環境依存コンポーネント定義を保持する環境依存コンポーネント定義ファイルと、アプリケーション環境定義を保持するアプリケーション環境定義ファイルと、前記新たな環境において有効なプログラム言語である特定環境用コンポーネント定義テンプレートを保持する特定環境用コンポーネント定義テンプレートファイルと、前記環境非依存コンポーネント定義ファイルと前記環境依存コンポーネント定義ファイルとを前記新たな環境においても動作するプログラムに変換する際の前記プログラムの記述に関する規則である特定環境用基本的記述ルールを保持する特定環境用基本的記述ルールファイルと、前記環境依存コンポーネント定義ファイルの環境に依存する部分を前記特定環境用コンポーネント定義テンプレートファイルに保持されるプログラム言語に変換するプログラムであるカスタマイズ用メタプログラムを保持するカスタマイズ用メタプログラムファイルと、前記各ファイルに保持されているデータを用いてプログラム自動生成処理の動作を制御するプログラム自動生成装置エンジンとを有して構成され、一度作成されたコンポーネントを前記新たな環境で動作させる所定のコンポーネントターゲット環境ソースを構築することを特徴とする。
【0010】
請求項2記載の発明は、請求項1記載のコンポーネントの自動生成装置において、前記プログラム自動生成装置エンジンは、前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルを読み込む第1の読込手段と、前記第1の読込手段によって読み込んだ前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルから内部データを生成するアプリケーション生成手段と、前記新たな環境に対応したAPIを生成するコンポーネント生成手段と、前記API内容生成手段によって生成された前記APIを前記内部データの中に生成するAPI内容生成手段と、前記内部データから前記API内容生成手段によって生成された前記APIを除いたBODYを前記カスタマイズ用メタプログラムファイルに保持されているカスタマイズ用メタプログラムで前記新たな環境で動作するプログラム言語に変換するBODY生成手段と、を有して構成されたことを特徴とする。
【0011】
請求項3記載の発明は、請求項2記載のコンポーネントの自動生成装置において、前記コンポーネント生成手段は、ソースコードが生成されるコンポーネントについて、該コンポーネントに対応する特定環境用コンポーネント定義テンプレートを読み込み内部データに反映させ、前記コンポーネントの各抽象的APIに対して前記API内容生成手段を適用し、ターゲットプログラミング言語環境に対応したAPIとその中身を内部データに生成し、上位コンポーネントが前記コンポーネントを使う場合に必要な上位コンポーネント用のコードを内部データに生成し、プログラム自動生成装置のコア部分が特定プログラミング言語環境に依存しないものになっており、特定プログラミング言語環境に依存する部分はプログラム自動生成装置に後付することを特徴とする。
【0012】
請求項4記載の発明は、請求項2又は3のいずれか1項記載のコンポーネントの自動生成装置において、前記API内容生成手段は、前記コンポーネント生成手段によって生成された前記APIを前記内部データに生成する手段とを有して構成されたことを特徴とす る。
【0013】
請求項5記載の発明は、請求項2から4のいずれか1項記載のコンポーネントの自動生成装置において、前記BODY生成手段は、前記抽象的APIで切り出された単位で前記コンポーネントの持つ機能の中身を定義するBODYがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するBODYを選んで前記メタプログラムを実行する第1の実行手段と、前記BODYがプログラミング言語環境非依存の場合には、使用している抽象的APIの部分を該抽象的APIのBODYで置き換えて再帰的に前記第1の実行手段を繰り返し実行する第2の実行手段と、を有して構成されることを特徴とする。
【0014】
【発明の実施の形態】
次に、添付図面を参照して本発明によるコンポーネントの自動生成装置および表現方法の実施の形態を詳細に説明する。図1から図21を参照すると、本発明のコンポーネントの自動生成装置の一実施形態が示されている。
【0015】
図1は、本実施形態のコンポーネントの自動生成装置の構成例を示し、また、図2は、図1中のプログラム自動生成装置エンジン1の構成例を示すブロック図である。
【0016】
上記の図1を参照すると、本発明の第1の実施形態であるコンポーネントの自動生成装置は、環境非依存コンポーネント定義を保持する同ファイル群2、・・、2と、環境依存コンポーネント定義を保持する同ファイル群3、・・、3と、アプリケーション環境定義を保持する同ファイル4と、特定環境用コンポーネント定義テンプレートを保持する同ファイル群5、・・、5と、特定環境用基本的記述ルールを保持する同ファイル群6、・・、6と、カスタマイズ用メタプログラムを保持する同ファイル群7、・・、7と、プログラム自動生成装置のコア部分でありプログラム自動生成処理の処理動作を制御するプログラム自動生成装置エンジン1とから構成される。本構成のコンポーネントの自動生成装置により、コンポーネントターゲット環境ソースが構築されて同ファイル群8、・・、8へ保持される。
【0017】
図2を参照すると、プログラム自動生成装置エンジン1は、アプリケーション生成手段11、コンポーネント生成手段12、API内容生成手段13、BODY生成手段14を有して構成される。これらの手段は、それぞれ次のように動作する。なお、API(Application Programming Interface )とは、一般的には、OSやDBMS(データベース管理システム)等の基本ソフトウェアをプログラム中から使うための関数セットのこと、およびアプリケーションプログラムを作成するときに使用するコンポーネントが持つ関数セットを指す。
【0018】
アプリケーション生成手段11は、環境非依存と依存のコンポーネント定義ファイル群2、3および環境定義ファイル4を読み込んで内部データにし、コンポーネント生成手段12を適用し、このコンポーネント生成手段12で生成される生成ソースコードを表す内部データから、実際の各コンポーネントのターゲット環境用のソースコード8、・・、8を生成する。
【0019】
コンポーネント生成手段12は、実際にソースコード8、・・、8が生成されるコンポーネントについて、そのコンポーネントに対応する特定環境用コンポーネント定義テンプレート5を読み込み、内部データに反映させ、そのコンポーネントの各抽象的APIに対してAPI内容生成手段13を適用し、ターゲットプログラミング言語環境に対応したAPIと、その中身を内部データに生成する。また、上位コンポーネントがそのコンポーネントを使う場合に必要な上位コンポーネント用のコードを、内部データに生成する。
【0020】
API内容生成手段13は、ターゲットプログラミング言語環境に対応したAPIとその中身を生成することの設定を行い、BODY生成手段14を適用して、これらを内部データに生成する。
【0021】
BODY生成手段14は、そのBODYがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するBODYを選んでそのメタプログラムを実行し、そのBODYがプログラミング言語環境非依存の場合には、使用している抽象的APIの部分をその抽象的APIのBODYで置き換えて再帰的にBODY生成手段14を繰り返し実行し、実際に生成ソースコードのイメージを内部データに生成する。
【0022】
なお、メタプログラムとは、抽象的APIとBODYで表現されたコンポーネントの記述からソースコードを自動生成する場合に、その自動生成の方法の一部をコンポーネントまたは抽象的API単位に切り出したものであり、自動生成装置のコア部分に変更を加えることなく自動生成の方法を変更してカスタマイズ可能な形にするものである。
【0023】
環境非依存コンポーネントとは、その各BODYが抽象的APIだけを使用しているものを意味する。また、環境依存コンポーネントとは、その各BODY中に、特定のプログラミング言語環境ではどのようなネイティブコードを書くかを記述してあるものを意味する。
【0024】
(動作)
次に、図1、図2の構成ブロック図及び図3、図4、図5、図6、図7、図8のフローチャートを参照して、全体の動作例について詳細に説明する。
【0025】
まず、図3において、アプリケーション生成手段11の動作手順を説明する。
コンポーネント定義ファイル群2、3に保持された定義データとアプリケーション環境定義ファイル4に保持された環境定義とを読み込み、内部データを作成する(ステップA1)。次に、アプリケーション環境定義ファイル4でトップになっているトップのコンポーネントについて、コンポーネント生成手段12を適用する(ステップA2)。さらに、マクロでない各コンポーネントについて、内部データからターゲットソースファイルを作成する(ステップA3)。
【0026】
次に、図4において、コンポーネント生成手段12の動作手順を説明する。
コンポーネント生成手段12は、作成中または作成済みのコンポーネントか? (チェックJ1)、マクロコンポーネントか? (チェックJ2)、現在作成中のコンポーネントのテンプレート中に環境にマッチする部分があるか否か? (チェックJ3)を実行する。
【0027】
これらのチェックJ1〜J3を通過した、そのコンポーネントが従う特定環境用コンポーネント定義テンプレートファイル5を読み込み、テンプレート中のそのコンポーネントのアプリケーション環境定義ファイル4で指定されたプログラミング言語環境にマッチする部分を、内部データに反映させる(ステップB1)。次に、そのコンポーネントが使用している全てのコンポーネントについて、コンポーネント生成手段12を再帰的に適用する(ステップB2)。次に、そのコンポーネントの全ての抽象的APIについて、API内容生成手段13を適用する(ステップB3)。そのコンポーネントに付随しているコンポーネントメタプログラムを実行する(ステップB4)。
【0028】
次に、図5において、API内容生成手段13の動作手順を説明する。
API内容生成手段13では、着目している抽象APIの実際のAPIとその中身を生成することを内部データに記し(ステップC1)、その抽象的APIの特定プログラミング言語環境でのAPIと、その内容を生成する設定とを行う。その後、その抽象的APIのBODYについてBODY生成手段14を適用する(ステップC2)。
【0029】
次に、図6において、BODY生成手段14の動作手順を説明する。
BODY生成手段14では、まず着目中のBODYがプログラミング言語環境に依存するものか依存しないものかをチェックし(K1)、プログラミング言語環境に依存するものであった場合(各プログラミング言語環境でどう書くかのネイティブコードが書いてある場合)には(K2/YES)、BODYの中からアプリケーション環境定義で指定されるプログラミング言語環境のものを取り出し、それを新しいBODYとし(D1)、次に、置き換えられたBODYのAPIメタプログラムを実行し、これによって生成コードの一部分を内部データに作成する(ステップD2)。
【0030】
また、BODY生成手段14において、着目中のBODYがプログラミング言語環境に依存しないものであった場合(BODYが抽象的APIだけで書かれている場合)は(K1/NO)、そのBODYをそのBODYが使っている抽象的APIのBODYで置き換え、これにBODY生成手段を再帰的に適用し(ステップD3)、最後に、初めに着目していたBODYのAPIメタプログラムを実行し、これによって生成コードの一部分を内部データに作成する(ステップD4)。
【0031】
上記の手順によれば、BODY生成手段14を再帰的に適用すること、およびAPIメタプログラムの中から再帰的にBODY生成手段14を適用することにより、生成コードが次第に内部データに生成されていく。引数やAPIの対応付けは、実際にはAPIメタプログラム中で行われる。実行するメタプログラムから戻る場所がAPI内容生成手段13である場合、そのメタプログラムがターゲットプログラミング言語環境でのAPIを生成する。
【0032】
次に、API内容生成手段13からコンポーネント生成手段12に戻ると、コンポーネントに付随しているコンポーネントメタプログラムを実行する(図4のステップB4)。
【0033】
このコンポーネントメタプログラムは、上位コンポーネントがそのコンポーネントを使う場合に必要な上位コンポーネント用のコードを、内部データに生成する。最後に、コンポーネント生成手段12からアプリケーション生成手段11に戻ると、ソースを生成する各コンポーネントのターゲットソースのイメージが内部データに出来上がっており、その内部データから各コンポーネントのターゲットプログラミング言語環境でのソースコードファイルを生成する(図3のステップA3)。
【0034】
一度作成したアプリケーションを新たな環境で動作させる場合、環境依存コンポーネント定義ファイル群3、・・、3と、プログラム自動生成装置エンジン1に後付けする特定環境用コンポーネント定義テンプレートファイル群5、・・、5と、特定環境用基本的記述ルールファイル群6、・・、6と、カスタマイズ用メタプログラムファイル群7、・・、7に追加のファイルの記述を行う。しかし、環境非依存コンポーネント定義ファイル群2、・・、2の記載は変更しない。この条件において、新たなプログラミング言語環境でのコンポーネントのターゲット環境ソースファイル群8、・・、8を生成する。
【0035】
次に、本実施の形態の効果について説明する。
本実施の形態では、コンポーネントの定義に関して、プログラム自動生成装置エンジン1への入力を環境非依存コンポーネント定義ファイル2と環境依存コンポーネント定義ファイル3を明確に分離するというように構成されている。このため、プログラム自動生成装置側が新たなプログラミング言語環境に対応し、アプリケーション環境定義を作成すれば、環境非依存コンポーネント定義ファイル2に関してはそのまま再利用ができる。環境非依存コンポーネントについては、新たなプログラミング言語環境における記述部分が明確になっており、プログラム自動生成装置エンジン1が新たなプログラミング言語環境に対応すれば、その部分を書き加えるだけで、アプリケーション全体を作成することができる。
【0036】
本実施の形態では、さらに、プログラム自動生成装置を異なるプログラミング言語環境に対応させる場合、自動生成において異なるプログラミング言語環境に対応するための部分を、特定環境用コンポーネント定義テンプレート群5と特定環境用基本的記述ルールファイル群6とカスタマイズ用メタプログラム群7として、プログラム自動生成装置エンジン1に後づけで追加するというように構成されている。このため、プログラム自動生成装置エンジン1をプログラミング言語環境に依存しないものとすることができる。これにより、プログラム自動生成装置エンジン1で既に対応したプログラミング言語環境での自動生成機能に影響を与えることなく、新たなプログラミング言語環境での自動生成機能を実現することができる。
【0037】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
図8は、デフォルトAPIメタプログラムの動作を示す流れ図であり、デフォルトで用意するAPIメタプログラム(カスタマイズ用メタプログラムの一種)の動作の流れを示している。また、図9は、デフォルトで用意するコンポーネントメタプログラム(カスタマイズ用メタプログラムの一種)の動作の流れを示す。なお、図9、図10は、環境非依存コンポーネント定義ファイル2の構成例である。
【0038】
図11、図12は、環境依存コンポーネント定義ファイル3の構成例である。図13は、アプリケーション環境定義ファイル4の構成例である。図14、図15は、プログラム自動生成装置エンジン1に後付けされた特定環境用コンポーネント定義テンプレートファイル5の構成例である。図16は、プログラム自動生成装置エンジン1に後付けされた特定環境用基本的記述ルールファイル6の構成例である。
【0039】
まず、アプリケーション生成手段11のステップA1を実行した時点で、図10の環境非依存コンポーネント定義(MyWindow) は、図17に示されるような内部データになり、図11の環境依存コンポーネント定義ファイル(MyButton)3は、図18に示されるような内部データになる(図3のステップA1)。
【0040】
次に、コンポーネント生成手段12におけるステップB1で、各コンポーネントの特定環境用テンプレート定義(図14、図15)から各コンポーネントのプログラミング言語環境(アプリケーション環境定義で指定されるもので、図13ではコンポーネントのプログラミング言語環境はJavaと指定される)に一致する部分を抜き出し、アプリケーション生成手段11のステップA1を実行してできる生成コードを表す内部データにこれを反映させると(図4のステップB1)、図19に示されるような内部データになる。
【0041】
これは、図9、図10の環境非依存コンポーネント定義(MyApp,MyWindow)と、図11の環境依存コンポーネント定義(MyButton)とに対応する生成ソースの情報を持つが、その構成部分はいくつかが未定義のままか変更が加わる形になっている。
【0042】
次に、コンポーネント生成手段12のステップB3で、図10で定義されるコンポーネント(MyWindow)についてそのコンポーネントが持つ抽象的APIについてAPI内容生成手段13を適用する。
【0043】
まず。図10で定義されるコンポーネント(MyWindow)の1番目のAPI、"$this の子部品を親を $parentとして作成する。"について、API内容生成手段13を適用した結果、内部データがどのようになるかを説明する。API内容生成手段13で、この抽象的APIの特定プログラミング言語環境でのAPIとその内容を生成するための設定を行い(図5のステップC1)、その抽象的APIのBODY部分についてBODY生成手段14を適用する(図5のステップC2)。
【0044】
着目中のBODY部分は、"MyButton $btn を、親を $parentで作成する"というプログラミング言語環境に依存しないものなので、このBODYを、抽象的API"MyButton $btn を、親を $parentで作成する"のBODYで置き換え、そのBODYに関して再びBODY生成手段14を適用する(図6のステップD3)。このBODY生成手段14の中で着目中のBODYは、コンポーネントMyButtonの抽象的API"$this を、親を $parentで作成する"のBODYであり、これはプログラミング言語環境依存なので、作成中のコンポーネントの指定されたプログラミング言語環境(Java)に一致する部分(図11のenv Javaで括られた部分)で置き換える(図6のステップD1)。
【0045】
次に、このBODYのメタプログラム(図8に示されるデフォルトAPIメタプログラム)を実行する(図6のステップD2)。このメタプログラムの実行によって、引数の$this と$parent で渡ってくるBODYに対してBODY生成手段14を適用し、引数がターゲットプログラミング言語環境でそれがどのように表現されるかを得、さらに図11中のソース1、ソース2を、生成コードを表す内部データに入れる。しかし、この段階ではまだ上位コンポーネント(MyWindow)との関連付けが行われておらず、未定義の部分も含んでいる。
【0046】
このBODY生成手段14から戻ると、図6のステップD3の後に戻り、初めに着目していたBODYのメタプログラム(図8に示されるデフォルトAPIメタプログラム)を実行する(図6のステップD4)。このメタプログラムによって、生成コードの内部データでソース1、ソース2とそれを使用する上位コンポーネント(MyWindow)との関連付けが行われ、コンポーネントMyWindowに関する生成コードを表す内部データは、図19で示されるものから図20で示されるものに変わる。斜線で表した部分が変化した部分である。
【0047】
図10で定義されるコンポーネント(MyWindow)の2番目のAPI、3番目のAPIについて同様のことを繰り返し、コンポーネントMyWindowに関する生成コードを表す内部データは、図20で示されるものから図21で示されるものに変わる。斜線で表した部分が変化した部分である。この時点で、コンポーネントMyWindowの生成コードを表す内部データからの未定義部分はなくなる。
【0048】
コンポーネントMyWindowについてのコンポーネント生成手段12から戻ると、次に、コンポーネントMyApp についてコンポーネント生成手段12のステップA3を行い、MyWindowの場合と同様にして、MyApp の生成ソースを表す内部データを作成する。MyApp では、1番目の抽象的API"main"のBODY中で、"MyWindow $wnd を作成する"という抽象的APIを用いており、これは特定環境用基本的記述ルールで定義されているが、本発明の方式では、これを仮想の(マクロの)環境依存コンポーネント定義と同じように処理し、最終的に、MyWindowについての生成コードを表す内部データを同じように作成する。
【0049】
トップのコンポーネントであるMyApp についてのコンポーネント生成手段12から戻ると、次に、アプリケーション生成手段のステップA3を実行し、各コンポーネントについて、内部データからターゲットプログラミング言語環境でのソースファイルを作成する。コンポーネントMyWindowの場合であれば、図21中のMyWindow.java というノードから、ループの無い有効グラフのノードを順にたどって、ソースの断片を順にファイルに出力することによって、実際のソースコードファイルが生成される。
【0050】
図13のアプリケーション環境定義では、プログラミング言語環境を"Java"と指定しているが、これを"C++, Windows"に変えて異なるプログラミング言語環境でこのアプリケーションを動作させる場合、図11、図12の環境依存コンポーネント定義に、"C++, Windows"の場合はどう書くかの記述を追加することと、図14、図15の特定環境用コンポーネント定義テンプレートに"C++, Windows"の場合の記述を追加することと、デフォルトメタプログラムが"C++, Windows"に対応していない場合はその場合のコードを追加することでアプリケーションを構成する各コンポーネントの"C++, Windows"のプログラミング言語環境でのソースファイルを自動生成する。
【0051】
(効果)
第1の効果は、環境非依存コンポーネント定義がそのコンポーネントが動作する環境が変わってもそのまま再利用できることにある。その理由は、プログラム自動生成装置を動かす、プログラミング言語環境に対応したソースを生成するものにし、環境非依存コンポーネント定義の変更なく、異なるプログラミング言語環境でのターゲットソースを生成するためである。
【0052】
第2の効果は、コンポーネントを他の環境で動かす場合、修正が容易になることである。その理由は、環境依存コンポーネントについては既に記述してある部分の変更の必要はなく、追加が必要なところは明確になっていて、そこを追加することで十分である。また、プログラム自動生成装置自体を、異なるプログラミング言語環境に対応させるコストが、従来に比べ低いためである。
【0053】
第3の効果は、プログラム自動生成装置を従来に比べ、低いコストで多くのプログラミング言語環境に対応させることができることにある。その理由は、プログラム自動生成装置エンジンが、特定のプログラミング言語環境に依存しないものになっており、プログラミング言語環境に依存する部分は、特定環境用コンポーネント定義テンプレート群および特定環境用基本的記述ルール群およびカスタマイズ用メタプログラム群として役割を分離して、後付けで作成できるためである。
【0054】
本発明は、一度開発したソフトウェアコンポーネントをソースレベルで再利用し、そのコンポーネントを他の環境(他のプラットホーム、他のOS、他の言語、他の実装方式、他の通信方式、他のブラックボックスのコンポーネント使用)で動かす時の、コストを削減できる構成を提供するものである。
【0055】
その手段として、コンポーネントを本来プログラミング言語環境に依存しない業務ロジックの部分と、プログラミング言語環境に依存する部分とを、分けて作成するコンポーネントの表現方式と、そこから複数のターゲットプログラミング言語環境でのコンポーネントのソースコードを自動生成するプログラム自動生成装置を、実現しやすい形で提供することにある。
【0056】
本発明におけるコンポーネントの表現形式には2つの特徴がある。一つ目は、コンポーネントの定義を抽象的API、BODY、メタプログラムの3つの組み合わせの集合で表現することである。二つ目は、論理的には存在するが実際のインスタンスは生成されない仮想の(マクロの)コンポーネントの存在を許すことである。
【0057】
本発明のコンポーネント表現方式では、プログラミング言語環境に依存しないコンポーネントの定義は、各抽象的APIの中身を抽象的APIだけを用いてBODYを記述したコンポーネント定義であり、プログラミング言語環境に依存するコンポーネントの定義は、各抽象的APIの中身をどのプログラミング言語環境の時にはどう書くかを記述したコンポーネントの定義である。プログラミング言語環境に依存するコンポーネント定義のBODYは、ほぼターゲットプログラミング言語環境でのネイティブコードを記述し、変数の関係付け等で修正が必要なところは、BODYに書かれたネイティブコードを修正するメタプログラムを記述する。
【0058】
これらのコンポーネントの定義から、ターゲットプログラミング言語環境用のソースコードを自動生成するプログラム自動生成装置を提供するので、プログラミング言語環境に依存しないコンポーネント定義については、プログラミング言語環境が変わってもターゲットプログラミング言語環境用のコードに書き換える必要はなく、環境非依存コンポーネントの再利用性が向上する。プログラミング言語環境に依存するコンポーネントについては、プログラミング言語環境が変わった場合、書き加えなければならない場所が明確になっており、既に書いてある部分を書き直す必要はない。
【0059】
本発明のコンポーネント表現方式では、環境依存コンポーネントを実体のない仮想のコンポーネントとすることにより、それが持つ抽象的APIは、メソッドやイベントだけでなく、式やステートメントも表すことができる。これにより、各プログラミング言語環境での基本的な記述ルールを環境依存コンポーネントとして扱うことができる。これにより、プログラム自動生成装置のコア部分に、各プログラミング言語環境での基本的な記述ルールを入れる必要がなく、プログラム自動生成装置のコア部分をプログラミング言語環境非依存にすることができる。
【0060】
各プログラミング言語環境では、どういう構造のものが作成されるかを定義する部分を外後付けにすることにより、新たなプログラミング言語環境での自動生成機能を以前に作成したプログラミング言語環境での自動生成機能に影響を与えることなく追加することができる。このようにして、異なるプログラミング言語環境に対応したプログラム自動生成装置を実現するコストが削減される。
【0061】
尚、上述の実施形態は本発明の好適な実施の一例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施が可能である。
【0062】
【発明の効果】
以上の説明より明らかなように、本発明のコンポーネントの自動生成装置および表現方法は、環境非依存コンポーネント定義と、環境依存コンポーネント定義と、アプリケーション環境定義と、特定環境用コンポーネント定義テンプレートと、特定環境用基本的記述ルールと、カスタマイズ用メタプログラムとを保持し、各保持されているデータを用いてプログラム自動生成処理の動作を制御し、一度作成されたコンポーネントを新たな環境で動作させる場合に、それに関わる環境非依存コンポーネントに変更を加えず、この環境依存コンポーネントとプログラム自動生成装置に後付けする新たなプログラミング言語環境に対応する記述を追加し、既成のコンポーネントの新たなプログラミング言語環境のソースファイルを自動生成する。
【0063】
このため、プログラム自動生成装置側が新たなプログラミング言語環境に対応し、アプリケーション環境定義を作成すれば、環境非依存コンポーネント定義に関してはそのまま再利用ができる。環境依存コンポーネントについては、新たなプログラミング言語環境における記述部分が明確になっており、プログラム自動生成装置が新たなプログラミング言語環境に対応すれば、その部分を書き加えるだけで、アプリケーション全体を作成することができる。
【0064】
さらに、プログラム自動生成装置エンジンをプログラミング言語環境に依存しないものとすることができ、これにより、プログラム自動生成装置で既に対応したプログラミング言語環境での自動生成機能に影響を与えることなく、新たなプログラミング言語環境での自動生成機能を実現することができる。
【図面の簡単な説明】
【図1】本発明のコンポーネントの自動生成装置および表現方法の実施形態の、構成例を示すブロック図である。
【図2】図1中のプログラム自動生成装置エンジンの構成例を示すブロック図である。
【図3】アプリケーション生成手段の動作例を示す流れ図である。
【図4】コンポーネント生成手段の動作例を示す流れ図である。
【図5】API内容生成手段の動作例を示す流れ図である。
【図6】BODY生成手段における処理手順例を示すフローチャートである。
【図7】デフォルトコンポーネントメタプログラムの動作を示す流れ図である。
【図8】デフォルトAPIメタプログラムの動作を示す流れ図である。
【図9】環境非依存コンポーネント定義(MyApp )の構成例を示している。
【図10】環境非依存コンポーネント定義(MyWindow)の構成例を示している。
【図11】環境依存コンポーネント定義(MyButton)の構成例を示している。
【図12】環境依存コンポーネント定義(MyDialog)の構成例を示している。
【図13】アプリケーション環境定義の構成例を示している。
【図14】特定環境用コンポーネント定義テンプレート(App )の構成例を示している。
【図15】特定環境用コンポーネント定義テンプレート(MainWindow)の構成例を示している。
【図16】特定環境用基本的記述ルール(DefaultRule )の構成例を示している。
【図17】読み取り[イメージ]後のコンポーネント定義の内部データ(MyWindow)の構成例を示している。
【図18】読み取り後のコンポーネント定義の内部データ(MyButton)の構成例を示している。
【図19】読み込んだアプリケーション環境定義にMyApp とMyWindowについてコンポーネント定義テンプレートの適用後の内部データの構成例を示している。
【図20】図19でMyWindow部分についてのMyWindowのAPI−1を生成後の内部データの構成例を示している。
【図21】図20でMyWindow部分についてのMyWindowでAPI−2、API−3を生成後の内部データの構成例を示している。
【符号の説明】
1 プログラム自動生成装置エンジン
2 環境非依存コンポーネント定義ファイル
3 環境依存コンポーネント定義ファイル
4 アプリケーション環境定義ファイル
5 特定環境用コンポーネント定義テンプレートファイル
6 特定環境用基本的記述ルールファイル
7 カスタマイズ用メタプログラムファイル
8 コンポーネントターゲット環境ソースファイル
11 アプリケーション生成手段
12 コンポーネント生成手段
13 API内容生成手段
14 BODY生成手段
Claims (5)
- 新たな環境においても動作する環境に依存しないコンポーネントである環境非依存コンポーネント定義を保持する環境非依存コンポーネント定義ファイルと、
前記新たな環境においては動作しない環境に依存するコンポーネントである環境依存コンポーネント定義を保持する環境依存コンポーネント定義ファイルと、
アプリケーション環境定義を保持するアプリケーション環境定義ファイルと、
前記新たな環境において有効なプログラム言語である特定環境用コンポーネント定義テンプレートを保持する特定環境用コンポーネント定義テンプレートファイルと、
前記環境非依存コンポーネント定義ファイルと前記環境依存コンポーネント定義ファイルとを前記新たな環境においても動作するプログラムに変換する際の前記プログラムの記述に関する規則である特定環境用基本的記述ルールを保持する特定環境用基本的記述ルールファイルと、
前記環境依存コンポーネント定義ファイルの環境に依存する部分を前記特定環境用コンポーネント定義テンプレートファイルに保持されるプログラム言語に変換するプログラムであるカスタマイズ用メタプログラムを保持するカスタマイズ用メタプログラムファイルと、
前記各ファイルに保持されているデータを用いてプログラム自動生成処理の動作を制御するプログラム自動生成装置エンジンとを有して構成され、
一度作成されたコンポーネントを前記新たな環境で動作させる所定のコンポーネントターゲット環境ソースを構築することを特徴とするコンポーネントの自動生成装置。 - 前記プログラム自動生成装置エンジンは、
前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルを読み込む第1の読込手段と、
前記第1の読込手段によって読み込んだ前記環境非依存コンポーネント定義ファイル、前記環境依存コンポーネント定義ファイル、及びアプリケーション環境定義ファイルから内部データを生成するアプリケーション生成手段と、
前記新たな環境に対応したAPIを生成するコンポーネント生成手段と、
前記API内容生成手段によって生成された前記APIを前記内部データの中に生成するAPI内容生成手段と、
前記内部データから前記API内容生成手段によって生成された前記APIを除いたBODYを前記カスタマイズ用メタプログラムファイルに保持されているカスタマイズ用メタプログラムで前記新たな環境で動作するプログラム言語に変換するBODY生成手段と、
を有して構成されたことを特徴とする請求項1に記載のコンポーネントの自動生成装置。 - 前記コンポーネント生成手段は、
ソースコードが生成されるコンポーネントについて、該コンポーネントに対応する特定環境用コンポーネント定義テンプレートを読み込み内部データに反映させ、
前記コンポーネントの各抽象的APIに対して前記API内容生成手段を適用し、ターゲットプログラミング言語環境に対応したAPIとその中身を内部データに生成し、
上位コンポーネントが前記コンポーネントを使う場合に必要な上位コンポーネント用のコードを内部データに生成し、
プログラム自動生成装置のコア部分が特定プログラミング言語環境に依存しないものになっており、特定プログラミング言語環境に依存する部分はプログラム自動生成装置に後付することを特徴とする請求項2記載のコンポーネントの自動生成装置。 - 前記API内容生成手段は、
前記コンポーネント生成手段によって生成された前記APIを前記内部データに生成する手段とを有して構成されたことを特徴とする請求項2又は3に記載のコンポーネントの自動生成装置。 - 前記BODY生成手段は、
前記抽象的APIで切り出された単位で前記コンポーネントの持つ機能の中身を定義するBODYがプログラミング言語環境依存の場合には、指定されたプログラミング言語環境に一致するBODYを選んで前記メタプログラムを実行する第1の実行手段と、
前記BODYがプログラミング言語環境非依存の場合には、使用している抽象的APIの部分を該抽象的APIのBODYで置き換えて再帰的に前記第1の実行手段を繰り返し実行する第2の実行手段と、
を有して構成されることを特徴とする請求項2から4のいずれか1項記載のコンポーネントの自動生成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000115885A JP3562435B2 (ja) | 2000-04-12 | 2000-04-12 | コンポーネントの自動生成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000115885A JP3562435B2 (ja) | 2000-04-12 | 2000-04-12 | コンポーネントの自動生成装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001296996A JP2001296996A (ja) | 2001-10-26 |
JP3562435B2 true JP3562435B2 (ja) | 2004-09-08 |
Family
ID=18627423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000115885A Expired - Fee Related JP3562435B2 (ja) | 2000-04-12 | 2000-04-12 | コンポーネントの自動生成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3562435B2 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2833371B1 (fr) * | 2001-12-06 | 2004-06-04 | Ciril | Procede et dispositif de generation automatique d'applications geomatiques |
KR100496868B1 (ko) * | 2001-12-28 | 2005-06-22 | 한국전자통신연구원 | 레가시 시스템으로부터 설계 패턴 추출을 통한 컴포넌트의생성 장치 및 방법 |
JP2004086760A (ja) * | 2002-08-28 | 2004-03-18 | Nec Corp | 数値計算プログラム生成システム、数値計算プログラム生成方法、および、数値計算プログラム生成プログラム |
KR100512758B1 (ko) * | 2002-12-06 | 2005-09-07 | 한국전자통신연구원 | 설계 패턴을 이용한 아키텍쳐 기반의 재공학 방법 |
JP4895872B2 (ja) * | 2007-03-12 | 2012-03-14 | 三菱電機株式会社 | ライブラリ管理システム |
JP5414553B2 (ja) * | 2010-01-26 | 2014-02-12 | キヤノン株式会社 | 情報処理装置、情報処理方法 |
US8776094B2 (en) | 2011-08-11 | 2014-07-08 | Microsoft Corporation | Runtime system |
US20130055291A1 (en) * | 2011-08-31 | 2013-02-28 | Microsoft Corporation | Describing native application programming interfaces of an operating system with metadata |
US10635504B2 (en) | 2014-10-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | API versioning independent of product releases |
JP6906155B2 (ja) * | 2016-03-01 | 2021-07-21 | 直太 稲本 | リバースエンジニアリング可能なソフトウェア自動生成装置 |
JP7433097B2 (ja) | 2020-03-19 | 2024-02-19 | 三菱電機株式会社 | 生成装置、生成方法、および生成プログラム |
-
2000
- 2000-04-12 JP JP2000115885A patent/JP3562435B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2001296996A (ja) | 2001-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Selic | The theory and practice of modeling language design for model-based software engineering—a personal perspective | |
US20080209316A1 (en) | System and method of implementing an extensible command-line interface | |
KR20020035567A (ko) | 레거시 데이터 구조용 객체 속성 메타 모델 에뮬레이터 | |
JP3562435B2 (ja) | コンポーネントの自動生成装置 | |
CN101185116A (zh) | 在软件程序中使用强数据类型表示语音识别语法 | |
CN109710260A (zh) | 一种基于多平台的小程序代码转换系统及转换方法 | |
CN113553035A (zh) | 一种通用的前端ui组件库的设计和构建方法 | |
Freeman | Essential TypeScript 5 | |
Reimann et al. | Role-based generic model refactoring | |
Mannadiar et al. | Domain-specific engineering of domain-specific languages | |
JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
Zhang et al. | Automated Extraction of Grammar Optimization Rule Configurations for Metamodel-Grammar Co-evolution | |
JP2011515755A (ja) | 予約されたコンポーネントコンテナ基盤ソフトウェアの開発方法及び装置 | |
Schröpfer et al. | A Generic Projectional Editor for EMF Models. | |
CN113961238A (zh) | 对象转换方法、装置及电子设备和存储介质 | |
JP2014228990A (ja) | 制御プログラム作成装置および制御プログラム作成方法 | |
Schröpfer et al. | Integrating UML and ALF: An Approach to Overcome the Code Generation Dilemma in Model-Driven Software Engineering | |
KR100846203B1 (ko) | 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체 | |
Trias et al. | Reverse engineering applied to CMS-based Web applications coded in PHP: A proposal of migration | |
KR100576941B1 (ko) | 메타모델에 기반한 모델 변환 지원 시스템 | |
Ali et al. | Perspectives to promote modularity, reusability, and consistency in multi-language systems | |
JP2551935B2 (ja) | 図的言語処理方式 | |
Schiedermeier et al. | FIDDLR: streamlining reuse with concern-specific modelling languages | |
Ngoumou et al. | Dynamic software product lines development platform’s architectures: A feature business components driven approach | |
Grieshofer | Cloud Foundry Config File Generation Using JetBrains MPS and DSLs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20031224 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040223 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040511 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040524 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |