(57)【要約】【課題】  オブジェクト指向のプログラム開発言語では、個々の機能を提供するメソッドと、関連性の高いメソッドを組み合わせたクラスにより構成されるため、実行単位がクラスとなる。係る従来の方法で生成したメソッド単位のプログラムを実行するには、予め各メソッドを何らかのクラスに所属させる必要がある。【解決手段】  本発明のプログラム生成及び結合システム１０１では、オブジェクト指向のコンピュータプログラムのクラス及びメソッドの包含関係を定義したクラス構成定義表１０２を用いて、仮のクラス名称を生成し、該仮クラス名称を本来のクラス名及びメソッド名に対応付けて仮クラス名対応表１０４に登録して、仮クラスのプログラムソースコードを生成する。【選択図】  図１
2005285055.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト指向言語のコンピュータプログラムのプログラムソースコードを生成するオブジェクト指向言語におけるプログラム生成方法において、
前記オブジェクト指向のコンピュータプログラムのクラス及びメソッドの包含関係を定義した定義表を記憶装置に予め記憶しておき、
前記定義表からクラス中の各メソッドが一時的に属する仮のクラス名称を生成し、
該仮クラス名称を本来のクラス名及びメソッド名に対応付けて仮クラス名対応表に登録し、
前記仮クラス名称をもつ仮クラスに対応するメソッドを一時的に該仮クラス内に移動し、
仮クラスのプログラムソースコードを生成するオブジェクト指向言語におけるプログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクト指向言語を使用した開発におけるプログラム生成及び結合方法に関し、特に、メソッドを単体で実行可能とするための仮クラス群生成方法と、仮クラス群を本来のクラスに自動的に結合するクラス結合方法に関する。
【背景技術】
【０００２】
非オブジェクト指向言語では、実行単位はメソッドであり、これを対象としたプログラム開発方法では、メソッド単位で開発を分担することにより、並行開発及び単体テストが可能である。また、特開平８−２０２５３９号公報に示されるような、非オブジェクト指向言語を対象としたプログラム生成方法を用いることにより、メソッド単位でプログラムを生成することが可能である。
【０００３】
【特許文献１】特開平８−２０２５３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、近年利用が盛んなオブジェクト指向のプログラム開発言語では、個々の機能を提供するメソッドと、関連性の高いメソッドを組み合わせたクラスにより構成されるため、実行単位がクラスとなる。係る従来の方法で生成したメソッド単位のプログラムを実行するには、予め各メソッドを何らかのクラスに所属させる必要がある。スケルトンソースコードに予めクラス宣言文及び宣言終了文を記述しておくなどの方法で、既にクラスに所属した状態のメソッドを個別に生成することは可能であるが、係る従来の方法ではクラスとメソッドの包含関係を考慮しておらず、開発完了後に、予め定めた設計通りになるよう、各メソッドを手作業でクラス単位に再結合する必要がある。
【０００５】
また、メソッドの結合操作は、設計どおりの包含関係を形成するように正確に行う必要があり、また、定義文の重複除去などの付帯手順が多く、手作業で行った場合、誤りの混入を避けることが難しい。また、業務システムなどの大規模システムにおいてはクラス及びメソッドの数は膨大であり、手作業による結合は大幅な工数の増加に繋がる。本発明の目的は、オブジェクト指向言語において、各メソッドがどのクラスに属するものであるかを機械的に認識し、自動的に適切なクラスに結合する手段を提供し、誤りの混入無く、かつ即時に、前記操作を実行可能とすることである。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のプログラム生成及び結合する発明（方法およびシステム）は、 (1)事前準備するクラスとメソッドの包含関係情報を格納するクラス構成定義表と、(2)前記クラス構成定義表を参照し仮クラス名及び仮クラス群のソースコードの生成を行い仮クラス名対応表へ仮クラス名を登録するプログラム生成装置と、(3)前記生成された仮クラス名を格納する仮クラス名対応表及び前記生成された仮クラス群のソースコードを格納する開発作業用情報格納領域と、(4)前記開発作業用情報格納領域を参照し結合済みクラスソースコードを生成するプログラム結合装置を含むことを特徴とする。プログラム生成の基本的手段としては、従来の非オブジェクト指向言語用のプログラム生成手段を利用し、１クラスが１メソッドのみを含む構造でプログラム生成を行う。すなわち、メソッド本体の前後に挿入されるスケルトンコードに、予めクラス宣言及び宣言終了に相当する文を記述しておく。この、１クラスが１メソッドのみを含む構造のクラスを仮クラスと呼ぶ。仮クラスは、生成後各開発者に分配する。開発者は仮クラスを使用することで、開発対象メソッドを個別に、単体で実行しながら並列開発を行うことができる。並列開発を行った後、仮クラスを再度一箇所に収集し、機械的に結合する。以下、その処理手順について説明する。
【０００７】
プログラム生成装置は、従来の方法を使用し、クラス構成定義表及びプログラム定義情報やスケルトンソースコードなど必要となるその他の情報から、(1)各メソッドに対し個別に仮クラス名を生成し、(2)各仮クラスに各メソッドを所属させ、仮クラス群のプログラムを生成し、(3)生成した仮クラス名を仮クラス名対応表に記録する。
【０００８】
クラス構成定義表は、どのクラスがどのメソッドを含むかという情報を予め定義するものである。表現形式としては２次元表や木形式などが考えられるが、機械的に参照可能なものであればどのような形式でも良い。例として２次元表とした場合、あるクラスAに、二つのメソッドB,Cが含まれることを表現するには、A,B及びA,Cの２行を書き込む。これにより、どのクラスがどのメソッドを含むかという包含関係を記述することができる。
【０００９】
仮クラス群を生成するために、プログラム生成装置はクラス構成定義表を参照し、各メソッドに対応するクラス名を、一意の仮クラス名に書き換える。後に仮クラス群を、仮クラス名をもとに本来のクラスに結合するために、仮クラス名は、他と重複してはならない。仮クラス名の一意性を確保する方法の一例として、クラス名とメソッド名を結合して仮クラス名とし、さらに該クラス名が既に仮クラス名対応表に登録済みかどうか検査し、登録済みの場合は連番を加える方法や、乱数文字列を使用する方法が挙げられるが、開発者が仮クラス名から元のクラス名およびメソッド名を認識し易い点から前者ような方法が望ましいと考えられる。
【００１０】
次に、各メソッドに対応するクラス名を、本来のクラス名から、前記生成した仮クラス名に書き換えてプログラム生成を実行する。その結果、メソッドをただ１つ含む仮クラスが複数生成される。また、仮クラス名を、本来のクラス名及びメソッド名と対にし、仮クラス名対応表に記憶保存することで、これを参照するプログラム結合装置により、仮クラス群を自動的に本来の名称のクラスに結合することを可能とする。
【００１１】
生成された各仮クラスは任意の手段で各開発者に分配し、開発を完了した後収集し、前記仮クラス群として再登録する。
【００１２】
プログラム結合装置は、仮クラス群を自動的に本来の名称のクラスに結合する。まず、結合処理を行うクラス名を入力装置より入力する。仮クラス名対応表より、該クラス名に対応する全ての仮クラス名を検索し、該仮クラス名を持つ仮クラスからメソッド本文や宣言文など、必要な文を全て読み込み、結合済みクラスへ出力する。必要な文は使用する言語により異なるが、例として、メソッド本文、import宣言文が必要となる言語のものを用いて説明する。各部分の範囲を認識する方法の一例として、前記プログラム生成装置で各部分を生成する際に前後に挿入した開始コメント及び終了コメントを参照し、これらで囲まれた部分を抽出する方法が考えられる。抽出した内容は一旦一時記憶領域に蓄え、import宣言文など、同一の文が繰り返されてはならないものについてはプログラム結合装置内で重複を除去し、結合済みクラスに出力する。以上の手段により上記の課題を解決している。
【発明の効果】
【００１３】
以上述べたように、本発明により、オブジェクト指向言語を用いた開発において、プログラム生成装置に、各メソッドに対して一意の仮クラス名を与え、該仮クラス名を記憶保存する手段を追加し、プログラム結合装置よりこれを参照することで、開発完了後に各メソッドを自動的に適切なクラスに結合することが可能となる。また、従来技術の流用により、各メソッドを個別の仮クラスに包含した状態で生成し、これらを単体で実行することが可能である。よって、オブジェクト指向言語を用いた開発においても、メソッド単位での並列開発を行うことが可能となり、開発速度及び品質が向上する。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を、メソッド本文、import宣言文が必要となる言語を対象とした実施例に基づき詳細に説明する。
図１は、本発明の一実施形態に係るプログラム生成及び結合システムの構成を示すブロック図である。
プログラム生成及び結合システム１０１は、クラス構成定義表１０２及びプログラム生成装置１０３及び仮クラス名対応表１０４及び仮クラス群１０５及びプログラム結合装置１１０及び結合済みクラス群１１２及びプログラム定義情報１０８及びスケルトンソースコード１０９及びimport文バッファ１１３及びメソッド定義部バッファ１１４を含む。また、プログラム結合装置１１０に対し処理対象クラス名及び処理実行指示を与えるための入力装置１１１を備える。
【００１５】
クラス構成定義表１０２は前記クラスとメソッドの包含関係を予め定義する表であり、プログラム生成装置１０３より参照される。図２はクラス構成定義表１０２の構造の一例である。表は２つの列、クラス名２０１とメソッド名２０２を持ち、例えばクラス名が「クラス１」２０３、メソッド名が「メソッドＡ」２０４であった場合、メソッドＡがクラス１に含まれることを表す。
【００１６】
プログラム生成装置１０３は仮クラス群１０５を生成して記録し、同時に仮クラス名対応表１０４に、生成した仮クラス名と本来のクラス名及びメソッド名を対にして書き込む。
仮クラス名対応表１０４の構造の一例を図３に示す。表は、３つの列、クラス名３０１とメソッド名３０２と仮クラス名３０３を持ち、例えばクラス名が「クラス１」３０４、メソッド名が「メソッドＡ」３０５、仮クラス名が「クラス１＿メソッドＡ」３０６ならば、仮クラス「クラス１＿メソッドＡ」に含まれる「メソッドＡ」は、最終的に「クラス１」に属するメソッドであることを表す。
【００１７】
スケルトンソースコード１０９は、半完成状態のプログラムソースコードが複数格納されている領域であり、プログラム生成装置１０３が呼び出す従来のプログラム生成方法より参照される。
プログラム定義情報１０８は、クラス構成定義表１０２に記述された各メソッドに対するスケルトンソースコードの組み合わせや個別情報などが格納されている領域であり、プログラム生成装置１０３が呼び出す従来のプログラム生成方法より参照される。
【００１８】
import文バッファ１１３の構造の一例を図４に示す。該バッファは、複数の仮クラスを本来の名称を持つ１クラスに結合するにあたり、import文の重複を取り除くための作業領域として用いる。行番号４０１及びimport文４０２の２つの列を持ち、行番号は先頭行から順に連番となる。import文列にはimport文本体が格納される。
【００１９】
メソッド定義部バッファ１１４の構造の一例を図５に示す。該バッファは、複数のメソッド本文を一時保存しておき、import部出力完了後に、メソッド本文定義部として一括出力するための一時保存領域として用いる。行番号５０１及びメソッド本文５０２の２つの列を持ち、行番号は先頭行から順に連番となる。メソッド本文列にはメソッド本文が格納される。
【００２０】
開発作業領域１０６は、プログラム生成及び結合システム１０１とは別の、開発者個別の作業領域である。開発者は、仮クラス群１０５から、自己の開発作業領域１０６に、開発対象とする仮クラス１０７を取り出して開発を行う。
【００２１】
開発者はまず、クラス構成定義表１０２にクラス及びメソッドの包含関係を記述し、該メソッドの定義情報をプログラム定義情報１０８に定義する。
【００２２】
次に、プログラム生成装置１０３を動作させ、仮クラス名対応表１０４と仮クラス群１０５を生成する。図６にプログラム生成装置１０３の処理手順概要を示す。また、生成される仮クラスのソースコードの一例を図９に示す。
【００２３】
以降の手順を、クラス構成定義表の各行毎に繰り返す（６０１）。
まず、仮クラス名の生成及び登録を実行する（６０２〜６０７）。前記クラス構成定義表１０２より、クラス名及びメソッド名を一時変数Class及びMethodに取り出す（６０２）。また、仮クラス名の重複が検出された場合に仮クラス名に付加する連番を空に初期化する（６０３）。Class及びMethodをアンダーバーにより結合しさらに連番を結合する（６０４）、仮クラス名とする。該仮クラス名が、既に仮クラス名対応表に登録済みであるかどうか検査を行う（６０５）。既に登録済みである場合は、連番を増加し（６０６）、仮クラス名の生成をやり直す（６０４）。この時、連番は空から始まり、以降１，２，３…と増加していく。Class及びMethod及び該仮クラス名を対として、仮クラス名対応表１０４に行を追加する（６０７）。
【００２４】
次に仮クラスの生成を実行する（６０８〜６１５）。
該仮クラス名をファイル名として、新規ファイルをオープンする（６０８）。
プログラム結合装置１１０がプログラムソースコードの各部分を認識するための手がかり情報として、プログラムソースコードの各区切り部分にコメントを追加する。
【００２５】
まず、import部開始を表す規定のimport部開始コメント行９０１をファイルに出力（６０９）してから、Methodに必要なimport部９０２を従来のプログラム生成方法を呼び出すことで生成しファイルに出力する（６１０）。このプログラム生成方法を呼び出す手続きは、プログラム定義情報１０８及びスケルトンソースコード１０９を参照し、与えられたクラス名及びメソッド名のプログラムソースコードを生成する。ここで、「仮クラス名::Method」は、クラス名が仮クラス名であるクラスに、メソッド名がMethodであるメソッドが属する状態を表す。その後、import部終了を表す規定のimport部終了コメント行９０３をファイルに出力する（６１１）。
【００２６】
メソッド本文９０５についても同様に、メソッド本文定義部開始を表す規定のメソッド本文定義部開始コメント９０４をファイルに出力（６１２）してから、メソッド本文９０５を生成しファイルに出力する（６１３）。その後、メソッド本文定義部終了コメント行９０６をファイルに出力する（６１４）。最後にファイルをクローズ（６１５）して、仮クラスの生成を終了する。
【００２７】
以上の手順を、クラス構成定義表１０２の各行毎に繰り返す（６１６）ことで、該表に定義された全てのメソッドに対して仮クラス名の生成と登録、及び仮クラスの生成を行う。
【００２８】
生成される仮クラスのソースコードは、import部開始コメント９０１及びimport部９０２及びimport部終了コメント９０３及びメソッド定義部開始コメント９０４及びメソッド定義部９０５及びメソッド終了コメント９０６及びそれ以外の部分からなる。
【００２９】
開発者は、仮クラス群１０５から任意の仮クラス１０７を、開発者個別の任意の開発作業領域１０６へ取り出し、開発を行う。開発完了後、開発者は開発の完了した仮クラス１０７をプログラム生成及び結合システム１０１の仮クラス群１０５に書き戻す。ここで、この処理を、開発者からの入力に従って、コンピュータ装置が実行する。
【００３０】
ある１クラスに属するメソッドが全て開発完了した段階で、入力装置１１１より該クラス名を入力しプログラム結合装置１１０を起動する。プログラム結合装置１１０は、仮クラス名対応表１０４より、入力されたクラス名に対応する全ての仮クラス名及び本来のメソッド名を検索し、仮クラス群１０５より該仮クラス名を持つ仮クラスを取得し本来のクラス名を持つ結合済みクラス１１２として結合する。図７にプログラム結合装置１１０の処理手順概要を示す。また、生成される結合済みクラスソースコード１１２の一例を図１０に示す。
【００３１】
まず、入力装置１１１より処理対象とするクラス名を入力する（７０１）。次に、import文バッファ１１３及びメソッド定義部バッファ１１４を空にする（７０２）。
【００３２】
結合済みクラス１１２を保存するために、クラス名をファイル名として新規ファイルをオープンする（７０３）。
【００３３】
以降、仮クラス名対応表１０４の全行について、１行ごとに繰り返す（７０４）。
仮クラス名対応表１０４のある行について、仮クラス名及びクラス名及びメソッド名を一時変数FileName、Class、Methodに取り出す（７０５）。もしClassが入力されたクラス名と等しければ、同行に示されている仮クラス名は結合すべきメソッドを含んでいるので（７０６）、仮クラスソースコード読み込み処理ルーチン（図８）に対し、該仮クラス名を渡し、仮クラス中からimport宣言部及びメソッド本文定義部をimport文バッファ１１３及びメソッド定義部バッファ１１４へ読み込む（７０７）。以上の処理を、仮クラス名対応表１０４の全行について、１行ごとに繰り返す（７０８）。仮クラス名対応表１０４の全行について処理を完了したら、まずimport文バッファの内容を結合済みクラス１１２へ出力する（７０９）。次に、結合済みクラス名Classを用いてクラス宣言文１００２を作成し結合済みクラス１１２へ出力する（７１０）。次に、メソッド定義部結合済みクラス１１２へ出力する（７０９及び７１０）。最後に、結合済みクラス１１２をファイルクローズし、結合処理を完了する（７１１）。
【００３４】
図８に、前記仮クラスソースコード読み込み処理ルーチンの処理手順概要を、図９に読み込み対象とする仮クラスのソースコードの一例を示す。
【００３５】
該ルーチンは、引数として処理対象とする仮クラス名すなわちプログラムソースコードのファイル名を受け取る（８０１）。該ファイル名のファイルを読み込みオープンする（８０２）。次にまず、import部９０２の読み込みを行う。import部開始コメント行９０１を検索する（８０３）。該行を発見後、次の行から１行ごとに、import部終了コメント行９０３を読込むまで繰り返す（８０４）。読み込んだ行が既にimport文バッファ１１３に登録されているかどうか検査及び判断を行い（８０５）、登録されていなければ、該行をimport文バッファ１１３に追加する（８０６）。以上の手順を、import部終了コメント行９０３を読込むまで繰り返す（８０７）。
【００３６】
次に、メソッド部９０５の読み込みを行う。
メソッド部開始コメント行９０４を検索する（８０８）。該行を発見後、次の行から１行ごとに、メソッド部終了コメント行９０６を読込むまで、読み込んだ行をメソッド定義部バッファ１１４に追加する（８０９から８１１）。
最後に、仮クラスのファイルをクローズし（８１２）、呼出元へリターンする（８１３）。
【００３７】
結合済みクラスソースコード１１２は、import宣言部１００１及びクラス宣言文１００２及びあるメソッドの定義部１００３が及びクラス宣言終了文１００４からなる。import宣言部１００１に含まれるimport文は、プログラム結合装置の手順８０４から８０７により、重複が除去された状態となる。クラス宣言文１００２はクラス構成定義表１０２に定義された本来のクラス名３０４、すなわち入力装置１１１より入力された処理対象クラス名で作成される。メソッド定義部１００３は、該クラスに所属する全てのメソッドについて存在する。
【００３８】
上述の実施の形態においては、プログラム結合装置が仮クラス内の各部分を認識するための手がかり情報として、プログラム生成装置により開始及び終了コメントを出力し、プログラム結合装置よりこれを参照したが、プログラム結合装置により詳細に仮クラスのソースコードを構文解析し、各部分を認識する方法を採っても良い。
また、上述の実施の形態では、メソッド本文、import宣言文が必要となる言語としてあげたが、C++言語など、他のオブジェクト指向言語にも同様に本発明を利用できる。
【産業上の利用可能性】
【００３９】
本発明によれば、コンピュータ装置を用いて容易にプログラムを作成することが可能になり、ソフトウエア開発業において、利用が可能である。
【図面の簡単な説明】
【００４０】
【図１】本発明の一実施例であるプログラム生成装置及びプログラム結合装置のブロック図を示したものである。
【図２】クラス構成定義表の構造の一例を示したものである。
【図３】仮クラス名対応表の構造の一例を示したものである。
【図４】import文バッファの構造の一例を示したものである。
【図５】メソッド定義部バッファの構造の一例を示したものである。
【図６】プログラム生成装置の処理手順について概略をフローチャートで示したものである。
【図７】プログラム結合装置の処理手順について概略をフローチャートで示したものである。
【図８】プログラム結合装置の処理手順のうち、仮クラスのソースコード読み込み手順概略についてフローチャートで示したものである。
【図９】仮クラスのソースコードの一例を示したものである。
【図１０】結合済みクラスのソースコードの一例を示したものである。
【符号の説明】
【００４１】
１０１  プログラム生成及び結合システムの範囲
１０２  クラス構成定義表
１０３  プログラム生成装置
１０４  仮クラス名対応表
１０５  仮クラス群
１０６  開発作業領域
１０７  開発中の仮クラス
１０８  プログラム定義情報
１０９  スケルトンソースコード
１１０  プログラム結合装置
１１１  入力装置
１１２  結合済みクラス
１１３  import文バッファ
１１４  メソッド定義部バッファ
【図１】
2005285055.tif 000003
【図２】
2005285055.tif 000004
【図３】
2005285055.tif 000005
【図４】
2005285055.tif 000006
【図５】
2005285055.tif 000007
【図６】
2005285055.tif 000008
【図７】
2005285055.tif 000009
【図８】
2005285055.tif 000010
【図９】
2005285055.tif 000011
【図１０】
2005285055.tif 000012