プログラムの生成を支援する装置及び方法
【課題】操作対象のオブジェクトを命名された名前で記述すべきオブジェクトと値で記述すべきオブジェクトとに区別したプログラムコードを生成する。
【解決手段】プログラム生成装置10において、操作インターフェイス部13は、対象オブジェクトへの操作命令を伝え、対象オブジェクト管理部12は、操作命令を表す命令情報を登録し、対象オブジェクトに名前を付ける命名命令があると、対象オブジェクトへの命名を管理する操作対象モデルと名前との対応情報を登録し、コード生成部15は、登録された命令情報を順次取り出し、これが命名命令を表す場合に、対象オブジェクトを宣言するコードを生成し、これが他の操作命令を表す場合に、対応情報があれば、操作対象モデルに対応する名前を用いてコードを生成し、対応情報がなければ、対象オブジェクトの値を用いてコードを生成し、コード表示部16は、コードを表示する。
【解決手段】プログラム生成装置10において、操作インターフェイス部13は、対象オブジェクトへの操作命令を伝え、対象オブジェクト管理部12は、操作命令を表す命令情報を登録し、対象オブジェクトに名前を付ける命名命令があると、対象オブジェクトへの命名を管理する操作対象モデルと名前との対応情報を登録し、コード生成部15は、登録された命令情報を順次取り出し、これが命名命令を表す場合に、対象オブジェクトを宣言するコードを生成し、これが他の操作命令を表す場合に、対応情報があれば、操作対象モデルに対応する名前を用いてコードを生成し、対応情報がなければ、対象オブジェクトの値を用いてコードを生成し、コード表示部16は、コードを表示する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの生成を支援する装置及び方法に関する。特に、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置及び方法に関する。
【背景技術】
【0002】
従来から、ユーザが行った操作をマクロとして記録しておき、同じ操作を再現するプログラムのソースコード(以下、「プログラムコード」という)を自動生成するシステムが知られている。また、プログラムコードを自動生成する仕組みとしては、より高いレベルでグラフィカルにプログラムの設計を記述し、テンプレートを用いてプログラムの設計をより低いレベルのソースコードに変換するシステムが知られている。
【0003】
ここで、プログラムコードを自動生成又は再生成する技術は、従来から知られていた(例えば、特許文献1〜4参照)。
特許文献1は、演算ブロックにおいて各種演算の演算順序を入力する各種設定入力部により入力された演算順序を、記憶装置が各種パラメータに関連付けて記憶し、記述された制御モデルに対応するプログラムコードを各種パラメータの入力順に生成するコード生成処理部が、記憶装置に記憶された演算順序を入力順として、プログラムコードを生成するプログラムコード生成装置を開示する。
【0004】
特許文献2は、注釈モデル解析手段および注釈ソース生成手段をもつモデルコンパイル手段が設けられ、モデルコンパイル手段が、モデル情報またはソースコードに含まれる注釈情報を参照後、参照した注釈情報に関連する関連注釈情報をソースコードまたはモデル情報に付加するようにするモデリング装置を開示する。
【0005】
特許文献3は、プログラム作成画面上に複数個の機能シンボルを定義し、かつ、定義された機能シンボル間に方向性を有する結合関係を定義する機能シンボル定義手段と、機能シンボル定義手段によって定義された各機能シンボルに連続した仮番号を付与する仮番号付与手段と、仮番号付与手段によって番号付けされた方向性のある結合関係を有する複数の機能シンボルについて、トポロジカルソートをおこなって機能シンボルの実行順序を自動的に決定する実行順序決定手段とを設けたプログラム作成装置を開示する。
【0006】
特許文献4は、ファイルごとに、ファイル内で定義されている関数名・変数の型・変数名を抽出した第1のテーブルと使用されている関数名・変数の型・変数名を抽出した第2のテーブルを作成し、第1のテーブルと第2のテーブル間で一致するものがあればこれを別テーブルに移すまたは削除する第1の作業を行い、さらにシステム内のファイル間で、あるファイルの第1のテーブルと別のファイルの第2のテーブルを比較し一致するものが検出されれば別テーブルに移すまたは削除する第2の作業を、繰り返し比較対象を変えて行い、全ての必要な比較が終了時に第1のテーブル内に残された定義を不要な定義として抽出するファイル抽出システムを開示する。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2007−213402号公報
【特許文献2】特開2011−034419号公報
【特許文献3】特開平8−106380号公報
【特許文献4】特開2005−346578号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
一般に、マクロによってプログラムコードを自動生成するシステムは、全ての対象オブジェクトに機械的に命名する。
ところが、全ての対象オブジェクトに機械的に命名したのでは、操作者の意図が反映されたプログラムコードを生成できない。
具体的には、第一に、全ての対象オブジェクトに命名することにより、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したいという意図が反映されたプログラムコードを生成できない。その結果、無駄な変数宣言を行うことになり、宣言のリソースが無駄に使用されるという問題が生じる。また、例えば、インラインで表現できる値が、別の箇所で変数として宣言されることにもなり、理解の妨げになるという問題も生じる。
【0009】
また、第二に、対象オブジェクトに機械的に命名することにより、操作対象のオブジェクトに操作コンテキストにおける名称を指定したい(例えば、文字列オブジェクトにstring1、string2ではなく、title、contentという意味が分かり易い名称を指定したい)という意図が反映されたプログラムコードを生成できない。その結果、プログラムコードの可読性が低下するという問題が生じる。
【0010】
尚、特許文献1は、モデルの可読性を向上するための技術であるので、本発明とは異なる。
また、特許文献2、3は、プログラムコードの可読性を向上するものであるが、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
更に、特許文献4は、プログラムソースの無駄を省くものではあるが、やはり、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
【0011】
本発明の目的は、操作対象のオブジェクトを命名された名前で記述すべきオブジェクトと値で記述すべきオブジェクトとに区別したプログラムコードを生成することにある。
本発明の他の目的は、操作対象のオブジェクトをユーザが指定した名前で記述したプログラムコードを生成することにある。
【課題を解決するための手段】
【0012】
かかる目的のもと、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部とを含む、装置を提供する。
【0013】
ここで、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていなければ、引数オブジェクトの値を用いて、オブジェクトを操作するコードを生成する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを宣言するコードを生成し、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていなければ、引数オブジェクトの値を用いて、オブジェクトを宣言するコードを生成する、ものであってよい。
【0014】
加えて、生成部は、オブジェクトの値を用いてコードが生成された箇所の数を計数し、表示部は、生成部により計数された箇所の数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が生成命令を示す場合に、オブジェクトに名前が付けられておらず、オブジェクトが後続の操作命令で参照されている状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更に、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更にまた、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
【0015】
また、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、受付部にて受け付けた操作命令がオブジェクトを生成する生成命令である場合に、オブジェクトに生成命令を示す生成命令情報を対応付けた生成情報を記録する生成情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報が生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令が宣言命令である場合には、操作命令情報に基づいて得られたオブジェクトの名前を用いて、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合には、操作命令情報に基づいて得られたオブジェクトの名前を用いると共に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを宣言するコードを生成し、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていなければ、生成情報記録部により記録された生成情報において引数オブジェクトに対応付けられた生成命令情報に基づいて得られた引数オブジェクトの値を用いて、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、生成情報記録部により記録された生成情報においてオブジェクトに対応付けられた生成命令情報に基づいて得られたオブジェクトの値を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていなければ、生成情報記録部により記録された生成情報において引数オブジェクトに対応付けられた生成命令情報に基づいて得られた引数オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部とを含む、装置も提供する。
【0016】
ここで、生成部は、取得部により取得された操作命令情報が生成命令を示す場合に、オブジェクトに名前が付けられておらず、オブジェクトが後続の操作命令で参照されている第1の状況が発生すれば、第1の状況の発生数である第1の発生数を計数し、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により命名情報が記録されていない第2の状況が発生すれば、第2の状況の発生数である第2の発生数を計数し、表示部は、生成部により計数された第1の発生数と第2の発生数との和が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない第3の状況が発生すれば、第3の状況の発生数である第3の発生数を計数し、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない第4の状況が発生すれば、第4の状況の発生数である第4の発生数を計数し、表示部は、生成部により計数された第3の発生数と第4の発生数との和が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
【0017】
更に、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する方法であって、ユーザが入力した操作命令を受け付けるステップと、受け付けた操作命令を示す操作命令情報を記録するステップと、受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録するステップと、プログラムのコードの生成指示に応じて、記録された操作命令情報を順次取得するステップと、取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成するステップと、生成されたコードを表示するステップとを含む、方法も提供する。
【0018】
更にまた、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置としてコンピュータを機能させるプログラムであって、コンピュータを、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部として機能させる、プログラムも提供する。
【発明の効果】
【0019】
本発明によれば、操作対象のオブジェクトを命名された名前で記述すべきオブジェクトと値で記述すべきオブジェクトとに区別したプログラムコードを生成できるようになる。
【図面の簡単な説明】
【0020】
【図1】本発明の実施の形態におけるプログラム生成装置の機能構成例を示したブロック図である。
【図2】本発明の実施の形態におけるプログラム生成装置の第1の概略動作を説明するためのユーザ操作の例を示したフローチャートである。
【図3】本発明の実施の形態におけるプログラム生成装置の第1の概略動作で生成されるプログラムコードの例を示した図である。
【図4】本発明の実施の形態におけるプログラム生成装置の第2の概略動作を説明するためのユーザ操作の例を示したフローチャートである。
【図5】本発明の実施の形態におけるプログラム生成装置の第2の概略動作で生成されるプログラムコードの例を示した図である。
【図6】本発明の実施の形態におけるプログラム生成装置の対象オブジェクト操作時の動作例を示したフローチャートである。
【図7】本発明の実施の形態におけるプログラム生成装置内の命令実行順序表の登録内容の例を示した図である。
【図8】本発明の実施の形態におけるプログラム生成装置内の名前−モデルマッピング表の登録内容の例を示した図である。
【図9】本発明の実施の形態におけるプログラム生成装置内の命令情報−モデルマッピング表の登録内容の例を示した図である。
【図10】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作に先立って変更された命令実行順序表の登録内容の例を示した図である。
【図11】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作例を示したフローチャートである。
【図12】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作で呼び出される命令情報コード化処理の流れを示したフローチャートである。
【図13】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作で呼び出されるモデルコード化処理の流れを示したフローチャートである。
【図14】本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
【発明を実施するための形態】
【0021】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
[プログラム生成装置の機能構成]
図1は、本実施の形態におけるプログラム生成装置10の機能構成例を示した図である。
図示するように、プログラム生成装置10は、対象オブジェクト記憶部11と、対象オブジェクト管理部12と、操作インターフェイス部13と、実行履歴記憶部14と、コード生成部15と、コード表示部16とを備える。
【0022】
対象オブジェクト記憶部11は、操作対象のオブジェクト(以下、「対象オブジェクト」という)を記憶する。ここで、対象オブジェクトは、文字列、数値、フレーム、ファイル等、Java(登録商標)で扱うことの可能な如何なるオブジェクトでもよい。
【0023】
対象オブジェクト管理部12は、作業中の対象オブジェクトの状態を表すために導入された操作対象モデルにより実現される。ここで、操作対象モデルは、対象オブジェクト記憶部11に記憶された対象オブジェクトを包むラッパーオブジェクトである。
【0024】
まず、操作対象モデルは、1つの対象オブジェクトに対応付けられているので、対象オブジェクトへの参照情報(例えば、対象オブジェクトのID)のフィールドを持つ。
また、操作対象モデルは、対象オブジェクトへの命名が指示された名前のフィールドも持つ。尚、操作対象モデルは対象オブジェクトに対応付けられているので、対象オブジェクトへの命名が指示された名前は、操作対象モデルに付けられた名前と捉えることができる。
【0025】
更に、操作対象モデルは、機能を定義したメソッドを持つ。メソッドには、まず、操作命令を表す命令情報を生成する機能が定義される。この命令情報は、対象オブジェクトへの命名命令を表す命令情報を除き、対象オブジェクトに対して操作命令を実行する。例えば、操作命令が対象オブジェクトを生成する命令であるとすると、命令情報は、その命令内容と、対象オブジェクトの生成に関与する操作対象モデルへの参照情報とを含む。また、メソッドには、命令情報を命令実行順序表21(後述)に登録する機能、操作対象モデルに付けられた名前と操作対象モデルとの対応情報を名前−モデルマッピング表22(後述)に登録する機能、及び、命令情報とその命令情報によって生成された操作対象モデルとの対応情報を命令情報−モデルマッピング表23(後述)に登録する機能も定義される。本実施の形態では、操作命令を示す操作命令情報の一例として、命令情報を用いており、オブジェクトに指定された名前を対応付けた命名情報の一例として、名前とその名前が付けられた操作対象モデルとの対応情報を用いており、オブジェクトに生成命令を示す生成命令情報を対応付けた生成情報の一例として、命令情報とその命令情報が表す操作命令によって生成された操作対象モデルとの対応情報を用いている。また、操作命令情報を記録する操作命令情報記録部、命名情報を記録する命名情報記録部、生成情報を記録する生成情報記録部の一例として、対象オブジェクト管理部12を設けている。
【0026】
尚、図では、対象オブジェクト記憶部11と対象オブジェクト管理部12とのペアを1つだけ示したが、クラスのインスタンスの数だけ、このペアは設けられるものとする。
【0027】
操作インターフェイス部13は、対象オブジェクトに対応する操作対象モデルと、対象オブジェクトに対して予め定義された操作命令の一覧とを表示機構90d(図14参照)に表示する。また、キーボード/マウス90iで一覧の中から選択された操作命令を受け付ける。ここで、操作命令には、対象オブジェクトに命名する命令が含まれる。操作対象モデルが作業中の対象オブジェクトの状態を表すので、操作インターフェイス部13は、作業中の対象オブジェクトに暫定の名前を付けてこれを表示する。言い換えると、対象オブジェクトに名前が付いていることを表示するように操作対象モデルが指示してくるので、対象オブジェクトが文字列“xxx”である場合に、対象オブジェクトに名前が付いていなければ単に“xxx”と表示し、対象オブジェクトにnamexという名前が付いていればnamex = “xxx”と表示する。本実施の形態では、操作命令を受け付ける受付部の一例として、操作インターフェイス部13を設けている。
【0028】
実行履歴記憶部14は、操作命令が実行される都度、実行履歴を記憶する。
コード生成部15は、実行履歴記憶部14に記憶された実行履歴をプログラムコードに変換する。本実施の形態では、操作命令情報を順次取得する取得部、コードを生成する生成部の一例として、コード生成部15を設けている。
コード表示部16は、コード生成部15が生成したプログラムコードを表示機構90d(図14参照)に出力する。本実施の形態では、コードを表示する表示部の一例として、コード表示部16を設けている。
【0029】
また、実行履歴記憶部14は、命令実行順序表21と、名前−モデルマッピング表22と、命令情報−モデルマッピング表23とを記憶する。
命令実行順序表21は、操作命令が実行される都度生成された命令情報を実行された順に保持する表形式のデータである。
名前−モデルマッピング表22は、操作対象モデルに付けられた名前と、操作対象モデルとの対応情報を保持する表形式のデータである。
命令情報−モデルマッピング表23は、命令情報と、その命令情報によって生成された操作対象モデルとの対応情報を保持する表形式のデータである。
【0030】
尚、これらの機能のうち、対象オブジェクト管理部12、操作インターフェイス部13、コード生成部15、及び、コード表示部16は、CPU90a(図14参照)が磁気ディスク装置90g(図14参照)に記憶されたプログラムをメインメモリ90c(図14参照)に読み込んで実行することにより実現される。また、対象オブジェクト記憶部11及び実行履歴記憶部14は、例えば磁気ディスク装置90g(図14参照)により実現される。
【0031】
[プログラム生成装置の概略動作(1)]
図2は、プログラム生成装置の第1の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部12が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
【0032】
まず、ユーザは、java.lang.StringクラスのインスタンスAとして文字列“指定された文字列”を生成する(ステップ1)。
【0033】
次に、ユーザは、ステップ1で生成されたjava.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXを生成する(ステップ2)。
そして、ステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名を指示する(ステップ3)。
【0034】
次いで、ユーザは、java.lang.StringクラスのインスタンスBとして文字列“指定された別文字列”を生成する(ステップ4)。
そして、ステップ4で生成されたjava.lang.StringクラスのインスタンスBへの“newTitle”の命名を指示する(ステップ5)。
【0035】
その後、ユーザは、ステップ4で生成されたjava.lang.StringクラスのインスタンスBをステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行する(ステップ6)。
また、ステップ1で生成されたjava.lang.StringクラスのインスタンスAをステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行する(ステップ7)。
【0036】
図3は、図2に示したユーザ操作における各ステップの操作が行われたときに生成されるプログラムコードについて説明するための図である。尚、図では、実際には表出されないコードも、説明の便宜上、破線で囲んで示している。
【0037】
まず、コード301は、java.lang.StringクラスのインスタンスAを生成するコードである。ステップ1の操作が行われた時点で、java.lang.StringクラスのインスタンスAは生成されたが命名されていないので、コード301は表出されない。
【0038】
また、コード302,303は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXを生成するコードである。ステップ2の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは生成されたが命名されていないので、コード302は表出されない。一方、ステップ3の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているので、コード303は表出される。ここで、java.lang.StringクラスのインスタンスAは命名されていないので、“指定された文字列”がインライン展開されている。
【0039】
更に、コード304,305は、java.lang.StringクラスのインスタンスBを生成するコードである。ステップ4の操作が行われた時点で、java.lang.StringクラスのインスタンスBは生成されたが命名されていないので、コード304は表出されない。一方、ステップ5の操作が行われた時点で、java.lang.StringクラスのインスタンスBは命名されているので、コード305は表出される。
【0040】
また、コード306は、java.lang.StringクラスのインスタンスBをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ6の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXもjava.lang.StringクラスのインスタンスBも命名されているので、これらのインスタンスが変数として書き出されたコード306が表出される。
更に、コード307は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ7の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているが、java.lang.StringクラスのインスタンスAは命名されていないので、前者のインスタンスだけが変数として書き出され、後者のインスタンスとしては“指定された文字列”がインライン展開されたコード307が書き出される。
【0041】
このように、java.lang.StringクラスのインスタンスAは、命名されていないので、常に値として扱われる。つまり、プログラム上では、このインスタンスが出現する都度、このインスタンスを格納する領域がメモリ空間に確保され、その領域は不要になれば捨てられる。
一方、java.lang.StringクラスのインスタンスBは、java.lang.StringクラスのインスタンスAと同じ文字列であるが、命名されているので、変数としてアクセスする対象となっている。
【0042】
[プログラム生成装置の概略動作(2)]
図4は、プログラム生成装置の第2の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部12が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
まず、ユーザは、図2のステップ1〜ステップ7で示した操作を行う。
そして最後に、ステップ1で生成されたjava.lang.StringクラスのインスタンスAへの“barTitle”の命名を指示する(ステップ8)。
【0043】
図5は、図4に示したユーザ操作における各ステップの操作が行われたときに生成されるプログラムコードについて説明するための図である。尚、図では、実際には表出されないコードも、説明の便宜上、破線で囲んで示している。
【0044】
まず、コード351,358は、java.lang.StringクラスのインスタンスAを生成するコードである。ステップ1の操作が行われた時点で、java.lang.StringクラスのインスタンスAは生成されたが命名されていないので、コード351は表出されない。一方、ステップ8でjava.lang.StringクラスのインスタンスAに“barTitle”と命名した時点で、このインスタンスの生成ポイントに宣言文であるコード358が発生する。
【0045】
また、コード352,353は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXを生成するコードである。ステップ2の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは生成されたが命名されていないので、コード352は表出されない。一方、ステップ3の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているので、コード353は表出される。ここで、java.lang.StringクラスのインスタンスAは、ステップ3の操作が行われた時点では命名されていなかったので図3のようにインライン展開されたが、ステップ8で“barTitle”と命名されると、変数として書き出される。
【0046】
更に、コード354,355は、java.lang.StringクラスのインスタンスBを生成するコードである。ステップ4の操作が行われた時点で、java.lang.StringクラスのインスタンスBは生成されたが命名されていないので、コード354は表出されない。一方、ステップ5の操作が行われた時点で、java.lang.StringクラスのインスタンスBは命名されているので、コード355は表出される。
【0047】
また、コード356は、java.lang.StringクラスのインスタンスBをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ6の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXもjava.lang.StringクラスのインスタンスBも命名されているので、これらのインスタンスが変数として書き出されたコード356が表出される。
更に、コード357は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ7の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているが、java.lang.StringクラスのインスタンスAは命名されていなかったので、前者のインスタンスだけが変数として書き出され、後者のインスタンスは図3のようにインライン展開された。しかし、後者のインスタンスも、ステップ8で“barTitle”と命名されると、変数として書き出される。
【0048】
このように、java.lang.StringクラスのインスタンスAに後から命名した場合であっても、その命名がプログラムコード全体に反映され、変数として扱うことができる。
【0049】
[プログラム生成装置の動作]
プログラム生成装置10は、大きく分けて以下の2つの動作を行う。
第一に、操作インターフェイス部13での対象オブジェクトに対する操作に応じた動作である。この操作中に必要に応じて対象オブジェクトに対する命名操作が行われるので、その命名操作に応じた動作も行う。
第二に、最新のプログラムコードを生成して表示画面に表示する動作である。
以下、この2つの動作について順に説明する。
【0050】
(対象オブジェクト操作時の動作)
ユーザの指示により操作インターフェイス部13が対象オブジェクト管理部12に操作命令を伝えると、対象オブジェクト管理部12はこの操作命令に基づく動作を行う。ここで、操作命令は、関数の実行、フィールド値の取得、配列要素の取り出し等の操作命令に加えて、特に、対象オブジェクトに対する命名命令を含むものとする。
【0051】
図6は、このときの対象オブジェクト管理部12の動作例を示したフローチャートである。
図示するように、まず、対象オブジェクト管理部12は、操作インターフェイス部13から伝えられた操作命令を表す命令情報を生成する(ステップ101)。
次に、対象オブジェクト管理部12は、操作インターフェイス部13から伝えられた操作命令が対象オブジェクトに対する命名命令であるかどうかを判定する(ステップ102)。
【0052】
その結果、伝えられた操作命令が対象オブジェクトに対する命名命令であると判定されれば、対象オブジェクト管理部12は、対象オブジェクトに対しては何もせず、命名された名前と、対象オブジェクトに対応する操作対象モデルとの対応を、名前−モデルマッピング表22に登録する(ステップ103)。そして、ステップ101で生成した命令情報を命令実行順序表21に追加する(ステップ108)。
【0053】
一方、伝えられた操作命令が対象オブジェクトに対する命名命令でないと判定されれば、対象オブジェクト管理部12は、ステップ101で生成した命令情報により、対象オブジェクトに対して操作を実行する(ステップ104)。そして、操作を実行した結果として新たなオブジェクトが生成されるかどうかを判定する(ステップ105)。尚、このように新たなオブジェクトを生成する生成命令としては、例えば、宣言命令、コンストラクタ命令がある。
【0054】
ここで、新たなオブジェクトが生成されると判定されれば、対象オブジェクト管理部12は、この新たなオブジェクトを包むラッパーオブジェクトである新たな操作対象モデルを生成し、この新たな操作対象モデルに新たな対象オブジェクトを参照させる(ステップ106)。また、この新たな操作対象モデルがステップ101で生成された命令情報によって作成されたことを、命令情報−モデルマッピング表23に登録する(ステップ107)。そして、ステップ101で生成した命令情報を命令実行順序表21に追加する(ステップ108)。
【0055】
また、新たなオブジェクトが生成されないと判定されれば、対象オブジェクト管理部12は、新たな操作対象モデルの生成や命令情報−モデルマッピング表23への情報の登録を行うことなく、ステップ101で生成した命令情報を命令実行順序表21に追加する(ステップ108)。
【0056】
ここで、上記動作により命令実行順序表21、名前−モデルマッピング表22、命令情報−モデルマッピング表23に登録される情報の内容について説明する。尚、ここでは、図2に示したユーザ操作が行われた場合を例にとって説明する。
【0057】
図7は、図2に示したユーザ操作に応じて上記動作が行われた場合の命令実行順序表21の登録内容の例を示した図である。
図示するように、命令実行順序表21には、順序情報と命令情報との対応が登録される。ここで、順序情報は、対応する命令情報で表される操作命令が何番目に実行されたものであるかを示す情報である。また、命令情報は、ユーザが指示した操作命令を表す情報であり、(操作対象モデル,命令,引数)という書式で示す。但し、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【0058】
図2に示したユーザ操作では、まず、ステップ1でjava.lang.StringクラスのインスタンスAとして文字列“指定された文字列”が生成されたので、順序情報“1”と命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)との対応が登録されている。
【0059】
次に、ステップ2でjava.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXが生成されたので、順序情報“2”と命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)との対応が登録されている。
そして、ステップ3でjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名が指示されたので、順序情報“3”と命令情報(javax.swing.JFrameクラスのインスタンスX,命名,“fooFrame”)との対応が登録されている。
【0060】
次いで、ステップ4でjava.lang.StringクラスのインスタンスBとして文字列“指定された別文字列”が生成されたので、順序情報“4”と命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)との対応が登録されている。
そして、ステップ5でjava.lang.StringクラスのインスタンスBへの“newTitle”の命名が指示されたので、順序情報“5”と命令情報(java.lang.StringクラスのインスタンスB,命名,“newTitle”)との対応が登録されている。
【0061】
その後、ステップ6でjava.lang.StringクラスのインスタンスBをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドが実行されたので、順序情報“6”と命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスB)との対応が登録されている。
また、ステップ7でjava.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドが実行されたので、順序情報“7”と命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスA)との対応が登録されている。
【0062】
図8は、図2に示したユーザ操作に応じて上記動作が行われた場合の名前−モデルマッピング表22の登録内容の例を示した図である。
図示するように、名前−モデルマッピング表22には、名前と操作対象モデルとの対応が登録される。ここで、名前は、命名命令によって対象オブジェクトへの命名が指示された名前である。また、操作対象モデルは、その名前の命名が指示された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【0063】
図2に示したユーザ操作では、ステップ3でjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名が指示されたので、名前“fooFrame”と操作対象モデル“javax.swing.JFrameクラスのインスタンスX”との対応が登録されている。
また、ステップ5でjava.lang.StringクラスのインスタンスBへの“newTitle”の命名が指示されたので、名前“newTitle”と操作対象モデル“java.lang.StringクラスのインスタンスB”との対応が登録されている。
【0064】
図9は、図2に示したユーザ操作に応じて上記動作が行われた場合の命令情報−モデルマッピング表23の登録内容の例を示した図である。
図示するように、命令情報−モデルマッピング表23には、命令情報と操作対象モデルとの対応が登録される。ここで、命令情報は、対象オブジェクトを生成した操作命令を表す情報である。また、操作対象モデルは、その命令情報が表す操作命令によって生成された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【0065】
図2に示したユーザ操作では、ステップ1でjava.lang.StringクラスのインスタンスAが生成されたので、命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)と操作対象モデル“java.lang.StringクラスのインスタンスA”との対応が登録されている。
また、ステップ2でjavax.swing.JFrameクラスのインスタンスXが生成されたので、命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)と操作対象モデル“javax.swing.JFrameクラスのインスタンスX”との対応が登録されている。
更に、ステップ4でjava.lang.StringクラスのインスタンスBが生成されたので、命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)と操作対象モデル“java.lang.StringクラスのインスタンスB”の対応が登録されている。
【0066】
(プログラムコード生成時の動作)
ユーザが例えば図2に示すような操作を行った後、プログラムコードの生成を指示すると、コード生成部15はプログラムコードを生成する動作を行う。或いは、コンピュータの指示により、コード生成部15はプログラムコードを生成する動作を行ってもよい。
コード生成部15は、動作を開始すると、まず、コードが格納されていないコードバッファを用意する。
【0067】
また、コード生成部15は、名前−モデルマッピング表22に登録されている操作対象モデルを作成した命令を命令情報−モデルマッピング表23にて調べ、命令実行順序表21上で、その操作対象モデルを作成した命令を削除し、その操作対象モデルを命名した命令をその位置に移動する。
【0068】
図10は、このときの命令実行順序表21の登録内容の例を示した図である。
まず、図8の名前−モデルマッピング表22を参照すると、この表に登録されている操作対象モデルは“javax.swing.JFrameクラスのインスタンスX”及び“java.lang.StringクラスのインスタンスB”である。次に、図9の命令情報−モデルマッピング表23を参照すると、これらを生成した命令情報はそれぞれ(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)及び(java.lang.Stringクラス,宣言,“指定された別文字列”)である。従って、図7の命令実行順序表21に対して、順序情報“2”のレコードを削除して順序情報“3”のレコードをその位置に移動させ、かつ、順序情報“4”のレコードを削除して順序情報“5”のレコードがその位置に移動させる変更を施すことにより、図10の命令実行順序表21を生成する。尚、ここで命名された操作対象モデルを生成する命令情報を削除したことは、操作命令情報がオブジェクトを生成する生成命令を示す場合にコードを生成しないことの一例である。
【0069】
さて、このような準備が整うと、コード生成部15は、実際にプログラムコードを生成する処理に移る。
図11は、このときのコード生成部15の動作例を示したフローチャートである。
図示するように、コード生成部15は、まず、命令実行順序表21から命令情報の総数を得て、この命令情報の総数を、処理中の命令情報の位置をカウントする変数iに代入する(ステップ121)。
次に、コード生成部15は、変数iを1ずつ減らしながら0になるまで、ステップ122〜132の処理を繰り返し実行する。以下、変数iについてのステップ122〜132の処理内容について説明する。
【0070】
最初に、コード生成部15は、命令実行順序表21で最初からi番目にある命令情報、つまり、順序情報iに対応する命令情報を取り出す(ステップ122)。そして、操作対象モデルに命名する命令を表す命令情報が取り出されたかどうかを判定する(ステップ123)。
【0071】
その結果、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定されれば、コード生成部15は、まず、変数名宣言コード断片を生成する(ステップ124)。ここで、変数名宣言コード断片とは、変数名を宣言するためのコード断片であり、例えば、Stringクラスの変数“newTitle”を宣言する場合は、“String newTitle”という文字列が該当する。
【0072】
次に、コード生成部15は、命令情報における操作対象モデルを生成した命令情報を、命令情報−モデルマッピング表23から取り出す(ステップ125)。
そして、コード生成部15は、命令情報コード化処理を呼び出し、コード断片を取得する(ステップ126)。尚、この命令情報コード化処理の呼び出しは、ステップ125で取り出した操作対象モデルを生成した命令情報(モデル生成命令情報)をパラメータとして行われる。このパラメータはステップ126の括弧内にも示している。また、命令情報コード化処理から返されるコード断片は、命令や値等を表すものであり、図2の例で言えば、“new javax.swing.JFrame(“指定された文字列”)”、“指定された別文字列”が該当する。以下、命令情報コード化処理から返されたコード断片は、命令情報コード化処理を呼ぶことで得られたコード断片という意味で「命令情報コード断片」と称する。
【0073】
次いで、コード生成部15は、ステップ124で生成した変数名宣言コード断片と、ステップ126で取得した命令情報コード断片とを代入記号で結ぶことにより、プログラムコードの行であるコード行を生成する(ステップ127)。
【0074】
一方、ステップ123にて、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定されれば、コード生成部15は、操作対象モデルを生成する命令を表す命令情報が取り出されたかどうかを判定する(ステップ128)。
【0075】
そして、操作対象モデルを生成する命令を表す命令情報が取り出されたと判定されれば、コード生成部15は、その操作対象モデルが命名されておらず、後続の命令情報(命令実行順序表21でより大きな順序情報に対応付けられた命令情報)において参照されているかどうか(命令情報における操作対象モデル又は引数となっているかどうか)を判定する(ステップ129)。その操作対象モデルが命名されておらず、後続の命令で参照されていると判定されれば、コード生成部15は、名称が未決定の状態で操作対象モデルがコード化されたことを示す参照カウンタCNTに1を加算する(ステップ130)。
【0076】
また、ステップ128にて、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定された場合、又は、ステップ129にて、その操作対象モデルが命名されている、若しくは、後続の命令で参照されていない、と判定された場合、コード生成部15は、命令情報コード化処理を呼び出し、命令情報コード断片を取得する(ステップ131)。尚、この命令情報コード化処理の呼び出しは、ステップ122で取り出したi番目の命令情報をパラメータとして行われる。このパラメータはステップ131の括弧内にも示している。また、命令情報コード化処理から返される命令情報コード断片は、命令を表すものであり、図2の例で言えば、“fooFrame.setTitle(newTitle)”等が該当する。即ち、ここで得られる命令情報コード断片は、プログラムコードの行であるコード行である。
【0077】
その後、コード生成部15は、コードバッファの最初の行として、ステップ127又はステップ131で得られたコード行を追加する(ステップ132)。尚、ステップ130が実行された場合は、コード行は得られていないので、コードバッファには何も追加しない。
【0078】
そして、上述したように、コード生成部15は、変数iを1ずつ減らしながら0になるまで以上の処理を繰り返すので、コード生成部15は、処理中の命令情報の位置をカウントする変数iを1カウントダウンし(ステップ133)、カウントダウンしたことにより変数iが0になったかどうかを判定する(ステップ134)。その結果、コード生成部15は、変数iが0になっていなければ、ステップ122へ処理を進めるが、変数iが0になっていれば、コードバッファに格納された全てのコードと、操作対象モデルごとの参照カウンタCNTの値とをコード表示部16に出力する(ステップ135)。
【0079】
これにより、コード表示部16は、コード生成部15により生成されたコードを表示機構90d(図14参照)に表示する。その際、予め定められた閾値(例えば2)以上になっている参照カウンタCNTに対応する操作対象モデルに命名することを推奨する情報も表示する。
【0080】
ここで、図11のステップ126,131、又は、後述する図13のステップ165で呼び出される命令情報コード化処理について詳細に説明する。
図12は、命令情報コード化処理の流れを示したフローチャートである。
図示するように、コード生成部15は、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報であるかどうかを判定する(ステップ141)。ここで、宣言命令とは、操作対象モデルを宣言する命令であり、図2の例で言えば、命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)で表される命令が該当する。
【0081】
まず、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報でないと判定された場合について述べる。この場合、コード生成部15は、渡された命令情報がコンストラクタ命令を表す命令情報であるかどうかを判定する(ステップ142)。ここで、コンストラクタ命令とは、対象オブジェクトを生成するときに実行する命令であり、図2の例で言えば、命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)で表される命令が該当する。
【0082】
その結果、渡された命令情報がコンストラクタ命令を表す命令情報でないと判定されれば、コード生成部15は、モデルコード化処理を呼び出す(ステップ143)。尚、このモデルコード化処理の呼び出しは、渡された命令情報における操作対象モデルをパラメータとして行われる。このパラメータはステップ143の括弧内にも示している。また、モデルコード化処理から返されるコード断片は、変数名や値等を表すものであり、図2の例で言えば、“fooFrame”等が該当する。以下、モデルコード化処理から返されたコード断片は、モデルコード化処理を呼ぶことで得られたコード断片という意味で「モデルコード断片」と称する。但し、ここで返されたコード断片は、操作対象モデルをパラメータとしてモデルコード化処理を呼ぶことで得られたコード断片であるので、特に「操作対象モデルコード断片」と称する。
【0083】
一方、渡された命令情報がコンストラクタ命令を表す命令情報であると判定されれば、コード生成部15は、コンストラクタ部分のコード断片(コンストラクタコード断片)を生成する(ステップ144)。ここで、コンストラクタコード断片は、図2の例で言えば、“new javax.swing.Jframe(”及び“)”が該当する。
【0084】
その後、コード生成部15は、渡された命令情報に引数があるかどうかを判定する(ステップ145)。
ここで、渡された命令情報に引数がないと判定されれば、何もしないが、渡された命令情報に引数があると判定されれば、コード生成部15は、モデルコード化処理を呼び出す(ステップ146)。尚、このモデルコード化処理の呼び出しは、その引数をパラメータとして行われる。このパラメータはステップ146の括弧内にも示している。また、モデルコード化処理から返されるモデルコード断片は、変数名や値等を表すものであり、図2の例で言えば、“指定された文字列”等が該当する。但し、ここで返されたコード断片は、引数をパラメータとしてモデルコード化処理を呼ぶことで得られたコード断片であるので、特に「引数コード断片」と称する。
【0085】
そして、コード生成部15は、操作対象モデルコード断片と命令内容と引数コード断片とを組み合わせることにより、又は、コンストラクタコード断片と引数コード断片とを組み合わせることにより、命令情報コード断片を生成し、これを返す(ステップ147)。ここで、例えば、操作対象モデルコード断片が“fooFrame”、引数コード断片が“指定された文字列”、命令内容が“setTitle”であるすると、命令情報コード断片は“fooFrame.setTitle(“指定された文字列”)”となる。尚、このステップ147は、渡された命令情報がコンストラクタ命令を表す命令情報であると判定された場合や、渡された命令情報に引数がないと判定された場合にも実行されるものとして設けたが、これらの場合にはそれぞれの場合に適したステップを別に設けてもよい。
【0086】
次に、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報であると判定された場合について述べる。この場合、コード生成部15は、値を表す命令情報コード断片又はクラス参照を表す命令情報コード断片を生成し、これを返す(ステップ148)。ここで、値を表す命令情報コード断片は、例えば、“指定された文字列”、“1”、“−1”である。また、クラス参照を表す命令情報コード断片は、例えば、“java.lang.String”である。
【0087】
ここで、図12のステップ143,146で呼び出されるモデルコード化処理について詳細に説明する。
図13は、モデルコード化処理の流れを示したフローチャートである。
図示するように、コード生成部15は、名前−モデルマッピング表22を参照し、呼び出されるときに渡された対象(操作対象モデル又は引数)に名前が付いているかどうかを確認し(ステップ161)、対象が命名済みかどうかを判定する(ステップ162)。
【0088】
その結果、対象が命名済みであると判定されれば、コード生成部15は、対象に付けられた変数名を表すモデルコード断片を生成し、これを返す(ステップ163)。ここで、変数名を表すモデルコード断片は、例えば、“fooFrame”である。
【0089】
一方、対象が命名済みでないと判定されれば、コード生成部15は、まず、対象を生成した命令情報を命令情報−モデルマッピング表23から取り出す(ステップ164)。
次に、コード生成部15は、命令情報コード化処理を呼び出し、命令情報コード断片を取得する(ステップ165)。尚、この命令情報コード化処理の呼び出しは、ステップ164で取り出した対象を生成した命令情報をパラメータとして行われる。このパラメータはステップ165の括弧内にも示している。また、命令情報コード化処理から返される命令情報コード断片は、命令、値等を表すものであり、図2の例で言えば、“指定された文字列”等が該当する。
次いで、コード生成部15は、名称が未決定の状態で対象がコード化されたことを示す参照カウンタCNTに1を加算する(ステップ166)。
その後、コード生成部15は、ステップ165で取得した命令情報コード断片をモデルコード断片として返す(ステップ167)。
【0090】
(プログラムコード生成時の動作の具体例)
ここでは、図10に示した命令実行順序表21の各行の命令情報を図11のステップ122で取り出した場合のステップ123〜132の動作(図12及び図13の各ステップの動作を含む)について、具体的に説明する。
【0091】
(1)順序情報“5”に対応する命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスA)を取り出した場合
図11において、コード生成部15は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ131で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0092】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表さないと判定し、ステップ142で、この命令情報がコンストラクタ命令を表さないと判定し、ステップ143で、この命令情報における操作対象モデル“javax.swing.JFrameクラスのインスタンスX”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスX”に名前が付いているかどうかを確認し、ステップ162で、“fooFrame”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
【0093】
これにより、図12に戻り、コード生成部15は、ステップ145で、命令情報コード化処理が呼び出されたときのパラメータである命令情報に引数があると判定し、ステップ146で、この命令情報における引数“java.lang.StringクラスのインスタンスA”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスA”に名前が付いているかどうかを確認し、ステップ162で、命名済みでないと判定し、ステップ164で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ165で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された文字列”を返す。
これにより、図13に戻り、コード生成部15は、ステップ166で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算し、ステップ167で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
【0094】
これにより、図12に戻り、コード生成部15は、ステップ147で、命令情報コード断片“fooFrame.setTitle(“指定された文字列”)”を返す。
これにより、図11に戻り、コード生成部15は、ステップ132で、コード行“fooFrame.setTitle(“指定された文字列”)”をコードバッファの最初の行に追加する。
【0095】
(2)順序情報“4”に対応する命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスB)を取り出した場合
図11において、コード生成部15は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ131で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0096】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表さないと判定し、ステップ142で、この命令情報がコンストラクタ命令を表さないと判定し、ステップ143で、この命令情報における操作対象モデル“javax.swing.JFrameクラスのインスタンスX”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスX”に名前が付いているかどうかを確認し、ステップ162で、“fooFrame”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
【0097】
これにより、図12に戻り、コード生成部15は、ステップ145で、命令情報コード化処理が呼び出されたときのパラメータである命令情報に引数があると判定し、ステップ146で、この命令情報における引数“java.lang.StringクラスのインスタンスB”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスB”に名前が付いているかどうかを確認し、ステップ162で、“newTitle”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“newTitle”を返す。ここで、“newTitle”は、引数オブジェクトに対応付けられた名前の一例である。
【0098】
これにより、図12に戻り、コード生成部15は、ステップ147で、命令情報コード断片“fooFrame.setTitle(newTitle)”を返す。
これにより、図11に戻り、コード生成部15は、ステップ132で、コード行“fooFrame.setTitle(newTitle)”をコードバッファの最初の行に追加する。
【0099】
(3)順序情報“3”に対応する命令情報(java.lang.StringクラスのインスタンスB,命名,“newTitle”)を取り出した場合
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ124で、変数名宣言コード断片“String newTitle =”を生成し、ステップ125で、操作対象モデル“java.lang.StringクラスのインスタンスB”を生成した命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ126で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0100】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された別文字列”を返す。
【0101】
これにより、図11に戻り、コード生成部15は、ステップ127で、コード行“String newTitle = “指定された別文字列””を生成し、ステップ132で、このコード行をコードバッファの最初の行に追加する。
【0102】
(4)順序情報“2”に対応する命令情報(javax.swing.JFrameクラスのインスタンスX,命名,“fooFrame”)を取り出した場合
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ124で、変数名宣言コード断片“javax.swing.JFrame fooFrame =”を生成し、ステップ125で、操作対象モデル“javax.swing.JFrameクラスのインスタンスX”を生成した命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)を命令情報−モデルマッピング表23から取り出し、ステップ126で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0103】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表さないと判定し、ステップ142で、この命令情報がコンストラクタ命令を表すと判定し、ステップ144で、コンストラクタコード断片“new javax.swing.JFrame(”及び“)”を生成し、ステップ145で、この命令情報に引数があると判定し、ステップ146で、この命令情報における引数“java.lang.StringクラスのインスタンスA”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスA”に名前が付いているかどうかを確認し、ステップ162で、命名済みでないと判定し、ステップ164で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ165で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された文字列”を返す。
これにより、図13に戻り、コード生成部15は、ステップ166で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算し、ステップ167で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
【0104】
これにより、図12に戻り、コード生成部15は、ステップ147で、命令情報コード断片“new javax.swing.JFrame(“指定された文字列”)”を返す。
これにより、図11に戻り、コード生成部15は、ステップ127で、コード行“javax.swing.JFrame fooFrame = new javax.swing.JFrame(“指定された文字列”)”を生成し、ステップ132で、このコード行をコードバッファの最初の行に追加する。
【0105】
(5)順序情報“1”に対応する命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を取り出した場合
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されたと判定し、ステップ129で、操作対象モデル“java.lang.StringクラスのインスタンスA”が命名されておらず、後続の命令情報で参照されていると判定し、ステップ130で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算する。
【0106】
そして、上記(1)〜(5)に示した処理を行うことにより、図3に示したプログラムコードが生成される。
【0107】
尚、ここでは、図2に示したユーザ操作が行われた場合におけるプログラム生成装置10の動作の具体例について述べたが、図4に示したユーザ操作が行われた場合におけるプログラム生成装置10の動作は次のようになる。
【0108】
即ち、まず、対象オブジェクト管理部12が、命令実行順序表21に、図7に示した情報に加えて、順序情報“8”の命令情報(java.lang.StringクラスのインスタンスA,命名,“barTitle”)を登録し、名前−モデルマッピング表22に、図8に示した情報に加えて、名前“barTitle”と操作対象モデル“java.lang.StringクラスのインスタンスA”との対応情報を登録する。これにより、コード生成部15は、命令実行順序表21において、順序情報“1”に対応する命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を削除し、順序情報“8”に対応する命令情報(java.lang.StringクラスのインスタンスA,命名,“barTitle”)を順序情報“1”の位置に移動しておく。
【0109】
次に、上記(1)〜(4)に示したのと同様の処理を行う。図2のユーザ操作が行われた場合の処理と、図4のユーザ操作が行われた場合の処理との違いは、前者においては、図13のステップ162で“java.lang.StringクラスのインスタンスA”が命名済みでないと判定し、ステップ164〜167を実行することでモデルコード断片“指定された文字列”を取得していたのに対し、後者においては、図13のステップ162で“java.lang.StringクラスのインスタンスA”が命名済みであると判定し、ステップ163を実行することでモデルコード断片“barTitle”を取得している点である。
その後、上記(5)の代わりに、順序情報“1”に対応する命令情報(java.lang.StringクラスのインスタンスA,命名,“barTitle”)を取り出した場合の処理を行う。
このような処理を行うことにより、図5に示したプログラムコードが生成される。
【0110】
尚、本実施の形態では、Java(登録商標)のVM(Virtual Machine)内のオブジェクトを操作対象として説明したが、本発明で操作対象とするオブジェクトは、これに限られるものではない。
【0111】
このように、本実施の形態では、対象オブジェクトに対する命名を、機械的に行うのではなく、外部から名前を受け付けて行うようにした。これにより、対象オブジェクトが命名された場合にのみ、プログラムコード上で変数宣言が発生するので、理解困難な変数宣言が行われなくなる。言い換えると、対象オブジェクトが命名されない場合は、不要な変数宣言が省略されるので、より可読性の高いプログラムコードを生成できるようになった。
また、本実施の形態では、後で使われない対象オブジェクトに対して命名しないことを許容した。これにより、自然に記述したプログラムコードにより近いプログラムコードを生成できるようになった。
【0112】
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。図14は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるCPU(Central Processing Unit)90aと、M/B(マザーボード)チップセット90bを介してCPU90aに接続されたメインメモリ90cと、同じくM/Bチップセット90bを介してCPU90aに接続された表示機構90dとを備える。また、M/Bチップセット90bには、ブリッジ回路90eを介して、ネットワークインターフェイス90fと、磁気ディスク装置(HDD)90gと、音声機構90hと、キーボード/マウス90iと、フレキシブルディスクドライブ90jとが接続されている。
【0113】
尚、図14において、各構成要素は、バスを介して接続される。例えば、CPU90aとM/Bチップセット90bの間や、M/Bチップセット90bとメインメモリ90cの間は、CPUバスを介して接続される。また、M/Bチップセット90bと表示機構90dとの間は、AGP(Accelerated Graphics Port)を介して接続されてもよいが、表示機構90dがPCI Express対応のビデオカードを含む場合、M/Bチップセット90bとこのビデオカードの間は、PCI Express(PCIe)バスを介して接続される。また、ブリッジ回路90eと接続する場合、ネットワークインターフェイス90fについては、例えば、PCI Expressを用いることができる。また、磁気ディスク装置90gについては、例えば、シリアルATA(AT Attachment)、パラレル転送のATA、PCI(Peripheral Components Interconnect)を用いることができる。更に、キーボード/マウス90i、及び、フレキシブルディスクドライブ90jについては、USB(Universal Serial Bus)を用いることができる。
【0114】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(CD−ROM)、コンパクトディスク−リード/ライト(CD−R/W)及びDVDが含まれる。
【0115】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【0116】
10…プログラム生成装置、11…対象オブジェクト記憶部、12…対象オブジェクト管理部、13…操作インターフェイス部、14…実行履歴記憶部、15…コード生成部、16…コード表示部、21…命令実行順序表、22…名前−モデルマッピング表、23…命令情報−モデルマッピング表
【技術分野】
【0001】
本発明は、プログラムの生成を支援する装置及び方法に関する。特に、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置及び方法に関する。
【背景技術】
【0002】
従来から、ユーザが行った操作をマクロとして記録しておき、同じ操作を再現するプログラムのソースコード(以下、「プログラムコード」という)を自動生成するシステムが知られている。また、プログラムコードを自動生成する仕組みとしては、より高いレベルでグラフィカルにプログラムの設計を記述し、テンプレートを用いてプログラムの設計をより低いレベルのソースコードに変換するシステムが知られている。
【0003】
ここで、プログラムコードを自動生成又は再生成する技術は、従来から知られていた(例えば、特許文献1〜4参照)。
特許文献1は、演算ブロックにおいて各種演算の演算順序を入力する各種設定入力部により入力された演算順序を、記憶装置が各種パラメータに関連付けて記憶し、記述された制御モデルに対応するプログラムコードを各種パラメータの入力順に生成するコード生成処理部が、記憶装置に記憶された演算順序を入力順として、プログラムコードを生成するプログラムコード生成装置を開示する。
【0004】
特許文献2は、注釈モデル解析手段および注釈ソース生成手段をもつモデルコンパイル手段が設けられ、モデルコンパイル手段が、モデル情報またはソースコードに含まれる注釈情報を参照後、参照した注釈情報に関連する関連注釈情報をソースコードまたはモデル情報に付加するようにするモデリング装置を開示する。
【0005】
特許文献3は、プログラム作成画面上に複数個の機能シンボルを定義し、かつ、定義された機能シンボル間に方向性を有する結合関係を定義する機能シンボル定義手段と、機能シンボル定義手段によって定義された各機能シンボルに連続した仮番号を付与する仮番号付与手段と、仮番号付与手段によって番号付けされた方向性のある結合関係を有する複数の機能シンボルについて、トポロジカルソートをおこなって機能シンボルの実行順序を自動的に決定する実行順序決定手段とを設けたプログラム作成装置を開示する。
【0006】
特許文献4は、ファイルごとに、ファイル内で定義されている関数名・変数の型・変数名を抽出した第1のテーブルと使用されている関数名・変数の型・変数名を抽出した第2のテーブルを作成し、第1のテーブルと第2のテーブル間で一致するものがあればこれを別テーブルに移すまたは削除する第1の作業を行い、さらにシステム内のファイル間で、あるファイルの第1のテーブルと別のファイルの第2のテーブルを比較し一致するものが検出されれば別テーブルに移すまたは削除する第2の作業を、繰り返し比較対象を変えて行い、全ての必要な比較が終了時に第1のテーブル内に残された定義を不要な定義として抽出するファイル抽出システムを開示する。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2007−213402号公報
【特許文献2】特開2011−034419号公報
【特許文献3】特開平8−106380号公報
【特許文献4】特開2005−346578号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
一般に、マクロによってプログラムコードを自動生成するシステムは、全ての対象オブジェクトに機械的に命名する。
ところが、全ての対象オブジェクトに機械的に命名したのでは、操作者の意図が反映されたプログラムコードを生成できない。
具体的には、第一に、全ての対象オブジェクトに命名することにより、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したいという意図が反映されたプログラムコードを生成できない。その結果、無駄な変数宣言を行うことになり、宣言のリソースが無駄に使用されるという問題が生じる。また、例えば、インラインで表現できる値が、別の箇所で変数として宣言されることにもなり、理解の妨げになるという問題も生じる。
【0009】
また、第二に、対象オブジェクトに機械的に命名することにより、操作対象のオブジェクトに操作コンテキストにおける名称を指定したい(例えば、文字列オブジェクトにstring1、string2ではなく、title、contentという意味が分かり易い名称を指定したい)という意図が反映されたプログラムコードを生成できない。その結果、プログラムコードの可読性が低下するという問題が生じる。
【0010】
尚、特許文献1は、モデルの可読性を向上するための技術であるので、本発明とは異なる。
また、特許文献2、3は、プログラムコードの可読性を向上するものであるが、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
更に、特許文献4は、プログラムソースの無駄を省くものではあるが、やはり、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
【0011】
本発明の目的は、操作対象のオブジェクトを命名された名前で記述すべきオブジェクトと値で記述すべきオブジェクトとに区別したプログラムコードを生成することにある。
本発明の他の目的は、操作対象のオブジェクトをユーザが指定した名前で記述したプログラムコードを生成することにある。
【課題を解決するための手段】
【0012】
かかる目的のもと、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部とを含む、装置を提供する。
【0013】
ここで、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていなければ、引数オブジェクトの値を用いて、オブジェクトを操作するコードを生成する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを宣言するコードを生成し、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていなければ、引数オブジェクトの値を用いて、オブジェクトを宣言するコードを生成する、ものであってよい。
【0014】
加えて、生成部は、オブジェクトの値を用いてコードが生成された箇所の数を計数し、表示部は、生成部により計数された箇所の数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が生成命令を示す場合に、オブジェクトに名前が付けられておらず、オブジェクトが後続の操作命令で参照されている状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更に、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更にまた、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
【0015】
また、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、受付部にて受け付けた操作命令がオブジェクトを生成する生成命令である場合に、オブジェクトに生成命令を示す生成命令情報を対応付けた生成情報を記録する生成情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報が生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令が宣言命令である場合には、操作命令情報に基づいて得られたオブジェクトの名前を用いて、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合には、操作命令情報に基づいて得られたオブジェクトの名前を用いると共に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを宣言するコードを生成し、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていなければ、生成情報記録部により記録された生成情報において引数オブジェクトに対応付けられた生成命令情報に基づいて得られた引数オブジェクトの値を用いて、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、生成情報記録部により記録された生成情報においてオブジェクトに対応付けられた生成命令情報に基づいて得られたオブジェクトの値を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていなければ、生成情報記録部により記録された生成情報において引数オブジェクトに対応付けられた生成命令情報に基づいて得られた引数オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部とを含む、装置も提供する。
【0016】
ここで、生成部は、取得部により取得された操作命令情報が生成命令を示す場合に、オブジェクトに名前が付けられておらず、オブジェクトが後続の操作命令で参照されている第1の状況が発生すれば、第1の状況の発生数である第1の発生数を計数し、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により命名情報が記録されていない第2の状況が発生すれば、第2の状況の発生数である第2の発生数を計数し、表示部は、生成部により計数された第1の発生数と第2の発生数との和が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない第3の状況が発生すれば、第3の状況の発生数である第3の発生数を計数し、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない第4の状況が発生すれば、第4の状況の発生数である第4の発生数を計数し、表示部は、生成部により計数された第3の発生数と第4の発生数との和が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
【0017】
更に、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する方法であって、ユーザが入力した操作命令を受け付けるステップと、受け付けた操作命令を示す操作命令情報を記録するステップと、受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録するステップと、プログラムのコードの生成指示に応じて、記録された操作命令情報を順次取得するステップと、取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成するステップと、生成されたコードを表示するステップとを含む、方法も提供する。
【0018】
更にまた、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置としてコンピュータを機能させるプログラムであって、コンピュータを、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部として機能させる、プログラムも提供する。
【発明の効果】
【0019】
本発明によれば、操作対象のオブジェクトを命名された名前で記述すべきオブジェクトと値で記述すべきオブジェクトとに区別したプログラムコードを生成できるようになる。
【図面の簡単な説明】
【0020】
【図1】本発明の実施の形態におけるプログラム生成装置の機能構成例を示したブロック図である。
【図2】本発明の実施の形態におけるプログラム生成装置の第1の概略動作を説明するためのユーザ操作の例を示したフローチャートである。
【図3】本発明の実施の形態におけるプログラム生成装置の第1の概略動作で生成されるプログラムコードの例を示した図である。
【図4】本発明の実施の形態におけるプログラム生成装置の第2の概略動作を説明するためのユーザ操作の例を示したフローチャートである。
【図5】本発明の実施の形態におけるプログラム生成装置の第2の概略動作で生成されるプログラムコードの例を示した図である。
【図6】本発明の実施の形態におけるプログラム生成装置の対象オブジェクト操作時の動作例を示したフローチャートである。
【図7】本発明の実施の形態におけるプログラム生成装置内の命令実行順序表の登録内容の例を示した図である。
【図8】本発明の実施の形態におけるプログラム生成装置内の名前−モデルマッピング表の登録内容の例を示した図である。
【図9】本発明の実施の形態におけるプログラム生成装置内の命令情報−モデルマッピング表の登録内容の例を示した図である。
【図10】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作に先立って変更された命令実行順序表の登録内容の例を示した図である。
【図11】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作例を示したフローチャートである。
【図12】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作で呼び出される命令情報コード化処理の流れを示したフローチャートである。
【図13】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作で呼び出されるモデルコード化処理の流れを示したフローチャートである。
【図14】本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
【発明を実施するための形態】
【0021】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
[プログラム生成装置の機能構成]
図1は、本実施の形態におけるプログラム生成装置10の機能構成例を示した図である。
図示するように、プログラム生成装置10は、対象オブジェクト記憶部11と、対象オブジェクト管理部12と、操作インターフェイス部13と、実行履歴記憶部14と、コード生成部15と、コード表示部16とを備える。
【0022】
対象オブジェクト記憶部11は、操作対象のオブジェクト(以下、「対象オブジェクト」という)を記憶する。ここで、対象オブジェクトは、文字列、数値、フレーム、ファイル等、Java(登録商標)で扱うことの可能な如何なるオブジェクトでもよい。
【0023】
対象オブジェクト管理部12は、作業中の対象オブジェクトの状態を表すために導入された操作対象モデルにより実現される。ここで、操作対象モデルは、対象オブジェクト記憶部11に記憶された対象オブジェクトを包むラッパーオブジェクトである。
【0024】
まず、操作対象モデルは、1つの対象オブジェクトに対応付けられているので、対象オブジェクトへの参照情報(例えば、対象オブジェクトのID)のフィールドを持つ。
また、操作対象モデルは、対象オブジェクトへの命名が指示された名前のフィールドも持つ。尚、操作対象モデルは対象オブジェクトに対応付けられているので、対象オブジェクトへの命名が指示された名前は、操作対象モデルに付けられた名前と捉えることができる。
【0025】
更に、操作対象モデルは、機能を定義したメソッドを持つ。メソッドには、まず、操作命令を表す命令情報を生成する機能が定義される。この命令情報は、対象オブジェクトへの命名命令を表す命令情報を除き、対象オブジェクトに対して操作命令を実行する。例えば、操作命令が対象オブジェクトを生成する命令であるとすると、命令情報は、その命令内容と、対象オブジェクトの生成に関与する操作対象モデルへの参照情報とを含む。また、メソッドには、命令情報を命令実行順序表21(後述)に登録する機能、操作対象モデルに付けられた名前と操作対象モデルとの対応情報を名前−モデルマッピング表22(後述)に登録する機能、及び、命令情報とその命令情報によって生成された操作対象モデルとの対応情報を命令情報−モデルマッピング表23(後述)に登録する機能も定義される。本実施の形態では、操作命令を示す操作命令情報の一例として、命令情報を用いており、オブジェクトに指定された名前を対応付けた命名情報の一例として、名前とその名前が付けられた操作対象モデルとの対応情報を用いており、オブジェクトに生成命令を示す生成命令情報を対応付けた生成情報の一例として、命令情報とその命令情報が表す操作命令によって生成された操作対象モデルとの対応情報を用いている。また、操作命令情報を記録する操作命令情報記録部、命名情報を記録する命名情報記録部、生成情報を記録する生成情報記録部の一例として、対象オブジェクト管理部12を設けている。
【0026】
尚、図では、対象オブジェクト記憶部11と対象オブジェクト管理部12とのペアを1つだけ示したが、クラスのインスタンスの数だけ、このペアは設けられるものとする。
【0027】
操作インターフェイス部13は、対象オブジェクトに対応する操作対象モデルと、対象オブジェクトに対して予め定義された操作命令の一覧とを表示機構90d(図14参照)に表示する。また、キーボード/マウス90iで一覧の中から選択された操作命令を受け付ける。ここで、操作命令には、対象オブジェクトに命名する命令が含まれる。操作対象モデルが作業中の対象オブジェクトの状態を表すので、操作インターフェイス部13は、作業中の対象オブジェクトに暫定の名前を付けてこれを表示する。言い換えると、対象オブジェクトに名前が付いていることを表示するように操作対象モデルが指示してくるので、対象オブジェクトが文字列“xxx”である場合に、対象オブジェクトに名前が付いていなければ単に“xxx”と表示し、対象オブジェクトにnamexという名前が付いていればnamex = “xxx”と表示する。本実施の形態では、操作命令を受け付ける受付部の一例として、操作インターフェイス部13を設けている。
【0028】
実行履歴記憶部14は、操作命令が実行される都度、実行履歴を記憶する。
コード生成部15は、実行履歴記憶部14に記憶された実行履歴をプログラムコードに変換する。本実施の形態では、操作命令情報を順次取得する取得部、コードを生成する生成部の一例として、コード生成部15を設けている。
コード表示部16は、コード生成部15が生成したプログラムコードを表示機構90d(図14参照)に出力する。本実施の形態では、コードを表示する表示部の一例として、コード表示部16を設けている。
【0029】
また、実行履歴記憶部14は、命令実行順序表21と、名前−モデルマッピング表22と、命令情報−モデルマッピング表23とを記憶する。
命令実行順序表21は、操作命令が実行される都度生成された命令情報を実行された順に保持する表形式のデータである。
名前−モデルマッピング表22は、操作対象モデルに付けられた名前と、操作対象モデルとの対応情報を保持する表形式のデータである。
命令情報−モデルマッピング表23は、命令情報と、その命令情報によって生成された操作対象モデルとの対応情報を保持する表形式のデータである。
【0030】
尚、これらの機能のうち、対象オブジェクト管理部12、操作インターフェイス部13、コード生成部15、及び、コード表示部16は、CPU90a(図14参照)が磁気ディスク装置90g(図14参照)に記憶されたプログラムをメインメモリ90c(図14参照)に読み込んで実行することにより実現される。また、対象オブジェクト記憶部11及び実行履歴記憶部14は、例えば磁気ディスク装置90g(図14参照)により実現される。
【0031】
[プログラム生成装置の概略動作(1)]
図2は、プログラム生成装置の第1の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部12が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
【0032】
まず、ユーザは、java.lang.StringクラスのインスタンスAとして文字列“指定された文字列”を生成する(ステップ1)。
【0033】
次に、ユーザは、ステップ1で生成されたjava.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXを生成する(ステップ2)。
そして、ステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名を指示する(ステップ3)。
【0034】
次いで、ユーザは、java.lang.StringクラスのインスタンスBとして文字列“指定された別文字列”を生成する(ステップ4)。
そして、ステップ4で生成されたjava.lang.StringクラスのインスタンスBへの“newTitle”の命名を指示する(ステップ5)。
【0035】
その後、ユーザは、ステップ4で生成されたjava.lang.StringクラスのインスタンスBをステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行する(ステップ6)。
また、ステップ1で生成されたjava.lang.StringクラスのインスタンスAをステップ2で生成されたjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行する(ステップ7)。
【0036】
図3は、図2に示したユーザ操作における各ステップの操作が行われたときに生成されるプログラムコードについて説明するための図である。尚、図では、実際には表出されないコードも、説明の便宜上、破線で囲んで示している。
【0037】
まず、コード301は、java.lang.StringクラスのインスタンスAを生成するコードである。ステップ1の操作が行われた時点で、java.lang.StringクラスのインスタンスAは生成されたが命名されていないので、コード301は表出されない。
【0038】
また、コード302,303は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXを生成するコードである。ステップ2の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは生成されたが命名されていないので、コード302は表出されない。一方、ステップ3の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているので、コード303は表出される。ここで、java.lang.StringクラスのインスタンスAは命名されていないので、“指定された文字列”がインライン展開されている。
【0039】
更に、コード304,305は、java.lang.StringクラスのインスタンスBを生成するコードである。ステップ4の操作が行われた時点で、java.lang.StringクラスのインスタンスBは生成されたが命名されていないので、コード304は表出されない。一方、ステップ5の操作が行われた時点で、java.lang.StringクラスのインスタンスBは命名されているので、コード305は表出される。
【0040】
また、コード306は、java.lang.StringクラスのインスタンスBをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ6の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXもjava.lang.StringクラスのインスタンスBも命名されているので、これらのインスタンスが変数として書き出されたコード306が表出される。
更に、コード307は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ7の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているが、java.lang.StringクラスのインスタンスAは命名されていないので、前者のインスタンスだけが変数として書き出され、後者のインスタンスとしては“指定された文字列”がインライン展開されたコード307が書き出される。
【0041】
このように、java.lang.StringクラスのインスタンスAは、命名されていないので、常に値として扱われる。つまり、プログラム上では、このインスタンスが出現する都度、このインスタンスを格納する領域がメモリ空間に確保され、その領域は不要になれば捨てられる。
一方、java.lang.StringクラスのインスタンスBは、java.lang.StringクラスのインスタンスAと同じ文字列であるが、命名されているので、変数としてアクセスする対象となっている。
【0042】
[プログラム生成装置の概略動作(2)]
図4は、プログラム生成装置の第2の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部12が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
まず、ユーザは、図2のステップ1〜ステップ7で示した操作を行う。
そして最後に、ステップ1で生成されたjava.lang.StringクラスのインスタンスAへの“barTitle”の命名を指示する(ステップ8)。
【0043】
図5は、図4に示したユーザ操作における各ステップの操作が行われたときに生成されるプログラムコードについて説明するための図である。尚、図では、実際には表出されないコードも、説明の便宜上、破線で囲んで示している。
【0044】
まず、コード351,358は、java.lang.StringクラスのインスタンスAを生成するコードである。ステップ1の操作が行われた時点で、java.lang.StringクラスのインスタンスAは生成されたが命名されていないので、コード351は表出されない。一方、ステップ8でjava.lang.StringクラスのインスタンスAに“barTitle”と命名した時点で、このインスタンスの生成ポイントに宣言文であるコード358が発生する。
【0045】
また、コード352,353は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXを生成するコードである。ステップ2の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは生成されたが命名されていないので、コード352は表出されない。一方、ステップ3の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているので、コード353は表出される。ここで、java.lang.StringクラスのインスタンスAは、ステップ3の操作が行われた時点では命名されていなかったので図3のようにインライン展開されたが、ステップ8で“barTitle”と命名されると、変数として書き出される。
【0046】
更に、コード354,355は、java.lang.StringクラスのインスタンスBを生成するコードである。ステップ4の操作が行われた時点で、java.lang.StringクラスのインスタンスBは生成されたが命名されていないので、コード354は表出されない。一方、ステップ5の操作が行われた時点で、java.lang.StringクラスのインスタンスBは命名されているので、コード355は表出される。
【0047】
また、コード356は、java.lang.StringクラスのインスタンスBをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ6の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXもjava.lang.StringクラスのインスタンスBも命名されているので、これらのインスタンスが変数として書き出されたコード356が表出される。
更に、コード357は、java.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドを実行するコードである。ステップ7の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスXは命名されているが、java.lang.StringクラスのインスタンスAは命名されていなかったので、前者のインスタンスだけが変数として書き出され、後者のインスタンスは図3のようにインライン展開された。しかし、後者のインスタンスも、ステップ8で“barTitle”と命名されると、変数として書き出される。
【0048】
このように、java.lang.StringクラスのインスタンスAに後から命名した場合であっても、その命名がプログラムコード全体に反映され、変数として扱うことができる。
【0049】
[プログラム生成装置の動作]
プログラム生成装置10は、大きく分けて以下の2つの動作を行う。
第一に、操作インターフェイス部13での対象オブジェクトに対する操作に応じた動作である。この操作中に必要に応じて対象オブジェクトに対する命名操作が行われるので、その命名操作に応じた動作も行う。
第二に、最新のプログラムコードを生成して表示画面に表示する動作である。
以下、この2つの動作について順に説明する。
【0050】
(対象オブジェクト操作時の動作)
ユーザの指示により操作インターフェイス部13が対象オブジェクト管理部12に操作命令を伝えると、対象オブジェクト管理部12はこの操作命令に基づく動作を行う。ここで、操作命令は、関数の実行、フィールド値の取得、配列要素の取り出し等の操作命令に加えて、特に、対象オブジェクトに対する命名命令を含むものとする。
【0051】
図6は、このときの対象オブジェクト管理部12の動作例を示したフローチャートである。
図示するように、まず、対象オブジェクト管理部12は、操作インターフェイス部13から伝えられた操作命令を表す命令情報を生成する(ステップ101)。
次に、対象オブジェクト管理部12は、操作インターフェイス部13から伝えられた操作命令が対象オブジェクトに対する命名命令であるかどうかを判定する(ステップ102)。
【0052】
その結果、伝えられた操作命令が対象オブジェクトに対する命名命令であると判定されれば、対象オブジェクト管理部12は、対象オブジェクトに対しては何もせず、命名された名前と、対象オブジェクトに対応する操作対象モデルとの対応を、名前−モデルマッピング表22に登録する(ステップ103)。そして、ステップ101で生成した命令情報を命令実行順序表21に追加する(ステップ108)。
【0053】
一方、伝えられた操作命令が対象オブジェクトに対する命名命令でないと判定されれば、対象オブジェクト管理部12は、ステップ101で生成した命令情報により、対象オブジェクトに対して操作を実行する(ステップ104)。そして、操作を実行した結果として新たなオブジェクトが生成されるかどうかを判定する(ステップ105)。尚、このように新たなオブジェクトを生成する生成命令としては、例えば、宣言命令、コンストラクタ命令がある。
【0054】
ここで、新たなオブジェクトが生成されると判定されれば、対象オブジェクト管理部12は、この新たなオブジェクトを包むラッパーオブジェクトである新たな操作対象モデルを生成し、この新たな操作対象モデルに新たな対象オブジェクトを参照させる(ステップ106)。また、この新たな操作対象モデルがステップ101で生成された命令情報によって作成されたことを、命令情報−モデルマッピング表23に登録する(ステップ107)。そして、ステップ101で生成した命令情報を命令実行順序表21に追加する(ステップ108)。
【0055】
また、新たなオブジェクトが生成されないと判定されれば、対象オブジェクト管理部12は、新たな操作対象モデルの生成や命令情報−モデルマッピング表23への情報の登録を行うことなく、ステップ101で生成した命令情報を命令実行順序表21に追加する(ステップ108)。
【0056】
ここで、上記動作により命令実行順序表21、名前−モデルマッピング表22、命令情報−モデルマッピング表23に登録される情報の内容について説明する。尚、ここでは、図2に示したユーザ操作が行われた場合を例にとって説明する。
【0057】
図7は、図2に示したユーザ操作に応じて上記動作が行われた場合の命令実行順序表21の登録内容の例を示した図である。
図示するように、命令実行順序表21には、順序情報と命令情報との対応が登録される。ここで、順序情報は、対応する命令情報で表される操作命令が何番目に実行されたものであるかを示す情報である。また、命令情報は、ユーザが指示した操作命令を表す情報であり、(操作対象モデル,命令,引数)という書式で示す。但し、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【0058】
図2に示したユーザ操作では、まず、ステップ1でjava.lang.StringクラスのインスタンスAとして文字列“指定された文字列”が生成されたので、順序情報“1”と命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)との対応が登録されている。
【0059】
次に、ステップ2でjava.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスXが生成されたので、順序情報“2”と命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)との対応が登録されている。
そして、ステップ3でjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名が指示されたので、順序情報“3”と命令情報(javax.swing.JFrameクラスのインスタンスX,命名,“fooFrame”)との対応が登録されている。
【0060】
次いで、ステップ4でjava.lang.StringクラスのインスタンスBとして文字列“指定された別文字列”が生成されたので、順序情報“4”と命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)との対応が登録されている。
そして、ステップ5でjava.lang.StringクラスのインスタンスBへの“newTitle”の命名が指示されたので、順序情報“5”と命令情報(java.lang.StringクラスのインスタンスB,命名,“newTitle”)との対応が登録されている。
【0061】
その後、ステップ6でjava.lang.StringクラスのインスタンスBをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドが実行されたので、順序情報“6”と命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスB)との対応が登録されている。
また、ステップ7でjava.lang.StringクラスのインスタンスAをjavax.swing.JFrameクラスのインスタンスXに与えてsetTitleメソッドが実行されたので、順序情報“7”と命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスA)との対応が登録されている。
【0062】
図8は、図2に示したユーザ操作に応じて上記動作が行われた場合の名前−モデルマッピング表22の登録内容の例を示した図である。
図示するように、名前−モデルマッピング表22には、名前と操作対象モデルとの対応が登録される。ここで、名前は、命名命令によって対象オブジェクトへの命名が指示された名前である。また、操作対象モデルは、その名前の命名が指示された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【0063】
図2に示したユーザ操作では、ステップ3でjavax.swing.JFrameクラスのインスタンスXへの“fooFrame”の命名が指示されたので、名前“fooFrame”と操作対象モデル“javax.swing.JFrameクラスのインスタンスX”との対応が登録されている。
また、ステップ5でjava.lang.StringクラスのインスタンスBへの“newTitle”の命名が指示されたので、名前“newTitle”と操作対象モデル“java.lang.StringクラスのインスタンスB”との対応が登録されている。
【0064】
図9は、図2に示したユーザ操作に応じて上記動作が行われた場合の命令情報−モデルマッピング表23の登録内容の例を示した図である。
図示するように、命令情報−モデルマッピング表23には、命令情報と操作対象モデルとの対応が登録される。ここで、命令情報は、対象オブジェクトを生成した操作命令を表す情報である。また、操作対象モデルは、その命令情報が表す操作命令によって生成された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【0065】
図2に示したユーザ操作では、ステップ1でjava.lang.StringクラスのインスタンスAが生成されたので、命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)と操作対象モデル“java.lang.StringクラスのインスタンスA”との対応が登録されている。
また、ステップ2でjavax.swing.JFrameクラスのインスタンスXが生成されたので、命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)と操作対象モデル“javax.swing.JFrameクラスのインスタンスX”との対応が登録されている。
更に、ステップ4でjava.lang.StringクラスのインスタンスBが生成されたので、命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)と操作対象モデル“java.lang.StringクラスのインスタンスB”の対応が登録されている。
【0066】
(プログラムコード生成時の動作)
ユーザが例えば図2に示すような操作を行った後、プログラムコードの生成を指示すると、コード生成部15はプログラムコードを生成する動作を行う。或いは、コンピュータの指示により、コード生成部15はプログラムコードを生成する動作を行ってもよい。
コード生成部15は、動作を開始すると、まず、コードが格納されていないコードバッファを用意する。
【0067】
また、コード生成部15は、名前−モデルマッピング表22に登録されている操作対象モデルを作成した命令を命令情報−モデルマッピング表23にて調べ、命令実行順序表21上で、その操作対象モデルを作成した命令を削除し、その操作対象モデルを命名した命令をその位置に移動する。
【0068】
図10は、このときの命令実行順序表21の登録内容の例を示した図である。
まず、図8の名前−モデルマッピング表22を参照すると、この表に登録されている操作対象モデルは“javax.swing.JFrameクラスのインスタンスX”及び“java.lang.StringクラスのインスタンスB”である。次に、図9の命令情報−モデルマッピング表23を参照すると、これらを生成した命令情報はそれぞれ(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)及び(java.lang.Stringクラス,宣言,“指定された別文字列”)である。従って、図7の命令実行順序表21に対して、順序情報“2”のレコードを削除して順序情報“3”のレコードをその位置に移動させ、かつ、順序情報“4”のレコードを削除して順序情報“5”のレコードがその位置に移動させる変更を施すことにより、図10の命令実行順序表21を生成する。尚、ここで命名された操作対象モデルを生成する命令情報を削除したことは、操作命令情報がオブジェクトを生成する生成命令を示す場合にコードを生成しないことの一例である。
【0069】
さて、このような準備が整うと、コード生成部15は、実際にプログラムコードを生成する処理に移る。
図11は、このときのコード生成部15の動作例を示したフローチャートである。
図示するように、コード生成部15は、まず、命令実行順序表21から命令情報の総数を得て、この命令情報の総数を、処理中の命令情報の位置をカウントする変数iに代入する(ステップ121)。
次に、コード生成部15は、変数iを1ずつ減らしながら0になるまで、ステップ122〜132の処理を繰り返し実行する。以下、変数iについてのステップ122〜132の処理内容について説明する。
【0070】
最初に、コード生成部15は、命令実行順序表21で最初からi番目にある命令情報、つまり、順序情報iに対応する命令情報を取り出す(ステップ122)。そして、操作対象モデルに命名する命令を表す命令情報が取り出されたかどうかを判定する(ステップ123)。
【0071】
その結果、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定されれば、コード生成部15は、まず、変数名宣言コード断片を生成する(ステップ124)。ここで、変数名宣言コード断片とは、変数名を宣言するためのコード断片であり、例えば、Stringクラスの変数“newTitle”を宣言する場合は、“String newTitle”という文字列が該当する。
【0072】
次に、コード生成部15は、命令情報における操作対象モデルを生成した命令情報を、命令情報−モデルマッピング表23から取り出す(ステップ125)。
そして、コード生成部15は、命令情報コード化処理を呼び出し、コード断片を取得する(ステップ126)。尚、この命令情報コード化処理の呼び出しは、ステップ125で取り出した操作対象モデルを生成した命令情報(モデル生成命令情報)をパラメータとして行われる。このパラメータはステップ126の括弧内にも示している。また、命令情報コード化処理から返されるコード断片は、命令や値等を表すものであり、図2の例で言えば、“new javax.swing.JFrame(“指定された文字列”)”、“指定された別文字列”が該当する。以下、命令情報コード化処理から返されたコード断片は、命令情報コード化処理を呼ぶことで得られたコード断片という意味で「命令情報コード断片」と称する。
【0073】
次いで、コード生成部15は、ステップ124で生成した変数名宣言コード断片と、ステップ126で取得した命令情報コード断片とを代入記号で結ぶことにより、プログラムコードの行であるコード行を生成する(ステップ127)。
【0074】
一方、ステップ123にて、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定されれば、コード生成部15は、操作対象モデルを生成する命令を表す命令情報が取り出されたかどうかを判定する(ステップ128)。
【0075】
そして、操作対象モデルを生成する命令を表す命令情報が取り出されたと判定されれば、コード生成部15は、その操作対象モデルが命名されておらず、後続の命令情報(命令実行順序表21でより大きな順序情報に対応付けられた命令情報)において参照されているかどうか(命令情報における操作対象モデル又は引数となっているかどうか)を判定する(ステップ129)。その操作対象モデルが命名されておらず、後続の命令で参照されていると判定されれば、コード生成部15は、名称が未決定の状態で操作対象モデルがコード化されたことを示す参照カウンタCNTに1を加算する(ステップ130)。
【0076】
また、ステップ128にて、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定された場合、又は、ステップ129にて、その操作対象モデルが命名されている、若しくは、後続の命令で参照されていない、と判定された場合、コード生成部15は、命令情報コード化処理を呼び出し、命令情報コード断片を取得する(ステップ131)。尚、この命令情報コード化処理の呼び出しは、ステップ122で取り出したi番目の命令情報をパラメータとして行われる。このパラメータはステップ131の括弧内にも示している。また、命令情報コード化処理から返される命令情報コード断片は、命令を表すものであり、図2の例で言えば、“fooFrame.setTitle(newTitle)”等が該当する。即ち、ここで得られる命令情報コード断片は、プログラムコードの行であるコード行である。
【0077】
その後、コード生成部15は、コードバッファの最初の行として、ステップ127又はステップ131で得られたコード行を追加する(ステップ132)。尚、ステップ130が実行された場合は、コード行は得られていないので、コードバッファには何も追加しない。
【0078】
そして、上述したように、コード生成部15は、変数iを1ずつ減らしながら0になるまで以上の処理を繰り返すので、コード生成部15は、処理中の命令情報の位置をカウントする変数iを1カウントダウンし(ステップ133)、カウントダウンしたことにより変数iが0になったかどうかを判定する(ステップ134)。その結果、コード生成部15は、変数iが0になっていなければ、ステップ122へ処理を進めるが、変数iが0になっていれば、コードバッファに格納された全てのコードと、操作対象モデルごとの参照カウンタCNTの値とをコード表示部16に出力する(ステップ135)。
【0079】
これにより、コード表示部16は、コード生成部15により生成されたコードを表示機構90d(図14参照)に表示する。その際、予め定められた閾値(例えば2)以上になっている参照カウンタCNTに対応する操作対象モデルに命名することを推奨する情報も表示する。
【0080】
ここで、図11のステップ126,131、又は、後述する図13のステップ165で呼び出される命令情報コード化処理について詳細に説明する。
図12は、命令情報コード化処理の流れを示したフローチャートである。
図示するように、コード生成部15は、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報であるかどうかを判定する(ステップ141)。ここで、宣言命令とは、操作対象モデルを宣言する命令であり、図2の例で言えば、命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)で表される命令が該当する。
【0081】
まず、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報でないと判定された場合について述べる。この場合、コード生成部15は、渡された命令情報がコンストラクタ命令を表す命令情報であるかどうかを判定する(ステップ142)。ここで、コンストラクタ命令とは、対象オブジェクトを生成するときに実行する命令であり、図2の例で言えば、命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)で表される命令が該当する。
【0082】
その結果、渡された命令情報がコンストラクタ命令を表す命令情報でないと判定されれば、コード生成部15は、モデルコード化処理を呼び出す(ステップ143)。尚、このモデルコード化処理の呼び出しは、渡された命令情報における操作対象モデルをパラメータとして行われる。このパラメータはステップ143の括弧内にも示している。また、モデルコード化処理から返されるコード断片は、変数名や値等を表すものであり、図2の例で言えば、“fooFrame”等が該当する。以下、モデルコード化処理から返されたコード断片は、モデルコード化処理を呼ぶことで得られたコード断片という意味で「モデルコード断片」と称する。但し、ここで返されたコード断片は、操作対象モデルをパラメータとしてモデルコード化処理を呼ぶことで得られたコード断片であるので、特に「操作対象モデルコード断片」と称する。
【0083】
一方、渡された命令情報がコンストラクタ命令を表す命令情報であると判定されれば、コード生成部15は、コンストラクタ部分のコード断片(コンストラクタコード断片)を生成する(ステップ144)。ここで、コンストラクタコード断片は、図2の例で言えば、“new javax.swing.Jframe(”及び“)”が該当する。
【0084】
その後、コード生成部15は、渡された命令情報に引数があるかどうかを判定する(ステップ145)。
ここで、渡された命令情報に引数がないと判定されれば、何もしないが、渡された命令情報に引数があると判定されれば、コード生成部15は、モデルコード化処理を呼び出す(ステップ146)。尚、このモデルコード化処理の呼び出しは、その引数をパラメータとして行われる。このパラメータはステップ146の括弧内にも示している。また、モデルコード化処理から返されるモデルコード断片は、変数名や値等を表すものであり、図2の例で言えば、“指定された文字列”等が該当する。但し、ここで返されたコード断片は、引数をパラメータとしてモデルコード化処理を呼ぶことで得られたコード断片であるので、特に「引数コード断片」と称する。
【0085】
そして、コード生成部15は、操作対象モデルコード断片と命令内容と引数コード断片とを組み合わせることにより、又は、コンストラクタコード断片と引数コード断片とを組み合わせることにより、命令情報コード断片を生成し、これを返す(ステップ147)。ここで、例えば、操作対象モデルコード断片が“fooFrame”、引数コード断片が“指定された文字列”、命令内容が“setTitle”であるすると、命令情報コード断片は“fooFrame.setTitle(“指定された文字列”)”となる。尚、このステップ147は、渡された命令情報がコンストラクタ命令を表す命令情報であると判定された場合や、渡された命令情報に引数がないと判定された場合にも実行されるものとして設けたが、これらの場合にはそれぞれの場合に適したステップを別に設けてもよい。
【0086】
次に、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報であると判定された場合について述べる。この場合、コード生成部15は、値を表す命令情報コード断片又はクラス参照を表す命令情報コード断片を生成し、これを返す(ステップ148)。ここで、値を表す命令情報コード断片は、例えば、“指定された文字列”、“1”、“−1”である。また、クラス参照を表す命令情報コード断片は、例えば、“java.lang.String”である。
【0087】
ここで、図12のステップ143,146で呼び出されるモデルコード化処理について詳細に説明する。
図13は、モデルコード化処理の流れを示したフローチャートである。
図示するように、コード生成部15は、名前−モデルマッピング表22を参照し、呼び出されるときに渡された対象(操作対象モデル又は引数)に名前が付いているかどうかを確認し(ステップ161)、対象が命名済みかどうかを判定する(ステップ162)。
【0088】
その結果、対象が命名済みであると判定されれば、コード生成部15は、対象に付けられた変数名を表すモデルコード断片を生成し、これを返す(ステップ163)。ここで、変数名を表すモデルコード断片は、例えば、“fooFrame”である。
【0089】
一方、対象が命名済みでないと判定されれば、コード生成部15は、まず、対象を生成した命令情報を命令情報−モデルマッピング表23から取り出す(ステップ164)。
次に、コード生成部15は、命令情報コード化処理を呼び出し、命令情報コード断片を取得する(ステップ165)。尚、この命令情報コード化処理の呼び出しは、ステップ164で取り出した対象を生成した命令情報をパラメータとして行われる。このパラメータはステップ165の括弧内にも示している。また、命令情報コード化処理から返される命令情報コード断片は、命令、値等を表すものであり、図2の例で言えば、“指定された文字列”等が該当する。
次いで、コード生成部15は、名称が未決定の状態で対象がコード化されたことを示す参照カウンタCNTに1を加算する(ステップ166)。
その後、コード生成部15は、ステップ165で取得した命令情報コード断片をモデルコード断片として返す(ステップ167)。
【0090】
(プログラムコード生成時の動作の具体例)
ここでは、図10に示した命令実行順序表21の各行の命令情報を図11のステップ122で取り出した場合のステップ123〜132の動作(図12及び図13の各ステップの動作を含む)について、具体的に説明する。
【0091】
(1)順序情報“5”に対応する命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスA)を取り出した場合
図11において、コード生成部15は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ131で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0092】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表さないと判定し、ステップ142で、この命令情報がコンストラクタ命令を表さないと判定し、ステップ143で、この命令情報における操作対象モデル“javax.swing.JFrameクラスのインスタンスX”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスX”に名前が付いているかどうかを確認し、ステップ162で、“fooFrame”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
【0093】
これにより、図12に戻り、コード生成部15は、ステップ145で、命令情報コード化処理が呼び出されたときのパラメータである命令情報に引数があると判定し、ステップ146で、この命令情報における引数“java.lang.StringクラスのインスタンスA”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスA”に名前が付いているかどうかを確認し、ステップ162で、命名済みでないと判定し、ステップ164で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ165で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された文字列”を返す。
これにより、図13に戻り、コード生成部15は、ステップ166で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算し、ステップ167で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
【0094】
これにより、図12に戻り、コード生成部15は、ステップ147で、命令情報コード断片“fooFrame.setTitle(“指定された文字列”)”を返す。
これにより、図11に戻り、コード生成部15は、ステップ132で、コード行“fooFrame.setTitle(“指定された文字列”)”をコードバッファの最初の行に追加する。
【0095】
(2)順序情報“4”に対応する命令情報(javax.swing.JFrameクラスのインスタンスX,setTitleメソッド,java.lang.StringクラスのインスタンスB)を取り出した場合
図11において、コード生成部15は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ131で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0096】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表さないと判定し、ステップ142で、この命令情報がコンストラクタ命令を表さないと判定し、ステップ143で、この命令情報における操作対象モデル“javax.swing.JFrameクラスのインスタンスX”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスX”に名前が付いているかどうかを確認し、ステップ162で、“fooFrame”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
【0097】
これにより、図12に戻り、コード生成部15は、ステップ145で、命令情報コード化処理が呼び出されたときのパラメータである命令情報に引数があると判定し、ステップ146で、この命令情報における引数“java.lang.StringクラスのインスタンスB”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスB”に名前が付いているかどうかを確認し、ステップ162で、“newTitle”と命名済みであると判定し、ステップ163で、変数名を表すモデルコード断片“newTitle”を返す。ここで、“newTitle”は、引数オブジェクトに対応付けられた名前の一例である。
【0098】
これにより、図12に戻り、コード生成部15は、ステップ147で、命令情報コード断片“fooFrame.setTitle(newTitle)”を返す。
これにより、図11に戻り、コード生成部15は、ステップ132で、コード行“fooFrame.setTitle(newTitle)”をコードバッファの最初の行に追加する。
【0099】
(3)順序情報“3”に対応する命令情報(java.lang.StringクラスのインスタンスB,命名,“newTitle”)を取り出した場合
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ124で、変数名宣言コード断片“String newTitle =”を生成し、ステップ125で、操作対象モデル“java.lang.StringクラスのインスタンスB”を生成した命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ126で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0100】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された別文字列”を返す。
【0101】
これにより、図11に戻り、コード生成部15は、ステップ127で、コード行“String newTitle = “指定された別文字列””を生成し、ステップ132で、このコード行をコードバッファの最初の行に追加する。
【0102】
(4)順序情報“2”に対応する命令情報(javax.swing.JFrameクラスのインスタンスX,命名,“fooFrame”)を取り出した場合
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ124で、変数名宣言コード断片“javax.swing.JFrame fooFrame =”を生成し、ステップ125で、操作対象モデル“javax.swing.JFrameクラスのインスタンスX”を生成した命令情報(javax.swing.JFrameクラス,コンストラクタ,java.lang.StringクラスのインスタンスA)を命令情報−モデルマッピング表23から取り出し、ステップ126で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【0103】
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表さないと判定し、ステップ142で、この命令情報がコンストラクタ命令を表すと判定し、ステップ144で、コンストラクタコード断片“new javax.swing.JFrame(”及び“)”を生成し、ステップ145で、この命令情報に引数があると判定し、ステップ146で、この命令情報における引数“java.lang.StringクラスのインスタンスA”をパラメータとしてモデルコード化処理を呼び出す。
すると、図13において、コード生成部15は、ステップ161で、名前−モデルマッピング表22を参照し、引数“java.lang.StringクラスのインスタンスA”に名前が付いているかどうかを確認し、ステップ162で、命名済みでないと判定し、ステップ164で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を命令情報−モデルマッピング表23から取り出し、ステップ165で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図12において、コード生成部15は、ステップ141で、この命令情報が宣言命令を表すと判定し、ステップ148で、命令情報コード断片“指定された文字列”を返す。
これにより、図13に戻り、コード生成部15は、ステップ166で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算し、ステップ167で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
【0104】
これにより、図12に戻り、コード生成部15は、ステップ147で、命令情報コード断片“new javax.swing.JFrame(“指定された文字列”)”を返す。
これにより、図11に戻り、コード生成部15は、ステップ127で、コード行“javax.swing.JFrame fooFrame = new javax.swing.JFrame(“指定された文字列”)”を生成し、ステップ132で、このコード行をコードバッファの最初の行に追加する。
【0105】
(5)順序情報“1”に対応する命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を取り出した場合
図11において、コード生成部15は、ステップ123で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ128で、操作対象モデルを生成する命令を表す命令情報が取り出されたと判定し、ステップ129で、操作対象モデル“java.lang.StringクラスのインスタンスA”が命名されておらず、後続の命令情報で参照されていると判定し、ステップ130で、操作対象モデル“java.lang.StringクラスのインスタンスA”に対する参照カウンタCNTに1を加算する。
【0106】
そして、上記(1)〜(5)に示した処理を行うことにより、図3に示したプログラムコードが生成される。
【0107】
尚、ここでは、図2に示したユーザ操作が行われた場合におけるプログラム生成装置10の動作の具体例について述べたが、図4に示したユーザ操作が行われた場合におけるプログラム生成装置10の動作は次のようになる。
【0108】
即ち、まず、対象オブジェクト管理部12が、命令実行順序表21に、図7に示した情報に加えて、順序情報“8”の命令情報(java.lang.StringクラスのインスタンスA,命名,“barTitle”)を登録し、名前−モデルマッピング表22に、図8に示した情報に加えて、名前“barTitle”と操作対象モデル“java.lang.StringクラスのインスタンスA”との対応情報を登録する。これにより、コード生成部15は、命令実行順序表21において、順序情報“1”に対応する命令情報(java.lang.Stringクラス,宣言,“指定された文字列”)を削除し、順序情報“8”に対応する命令情報(java.lang.StringクラスのインスタンスA,命名,“barTitle”)を順序情報“1”の位置に移動しておく。
【0109】
次に、上記(1)〜(4)に示したのと同様の処理を行う。図2のユーザ操作が行われた場合の処理と、図4のユーザ操作が行われた場合の処理との違いは、前者においては、図13のステップ162で“java.lang.StringクラスのインスタンスA”が命名済みでないと判定し、ステップ164〜167を実行することでモデルコード断片“指定された文字列”を取得していたのに対し、後者においては、図13のステップ162で“java.lang.StringクラスのインスタンスA”が命名済みであると判定し、ステップ163を実行することでモデルコード断片“barTitle”を取得している点である。
その後、上記(5)の代わりに、順序情報“1”に対応する命令情報(java.lang.StringクラスのインスタンスA,命名,“barTitle”)を取り出した場合の処理を行う。
このような処理を行うことにより、図5に示したプログラムコードが生成される。
【0110】
尚、本実施の形態では、Java(登録商標)のVM(Virtual Machine)内のオブジェクトを操作対象として説明したが、本発明で操作対象とするオブジェクトは、これに限られるものではない。
【0111】
このように、本実施の形態では、対象オブジェクトに対する命名を、機械的に行うのではなく、外部から名前を受け付けて行うようにした。これにより、対象オブジェクトが命名された場合にのみ、プログラムコード上で変数宣言が発生するので、理解困難な変数宣言が行われなくなる。言い換えると、対象オブジェクトが命名されない場合は、不要な変数宣言が省略されるので、より可読性の高いプログラムコードを生成できるようになった。
また、本実施の形態では、後で使われない対象オブジェクトに対して命名しないことを許容した。これにより、自然に記述したプログラムコードにより近いプログラムコードを生成できるようになった。
【0112】
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。図14は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるCPU(Central Processing Unit)90aと、M/B(マザーボード)チップセット90bを介してCPU90aに接続されたメインメモリ90cと、同じくM/Bチップセット90bを介してCPU90aに接続された表示機構90dとを備える。また、M/Bチップセット90bには、ブリッジ回路90eを介して、ネットワークインターフェイス90fと、磁気ディスク装置(HDD)90gと、音声機構90hと、キーボード/マウス90iと、フレキシブルディスクドライブ90jとが接続されている。
【0113】
尚、図14において、各構成要素は、バスを介して接続される。例えば、CPU90aとM/Bチップセット90bの間や、M/Bチップセット90bとメインメモリ90cの間は、CPUバスを介して接続される。また、M/Bチップセット90bと表示機構90dとの間は、AGP(Accelerated Graphics Port)を介して接続されてもよいが、表示機構90dがPCI Express対応のビデオカードを含む場合、M/Bチップセット90bとこのビデオカードの間は、PCI Express(PCIe)バスを介して接続される。また、ブリッジ回路90eと接続する場合、ネットワークインターフェイス90fについては、例えば、PCI Expressを用いることができる。また、磁気ディスク装置90gについては、例えば、シリアルATA(AT Attachment)、パラレル転送のATA、PCI(Peripheral Components Interconnect)を用いることができる。更に、キーボード/マウス90i、及び、フレキシブルディスクドライブ90jについては、USB(Universal Serial Bus)を用いることができる。
【0114】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(CD−ROM)、コンパクトディスク−リード/ライト(CD−R/W)及びDVDが含まれる。
【0115】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【0116】
10…プログラム生成装置、11…対象オブジェクト記憶部、12…対象オブジェクト管理部、13…操作インターフェイス部、14…実行履歴記憶部、15…コード生成部、16…コード表示部、21…命令実行順序表、22…名前−モデルマッピング表、23…命令情報−モデルマッピング表
【特許請求の範囲】
【請求項1】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。
【請求項2】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、前記オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、前記オブジェクトを操作する前記コードを生成する、請求項1の装置。
【請求項3】
前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成する、請求項1又は請求項2の装置。
【請求項4】
前記生成部は、前記オブジェクトの値を用いて前記コードが生成された箇所の数を計数し、
前記表示部は、前記生成部により計数された前記箇所の数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項5】
前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項6】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項7】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項8】
前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項9】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトを生成する生成命令である場合に、当該オブジェクトに当該生成命令を示す生成命令情報を対応付けた生成情報を記録する生成情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記生成命令を示す場合には、前記コードを生成せず、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令が宣言命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いると共に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた当該生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において前記オブジェクトに対応付けられた前記生成命令情報に基づいて得られた前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた前記生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。
【請求項10】
前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている第1の状況が発生すれば、当該第1の状況の発生数である第1の発生数を計数し、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない第2の状況が発生すれば、当該第2の状況の発生数である第2の発生数を計数し、
前記表示部は、前記生成部により計数された前記第1の発生数と前記第2の発生数との和が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項9の装置。
【請求項11】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第3の状況が発生すれば、当該第3の状況の発生数である第3の発生数を計数し、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第4の状況が発生すれば、当該第4の状況の発生数である第4の発生数を計数し、
前記表示部は、前記生成部により計数された前記第3の発生数と前記第4の発生数との和が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項10の装置。
【請求項12】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する方法であって、
ユーザが入力した前記操作命令を受け付けるステップと、
受け付けた前記操作命令を示す操作命令情報を記録するステップと、
受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録するステップと、
前記プログラムのコードの生成指示に応じて、記録された前記操作命令情報を順次取得するステップと、
取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成するステップと、
生成された前記コードを表示するステップと
を含む、方法。
【請求項13】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
として機能させる、プログラム。
【請求項1】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。
【請求項2】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、前記オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、前記オブジェクトを操作する前記コードを生成する、請求項1の装置。
【請求項3】
前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成する、請求項1又は請求項2の装置。
【請求項4】
前記生成部は、前記オブジェクトの値を用いて前記コードが生成された箇所の数を計数し、
前記表示部は、前記生成部により計数された前記箇所の数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項5】
前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項6】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項7】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項8】
前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項1乃至請求項3の何れかの装置。
【請求項9】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトを生成する生成命令である場合に、当該オブジェクトに当該生成命令を示す生成命令情報を対応付けた生成情報を記録する生成情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記生成命令を示す場合には、前記コードを生成せず、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令が宣言命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いると共に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた当該生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において前記オブジェクトに対応付けられた前記生成命令情報に基づいて得られた前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた前記生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。
【請求項10】
前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている第1の状況が発生すれば、当該第1の状況の発生数である第1の発生数を計数し、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない第2の状況が発生すれば、当該第2の状況の発生数である第2の発生数を計数し、
前記表示部は、前記生成部により計数された前記第1の発生数と前記第2の発生数との和が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項9の装置。
【請求項11】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第3の状況が発生すれば、当該第3の状況の発生数である第3の発生数を計数し、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第4の状況が発生すれば、当該第4の状況の発生数である第4の発生数を計数し、
前記表示部は、前記生成部により計数された前記第3の発生数と前記第4の発生数との和が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項10の装置。
【請求項12】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する方法であって、
ユーザが入力した前記操作命令を受け付けるステップと、
受け付けた前記操作命令を示す操作命令情報を記録するステップと、
受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録するステップと、
前記プログラムのコードの生成指示に応じて、記録された前記操作命令情報を順次取得するステップと、
取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成するステップと、
生成された前記コードを表示するステップと
を含む、方法。
【請求項13】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
として機能させる、プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2013−109675(P2013−109675A)
【公開日】平成25年6月6日(2013.6.6)
【国際特許分類】
【出願番号】特願2011−255577(P2011−255577)
【出願日】平成23年11月22日(2011.11.22)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
【復代理人】
【識別番号】100118201
【弁理士】
【氏名又は名称】千田 武
【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
【Fターム(参考)】
【公開日】平成25年6月6日(2013.6.6)
【国際特許分類】
【出願日】平成23年11月22日(2011.11.22)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
【復代理人】
【識別番号】100118201
【弁理士】
【氏名又は名称】千田 武
【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
【Fターム(参考)】
[ Back to top ]