(57)【特許請求の範囲】
【請求項１】
パラメータを含む一連のメッセージを受け付けて所定のトランザクションを実行するトランザクション処理プログラムが動作するメインフレームにアクセスするソフトウェアコンポーネント及び該ソフトウェアコンポーネントを利用するクライアントプログラムのソースコードを生成するシステムであって、
利用者入出力装置と、
予めソフトウェアコンポーネント生成ルールおよびクライアントプログラム生成ルールを記憶すると共に処理過程のデータならびに処理結果を記憶するための記憶装置と、
前記ソフトウェアコンポーネントを生成するのに必要なモジュール情報、コンポーネント情報、メソッド情報およびパラメータ情報に加えて、前記クライアントプログラムを生成するのに必要となる情報として、前記トランザクション処理プログラムに与えるメッセージと１対１に対応する前記ソフトウェアコンポーネント中のメソッドの呼び出し順の情報を前記利用者入出力装置から入力してソフトウェアコンポーネント定義情報を生成し、前記記憶装置に記憶するソフトウェアコンポーネント定義部と、
前記記憶装置に記憶された前記ソフトウェアコンポーネント定義情報と前記記憶装置に予め記憶されたソフトウェアコンポーネント生成ルールとに基づいて前記ソフトウェアコンポーネントを生成し、前記記憶装置に記憶するソフトウェアコンポーネント自動生成部と、
前記記憶装置に記憶された前記ソフトウェアコンポーネント定義情報と前記記憶装置に予め記憶されたクライアントプログラム生成ルールとに基づいて前記クライアントプログラムのソースコードを生成し、前記記憶装置に記憶するクライアントプログラム自動生成部とを備え、且つ、
前記クライアントプログラム自動生成部は、前記メソッドの呼び出し順の情報を参照して、クライアントプログラム中のメソッドの呼び出し部分の記述を生成するコンポーネント呼び出し生成手段を含むことを特徴とするソフトウェアコンポーネント自動生成システム。
【請求項２】
前記クライアントプログラムを生成するのに必要な情報として、更に、前記トランザクション処理プログラムに与えるメッセージで指定するパラメータの入出力種別の情報を含み、前記クライアントプログラム自動生成部は、前記パラメータの入出力種別の情報を参照して、入力となるパラメータを持つメソッドの呼び出し前に当該パラメータへ値を設定する処理を記述する前処理生成手段を含むことを特徴とする請求項１記載のソフトウェアコンポーネント自動生成システム。
【請求項３】
前記クライアントプログラム自動生成部は、前記パラメータの入出力種別の情報を参照して、出力となるパラメータを持つメソッドの呼び出し後に当該パラメータの値を取得する処理を記述する後処理生成手段を含むことを特徴とする請求項２記載のソフトウェアコンポーネント自動生成システム。
【請求項４】
前記クライアントプログラム自動生成部は、前記コンポーネント呼び出し生成手段、前記前処理生成手段、前記後処理生成手段に加えて更に、クライアントモジュールの骨格を生成するクライアントモジュール生成手段と、入力、出力、入出力として使われるパラメータとして使うための変数の宣言を生成するパラメータ定義生成手段を備えることを特徴とする請求項３記載のソフトウェアコンポーネント自動生成システム。
【請求項５】
前記クライアントプログラム生成ルールは、前記パラメータ定義生成手段によって参照されるパラメータ定義生成ルール、前記前処理生成手段によって参照される前処理生成ルール、前記後処理生成手段によって参照される後処理生成ルール、前記コンポーネント呼び出し生成手段によって参照されるコンポーネント呼び出し生成ルール、および前記クライアントモジュール生成手段によって参照されるクライアントモジュール生成ルールから構成される請求項４記載のソフトウェアコンポーネント自動生成システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラムの自動生成に関し、より具体的にはメインフレームにアクセスする機能を持つソフトウェアコンポーネント及びこのコンポーネントを利用するクライアントプログラムを自動生成するシステムに関する。
【０００２】
【従来の技術】
Ｍｉｃｒｏｓｏｆｔ社が１９９６年に発表したＡｃｔｉｖｅＸは、Ｗｉｎｄｏｗｓをベースとしたネットワーク環境で、分散コンピューティングや、ソフトウェアのコンポーネント化の実現を容易にした。それに伴って、最近においては更にコンポーネントの自動生成が試みられるようになってきた。
【０００３】
この種の従来技術としては、メインフレームにアクセスするＡｃｔｉｖｅＸコンポーネントを生成するＭｉｃｒｏｓｏｆｔ社のＣＯＭＴＩがある。但し、これはメインフレームにアクセスするためのコンポーネントを作成することはできるが、作成されたコンポーネントを利用するクライアントプログラムの生成を行うことはできない。このため、作成されたコンポーネントの公開情報などを基にクライアントプログラムの開発者が別途にクライアントプログラムを手作業で開発する必要があった。
【０００４】
コンポーネントの自動生成技術の他の従来例として、特開平１１−２２４１８４号公報に記載されたオブジェクト指向データベース操作プログラム生成システム及び方法がある。同公報には、オブジェクト指向データベースに定義されているスキーマ情報を取得し、この取得したスキーマ情報とプログラムテンプレートファイルを基に、オートメーション通信のためのオートメーションサーバ（コードコンポーネント）のためのプログラムを自動生成し、同時に、このオートメーションサーバが公開するデータベースのスキーマクラスとその属性、メソッドを利用する外部アプリケーションとなるクライアントプログラムも自動生成する技術が記載されている。
【０００５】
【発明が解決しようとする課題】
作成されたコンポーネントを利用するクライアントプログラムの開発を、コンポーネントの作成と切り離して別途にすべて手作業で行うと、作業工数が増大するなど、クライアントプログラムの開発者に大きな負担がかかる。また、最悪の場合にはクライアントプログラムの開発を進めることができない事態を招く。以下、メインフレーム上で動作するトランザクション処理プログラムにアクセスする機能を持つソフトウェアコンポーネントとそれを利用するクライアントプログラムの生成を例に、本発明が解決しようとする課題を具体的に説明する。
【０００６】
図１９（ａ）に示されるように、メインフレーム（例えばＮＥＣ製ＡＣＯＳ２／４／６）３００上で動作するトランザクション処理プログラム３０１に対するアクセスは、従来、ＥＴＯＳ５２Ｇなど専用オンライン端末３０２から行われていた。図１９（ｂ）に、或る１つのトランザクション処理プログラム３０１に対する専用オンライン端末３０２からの操作手順の例を示す。この例では、メッセージＭ１、メッセージＭ２、メッセージＭ３の順で、専用オンライン端末３０２からメインフレーム３００上のトランザクション処理プログラム３０１に対してメッセージを送出することで、一連のシーケンスをトランザクション処理プログラム３０１に行わせている。メッセージＭ１〜Ｍ３では必要に応じて幾つかのパラメータＰＲ１〜ＰＲ３が指定される。個々のパラメータは、・入力パラメータ、・出力パラメータ、・入出力パラメータ、或いは・パラメータとして働かない、の何れかの状態をとる。何れの状態をとるかは、メッセージＭ１〜Ｍ３のメッセージＩＤに応じて動的に変化する。
【０００７】
このようなメインフレームのトランザクション処理プログラムに対するアクセス機能を専用オンライン端末からでなく、Ｗｉｎｄｏｗｓベースの汎用パーソナルコンピュータから可能にする場合、図１９（ｃ）に示されるように、メッセージＭ１〜Ｍ３に１対１に対応するメソッドＭＴ１〜ＭＴ３を実装したソフトウェアコンポーネント３０３を作成し、また、それを利用するクライアントプログラム３０４を作成することになる。従来においては、ソフトウェアコンポーネント３０３はソフトウェアコンポーネントを作成するのに必要な各種の定義情報から自動的に生成し、クライアントプログラム３０４は生成されたソフトウェアコンポーネントの公開情報などを基にクライアントプログラム開発者が別途に手作業で作成していた。
【０００８】
この場合に問題となるのは、１つは、作成されたソフトウェアコンポーネント３０３の公開情報を見てもメソッドＭＴ１〜ＭＴ３をどのような順序で起動すべきか分からないため、クライアントプログラム３０４の開発者にとってメソッドＭＴ１〜ＭＴ３の呼び出し順の記述の作成が容易でないことである。メソッドＭＴ１〜ＭＴ３の起動順序を理解するには、メソッドＭＴ１がメッセージＭ１に、メソッドＭＴ２がメッセージＭ２に、メソッドＭＴ３がメッセージＭ３にそれぞれ対応していること、及びメインフレーム３００のトランザクション処理プログラム３０１の仕様ではメッセージＭ１、Ｍ２、Ｍ３の順でメッセージを送信する必要があることを知る必要があり、コンポーネントに対する知識とメインフレームのトランザクション処理に関する知識との双方の知識が必要である。通常、クライアントプログラムの開発者はコンポーネントの知識はあるが、メインフレームの知識はない。
【０００９】
もう１つの問題は、メソッドＭＴ１〜ＭＴ３のパラメータに関してはその公開情報により型の情報は分かるが、個々のパラメータが、・入力パラメータ、・出力パラメータ、・入出力パラメータ、或いは・パラメータとして働かない、の何れの状態をとるか分からないため、クライアントプログラム３０４の開発者にとってクライアントプログラム３０４中のメソッドＭＴ１〜ＭＴ３の呼び出し前後に必要となるパラメータへの値の設定処理、パラメータからの値の取得処理の記述の作成が容易でないことである。例えば、メソッドＭＴ１のパラメータＰＲ１が入力パラメータであれば、メソッドＭＴ１の呼び出し前にパラメータＰＲ１へ値を設定する処理を記述する必要があり、出力パラメータであれば、メソッドＭＴ１の呼び出し後にパラメータＰＲ１の値を取得する処理を記述する必要があり、入出力パラメータであれば、メソッドＭＴ１の呼び出し前にパラメータＰＲ１へ値を設定する処理を記述し、呼び出し後にパラメータＰＲ１の値を取得する処理を記述する必要がある。このようなパラメータの入出力種別を理解するには、メソッドＭＴ１〜ＭＴ３の起動順序を理解する場合と同様にコンポーネントに関する知識に加えて、メインフレーム３００のトランザクション処理におけるパラメータの取り扱いに関する知識が必要である。
【００１０】
クライアントプログラム３０４の開発者がメインフレーム３００の技術者に対して、メソッドＭＴ１〜ＭＴ３の起動順序をどうすべきか、各パラメータの入出力種別はどうなっているかを問い合わせることも考えられるが、既にソフトウェアコンポーネントの開発を終えているため、ソフトウェアコンポーネントの開発に関与したメインフレーム３００の技術者がその時点で存在するとは限らず、問い合わせできない事態も考えられる。また、たとえ存在しても、問い合わせること自体が双方にとって面倒な作業となる。更に、他のメインフレームの技術者に問い合わせるとしても、ソフトウェアコンポーネントの開発に関与していない技術者では、どのパラメータが入力、出力になるかがわかっていても、またメッセージの送出順序がわかっていても、コンポーネントの理解がないため、クライアントプログラムの開発者に理解できるように説明することは難しい。
【００１１】
他方、特開平１１−２２４１８４号公報には、自動生成したオートメーションサーバが公開するデータベースのスキーマクラスとその属性、メソッドを利用する外部アプリケーションとなるクライアントプログラムを自動生成する技術が記載されているが、同公報に記載のクライアントプログラムはデータベースへのアクセスのインタフェースそのものであり、これ自体、もともと、オブジェクト指向データベースの段階でＣ＋＋のクラスと１対１に対応する情報で、クライアント側に呼び出し順序（シーケンス）や、入力、出力、入出力の概念を要求しない。従って、同公報の技術では本発明が解決しようとする上記の課題を解決することはできない。
【００１２】
そこで本発明の目的は、メインフレーム上で動作するトランザクション処理プログラムにアクセスするソフトウェアコンポーネントの生成に必要な情報だけでなく、そのソフトウェアコンポーネントを利用するクライアントプログラムの生成に必要な情報も含む定義情報を入力して保存しておき、この定義情報に基づいてクライアントプログラムのソースコードを自動的に生成することによって、クライアントプログラムの開発者の負担を大幅に軽減することができるようにすることにある。
【００１３】
【課題を解決するための手段】
本発明のソフトウェアコンポーネント自動生成システムは、パラメータを含む一連のメッセージを受け付けて所定のトランザクションを実行するトランザクション処理プログラムが動作するメインフレームにアクセスするソフトウェアコンポーネント及び該ソフトウェアコンポーネントを利用するクライアントプログラムのソースコードを生成するシステムである。ここで、ソフトウェアコンポーネントとはＣＯＭ、ＡｃｔｉｖｅＸなどにおけるコンポーネントのような外部から利用可能な形態を取るソフトウェア部品であり、ユーザが直接ロジックのコーディングを行えない形態を指し、クライアントプログラムとはこの部品を利用するユーザプログラムの一部として使われるプログラムのソースコードを指す。そして本発明は、利用者入出力装置と、予めソフトウェアコンポーネント生成ルールおよびクライアントプログラム生成ルールを記憶すると共に処理過程のデータならびに処理結果を記憶するための記憶装置と、前記ソフトウェアコンポーネントを生成するのに必要なモジュール情報、コンポーネント情報、メソッド情報およびパラメータ情報に加えて、前記クライアントプログラムを生成するのに必要となる情報として、前記トランザクション処理プログラムに与えるメッセージと１対１に対応する前記ソフトウェアコンポーネント中のメソッドの呼び出し順の情報を前記利用者入出力装置から入力してソフトウェアコンポーネント定義情報を生成し、前記記憶装置に記憶するソフトウェアコンポーネント定義部と、前記記憶装置に記憶された前記ソフトウェアコンポーネント定義情報と前記記憶装置に予め記憶されたソフトウェアコンポーネント生成ルールとに基づいて前記ソフトウェアコンポーネントを生成し、前記記憶装置に記憶するソフトウェアコンポーネント自動生成部と、前記記憶装置に記憶された前記ソフトウェアコンポーネント定義情報と前記記憶装置に予め記憶されたクライアントプログラム生成ルールとに基づいて前記クライアントプログラムのソースコードを生成し、前記記憶装置に記憶するクライアントプログラム自動生成部とを備え、且つ、前記クライアントプログラム自動生成部は、前記メソッドの呼び出し順の情報を参照して、クライアントプログラム中のメソッドの呼び出し部分の記述を生成するコンポーネント呼び出し生成手段を含んでいる。
【００１４】
また本発明は、前記クライアントプログラムを生成するのに必要な情報として、更に、前記トランザクション処理プログラムに与えるメッセージで指定するパラメータの入出力種別の情報を含み、前記クライアントプログラム自動生成部は、前記パラメータの入出力種別の情報を参照して、入力となるパラメータを持つメソッドの呼び出し前に当該パラメータへ値を設定する処理を記述する前処理生成手段を含むように構成して良い。
【００１５】
また本発明は、前記クライアントプログラム自動生成部が、前記パラメータの入出力種別の情報を参照して、出力となるパラメータを持つメソッドの呼び出し後に当該パラメータの値を取得する処理を記述する後処理生成手段を含むように構成して良い。
【００１６】
また本発明は、前記クライアントプログラム自動生成部が、前記コンポーネント呼び出し生成手段、前記前処理生成手段、前記後処理生成手段に加えて更に、クライアントモジュールの骨格を生成するクライアントモジュール生成手段と、入力、出力、入出力として使われるパラメータとして使うための変数の宣言を生成するパラメータ定義生成手段を備えるようにして良い。
【００１７】
また、クライアントプログラム生成ルールは、前記パラメータ定義生成手段によって参照されるパラメータ定義生成ルール、前記前処理生成手段によって参照される前処理生成ルール、前記後処理生成手段によって参照される後処理生成ルール、前記コンポーネント呼び出し生成手段によって参照されるコンポーネント呼び出し生成ルール、および前記クライアントモジュール生成手段によって参照されるクライアントモジュール生成ルールから構成されていて良い。
【００１８】
【作用】
本発明のソフトウェアコンポーネント自動生成システムにあっては、ソフトウェアコンポーネント定義部が、ソフトウェアコンポーネントを生成するのに必要な情報に加えて、そのソフトウェアコンポーネントを利用するクライアントプログラムを生成するのに必要となる情報も利用者入出力装置から入力してソフトウェアコンポーネント定義情報を生成し、ソフトウェアコンポーネント自動生成部がソフトウェアコンポーネント定義情報に基づいてソフトウェアコンポーネントを生成する一方、クライアントプログラム自動生成部がソフトウェアコンポーネント定義情報に基づいてクライアントプログラムのソースコードを生成する。この際、クライアントプログラム自動生成部内のコンポーネント呼び出し生成手段が、前記ソフトウェアコンポーネント定義情報からトランザクション処理プログラムに与えるメッセージと１対１に対応する前記ソフトウェアコンポーネント中のメソッドの呼び出し順の情報を参照して、クライアントプログラム中のメソッドの呼び出し部分の記述を生成する。これによって、クライアントプログラムの開発者はメソッドの呼び出し部分を自ら記述する必要がなく、メインフレームの技術者にメソッドの呼び出し順を問い合わせる必要すらなくなる。
【００１９】
また、クライアントプログラムを生成するのに必要な情報として、トランザクション処理プログラムに与えるメッセージで指定するパラメータの入出力種別の情報が含まれる場合、クライアントプログラム自動生成部内の前処理生成手段が、パラメータの入出力種別の情報を参照して、入力となるパラメータを持つメソッドの呼び出し前に当該パラメータへ値を設定する処理を記述し、後処理生成手段が、パラメータの入出力種別の情報を参照して、出力となるパラメータを持つメソッドの呼び出し後に当該パラメータの値を取得する処理を記述する。前処理生成手段が記述するパラメータへ値を設定する処理の記述は、クライアントプログラムのソースコードの生成時点では値の入力元が不明なため、そのことを示す所定の記号（例えば「？」）を使って、例えば、「パラメータ名＝？」といった記述として生成する。同様に後処理生成手段が記述するパラメータの値を取得する処理の記述は、その時点では値の出力先が不明なため、そのことを示す所定の記号（例えば「？」）を使って、例えば、「？＝パラメータ名」といった記述として生成する。これによって、クライアントプログラム開発者は、どういう情報を入力して、どういう情報が出力されるかを容易に理解することができる。なお、？の箇所には、その後、実際の入力元、出力先となる箇所の情報（例えばクライアントプログラム開発者が設計したＧＵＩ画面の入力欄、出力欄の情報など）が手作業で設定される。
【００２０】
【発明の実施の形態】
次に本発明の実施の形態の例について図面を参照して詳細に説明する。
【００２１】
図１を参照すると、本実施の形態にかかるソフトウェアコンポーネント自動生成システムは、利用者入出力装置２００を通じて利用者から入力される情報に基づいてソフトウェアコンポーネント定義情報５０を生成するソフトウェアコンポーネント定義部２０を有する。このソフトウェアコンポーネント定義部２０は、ソフトウェアコンポーネントだけでなくクライアントプログラムも生成できるようにする為に、定義情報のコンポーネントを生成するのに必要な情報だけでなくクライアントプログラムを生成するのに必要な情報５１も同時に定義することができる。また、既に定義された情報にクライアントプログラムを生成するのに必要な情報５１を追加することができる。
【００２２】
クライアントプログラムを生成するのに必要な定義情報５１の例としては、メソッドの呼び出し順の情報がある。また、他の例として、メソッドの各パラメータが、・入力パラメータ、・出力パラメータ、・入出力パラメータ、或いは・パラメータとして働かない、の何れの状態をとるかを定義する情報がある。
【００２３】
本実施の形態にかかるソフトウェアコンポーネント自動生成システムは、プログラム生成手段として、ソフトウェアコンポーネント自動生成部３０とクライアントプログラム自動生成部４０との２つの生成手段を備えている。ソフトウェアコンポーネント自動生成部３０は、ソフトウェアコンポーネント定義情報５０の定義情報に基づいてソフトウェアコンポーネントモジュール７０を自動的に生成する手段である。他方、クライアントプログラム自動生成部４０は、ソフトウェアコンポーネント定義情報５０中に含まれるクライアントプログラムを生成するのに必要な情報５１を活用することにより、ソフトウェアコンポーネントモジュール７０を利用するクライアントプログラムのソースコード９０を自動的に生成する手段である。
【００２４】
クライアントプログラム自動生成部４０は、定義情報抽出手段４１、クライアントモジュール生成手段４２、パラメータ定義生成手段４３、前処理生成手段４４、コンポーネント呼び出し生成手段４５および後処理生成手段４６から構成される。定義情報抽出手段４１によってソフトウェアコンポーネント定義情報５０から、生成対象とするクライアントプログラムの生成に必要な定義情報を抽出し、この抽出された定義情報を基に、クライアントモジュール生成手段４２がモジュール全体の枠組みを生成する。そして、その枠組み内に、パラメータ定義生成手段４３が入力、出力、入出力として使われるパラメータとして使うための変数の宣言やパラメータの初期化処理などを生成し、前処理生成手段４４がコンポーネントの宣言やコンポーネントの呼び出し前に必要な入力パラメータやプロパティへの値の設定処理などを生成し、コンポーネント呼び出し生成手段４５がメソッドなどの呼び出し処理などを生成し、後処理生成手段４６が出力パラメータの値の取得処理などコンポーネントの呼び出し後に必要な処理を生成することにより、クライアントプログラムのソースコード９０を生成する。
【００２５】
図１のクライアントプログラムのソースコード９０中には、特徴的な記述が例示されている。符号９１の部分は、ソフトウェアコンポーネント定義情報５０中のクライアントプログラムの生成に必要な定義情報５１に基づいてコンポーネント呼び出し生成手段４５が自動生成したメソッドの呼び出し部分の記述である。この例は、接続、送信、受信、切断の手順で呼び出さなければならないという定義情報に基づき、接続メソッド、送信メソッド、受信メソッド、切断メソッドの順でメソッドを呼び出すように記述されている。
【００２６】
また、符号９２の部分は、メソッドのパラメータの種別情報に基づいて前処理生成手段４４が自動生成したパラメータへの値の設定処理の記述である。「Ｐａｒａｍ１＝？」、「Ｐａｒａｍ２＝？」（Ｐａｒａｍ１、Ｐａｒａｍ２はパラメータ名）という記述から、クライアントプログラムの開発者は、当該パラメータは入力パラメータで、メソッドの呼び出し前に値を設定する必要があることを容易に認識することができる。ここで、？の箇所には後に手作業で具体的な入力元の情報（例えばＧＵＩにおける所定の入力欄の情報など）が設定される。この際、パラメータ名が適切な意味のある名称で定義されていれば、コンポーネントの使用の確認を最低限にして作業が可能となる。
【００２７】
また、符号９３の部分は、メソッドのパラメータの種別情報に基づいて後処理生成手段４６が自動生成したパラメータの値の取得処理の記述である。「？＝Ｐａｒａｍ３」、「？＝Ｐａｒａｍ４」という記述から、クライアントプログラムの開発者は、当該パラメータは出力パラメータで、メソッドの呼び出し後に値を取得する必要があることを容易に認識することができる。ここで、？の箇所には後に手作業で具体的な出力先の情報（例えばＧＵＩにおける所定の出力欄の情報など）が設定される。この際、パラメータ名が適切な意味のある名称で定義されていれば、コンポーネントの使用の確認を最低限にして作業が可能となる。
【００２８】
クライアントプログラム自動生成部４０で自動再生されるクライアントプログラムのソースコード９０は、ソフトウェアコンポーネント自動生成部３０で生成されるソフトウェアコンポーネントモジュール７０を利用するクライアントプログラムをクライアントプログラム開発者が開発する際のひな型（テンプレート）となるものである。開発者は、自動生成されたクライアントプログラムのソースコード９０中の未定義の部分（例えば符号９２、９３中の？の箇所など）を完成させ、また、必要に応じてＶｉｓｕａｌ  Ｂａｓｉｃなどを使ってクライアントプログラムのＧＵＩ部分などを作成して、クライアントプログラムのソースコード９０を完成する。
【００２９】
【実施例】
次に本発明の実施例について図面を参照して詳細に説明する。
【００３０】
図２を参照すると、本発明の実施例にかかるソフトウェアコンポーネント自動生成システムは、処理装置１０と記憶装置１００と利用者入出力装置２００とを主要部として備えている。利用者入出力装置２００は、例えばキーボードやマウス等の入力装置と、ＬＣＤ等の表示装置とで構成される。記憶装置１００は、半導体メモリや磁気ディスク装置等で構成されており、ソフトウェアコンポーネント生成ルール６０及びクライアントプログラム生成ルール８０を事前に記憶すると共に、システムの処理の過程でソフトウェアコンポーネント定義情報５０を記憶し、また生成したソフトウェアコンポーネントモジュール７０及びクライアントプログラムソースコード９０を記憶する。処理装置１０はＣＰＵ及びその上で動作するソフトウェアによって構成され、それらによってソフトウェアコンポーネント定義部２０、ソフトウェアコンポーネント自動生成部３０及びクライアントプログラム自動生成部４０の３つの機能部を提供している。
【００３１】
ソフトウェアコンポーネント定義部２０は一種のエディタであり、ソフトウェアコンポーネント及びそれを利用するクライアントプログラムを生成するのに必要な各種の情報を利用者が利用者入出力装置２００を通じて定義するためのユーザインタフェースを提供する。ソフトウェアコンポーネント定義部２０は、画面からの入力またはそれに代わる情報のインポートを行うことによってソフトウェアコンポーネント定義情報５０を得る。得たソフトウェアコンポーネント定義情報５０は記憶装置１００に格納され、ソフトウェアコンポーネント自動生成部３０及びクライアントプログラム自動生成部４０によって適宜に参照される。
【００３２】
クライアントプログラム生成ルール８０は、ソフトウェアコンポーネント定義情報５０に基づいてクライアントプログラムを生成する際のルールを記述している。具体的には、先ず、生成対象となる定義情報の種類やその生成の仕方などを記述している。具体的な定義情報の値はソフトウェアコンポーネント定義情報５０から取得する。例えば、或るルールではクライアントプログラムの骨格を定義することが記されており、その際に必要なコンポーネント名はソフトウェアコンポーネント定義情報５０から取得する。同様に、他のルールでは、パラメータ定義、前処理、コンポーネント呼び出し処理、後処理などを定義すべきこと及びその定義方法が指定され、それらの生成に必要なパラメータ名や型などの具体値はソフトウェアコンポーネント定義情報５０から取得する。
【００３３】
クライアントプログラム生成ルール８０では、また、定義情報に関連して出力される情報とその出力位置または出力順序を記述している。例えば、前処理で生成されたパラメータへの値の設定処理は、そのパラメータを含むメソッドの呼び出し生成の直前に出力すべきことや、後処理で生成されたパラメータからの値の取得処理は、そのパラメータを含むメソッドの呼び出し直後に出力すべきこと等が記述されている。
【００３４】
なお、クライアントプログラム生成ルール８０には、定義情報に関連せずに出力される情報とその出力位置や出力順序の情報も記述されている。例えば、エラー処理や固定で行われる前処理、後処理などである。
【００３５】
ソフトウェアコンポーネント生成ルール６０は、ソフトウェアコンポーネント定義情報５０に基づいてソフトウェアコンポーネントを生成する際のルールを記述している。クライアントプログラム生成ルール８０と同様に、生成対象となる定義情報の種類やその定義の仕方、定義情報に関連して出力される情報とその出力位置または出力順序、定義情報に関連せずに出力される情報とその出力位置または出力順序などが記述されている。
【００３６】
ソフトウェアコンポーネント自動生成部３０は、ソフトウェアコンポーネント定義情報５０とソフトウェアコンポーネント生成ルール６０とに基づいて、ソフトウェアコンポーネントモジュール７０を生成する。生成されたソフトウェアコンポーネントモジュール７０は、本実施例の場合、記憶装置１００に格納される。
【００３７】
クライアントプログラム自動生成部４０は、ソフトウェアコンポーネント定義情報５０とクライアントプログラム生成ルール８０とに基づいて、ソフトウェアコンポーネント自動生成部３０が生成したソフトウェアコンポーネントを利用するクライアントプログラムのソースコード９０を生成する。生成されたクライアントプログラムのソースコード９０は、本実施例の場合、記憶装置１００に格納される。
【００３８】
以下、本実施例のソフトウェアコンポーネント自動生成システムの各部を詳細に説明する。
【００３９】
（１）ソフトウェアコンポーネント定義部２０
一般に１つのソフトウェアコンポーネントモジュール中には複数のソフトウェアコンポーネントが存在し得る。また、１つのソフトウェアコンポーネント中には複数のメソッドが存在し得る。更に、１つのメソッド中には複数のパラメータが存在し得る。このため、１つのソフトウェアコンポーネントモジュールの生成に必要な定義情報は、一般に図３に示されるような階層構造となる。つまり、１つのモジュール情報５１の配下に１以上のコンポーネント情報５２があり、各コンポーネント情報５２の配下に１以上のメソッド情報５３があり、各メソッド情報５３の配下に１以上のパラメータ情報５４がある。
【００４０】
ソフトウェアコンポーネント定義部２０は、以上のような階層構造に合わせて、図４に示されるように、コンポーネント情報定義手段２１、メソッド情報定義手段２２及びパラメータ情報定義手段２３の３つの定義手段を有する。コンポーネント情報定義手段２１は、生成対象となるソフトウェアコンポーネントモジュールに含まれる個々のソフトウェアコンポーネント毎に、コンポーネント固有の情報（モジュール情報５１及びコンポーネント情報５２）を定義する際に利用され、メソッド情報定義手段２２は、コンポーネント情報５２の配下にメソッド固有の情報（メソッド情報５３）を定義する際に利用され、パラメータ情報定義手段２３は、メソッド情報５３の配下にパラメータ固有の情報（パラメータ情報５４）を定義する際に利用される。
【００４１】
ここで、本実施例においては、各定義手段２１〜２３は、ソフトウェアコンポーネントモジュールだけでなくクライアントプログラムも生成できるように、クライアントプログラムの生成に必要な情報を定義するためにも利用される。つまり、コンポーネント情報定義手段２１は、クライアントプログラムの生成に必要な情報を含んだコンポーネント固有の情報の定義を行い、メソッド情報定義手段２２は、クライアントプログラムの生成に必要な情報を含んだメソッド固有の情報の定義を行い、パラメータ情報定義手段２３は、クライアントプログラムの生成に必要な情報を含んだパラメータ固有の情報の定義を行う。従って、図２に示されるような階層構造をとるソフトウェアコンポーネント定義情報には、ソフトウェアコンポーネントだけでなく、それを利用するクライアントプログラムを生成するのに必要な情報も含まれている。
【００４２】
モジュール情報５１、コンポーネント情報５２、メソッド情報５３及びパラメータ情報５４に含まれる情報の一部の例を図５に示す。
【００４３】
図５を参照すると、モジュール情報５１には、ソフトウェアコンポーネントモジュールの名前であるモジュール名５１１が含まれる。
【００４４】
コンポーネント情報５２には、ソフトウェアコンポーネントの名前であるコンポーネント名５２１、コンポーネントが持つ初期値（デフォルトパラメータ）を示すコンポーネント属性情報５２２が含まれる。このコンポーネント属性情報５２２の一例としては、メインフレームへの接続情報がある。メインフレームへの接続情報とは例えば以下の情報のことである。
・メインフレームのＩＰアドレス＝111.111.111.111
・メインフレームのポート番号＝8000
・送信時のタイムアウト値＝3
・受信時のタイムアウト値＝3
【００４５】
メソッド情報５３には、メソッドの名前であるメソッド名５３１、メソッドタイプ、メソッドのリターン値の型などを示すメソッド属性情報５３２、送信型、受信型、送受信型の種別を示すメソッドの呼び出し形式の情報５３３、複数のメソッドがある場合に、どのような順序で呼び出す必要があるかを示すメソッドの呼び出し順の情報５３４が含まれる。なお、メソッドの呼び出し順の情報５３４を定義する方法としては、各メソッド情報５３中に自メソッドの呼び出し順番を明示する方法でも良く、コンポーネント情報５２配下の複数のメソッド情報５３の記述順序をメソッドの呼び出し順番と一致させておく方法を採用しても良い。
【００４６】
パラメータ情報５４には、パラメータの名前であるパラメータ名５４１、パラメータの型５４２、パラメータの入出力種別の情報５４３が含まれる。パラメータ名は適切な意味のある名称で定義しておくことが望ましい。パラメータの入出力種別の情報５４３では、当該パラメータが、・入力パラメータ、・出力パラメータ、・入出力パラメータ、・パラメータとして機能しない、の４つの状態の内の何れの状態をとるかが定義される。
【００４７】
（２）ソフトウェアコンポーネント自動生成部３０及びソフトウェアコンポーネント生成ルール６０
ソフトウェアコンポーネント自動生成部３０は、図６に示されるように、コンポーネント生成手段３１、メソッド生成手段３２、パラメータ生成手段３３及びモジュール生成手段３４から構成される。また、ソフトウェアコンポーネント生成ルール６０は、ソフトウェアコンポーネント自動生成部３０がソフトウェアコンポーネント定義情報５０に基づいてソフトウェアコンポーネントモジュール７０を生成する際に使用する各種のルールの集合であり、図７に示されるように、コンポーネント生成ルール６１、メソッド生成ルール６２、パラメータ生成ルール６３およびモジュール生成ルール６４を含む。更に、コンポーネント生成ルール６１は、プロパティ生成ルール６１１、初期値生成ルール６１２及びコンポーネント骨格生成ルール６１３を含み、メソッド生成ルール６２は、メソッド骨格生成ルール６２１及びメソッドロジック生成ルール６２２を含む。
【００４８】
パラメータ生成手段３３は、メソッド生成手段３２からのパラメータ生成要求に応じ、ソフトウェアコンポーネント定義情報５０及びパラメータ生成ルール６３を適宜参照して、パラメータ部分を生成する手段である。
【００４９】
メソッド生成手段３２は、コンポーネント生成手段３１からのメソッド生成要求に応じ、ソフトウェアコンポーネント定義情報５０及びメソッド生成ルール６２を適宜参照して、メソッド部分を生成する手段である。
【００５０】
コンポーネント生成手段３１は、モジュール生成手段３４からのコンポーネント生成要求に応じ、ソフトウェアコンポーネント定義情報５０及びコンポーネント生成ルール６１を適宜参照して、コンポーネント部分を生成する手段である。
【００５１】
モジュール生成手段３４は、ソフトウェアコンポーネント定義情報５０及びモジュール生成ルール６４を適宜参照し、またコンポーネント生成手段３１を適宜呼び出すことにより、ソフトウェアコンポーネントモジュール７０全体を生成する手段である。
【００５２】
以下、モジュール生成手段３４、コンポーネント生成手段３１、メソッド生成手段３２、パラメータ生成手段３３の順に、その機能をルールの内容例と共に詳細に説明する。
【００５３】
（２−１）モジュール生成手段３４
図８にモジュール生成手段３４の処理例を示す。モジュール生成手段３４は、先ずソフトウェアコンポーネント定義情報５０から、モジュール情報５１中のモジュール名５１１と、モジュール情報５１配下の全てのコンポーネント情報５２中のコンポーネント名５２１とを取得する（Ｓ１１）。次に、取得したモジュール名５１１及びコンポーネント名５２１と、モジュール生成ルール６４中に存在するモジュールのプロジェクトファイルの生成ルールとに基づいて、モジュールのプロジェクトファイルを生成する（Ｓ１２）。
【００５４】
モジュールのプロジェクトファイルの生成ルールには、例えば以下のようなルールが予め記述されている。
「テンプレート「Class ＝コンポーネント名；コンポーネント名.cls」中のコンポーネント名の箇所にプロジェクトを構成するコンポーネント名を設定し、テンプレート「Name＝”モジュール名”、ExeName32 ＝”モジュール名.dll”」中のモジュール名の箇所にプロジェクトのモジュール名を設定し、プロジェクトファイルを生成する」
【００５５】
従って、ステップＳ１１で取得したモジュール名５１１をComponentModuleName 、コンポーネント名５２１をComponent1、Component2、Component3の３つとすると、以下のようなプロジェクトファイルが生成される。
Class ＝Component1; Component1.cls
Class ＝Component1; Component1.cls
Class ＝Component1; Component1.cls
Name＝”ComponentModuleName ”
ExeName32 ＝”ComponentModuleName.dll ”
ここで、Component1、Component2、Component3はコンポーネントのファイル、ComponentModuleName.dll はソフトウェアコンポーネントモジュールのファイルである。
【００５６】
次にモジュール生成手段３４は、コンポーネント生成手段３１に対して、モジュール内のコンポーネントの生成処理をコンポーネントの数だけ呼び出す（Ｓ１３）。各呼び出し時には、コンポーネント名５２１が渡される。呼び出しによって生成されたコンポーネントはコンポーネントのファイルに格納される。
【００５７】
（２−２）コンポーネント生成手段３１
図９にコンポーネント生成手段３１の処理例を示す。コンポーネント生成手段３１は、モジュール生成手段３４からコンポーネント名５２１を取得すると（Ｓ２１）、先ず、コンポーネント骨格生成ルール６１３に基づき、コンポーネントの骨格を生成する（Ｓ２２）。この処理は取得したコンポーネント名５２１に対応する定型的なヘッダを生成する処理に相当する。
【００５８】
コンポーネント骨格生成ルール６１３には、例えば以下のようなルールが記述されているので、このルールに従ってコンポーネントの骨格を生成する。
「以下のテンプレートのコンポーネント名の箇所に取得したコンポーネント名を設定する。
0003736308.tif 000002
【００５９】
次にコンポーネント生成手段３１は、ソフトウェアコンポーネント定義情報５０から当該コンポーネントのコンポーネント属性情報５２を取得し（Ｓ２３）、プロパティ生成ルール６１１に基づいて、取得したコンポーネント属性情報の数だけコンポーネントのプロパティを生成する（Ｓ２４）。また、初期値生成ルール６１２に基づいて、取得したコンポーネント属性情報の数だけコンポーネントの初期値を生成する（Ｓ２５）。
【００６０】
プロパティ生成ルール６１１としては、ＩＰアドレス用、ポート番号用、タイムアウト用など、ソフトウェアコンポーネント定義情報５０中に存在し得るコンポーネント属性情報の各種類に応じたテンプレートが用意されている。各テンプレートは例えば、
Public AAA As String
のような形式である。コンポーネント生成手段３１は、取得したコンポーネント属性情報の名前（AAA)に対応するテンプレートをプロパティ生成ルール６１１から取得することで、各コンポーネント属性情報と型に対応するプロパティを生成する。これによって、接続先サーバ名、メインフレームのＩＰアドレス、メインフレームのポート番号、送信時のタイムアウト値、受信時のタイムアウト値といったコンポーネント属性情報が取得された場合、それぞれに対応するプロパティが生成される。
【００６１】
また、初期値生成ルール６１２としては、例えば以下のようなルールが用意されている。
「以下のテンプレートのAAA ＝BBB の箇所に、各コンポーネント属性情報に対応するプロパティ名とその値を、プロパティ名＝値の形式で、初期値として設定する。
0003736308.tif 000003
【００６２】
このような初期値生成ルール６１２と取得されたコンポーネント属性情報とから、例えば以下のような初期値生成処理が生成される。
Private Sub Class-Intialize()
MainFrameIP ＝”111.111.111.111 ”
MainFramePort ＝8000
RcvTimeOut＝3
SndTimeOut＝3
End Sub
【００６３】
次にコンポーネント生成手段３１は、当該コンポーネントに存在する全てのメソッド情報５３中のメソッド名５３１をソフトウェアコンポーネント定義情報５０から取り出し、当該コンポーネント中に定義されたメソッドの数だけメソッド生成手段３２を呼び出す（Ｓ２６）。各呼び出し時には、メソッド名とそのメソッドを有するコンポーネント名とが渡される。
【００６４】
（２−３）メソッド生成手段３２
図１０にメソッド生成手段３２の処理例を示す。メソッド生成手段３２は、コンポーネント生成手段３１からメソッド名とそのメソッドを有するコンポーネント名を取得すると（Ｓ３１）、先ず、ソフトウェアコンポーネント定義情報５０とメソッド骨格生成ルール６２１とに基づき、メソッドの骨格を生成する（Ｓ３２）。
【００６５】
メソッド骨格生成ルール６２１には、例えば以下のようなルールが用意されている。
「メソッド名にメソッドパラメータとその型とリターン値の型を以下のフォーマットで連結して出力する。
Public Function メソッド名（全メソッドパラメータ）As リターン値の型
メソッドの処理
End Function」
なお、メソッドパラメータの生成ではパラメータ生成手段３３を呼び出す。呼び出し時には、パラメータ名と、そのパラメータを有するメソッド名と、そのメソッドを有するコンポーネント名とを指定する。
【００６６】
以上の処理により、例えば、メソッド名をMethod1 、リターン値の型をLong、パラメータ生成手段３３を呼び出して得たメソッドパラメータをParam1 As Integer 、Param2 As Stringの２つとすると、以下のようなメソッドの骨格が生成される。
Public Function Method1(Param1 As Integer,Param2 As String) As Long
メソッドの処理
End Function
【００６７】
次にメソッド生成手段３２は、ソフトウェアコンポーネント定義情報５０とメソッドロジック生成ルール６２２とに基づき、メソッドの処理を生成する（Ｓ３３）。メインフレームへアクセスする機能を持つメソッドの場合、生成するメソッドの処理は、メインフレームへの通信処理となる。メインロジック生成ルール６２２には、メインフレームの外部インタフェースに適合した通信処理を記述したテンプレートが各メソッド毎、各メソッドの呼び出し形式毎に用意されているので、当該メソッドの呼び出し形式に対応するテンプレートを選択し、そのテンプレートにパラメータ名を設定することで、メソッドの処理を生成する。生成はパラメータに依存した情報はパラメータの数だけ生成を繰り返し、メソッドに固有の情報は１回だけ生成する。送信型、受信型、送受信型の例を以下に示す。
0003736308.tif 000004
【００６８】
（２−４）パラメータ生成手段３３
図１１にパラメータ生成手段３３の処理例を示す。パラメータ生成手段３３は、メソッド生成手段３２からパラメータ名とそれが属するメソッド名及びコンポーネント名を取得すると（Ｓ４１）、ソフトウェアコンポーネント定義情報５０中から当該コンポーネント情報かつメソッド情報配下の該当パラメータの型５４２を取得し、パラメータ生成ルール６３に従ってメソッドパラメータを生成する（Ｓ４２）。
【００６９】
パラメータ生成ルール６３には、パラメータ名とその型をAsで連結してメソッドパラメータを生成する旨のルールが用意されている。従って、パラメータ名をPram1 、その型をStringとすると、以下のようなメソッドパラメータが呼び出し元のメソッド生成手段３２に返される。
Param1 As String
【００７０】
（３）クライアントプログラム自動生成部４０及びクライアントプログラム生成ルール８０
クライアントプログラム自動生成部４０は、図１２に示されるように、定義情報抽出手段４１、クライアントモジュール生成手段４２、パラメータ定義生成手段４３、前処理生成手段４４、コンポーネント呼び出し生成手段４５及び後処理生成手段４６から構成される。また、クライアントプログラム生成ルール８０は、クライアントプログラム自動生成部４０がソフトウェアコンポーネント定義情報５０に基づいてクライアントプログラムのソースコード９０を生成する際に使用する各種のルールの集合であり、図１３に示されるように、クライアントモジュール生成ルール８１、パラメータ定義生成ルール８２、前処理生成ルール８３、コンポーネント呼び出し生成ルール８４及び後処理生成ルール８５を含む。更に、クライアントモジュール生成ルール８１は、クライアントプログラム骨格生成ルール８１１及びモジュールのプロジェクトファイルの生成ルール８１２を含み、前処理生成ルール８３は、コンポーネント宣言生成ルール８３１及び入力パラメータ設定処理生成ルール８３２を含む。
【００７１】
定義情報抽出手段４１は、各手段４２〜４６で必要となる定義情報をソフトウェアコンポーネント定義情報５０から抽出する手段である。
【００７２】
クライアントモジュール生成手段４２は、ソフトウェアコンポーネント定義情報５０及びクライアントモジュール生成ルール８１を適宜参照し、またパラメータ定義生成手段４３、前処理生成手段４４、コンポーネント呼び出し生成手段４５及び後処理生成手段４６を適宜呼び出すことにより、クライアントプログラムのソースコード９０全体の枠組みを生成する手段である。
【００７３】
パラメータ定義生成手段４３は、クライアントモジュール生成手段４２からのパラメータ定義生成要求に応じ、ソフトウェアコンポーネント定義情報５０及びパラメータ定義生成ルール８２を適宜参照して、クライアントプログラムから呼び出すメソッドに対応するパラメータの宣言および定義を生成する手段である。
【００７４】
前処理生成手段４４は、クライアントモジュール生成手段４２からの前処理生成要求に応じ、ソフトウェアコンポーネント定義情報５０及び前処理生成ルール８３を適宜参照して、メソッドを呼び出す前に行わなければならないパラメータやプロパティへの値の設定などのソフトウェアコンポーネントを呼び出す前に行う必要のある前処理を生成する手段である。固定で必要となるその他の初期化処理もここで生成する。
【００７５】
コンポーネント呼び出し生成手段４５は、クライアントモジュール生成手段４２からのコンポーネント呼び出し生成要求に応じ、ソフトウェアコンポーネント定義情報５０及びコンポーネント呼び出し生成ルール８４を適宜参照して、ソフトウェアコンポーネントのメソッドなどを呼び出す部分を生成する手段である。
【００７６】
後処理生成手段４６は、クライアントモジュール生成手段４２からの後処理生成要求に応じ、ソフトウェアコンポーネント定義情報５０及び後処理生成ルール８５を適宜参照して、メソッドを呼び出した後に行わなければならないパラメータの値の取得などのソフトウェアコンポーネントを呼び出した後に行う必要のある後処理を生成する手段である。エラー処理や固定で必要となるその他の後処理もここで生成する。
【００７７】
以下、クライアントモジュール生成手段４２、パラメータ定義生成手段４３、前処理生成手段４４、コンポーネント呼び出し生成手段４５、後処理生成手段４６の順に、その機能をルールの内容例と共に詳細に説明する。
【００７８】
（３−１）クライアントモジュール生成手段４２及びクライアントモジュール生成ルール８１
図１４にクライアントモジュール生成手段４２の処理例を示す。クライアントモジュール生成手段４２は、先ずソフトウェアコンポーネント定義情報５０から定義情報抽出手段４１を通じてモジュール情報５１配下の全てのコンポーネント情報５２中のコンポーネント名５２１を取得し、この取得したコンポーネント名５２１と、クライアントプログラム骨格生成ルール８１１とに基づいて、各コンポーネントに対応するクライアントプログラムの骨格を生成する（Ｓ５１）。
【００７９】
クライアントプログラム骨格生成ルール８１１には、例えば以下のようなルールが予め記述されている。
「各コンポーネント毎に、以下のテンプレートのコンポーネント名の箇所に取得したコンポーネント名を設定し、クライアントプログラムの骨格を生成する。
Dim コンポーネント名 As Object
Public Sub Main()
End Sub 」
【００８０】
従って、取得したコンポーネント名がComponent1、Component2、Component3の３つとすると、以下の３つのクライアントプログラムの骨格が生成される。
0003736308.tif 000005
【００８１】
次に、クライアントモジュール生成手段４２は、それぞれのコンポーネント毎に、定義情報抽出手段４１を通じてソフトウェアコンポーネント定義情報５０を適宜参照して、パラメータ定義手段４３、前処理生成手段４４、コンポーネント呼び出し生成手段４５、後処理生成手段４６を呼び出し、それぞれのコンポーネント毎に生成された骨格の中の適所（つまりルールにおいて指定された各情報の出力位置または出力順序に適合する箇所）に、パラメータ定義、前処理、コンポーネント呼び出し、後処理の各プログラムを生成することで、コンポーネントを呼び出すためのプログラムの生成を行う（Ｓ５２）。
【００８２】
次に、クライアントモジュール生成手段４２は、ソフトウェアコンポーネント定義情報５０とモジュールのプロジェクトファイルの生成ルール８１２とに基づいて、プロジェクトを構成するコンポーネント名等を記述したプロジェクトファイル(userapp.vbp) を生成する（Ｓ５３）。
【００８３】
モジュールのプロジェクトファイルの生成ルール８１２には、プロジェクトファイルのテンプートが用意されているので、クライアントモジュール生成手段４２は、そのテンプレート中にコンポーネント名を設定することで、プロジェクトファイルを生成することができる。例えば、コンポーネント名をComponent1、Component2、Component3の３つとすると、
Module＝Component1；Component1.bas
Module＝Component2；Component2.bas
Module＝Component3；Component3.bas
といった内容を含むプロジェクトファイルが生成される。
【００８４】
（３−２）パラメータ定義生成手段４３及びパラメータ定義生成ルール８２
図１５にパラメータ定義生成手段４３の処理例を示す。パラメータ定義生成手段４３は、クライアントモジュール生成手段４２からコンポーネント名を指定して呼び出されると、定義情報抽出手段４１を通じてソフトウェアコンポーネント定義情報５０から、当該コンポーネント名に対応するコンポーネント情報５２配下の全メソッド情報５３における全パラメータ名５４１とその型５４２とを取得し（Ｓ６１）、パラメータ定義生成ルール８２に従って、パラメータ定義を生成する（Ｓ６２）。
【００８５】
パラメータ定義生成ルール８２には、Dim の後にパラメータ名５４１とその型５４２をAsで連結してパラメータ定義を生成する旨のルールが用意されている。従って、パラメータ名５４１をPram1 、Pram2 、Pram3 の３つとし、その型５４２をString、Integer 、Longとすると、以下のようなパラメータ定義が生成される。
Dim Param1 As String
Dim Param2 As Integer
Dim Param3 As Long
【００８６】
（３−３）前処理生成手段４４及び前処理生成ルール８３
図１６に前処理生成手段４４の処理例を示す。前処理生成手段４４は、クライアントモジュール生成手段４２からモジュール名及びコンポーネント名を指定して呼び出されると、コンポーネント宣言生成ルール８３１に従って、コンポーネントの宣言を生成する（Ｓ７１）。
【００８７】
コンポーネント宣言生成ルール８３１には、例えば以下のようなルールが予め用意されている。
「以下のテンプレートのモジュール名とコンポーネント名の箇所に、モジュール名とコンポーネント名を設定して、コンポーネントの宣言を生成する。
Dim コンポーネント名 As Object
Set コンポーネント名＝CreateObject( ”モジュール名. コンポーネント名”)
【００８８】
従って、モジュール名をModule1 、コンポーネント名をComponent1とすると、以下のようなコンポーネントの宣言が生成される。
Dim Component1 As Object
Set Component1＝CreateObject( ”Module1.Component1”)
【００８９】
次に前処理生成手段４４は、当該モジュール名且つ当該コンポーネント名の配下にあるメソッド情報５３の配下のパラメータ情報５４を定義情報抽出手段４１を通じてソフトウェアコンポーネント定義情報５０から参照し、入力パラメータ設定処理生成ルール８３２に従って、入力となるパラメータ（入力パラメータ及び入出力パラメータ）の設定処理を生成する（Ｓ７２）。具体的には、パラメータ情報５４中の各パラメータ名５４１毎に、パラメータの入出力種別の情報５４３を参照して、入力パラメータ又は入出力パラメータとなるパラメータ名５４１だけを抽出し、入力パラメータ設定処理生成ルール８３２に従って、入力パラメータの設定処理を生成する。
【００９０】
入力パラメータ設定処理生成ルール８３２には、例えば以下のようなルールが予め用意されている。
「以下のテンプレートのパラメータ名の箇所にパラメータ名を設定して、入力パラメータの設定処理を生成する。
パラメータ名＝？」
【００９１】
従って、Param1、Param2、Pram3 が入力または入出力パラメータ名とすると、以下のような入力パラメータ設定処理が生成される。
Param1＝？
Param2＝？
Param3＝？
【００９２】
（３−４）コンポーネント呼び出し生成手段４５及びコンポーネント呼び出し生成ルール８４
図１７にコンポーネント呼び出し生成手段４５の処理例を示す。コンポーネント呼び出し生成手段４５は、クライアントモジュール生成手段４２からモジュール名およびコンポーネント名を指定して呼び出されると、定義情報抽出手段４１を通じてソフトウェアコンポーネント定義情報５０から、指定されたモジュール名かつコンポーネント名を持つコンポーネント情報５２配下の全てのメソッド情報５３中のメソッド名及びメソッドの呼び出し順の情報５３４と、各メソッド情報５３配下の全てのパラメータ名５４１を取得し、コンポーネント呼び出し生成ルール８４に従って、呼び出し順の情報５３４で指定された通りに各メソッドを呼び出すコンポーネント呼び出しを生成する（Ｓ８１）。
【００９３】
コンポーネント呼び出し生成ルール８４には、例えば以下のようなルールがメソッドの呼び出し形式の種類毎に予め用意されている。
「以下のテンプレートのコンポーネント名、メソッド名、パラメータ名の箇所にそれぞれの名前を設定して、コンポーネント呼び出し処理を生成する。
Call コンポーネント名. メソッド名（パラメータ名）」
【００９４】
従って、コンポーネント名をComponentName 、メソッド名をBind、Send、Recv、UnBindの４つとし、SendのパラメータとしてParam1,Param2 があり、RecvのパラメータとしてParam3、Param4があり、呼び出し順の情報５３４が指定するメソッドの呼び出し順が、Bind、Send、Recv、UnBindの順であったとすると、例えば以下のようなコンポーネント呼び出し処理が生成される。
Call ComponentName.Bind()
Call ComponentName.Send(Param1,Param2)
Call ComponentName.Recv(Param3,Param4)
Call ComponentName.UnBind()
因みに、Call ComponentName.Send(Param1,Param2)の直前には、Param1,Param2 の内で入力となるパラメータについて前処理生成手段４４で生成された値の設定処理が、その直後には、Param1,Param2 の内で出力となるパラメータについて後処理生成手段４６で生成された値の取得処理が組み込まれる。また、Call ComponentName.Recv(Param3,Param4)の直前には、Param3,Param4 の内で入力となるパラメータについて前処理生成手段４４で生成された値の設定処理が、その直後には、Param3,Param4 の内で出力となるパラメータについて後処理生成手段４６で生成された値の取得処理が組み込まれる。
【００９５】
（３−５）後処理生成手段４６及び後処理生成ルール８５
図１８に後処理生成手段４６の処理例を示す。後処理生成手段４６は、クライアントモジュール生成手段４２からモジュール名及びコンポーネント名を指定して呼び出されると、当該モジュール名且つ当該コンポーネント名の配下にあるメソッド情報５３の配下のパラメータ情報５４を定義情報抽出手段４１を通じて参照し、後処理生成ルール８５中の出力パラメータ設定処理生成ルール（図示せず）に従って、出力となるパラメータ（出力パラメータ及び入出力パラメータ）からの値の取得処理を生成する（Ｓ９１）。具体的には、パラメータ情報５４中の各パラメータ名５４１毎に、パラメータの入出力種別の情報５４３を参照して、出力パラメータ又は入出力パラメータとなるパラメータ名５４１だけを抽出し、出力パラメータ設定処理生成ルールに従って、出力パラメータの値の取得処理を生成する。
【００９６】
後処理生成ルール８５中の出力パラメータ設定処理生成ルールには、例えば以下のようなルールが予め用意されている。
「以下のテンプレートのパラメータ名の箇所にパラメータ名を設定して、出力パラメータの値の取得処理を生成する。
？＝パラメータ名」
【００９７】
従って、Param1、Param2、Pram3 が出力または入出力パラメータ名とすると、以下のような入力パラメータ設定処理が生成される。
？＝Param1
？＝Param2
？＝Param3
【００９８】
なお、別の実施例として、ソフトウェアコンポーネントを生成するのに必要な定義情報とクライアントプログラムを生成するのに必要な定義情報とを別々に持つ形態が考えられるが、そうすると、定義部が２つになり、ユーザによる定義も２回行わなければならなくなり、生成の操作も別々に行わなければならない。これに対して前述の実施例では、クライアントプログラム自動生成部４０とソフトウェアコンポーネント自動生成部３０が共通の定義情報５０を利用することで、定義部が単一のインタフェースを持てば良く、ユーザの操作も１回で済む利点がある。
【００９９】
【発明の効果】
以上説明したように本発明によれば、ソフトウェアコンポーネントを生成するのに必要な情報に加えて、メソッドの呼び出し順の情報など、ソフトウェアコンポーネントを利用するクライアントプログラムを生成するのに必要となる情報も含む定義情報を入力してソフトウェアコンポーネント定義情報として保存しておき、この定義情報に基づいてクライアントプログラムのソースコードを自動的に生成するようにしたので、メインフレームの知識を有しない者であっても、メインフレームにアクセスするソフトウェアコンポーネントを利用するクライアントプログラムを開発でき、典型的な部分などクライアントプログラムのソースコード中の殆どの部分が自動生成されていることと相まって、クライアントプログラムの開発者の負担を大幅に軽減することが可能である。
【図面の簡単な説明】
【図１】本発明の実施の形態にかかるソフトウェアコンポーネント自動生成システムのブロック図である。
【図２】本発明の実施例にかかるソフトウェアコンポーネント自動生成システムのブロック図である。
【図３】ソフトウェアコンポーネント定義情報の構成の概略を示す図である。
【図４】ソフトウェアコンポーネント定義部の構成例を示すブロック図である。
【図５】ソフトウェアコンポーネント定義情報中のモジュール情報、コンポーネント情報、メソッド情報及びパラメータ情報に含まれる情報の一部の例を示す図である。
【図６】ソフトウェアコンポーネント自動生成部の構成例を示すブロック図である。
【図７】ソフトウェアコンポーネント生成ルール中に含まれるルールの例を示す図である。
【図８】ソフトウェアコンポーネント自動生成部内のモジュール生成手段の処理例を示すフローチャートである。
【図９】ソフトウェアコンポーネント自動生成部内のコンポーネント生成手段の処理例を示すフローチャートである。
【図１０】ソフトウェアコンポーネント自動生成部内のメソッド生成手段の処理例を示すフローチャートである。
【図１１】ソフトウェアコンポーネント自動生成部内のパラメータ生成手段の処理例を示すフローチャートである。
【図１２】クライアントプログラム自動生成部の構成例を示すブロック図である。
【図１３】クライアントプログラム生成ルール中に含まれるルールの例を示す図である。
【図１４】クライアントプログラム自動生成部内のクライアントモジュール生成手段の処理例を示すフローチャートである。
【図１５】クライアントプログラム自動生成部内のパラメータ定義生成手段の処理例を示すフローチャートである。
【図１６】クライアントプログラム自動生成部内の前処理生成手段の処理例を示すフローチャートである。
【図１７】クライアントプログラム自動生成部内のコンポーネント呼び出し生成手段の処理例を示すフローチャートである。
【図１８】クライアントプログラム自動生成部内の後処理生成手段の処理例を示すフローチャートである。
【図１９】従来技術の説明図である。
【符号の説明】
１０…処理装置
２０…ソフトウェアコンポーネント定義部
３０…ソフトウェアコンポーネント自動生成部
４０…クライアントプログラム自動生成部
５０…ソフトウェアコンポーネント定義情報
６０…ソフトウェアコンポーネント生成ルール
７０…ソフトウェアコンポーネントモジュール
８０…クライアントプログラム生成ルール
９０…クライアントプログラムソースコード
【図１】
0003736308.tif 000006
【図２】
0003736308.tif 000007
【図３】
0003736308.tif 000008
【図４】
0003736308.tif 000009
【図５】
0003736308.tif 000010
【図６】
0003736308.tif 000011
【図７】
0003736308.tif 000012
【図８】
0003736308.tif 000013
【図９】
0003736308.tif 000014
【図１０】
0003736308.tif 000015
【図１１】
0003736308.tif 000016
【図１２】
0003736308.tif 000017
【図１３】
0003736308.tif 000018
【図１４】
0003736308.tif 000019
【図１５】
0003736308.tif 000020
【図１６】
0003736308.tif 000021
【図１７】
0003736308.tif 000022
【図１８】
0003736308.tif 000023
【図１９】
0003736308.tif 000024