(57)【特許請求の範囲】
【請求項１】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。
【請求項２】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、前記オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、前記オブジェクトを操作する前記コードを生成する、請求項１の装置。
【請求項３】
前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成する、請求項１又は請求項２の装置。
【請求項４】
前記生成部は、前記オブジェクトの値を用いて前記コードが生成された箇所の数を計数し、
前記表示部は、前記生成部により計数された前記箇所の数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項１乃至請求項３の何れかの装置。
【請求項５】
前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項１乃至請求項３の何れかの装置。
【請求項６】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項１乃至請求項３の何れかの装置。
【請求項７】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項１乃至請求項３の何れかの装置。
【請求項８】
前記生成部は、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていない状況が発生すれば、当該状況の発生数を計数し、
前記表示部は、前記生成部により計数された前記発生数が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項１乃至請求項３の何れかの装置。
【請求項９】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトを生成する生成命令である場合に、当該オブジェクトに当該生成命令を示す生成命令情報を対応付けた生成情報を記録する生成情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記生成命令を示す場合には、前記コードを生成せず、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令が宣言命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合には、当該操作命令情報に基づいて得られた当該オブジェクトの名前を用いると共に、前記命名情報記録部により当該コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを宣言する前記コードを生成し、前記命名情報記録部により前記コンストラクタ命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた当該生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを宣言する前記コードを生成し、
前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において前記オブジェクトに対応付けられた前記生成命令情報に基づいて得られた前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により当該他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていれば、当該命名情報において当該引数オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記他の操作命令の引数である引数オブジェクトについて前記命名情報が記録されていなければ、前記生成情報記録部により記録された前記生成情報において当該引数オブジェクトに対応付けられた前記生成命令情報に基づいて得られた当該引数オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
を含む、装置。
【請求項１０】
前記生成部は、前記取得部により取得された前記操作命令情報が前記生成命令を示す場合に、前記オブジェクトに名前が付けられておらず、当該オブジェクトが後続の前記操作命令で参照されている第１の状況が発生すれば、当該第１の状況の発生数である第１の発生数を計数し、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により前記命名情報が記録されていない第２の状況が発生すれば、当該第２の状況の発生数である第２の発生数を計数し、
前記表示部は、前記生成部により計数された前記第１の発生数と前記第２の発生数との和が予め定められた閾値以上である場合に、前記オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項９の装置。
【請求項１１】
前記生成部は、前記取得部により取得された前記操作命令情報が前記他の操作命令を示す場合に、前記命名情報記録部により当該他の操作命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第３の状況が発生すれば、当該第３の状況の発生数である第３の発生数を計数し、前記取得部により取得された前記操作命令情報が前記命名命令を示し、前記オブジェクトを生成した命令がコンストラクタ命令である場合に、前記命名情報記録部により当該コンストラクタ命令の引数である前記引数オブジェクトについて前記命名情報が記録されていない第４の状況が発生すれば、当該第４の状況の発生数である第４の発生数を計数し、
前記表示部は、前記生成部により計数された前記第３の発生数と前記第４の発生数との和が予め定められた閾値以上である場合に、前記引数オブジェクトに名前を付けることを推奨する情報を更に表示する、請求項１０の装置。
【請求項１２】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する方法であって、
ユーザが入力した前記操作命令を受け付けるステップと、
受け付けた前記操作命令を示す操作命令情報を記録するステップと、
受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録するステップと、
前記プログラムのコードの生成指示に応じて、記録された前記操作命令情報を順次取得するステップと、
取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成するステップと、
生成された前記コードを表示するステップと
を含む、方法。
【請求項１３】
オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
ユーザが入力した前記操作命令を受け付ける受付部と、
前記受付部にて受け付けた前記操作命令を示す操作命令情報を記録する操作命令情報記録部と、
前記受付部にて受け付けた前記操作命令が前記オブジェクトに名前を付ける命名命令である場合に、当該オブジェクトに当該命名命令で指定された名前を付けることなく、当該オブジェクトに当該指定された名前を対応付けた命名情報を記録する命名情報記録部と、
前記プログラムのコードの生成指示に応じて、前記操作命令情報記録部により記録された前記操作命令情報を順次取得する取得部と、
前記取得部により取得された前記操作命令情報が前記オブジェクトを生成する生成命令を示す場合には、前記コードを生成せず、前記取得部により取得された前記操作命令情報が前記命名命令を示す場合には、前記オブジェクトを宣言する前記コードを生成し、前記取得部により取得された前記操作命令情報が前記生成命令でもなく前記命名命令でもない他の操作命令を示す場合には、前記命名情報記録部により前記命名情報が記録されていれば、当該命名情報において前記オブジェクトに対応付けられた名前を用いて、当該オブジェクトを操作する前記コードを生成し、前記命名情報記録部により前記命名情報が記録されていなければ、前記オブジェクトの値を用いて、当該オブジェクトを操作する前記コードを生成する生成部と、
前記生成部により生成された前記コードを表示する表示部と
として機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの生成を支援する装置及び方法に関する。特に、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置及び方法に関する。
【背景技術】
【０００２】
従来から、ユーザが行った操作をマクロとして記録しておき、同じ操作を再現するプログラムのソースコード（以下、「プログラムコード」という）を自動生成するシステムが知られている。また、プログラムコードを自動生成する仕組みとしては、より高いレベルでグラフィカルにプログラムの設計を記述し、テンプレートを用いてプログラムの設計をより低いレベルのソースコードに変換するシステムが知られている。
【０００３】
ここで、プログラムコードを自動生成又は再生成する技術は、従来から知られていた（例えば、特許文献１〜４参照）。
特許文献１は、演算ブロックにおいて各種演算の演算順序を入力する各種設定入力部により入力された演算順序を、記憶装置が各種パラメータに関連付けて記憶し、記述された制御モデルに対応するプログラムコードを各種パラメータの入力順に生成するコード生成処理部が、記憶装置に記憶された演算順序を入力順として、プログラムコードを生成するプログラムコード生成装置を開示する。
【０００４】
特許文献２は、注釈モデル解析手段および注釈ソース生成手段をもつモデルコンパイル手段が設けられ、モデルコンパイル手段が、モデル情報またはソースコードに含まれる注釈情報を参照後、参照した注釈情報に関連する関連注釈情報をソースコードまたはモデル情報に付加するようにするモデリング装置を開示する。
【０００５】
特許文献３は、プログラム作成画面上に複数個の機能シンボルを定義し、かつ、定義された機能シンボル間に方向性を有する結合関係を定義する機能シンボル定義手段と、機能シンボル定義手段によって定義された各機能シンボルに連続した仮番号を付与する仮番号付与手段と、仮番号付与手段によって番号付けされた方向性のある結合関係を有する複数の機能シンボルについて、トポロジカルソートをおこなって機能シンボルの実行順序を自動的に決定する実行順序決定手段とを設けたプログラム作成装置を開示する。
【０００６】
特許文献４は、ファイルごとに、ファイル内で定義されている関数名・変数の型・変数名を抽出した第１のテーブルと使用されている関数名・変数の型・変数名を抽出した第２のテーブルを作成し、第１のテーブルと第２のテーブル間で一致するものがあればこれを別テーブルに移すまたは削除する第１の作業を行い、さらにシステム内のファイル間で、あるファイルの第１のテーブルと別のファイルの第２のテーブルを比較し一致するものが検出されれば別テーブルに移すまたは削除する第２の作業を、繰り返し比較対象を変えて行い、全ての必要な比較が終了時に第１のテーブル内に残された定義を不要な定義として抽出するファイル抽出システムを開示する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−２１３４０２号公報
【特許文献２】特開２０１１−０３４４１９号公報
【特許文献３】特開平８−１０６３８０号公報
【特許文献４】特開２００５−３４６５７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一般に、マクロによってプログラムコードを自動生成するシステムは、全ての対象オブジェクトに機械的に命名する。
ところが、全ての対象オブジェクトに機械的に命名したのでは、操作者の意図が反映されたプログラムコードを生成できない。
具体的には、第一に、全ての対象オブジェクトに命名することにより、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したいという意図が反映されたプログラムコードを生成できない。その結果、無駄な変数宣言を行うことになり、宣言のリソースが無駄に使用されるという問題が生じる。また、例えば、インラインで表現できる値が、別の箇所で変数として宣言されることにもなり、理解の妨げになるという問題も生じる。
【０００９】
また、第二に、対象オブジェクトに機械的に命名することにより、操作対象のオブジェクトに操作コンテキストにおける名称を指定したい（例えば、文字列オブジェクトにstring1、string2ではなく、title、contentという意味が分かり易い名称を指定したい）という意図が反映されたプログラムコードを生成できない。その結果、プログラムコードの可読性が低下するという問題が生じる。
【００１０】
尚、特許文献１は、モデルの可読性を向上するための技術であるので、本発明とは異なる。
また、特許文献２、３は、プログラムコードの可読性を向上するものであるが、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
更に、特許文献４は、プログラムソースの無駄を省くものではあるが、やはり、操作対象のオブジェクトを、操作において指定する値のみが重要なオブジェクトと、命名して再利用するオブジェクトとに区別したり、操作対象のオブジェクトに操作コンテキストにおける名称を指定したりするものではない。
【００１１】
本発明の目的は、操作対象のオブジェクトを命名された名前で記述すべきオブジェクトと値で記述すべきオブジェクトとに区別したプログラムコードを生成することにある。
本発明の他の目的は、操作対象のオブジェクトをユーザが指定した名前で記述したプログラムコードを生成することにある。
【課題を解決するための手段】
【００１２】
かかる目的のもと、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部とを含む、装置を提供する。
【００１３】
ここで、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていなければ、引数オブジェクトの値を用いて、オブジェクトを操作するコードを生成する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを宣言するコードを生成し、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていなければ、引数オブジェクトの値を用いて、オブジェクトを宣言するコードを生成する、ものであってよい。
【００１４】
加えて、生成部は、オブジェクトの値を用いてコードが生成された箇所の数を計数し、表示部は、生成部により計数された箇所の数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が生成命令を示す場合に、オブジェクトに名前が付けられておらず、オブジェクトが後続の操作命令で参照されている状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更に、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
更にまた、生成部は、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない状況が発生すれば、状況の発生数を計数し、表示部は、生成部により計数された発生数が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
【００１５】
また、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置であって、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、受付部にて受け付けた操作命令がオブジェクトを生成する生成命令である場合に、オブジェクトに生成命令を示す生成命令情報を対応付けた生成情報を記録する生成情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報が生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令が宣言命令である場合には、操作命令情報に基づいて得られたオブジェクトの名前を用いて、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合には、操作命令情報に基づいて得られたオブジェクトの名前を用いると共に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを宣言するコードを生成し、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていなければ、生成情報記録部により記録された生成情報において引数オブジェクトに対応付けられた生成命令情報に基づいて得られた引数オブジェクトの値を用いて、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、生成情報記録部により記録された生成情報においてオブジェクトに対応付けられた生成命令情報に基づいて得られたオブジェクトの値を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていれば、命名情報において引数オブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていなければ、生成情報記録部により記録された生成情報において引数オブジェクトに対応付けられた生成命令情報に基づいて得られた引数オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部とを含む、装置も提供する。
【００１６】
ここで、生成部は、取得部により取得された操作命令情報が生成命令を示す場合に、オブジェクトに名前が付けられておらず、オブジェクトが後続の操作命令で参照されている第１の状況が発生すれば、第１の状況の発生数である第１の発生数を計数し、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により命名情報が記録されていない第２の状況が発生すれば、第２の状況の発生数である第２の発生数を計数し、表示部は、生成部により計数された第１の発生数と第２の発生数との和が予め定められた閾値以上である場合に、オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
また、生成部は、取得部により取得された操作命令情報が他の操作命令を示す場合に、命名情報記録部により他の操作命令の引数である引数オブジェクトについて命名情報が記録されていない第３の状況が発生すれば、第３の状況の発生数である第３の発生数を計数し、取得部により取得された操作命令情報が命名命令を示し、オブジェクトを生成した命令がコンストラクタ命令である場合に、命名情報記録部によりコンストラクタ命令の引数である引数オブジェクトについて命名情報が記録されていない第４の状況が発生すれば、第４の状況の発生数である第４の発生数を計数し、表示部は、生成部により計数された第３の発生数と第４の発生数との和が予め定められた閾値以上である場合に、引数オブジェクトに名前を付けることを推奨する情報を更に表示する、ものであってよい。
【００１７】
更に、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する方法であって、ユーザが入力した操作命令を受け付けるステップと、受け付けた操作命令を示す操作命令情報を記録するステップと、受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録するステップと、プログラムのコードの生成指示に応じて、記録された操作命令情報を順次取得するステップと、取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成するステップと、生成されたコードを表示するステップとを含む、方法も提供する。
【００１８】
更にまた、本発明は、オブジェクトを操作する操作命令を再現するプログラムの生成を支援する装置としてコンピュータを機能させるプログラムであって、コンピュータを、ユーザが入力した操作命令を受け付ける受付部と、受付部にて受け付けた操作命令を示す操作命令情報を記録する操作命令情報記録部と、受付部にて受け付けた操作命令がオブジェクトに名前を付ける命名命令である場合に、オブジェクトに命名命令で指定された名前を付けることなく、オブジェクトに指定された名前を対応付けた命名情報を記録する命名情報記録部と、プログラムのコードの生成指示に応じて、操作命令情報記録部により記録された操作命令情報を順次取得する取得部と、取得部により取得された操作命令情報がオブジェクトを生成する生成命令を示す場合には、コードを生成せず、取得部により取得された操作命令情報が命名命令を示す場合には、オブジェクトを宣言するコードを生成し、取得部により取得された操作命令情報が生成命令でもなく命名命令でもない他の操作命令を示す場合には、命名情報記録部により命名情報が記録されていれば、命名情報においてオブジェクトに対応付けられた名前を用いて、オブジェクトを操作するコードを生成し、命名情報記録部により命名情報が記録されていなければ、オブジェクトの値を用いて、オブジェクトを操作するコードを生成する生成部と、生成部により生成されたコードを表示する表示部として機能させる、プログラムも提供する。
【発明の効果】
【００１９】
本発明によれば、操作対象のオブジェクトを命名された名前で記述すべきオブジェクトと値で記述すべきオブジェクトとに区別したプログラムコードを生成できるようになる。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施の形態におけるプログラム生成装置の機能構成例を示したブロック図である。
【図２】本発明の実施の形態におけるプログラム生成装置の第１の概略動作を説明するためのユーザ操作の例を示したフローチャートである。
【図３】本発明の実施の形態におけるプログラム生成装置の第１の概略動作で生成されるプログラムコードの例を示した図である。
【図４】本発明の実施の形態におけるプログラム生成装置の第２の概略動作を説明するためのユーザ操作の例を示したフローチャートである。
【図５】本発明の実施の形態におけるプログラム生成装置の第２の概略動作で生成されるプログラムコードの例を示した図である。
【図６】本発明の実施の形態におけるプログラム生成装置の対象オブジェクト操作時の動作例を示したフローチャートである。
【図７】本発明の実施の形態におけるプログラム生成装置内の命令実行順序表の登録内容の例を示した図である。
【図８】本発明の実施の形態におけるプログラム生成装置内の名前−モデルマッピング表の登録内容の例を示した図である。
【図９】本発明の実施の形態におけるプログラム生成装置内の命令情報−モデルマッピング表の登録内容の例を示した図である。
【図１０】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作に先立って変更された命令実行順序表の登録内容の例を示した図である。
【図１１】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作例を示したフローチャートである。
【図１２】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作で呼び出される命令情報コード化処理の流れを示したフローチャートである。
【図１３】本発明の実施の形態におけるプログラム生成装置のプログラムコード生成時の動作で呼び出されるモデルコード化処理の流れを示したフローチャートである。
【図１４】本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
【発明を実施するための形態】
【００２１】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
［プログラム生成装置の機能構成］
図１は、本実施の形態におけるプログラム生成装置１０の機能構成例を示した図である。
図示するように、プログラム生成装置１０は、対象オブジェクト記憶部１１と、対象オブジェクト管理部１２と、操作インターフェイス部１３と、実行履歴記憶部１４と、コード生成部１５と、コード表示部１６とを備える。
【００２２】
対象オブジェクト記憶部１１は、操作対象のオブジェクト（以下、「対象オブジェクト」という）を記憶する。ここで、対象オブジェクトは、文字列、数値、フレーム、ファイル等、Ｊａｖａ（登録商標）で扱うことの可能な如何なるオブジェクトでもよい。
【００２３】
対象オブジェクト管理部１２は、作業中の対象オブジェクトの状態を表すために導入された操作対象モデルにより実現される。ここで、操作対象モデルは、対象オブジェクト記憶部１１に記憶された対象オブジェクトを包むラッパーオブジェクトである。
【００２４】
まず、操作対象モデルは、１つの対象オブジェクトに対応付けられているので、対象オブジェクトへの参照情報（例えば、対象オブジェクトのＩＤ）のフィールドを持つ。
また、操作対象モデルは、対象オブジェクトへの命名が指示された名前のフィールドも持つ。尚、操作対象モデルは対象オブジェクトに対応付けられているので、対象オブジェクトへの命名が指示された名前は、操作対象モデルに付けられた名前と捉えることができる。
【００２５】
更に、操作対象モデルは、機能を定義したメソッドを持つ。メソッドには、まず、操作命令を表す命令情報を生成する機能が定義される。この命令情報は、対象オブジェクトへの命名命令を表す命令情報を除き、対象オブジェクトに対して操作命令を実行する。例えば、操作命令が対象オブジェクトを生成する命令であるとすると、命令情報は、その命令内容と、対象オブジェクトの生成に関与する操作対象モデルへの参照情報とを含む。また、メソッドには、命令情報を命令実行順序表２１（後述）に登録する機能、操作対象モデルに付けられた名前と操作対象モデルとの対応情報を名前−モデルマッピング表２２（後述）に登録する機能、及び、命令情報とその命令情報によって生成された操作対象モデルとの対応情報を命令情報−モデルマッピング表２３（後述）に登録する機能も定義される。本実施の形態では、操作命令を示す操作命令情報の一例として、命令情報を用いており、オブジェクトに指定された名前を対応付けた命名情報の一例として、名前とその名前が付けられた操作対象モデルとの対応情報を用いており、オブジェクトに生成命令を示す生成命令情報を対応付けた生成情報の一例として、命令情報とその命令情報が表す操作命令によって生成された操作対象モデルとの対応情報を用いている。また、操作命令情報を記録する操作命令情報記録部、命名情報を記録する命名情報記録部、生成情報を記録する生成情報記録部の一例として、対象オブジェクト管理部１２を設けている。
【００２６】
尚、図では、対象オブジェクト記憶部１１と対象オブジェクト管理部１２とのペアを１つだけ示したが、クラスのインスタンスの数だけ、このペアは設けられるものとする。
【００２７】
操作インターフェイス部１３は、対象オブジェクトに対応する操作対象モデルと、対象オブジェクトに対して予め定義された操作命令の一覧とを表示機構９０ｄ（図１４参照）に表示する。また、キーボード／マウス９０ｉで一覧の中から選択された操作命令を受け付ける。ここで、操作命令には、対象オブジェクトに命名する命令が含まれる。操作対象モデルが作業中の対象オブジェクトの状態を表すので、操作インターフェイス部１３は、作業中の対象オブジェクトに暫定の名前を付けてこれを表示する。言い換えると、対象オブジェクトに名前が付いていることを表示するように操作対象モデルが指示してくるので、対象オブジェクトが文字列“xxx”である場合に、対象オブジェクトに名前が付いていなければ単に“xxx”と表示し、対象オブジェクトにnamexという名前が付いていればnamex = “xxx”と表示する。本実施の形態では、操作命令を受け付ける受付部の一例として、操作インターフェイス部１３を設けている。
【００２８】
実行履歴記憶部１４は、操作命令が実行される都度、実行履歴を記憶する。
コード生成部１５は、実行履歴記憶部１４に記憶された実行履歴をプログラムコードに変換する。本実施の形態では、操作命令情報を順次取得する取得部、コードを生成する生成部の一例として、コード生成部１５を設けている。
コード表示部１６は、コード生成部１５が生成したプログラムコードを表示機構９０ｄ（図１４参照）に出力する。本実施の形態では、コードを表示する表示部の一例として、コード表示部１６を設けている。
【００２９】
また、実行履歴記憶部１４は、命令実行順序表２１と、名前−モデルマッピング表２２と、命令情報−モデルマッピング表２３とを記憶する。
命令実行順序表２１は、操作命令が実行される都度生成された命令情報を実行された順に保持する表形式のデータである。
名前−モデルマッピング表２２は、操作対象モデルに付けられた名前と、操作対象モデルとの対応情報を保持する表形式のデータである。
命令情報−モデルマッピング表２３は、命令情報と、その命令情報によって生成された操作対象モデルとの対応情報を保持する表形式のデータである。
【００３０】
尚、これらの機能のうち、対象オブジェクト管理部１２、操作インターフェイス部１３、コード生成部１５、及び、コード表示部１６は、ＣＰＵ９０ａ（図１４参照）が磁気ディスク装置９０ｇ（図１４参照）に記憶されたプログラムをメインメモリ９０ｃ（図１４参照）に読み込んで実行することにより実現される。また、対象オブジェクト記憶部１１及び実行履歴記憶部１４は、例えば磁気ディスク装置９０ｇ（図１４参照）により実現される。
【００３１】
［プログラム生成装置の概略動作（１）］
図２は、プログラム生成装置の第１の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部１２が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
【００３２】
まず、ユーザは、java.lang.StringクラスのインスタンスＡとして文字列“指定された文字列”を生成する（ステップ１）。
【００３３】
次に、ユーザは、ステップ１で生成されたjava.lang.StringクラスのインスタンスＡをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスＸを生成する（ステップ２）。
そして、ステップ２で生成されたjavax.swing.JFrameクラスのインスタンスＸへの“fooFrame”の命名を指示する（ステップ３）。
【００３４】
次いで、ユーザは、java.lang.StringクラスのインスタンスＢとして文字列“指定された別文字列”を生成する（ステップ４）。
そして、ステップ４で生成されたjava.lang.StringクラスのインスタンスＢへの“newTitle”の命名を指示する（ステップ５）。
【００３５】
その後、ユーザは、ステップ４で生成されたjava.lang.StringクラスのインスタンスＢをステップ２で生成されたjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドを実行する（ステップ６）。
また、ステップ１で生成されたjava.lang.StringクラスのインスタンスＡをステップ２で生成されたjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドを実行する（ステップ７）。
【００３６】
図３は、図２に示したユーザ操作における各ステップの操作が行われたときに生成されるプログラムコードについて説明するための図である。尚、図では、実際には表出されないコードも、説明の便宜上、破線で囲んで示している。
【００３７】
まず、コード３０１は、java.lang.StringクラスのインスタンスＡを生成するコードである。ステップ１の操作が行われた時点で、java.lang.StringクラスのインスタンスＡは生成されたが命名されていないので、コード３０１は表出されない。
【００３８】
また、コード３０２，３０３は、java.lang.StringクラスのインスタンスＡをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスＸを生成するコードである。ステップ２の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸは生成されたが命名されていないので、コード３０２は表出されない。一方、ステップ３の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸは命名されているので、コード３０３は表出される。ここで、java.lang.StringクラスのインスタンスＡは命名されていないので、“指定された文字列”がインライン展開されている。
【００３９】
更に、コード３０４，３０５は、java.lang.StringクラスのインスタンスＢを生成するコードである。ステップ４の操作が行われた時点で、java.lang.StringクラスのインスタンスＢは生成されたが命名されていないので、コード３０４は表出されない。一方、ステップ５の操作が行われた時点で、java.lang.StringクラスのインスタンスＢは命名されているので、コード３０５は表出される。
【００４０】
また、コード３０６は、java.lang.StringクラスのインスタンスＢをjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドを実行するコードである。ステップ６の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸもjava.lang.StringクラスのインスタンスＢも命名されているので、これらのインスタンスが変数として書き出されたコード３０６が表出される。
更に、コード３０７は、java.lang.StringクラスのインスタンスＡをjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドを実行するコードである。ステップ７の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸは命名されているが、java.lang.StringクラスのインスタンスＡは命名されていないので、前者のインスタンスだけが変数として書き出され、後者のインスタンスとしては“指定された文字列”がインライン展開されたコード３０７が書き出される。
【００４１】
このように、java.lang.StringクラスのインスタンスＡは、命名されていないので、常に値として扱われる。つまり、プログラム上では、このインスタンスが出現する都度、このインスタンスを格納する領域がメモリ空間に確保され、その領域は不要になれば捨てられる。
一方、java.lang.StringクラスのインスタンスＢは、java.lang.StringクラスのインスタンスＡと同じ文字列であるが、命名されているので、変数としてアクセスする対象となっている。
【００４２】
［プログラム生成装置の概略動作（２）］
図４は、プログラム生成装置の第２の概略動作を説明するためのユーザ操作の流れを示したフローチャートである。尚、実際は、ユーザ操作は操作対象モデルに対して行われる。しかしながら、ユーザ操作が対象オブジェクトへの命名を指示する操作である場合を除き、ユーザ操作に応じて対象オブジェクト管理部１２が対象オブジェクトに対して操作命令を実行するので、ここでは、ユーザ操作を対象オブジェクトに対する操作と捉えて説明する。
まず、ユーザは、図２のステップ１〜ステップ７で示した操作を行う。
そして最後に、ステップ１で生成されたjava.lang.StringクラスのインスタンスＡへの“barTitle”の命名を指示する（ステップ８）。
【００４３】
図５は、図４に示したユーザ操作における各ステップの操作が行われたときに生成されるプログラムコードについて説明するための図である。尚、図では、実際には表出されないコードも、説明の便宜上、破線で囲んで示している。
【００４４】
まず、コード３５１，３５８は、java.lang.StringクラスのインスタンスＡを生成するコードである。ステップ１の操作が行われた時点で、java.lang.StringクラスのインスタンスＡは生成されたが命名されていないので、コード３５１は表出されない。一方、ステップ８でjava.lang.StringクラスのインスタンスＡに“barTitle”と命名した時点で、このインスタンスの生成ポイントに宣言文であるコード３５８が発生する。
【００４５】
また、コード３５２，３５３は、java.lang.StringクラスのインスタンスＡをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスＸを生成するコードである。ステップ２の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸは生成されたが命名されていないので、コード３５２は表出されない。一方、ステップ３の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸは命名されているので、コード３５３は表出される。ここで、java.lang.StringクラスのインスタンスＡは、ステップ３の操作が行われた時点では命名されていなかったので図３のようにインライン展開されたが、ステップ８で“barTitle”と命名されると、変数として書き出される。
【００４６】
更に、コード３５４，３５５は、java.lang.StringクラスのインスタンスＢを生成するコードである。ステップ４の操作が行われた時点で、java.lang.StringクラスのインスタンスＢは生成されたが命名されていないので、コード３５４は表出されない。一方、ステップ５の操作が行われた時点で、java.lang.StringクラスのインスタンスＢは命名されているので、コード３５５は表出される。
【００４７】
また、コード３５６は、java.lang.StringクラスのインスタンスＢをjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドを実行するコードである。ステップ６の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸもjava.lang.StringクラスのインスタンスＢも命名されているので、これらのインスタンスが変数として書き出されたコード３５６が表出される。
更に、コード３５７は、java.lang.StringクラスのインスタンスＡをjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドを実行するコードである。ステップ７の操作が行われた時点で、javax.swing.JFrameクラスのインスタンスＸは命名されているが、java.lang.StringクラスのインスタンスＡは命名されていなかったので、前者のインスタンスだけが変数として書き出され、後者のインスタンスは図３のようにインライン展開された。しかし、後者のインスタンスも、ステップ８で“barTitle”と命名されると、変数として書き出される。
【００４８】
このように、java.lang.StringクラスのインスタンスＡに後から命名した場合であっても、その命名がプログラムコード全体に反映され、変数として扱うことができる。
【００４９】
［プログラム生成装置の動作］
プログラム生成装置１０は、大きく分けて以下の２つの動作を行う。
第一に、操作インターフェイス部１３での対象オブジェクトに対する操作に応じた動作である。この操作中に必要に応じて対象オブジェクトに対する命名操作が行われるので、その命名操作に応じた動作も行う。
第二に、最新のプログラムコードを生成して表示画面に表示する動作である。
以下、この２つの動作について順に説明する。
【００５０】
（対象オブジェクト操作時の動作）
ユーザの指示により操作インターフェイス部１３が対象オブジェクト管理部１２に操作命令を伝えると、対象オブジェクト管理部１２はこの操作命令に基づく動作を行う。ここで、操作命令は、関数の実行、フィールド値の取得、配列要素の取り出し等の操作命令に加えて、特に、対象オブジェクトに対する命名命令を含むものとする。
【００５１】
図６は、このときの対象オブジェクト管理部１２の動作例を示したフローチャートである。
図示するように、まず、対象オブジェクト管理部１２は、操作インターフェイス部１３から伝えられた操作命令を表す命令情報を生成する（ステップ１０１）。
次に、対象オブジェクト管理部１２は、操作インターフェイス部１３から伝えられた操作命令が対象オブジェクトに対する命名命令であるかどうかを判定する（ステップ１０２）。
【００５２】
その結果、伝えられた操作命令が対象オブジェクトに対する命名命令であると判定されれば、対象オブジェクト管理部１２は、対象オブジェクトに対しては何もせず、命名された名前と、対象オブジェクトに対応する操作対象モデルとの対応を、名前−モデルマッピング表２２に登録する（ステップ１０３）。そして、ステップ１０１で生成した命令情報を命令実行順序表２１に追加する（ステップ１０８）。
【００５３】
一方、伝えられた操作命令が対象オブジェクトに対する命名命令でないと判定されれば、対象オブジェクト管理部１２は、ステップ１０１で生成した命令情報により、対象オブジェクトに対して操作を実行する（ステップ１０４）。そして、操作を実行した結果として新たなオブジェクトが生成されるかどうかを判定する（ステップ１０５）。尚、このように新たなオブジェクトを生成する生成命令としては、例えば、宣言命令、コンストラクタ命令がある。
【００５４】
ここで、新たなオブジェクトが生成されると判定されれば、対象オブジェクト管理部１２は、この新たなオブジェクトを包むラッパーオブジェクトである新たな操作対象モデルを生成し、この新たな操作対象モデルに新たな対象オブジェクトを参照させる（ステップ１０６）。また、この新たな操作対象モデルがステップ１０１で生成された命令情報によって作成されたことを、命令情報−モデルマッピング表２３に登録する（ステップ１０７）。そして、ステップ１０１で生成した命令情報を命令実行順序表２１に追加する（ステップ１０８）。
【００５５】
また、新たなオブジェクトが生成されないと判定されれば、対象オブジェクト管理部１２は、新たな操作対象モデルの生成や命令情報−モデルマッピング表２３への情報の登録を行うことなく、ステップ１０１で生成した命令情報を命令実行順序表２１に追加する（ステップ１０８）。
【００５６】
ここで、上記動作により命令実行順序表２１、名前−モデルマッピング表２２、命令情報−モデルマッピング表２３に登録される情報の内容について説明する。尚、ここでは、図２に示したユーザ操作が行われた場合を例にとって説明する。
【００５７】
図７は、図２に示したユーザ操作に応じて上記動作が行われた場合の命令実行順序表２１の登録内容の例を示した図である。
図示するように、命令実行順序表２１には、順序情報と命令情報との対応が登録される。ここで、順序情報は、対応する命令情報で表される操作命令が何番目に実行されたものであるかを示す情報である。また、命令情報は、ユーザが指示した操作命令を表す情報であり、（操作対象モデル，命令，引数）という書式で示す。但し、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【００５８】
図２に示したユーザ操作では、まず、ステップ１でjava.lang.StringクラスのインスタンスＡとして文字列“指定された文字列”が生成されたので、順序情報“１”と命令情報（java.lang.Stringクラス，宣言，“指定された文字列”）との対応が登録されている。
【００５９】
次に、ステップ２でjava.lang.StringクラスのインスタンスＡをjavax.swing.JFrameクラスのコンストラクタに与えてjavax.swing.JFrameクラスのインスタンスＸが生成されたので、順序情報“２”と命令情報（javax.swing.JFrameクラス，コンストラクタ，java.lang.StringクラスのインスタンスＡ）との対応が登録されている。
そして、ステップ３でjavax.swing.JFrameクラスのインスタンスＸへの“fooFrame”の命名が指示されたので、順序情報“３”と命令情報（javax.swing.JFrameクラスのインスタンスＸ，命名，“fooFrame”）との対応が登録されている。
【００６０】
次いで、ステップ４でjava.lang.StringクラスのインスタンスＢとして文字列“指定された別文字列”が生成されたので、順序情報“４”と命令情報（java.lang.Stringクラス，宣言，“指定された別文字列”）との対応が登録されている。
そして、ステップ５でjava.lang.StringクラスのインスタンスＢへの“newTitle”の命名が指示されたので、順序情報“５”と命令情報（java.lang.StringクラスのインスタンスＢ，命名，“newTitle”）との対応が登録されている。
【００６１】
その後、ステップ６でjava.lang.StringクラスのインスタンスＢをjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドが実行されたので、順序情報“６”と命令情報（javax.swing.JFrameクラスのインスタンスＸ，setTitleメソッド，java.lang.StringクラスのインスタンスＢ）との対応が登録されている。
また、ステップ７でjava.lang.StringクラスのインスタンスＡをjavax.swing.JFrameクラスのインスタンスＸに与えてsetTitleメソッドが実行されたので、順序情報“７”と命令情報（javax.swing.JFrameクラスのインスタンスＸ，setTitleメソッド，java.lang.StringクラスのインスタンスＡ）との対応が登録されている。
【００６２】
図８は、図２に示したユーザ操作に応じて上記動作が行われた場合の名前−モデルマッピング表２２の登録内容の例を示した図である。
図示するように、名前−モデルマッピング表２２には、名前と操作対象モデルとの対応が登録される。ここで、名前は、命名命令によって対象オブジェクトへの命名が指示された名前である。また、操作対象モデルは、その名前の命名が指示された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【００６３】
図２に示したユーザ操作では、ステップ３でjavax.swing.JFrameクラスのインスタンスＸへの“fooFrame”の命名が指示されたので、名前“fooFrame”と操作対象モデル“javax.swing.JFrameクラスのインスタンスＸ”との対応が登録されている。
また、ステップ５でjava.lang.StringクラスのインスタンスＢへの“newTitle”の命名が指示されたので、名前“newTitle”と操作対象モデル“java.lang.StringクラスのインスタンスＢ”との対応が登録されている。
【００６４】
図９は、図２に示したユーザ操作に応じて上記動作が行われた場合の命令情報−モデルマッピング表２３の登録内容の例を示した図である。
図示するように、命令情報−モデルマッピング表２３には、命令情報と操作対象モデルとの対応が登録される。ここで、命令情報は、対象オブジェクトを生成した操作命令を表す情報である。また、操作対象モデルは、その命令情報が表す操作命令によって生成された対象オブジェクトを管理する操作対象モデルである。尚、ここでも、「操作対象モデル」としては、その管理対象である対象オブジェクトを示している。
【００６５】
図２に示したユーザ操作では、ステップ１でjava.lang.StringクラスのインスタンスＡが生成されたので、命令情報（java.lang.Stringクラス，宣言，“指定された文字列”）と操作対象モデル“java.lang.StringクラスのインスタンスＡ”との対応が登録されている。
また、ステップ２でjavax.swing.JFrameクラスのインスタンスＸが生成されたので、命令情報（javax.swing.JFrameクラス，コンストラクタ，java.lang.StringクラスのインスタンスＡ）と操作対象モデル“javax.swing.JFrameクラスのインスタンスＸ”との対応が登録されている。
更に、ステップ４でjava.lang.StringクラスのインスタンスＢが生成されたので、命令情報（java.lang.Stringクラス，宣言，“指定された別文字列”）と操作対象モデル“java.lang.StringクラスのインスタンスＢ”の対応が登録されている。
【００６６】
（プログラムコード生成時の動作）
ユーザが例えば図２に示すような操作を行った後、プログラムコードの生成を指示すると、コード生成部１５はプログラムコードを生成する動作を行う。或いは、コンピュータの指示により、コード生成部１５はプログラムコードを生成する動作を行ってもよい。
コード生成部１５は、動作を開始すると、まず、コードが格納されていないコードバッファを用意する。
【００６７】
また、コード生成部１５は、名前−モデルマッピング表２２に登録されている操作対象モデルを作成した命令を命令情報−モデルマッピング表２３にて調べ、命令実行順序表２１上で、その操作対象モデルを作成した命令を削除し、その操作対象モデルを命名した命令をその位置に移動する。
【００６８】
図１０は、このときの命令実行順序表２１の登録内容の例を示した図である。
まず、図８の名前−モデルマッピング表２２を参照すると、この表に登録されている操作対象モデルは“javax.swing.JFrameクラスのインスタンスＸ”及び“java.lang.StringクラスのインスタンスＢ”である。次に、図９の命令情報−モデルマッピング表２３を参照すると、これらを生成した命令情報はそれぞれ（javax.swing.JFrameクラス，コンストラクタ，java.lang.StringクラスのインスタンスＡ）及び（java.lang.Stringクラス，宣言，“指定された別文字列”）である。従って、図７の命令実行順序表２１に対して、順序情報“２”のレコードを削除して順序情報“３”のレコードをその位置に移動させ、かつ、順序情報“４”のレコードを削除して順序情報“５”のレコードがその位置に移動させる変更を施すことにより、図１０の命令実行順序表２１を生成する。尚、ここで命名された操作対象モデルを生成する命令情報を削除したことは、操作命令情報がオブジェクトを生成する生成命令を示す場合にコードを生成しないことの一例である。
【００６９】
さて、このような準備が整うと、コード生成部１５は、実際にプログラムコードを生成する処理に移る。
図１１は、このときのコード生成部１５の動作例を示したフローチャートである。
図示するように、コード生成部１５は、まず、命令実行順序表２１から命令情報の総数を得て、この命令情報の総数を、処理中の命令情報の位置をカウントする変数ｉに代入する（ステップ１２１）。
次に、コード生成部１５は、変数ｉを１ずつ減らしながら０になるまで、ステップ１２２〜１３２の処理を繰り返し実行する。以下、変数ｉについてのステップ１２２〜１３２の処理内容について説明する。
【００７０】
最初に、コード生成部１５は、命令実行順序表２１で最初からｉ番目にある命令情報、つまり、順序情報ｉに対応する命令情報を取り出す（ステップ１２２）。そして、操作対象モデルに命名する命令を表す命令情報が取り出されたかどうかを判定する（ステップ１２３）。
【００７１】
その結果、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定されれば、コード生成部１５は、まず、変数名宣言コード断片を生成する（ステップ１２４）。ここで、変数名宣言コード断片とは、変数名を宣言するためのコード断片であり、例えば、Stringクラスの変数“newTitle”を宣言する場合は、“String newTitle”という文字列が該当する。
【００７２】
次に、コード生成部１５は、命令情報における操作対象モデルを生成した命令情報を、命令情報−モデルマッピング表２３から取り出す（ステップ１２５）。
そして、コード生成部１５は、命令情報コード化処理を呼び出し、コード断片を取得する（ステップ１２６）。尚、この命令情報コード化処理の呼び出しは、ステップ１２５で取り出した操作対象モデルを生成した命令情報（モデル生成命令情報）をパラメータとして行われる。このパラメータはステップ１２６の括弧内にも示している。また、命令情報コード化処理から返されるコード断片は、命令や値等を表すものであり、図２の例で言えば、“new javax.swing.JFrame(“指定された文字列”)”、“指定された別文字列”が該当する。以下、命令情報コード化処理から返されたコード断片は、命令情報コード化処理を呼ぶことで得られたコード断片という意味で「命令情報コード断片」と称する。
【００７３】
次いで、コード生成部１５は、ステップ１２４で生成した変数名宣言コード断片と、ステップ１２６で取得した命令情報コード断片とを代入記号で結ぶことにより、プログラムコードの行であるコード行を生成する（ステップ１２７）。
【００７４】
一方、ステップ１２３にて、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定されれば、コード生成部１５は、操作対象モデルを生成する命令を表す命令情報が取り出されたかどうかを判定する（ステップ１２８）。
【００７５】
そして、操作対象モデルを生成する命令を表す命令情報が取り出されたと判定されれば、コード生成部１５は、その操作対象モデルが命名されておらず、後続の命令情報（命令実行順序表２１でより大きな順序情報に対応付けられた命令情報）において参照されているかどうか（命令情報における操作対象モデル又は引数となっているかどうか）を判定する（ステップ１２９）。その操作対象モデルが命名されておらず、後続の命令で参照されていると判定されれば、コード生成部１５は、名称が未決定の状態で操作対象モデルがコード化されたことを示す参照カウンタＣＮＴに１を加算する（ステップ１３０）。
【００７６】
また、ステップ１２８にて、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定された場合、又は、ステップ１２９にて、その操作対象モデルが命名されている、若しくは、後続の命令で参照されていない、と判定された場合、コード生成部１５は、命令情報コード化処理を呼び出し、命令情報コード断片を取得する（ステップ１３１）。尚、この命令情報コード化処理の呼び出しは、ステップ１２２で取り出したｉ番目の命令情報をパラメータとして行われる。このパラメータはステップ１３１の括弧内にも示している。また、命令情報コード化処理から返される命令情報コード断片は、命令を表すものであり、図２の例で言えば、“fooFrame.setTitle(newTitle)”等が該当する。即ち、ここで得られる命令情報コード断片は、プログラムコードの行であるコード行である。
【００７７】
その後、コード生成部１５は、コードバッファの最初の行として、ステップ１２７又はステップ１３１で得られたコード行を追加する（ステップ１３２）。尚、ステップ１３０が実行された場合は、コード行は得られていないので、コードバッファには何も追加しない。
【００７８】
そして、上述したように、コード生成部１５は、変数ｉを１ずつ減らしながら０になるまで以上の処理を繰り返すので、コード生成部１５は、処理中の命令情報の位置をカウントする変数ｉを１カウントダウンし（ステップ１３３）、カウントダウンしたことにより変数ｉが０になったかどうかを判定する（ステップ１３４）。その結果、コード生成部１５は、変数ｉが０になっていなければ、ステップ１２２へ処理を進めるが、変数ｉが０になっていれば、コードバッファに格納された全てのコードと、操作対象モデルごとの参照カウンタＣＮＴの値とをコード表示部１６に出力する（ステップ１３５）。
【００７９】
これにより、コード表示部１６は、コード生成部１５により生成されたコードを表示機構９０ｄ（図１４参照）に表示する。その際、予め定められた閾値（例えば２）以上になっている参照カウンタＣＮＴに対応する操作対象モデルに命名することを推奨する情報も表示する。
【００８０】
ここで、図１１のステップ１２６，１３１、又は、後述する図１３のステップ１６５で呼び出される命令情報コード化処理について詳細に説明する。
図１２は、命令情報コード化処理の流れを示したフローチャートである。
図示するように、コード生成部１５は、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報であるかどうかを判定する（ステップ１４１）。ここで、宣言命令とは、操作対象モデルを宣言する命令であり、図２の例で言えば、命令情報（java.lang.Stringクラス，宣言，“指定された文字列”）で表される命令が該当する。
【００８１】
まず、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報でないと判定された場合について述べる。この場合、コード生成部１５は、渡された命令情報がコンストラクタ命令を表す命令情報であるかどうかを判定する（ステップ１４２）。ここで、コンストラクタ命令とは、対象オブジェクトを生成するときに実行する命令であり、図２の例で言えば、命令情報（javax.swing.JFrameクラス，コンストラクタ，java.lang.StringクラスのインスタンスＡ）で表される命令が該当する。
【００８２】
その結果、渡された命令情報がコンストラクタ命令を表す命令情報でないと判定されれば、コード生成部１５は、モデルコード化処理を呼び出す（ステップ１４３）。尚、このモデルコード化処理の呼び出しは、渡された命令情報における操作対象モデルをパラメータとして行われる。このパラメータはステップ１４３の括弧内にも示している。また、モデルコード化処理から返されるコード断片は、変数名や値等を表すものであり、図２の例で言えば、“fooFrame”等が該当する。以下、モデルコード化処理から返されたコード断片は、モデルコード化処理を呼ぶことで得られたコード断片という意味で「モデルコード断片」と称する。但し、ここで返されたコード断片は、操作対象モデルをパラメータとしてモデルコード化処理を呼ぶことで得られたコード断片であるので、特に「操作対象モデルコード断片」と称する。
【００８３】
一方、渡された命令情報がコンストラクタ命令を表す命令情報であると判定されれば、コード生成部１５は、コンストラクタ部分のコード断片（コンストラクタコード断片）を生成する（ステップ１４４）。ここで、コンストラクタコード断片は、図２の例で言えば、“new javax.swing.Jframe（”及び“）”が該当する。
【００８４】
その後、コード生成部１５は、渡された命令情報に引数があるかどうかを判定する（ステップ１４５）。
ここで、渡された命令情報に引数がないと判定されれば、何もしないが、渡された命令情報に引数があると判定されれば、コード生成部１５は、モデルコード化処理を呼び出す（ステップ１４６）。尚、このモデルコード化処理の呼び出しは、その引数をパラメータとして行われる。このパラメータはステップ１４６の括弧内にも示している。また、モデルコード化処理から返されるモデルコード断片は、変数名や値等を表すものであり、図２の例で言えば、“指定された文字列”等が該当する。但し、ここで返されたコード断片は、引数をパラメータとしてモデルコード化処理を呼ぶことで得られたコード断片であるので、特に「引数コード断片」と称する。
【００８５】
そして、コード生成部１５は、操作対象モデルコード断片と命令内容と引数コード断片とを組み合わせることにより、又は、コンストラクタコード断片と引数コード断片とを組み合わせることにより、命令情報コード断片を生成し、これを返す（ステップ１４７）。ここで、例えば、操作対象モデルコード断片が“fooFrame”、引数コード断片が“指定された文字列”、命令内容が“setTitle”であるすると、命令情報コード断片は“fooFrame.setTitle(“指定された文字列”)”となる。尚、このステップ１４７は、渡された命令情報がコンストラクタ命令を表す命令情報であると判定された場合や、渡された命令情報に引数がないと判定された場合にも実行されるものとして設けたが、これらの場合にはそれぞれの場合に適したステップを別に設けてもよい。
【００８６】
次に、呼び出されるときに渡された命令情報が、宣言命令を表す命令情報であると判定された場合について述べる。この場合、コード生成部１５は、値を表す命令情報コード断片又はクラス参照を表す命令情報コード断片を生成し、これを返す（ステップ１４８）。ここで、値を表す命令情報コード断片は、例えば、“指定された文字列”、“１”、“−１”である。また、クラス参照を表す命令情報コード断片は、例えば、“java.lang.String”である。
【００８７】
ここで、図１２のステップ１４３，１４６で呼び出されるモデルコード化処理について詳細に説明する。
図１３は、モデルコード化処理の流れを示したフローチャートである。
図示するように、コード生成部１５は、名前−モデルマッピング表２２を参照し、呼び出されるときに渡された対象（操作対象モデル又は引数）に名前が付いているかどうかを確認し（ステップ１６１）、対象が命名済みかどうかを判定する（ステップ１６２）。
【００８８】
その結果、対象が命名済みであると判定されれば、コード生成部１５は、対象に付けられた変数名を表すモデルコード断片を生成し、これを返す（ステップ１６３）。ここで、変数名を表すモデルコード断片は、例えば、“fooFrame”である。
【００８９】
一方、対象が命名済みでないと判定されれば、コード生成部１５は、まず、対象を生成した命令情報を命令情報−モデルマッピング表２３から取り出す（ステップ１６４）。
次に、コード生成部１５は、命令情報コード化処理を呼び出し、命令情報コード断片を取得する（ステップ１６５）。尚、この命令情報コード化処理の呼び出しは、ステップ１６４で取り出した対象を生成した命令情報をパラメータとして行われる。このパラメータはステップ１６５の括弧内にも示している。また、命令情報コード化処理から返される命令情報コード断片は、命令、値等を表すものであり、図２の例で言えば、“指定された文字列”等が該当する。
次いで、コード生成部１５は、名称が未決定の状態で対象がコード化されたことを示す参照カウンタＣＮＴに１を加算する（ステップ１６６）。
その後、コード生成部１５は、ステップ１６５で取得した命令情報コード断片をモデルコード断片として返す（ステップ１６７）。
【００９０】
（プログラムコード生成時の動作の具体例）
ここでは、図１０に示した命令実行順序表２１の各行の命令情報を図１１のステップ１２２で取り出した場合のステップ１２３〜１３２の動作（図１２及び図１３の各ステップの動作を含む）について、具体的に説明する。
【００９１】
（１）順序情報“５”に対応する命令情報（javax.swing.JFrameクラスのインスタンスＸ，setTitleメソッド，java.lang.StringクラスのインスタンスＡ）を取り出した場合
図１１において、コード生成部１５は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ１２３で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ１２８で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ１３１で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【００９２】
すると、図１２において、コード生成部１５は、ステップ１４１で、この命令情報が宣言命令を表さないと判定し、ステップ１４２で、この命令情報がコンストラクタ命令を表さないと判定し、ステップ１４３で、この命令情報における操作対象モデル“javax.swing.JFrameクラスのインスタンスＸ”をパラメータとしてモデルコード化処理を呼び出す。
すると、図１３において、コード生成部１５は、ステップ１６１で、名前−モデルマッピング表２２を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスＸ”に名前が付いているかどうかを確認し、ステップ１６２で、“fooFrame”と命名済みであると判定し、ステップ１６３で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
【００９３】
これにより、図１２に戻り、コード生成部１５は、ステップ１４５で、命令情報コード化処理が呼び出されたときのパラメータである命令情報に引数があると判定し、ステップ１４６で、この命令情報における引数“java.lang.StringクラスのインスタンスＡ”をパラメータとしてモデルコード化処理を呼び出す。
すると、図１３において、コード生成部１５は、ステップ１６１で、名前−モデルマッピング表２２を参照し、引数“java.lang.StringクラスのインスタンスＡ”に名前が付いているかどうかを確認し、ステップ１６２で、命名済みでないと判定し、ステップ１６４で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”）を命令情報−モデルマッピング表２３から取り出し、ステップ１６５で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図１２において、コード生成部１５は、ステップ１４１で、この命令情報が宣言命令を表すと判定し、ステップ１４８で、命令情報コード断片“指定された文字列”を返す。
これにより、図１３に戻り、コード生成部１５は、ステップ１６６で、操作対象モデル“java.lang.StringクラスのインスタンスＡ”に対する参照カウンタＣＮＴに１を加算し、ステップ１６７で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
【００９４】
これにより、図１２に戻り、コード生成部１５は、ステップ１４７で、命令情報コード断片“fooFrame.setTitle(“指定された文字列”)”を返す。
これにより、図１１に戻り、コード生成部１５は、ステップ１３２で、コード行“fooFrame.setTitle(“指定された文字列”)”をコードバッファの最初の行に追加する。
【００９５】
（２）順序情報“４”に対応する命令情報（javax.swing.JFrameクラスのインスタンスＸ，setTitleメソッド，java.lang.StringクラスのインスタンスＢ）を取り出した場合
図１１において、コード生成部１５は、生成命令でも命名命令でもない他の操作命令の一例であるsetTitleメソッドが取り出されたことから、ステップ１２３で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ１２８で、操作対象モデルを生成する命令を表す命令情報が取り出されなかったと判定し、ステップ１３１で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【００９６】
すると、図１２において、コード生成部１５は、ステップ１４１で、この命令情報が宣言命令を表さないと判定し、ステップ１４２で、この命令情報がコンストラクタ命令を表さないと判定し、ステップ１４３で、この命令情報における操作対象モデル“javax.swing.JFrameクラスのインスタンスＸ”をパラメータとしてモデルコード化処理を呼び出す。
すると、図１３において、コード生成部１５は、ステップ１６１で、名前−モデルマッピング表２２を参照し、この操作対象モデル“javax.swing.JFrameクラスのインスタンスＸ”に名前が付いているかどうかを確認し、ステップ１６２で、“fooFrame”と命名済みであると判定し、ステップ１６３で、変数名を表すモデルコード断片“fooFrame”を返す。ここで、“fooFrame”は、オブジェクトに対応付けられた名前の一例である。
【００９７】
これにより、図１２に戻り、コード生成部１５は、ステップ１４５で、命令情報コード化処理が呼び出されたときのパラメータである命令情報に引数があると判定し、ステップ１４６で、この命令情報における引数“java.lang.StringクラスのインスタンスＢ”をパラメータとしてモデルコード化処理を呼び出す。
すると、図１３において、コード生成部１５は、ステップ１６１で、名前−モデルマッピング表２２を参照し、引数“java.lang.StringクラスのインスタンスＢ”に名前が付いているかどうかを確認し、ステップ１６２で、“newTitle”と命名済みであると判定し、ステップ１６３で、変数名を表すモデルコード断片“newTitle”を返す。ここで、“newTitle”は、引数オブジェクトに対応付けられた名前の一例である。
【００９８】
これにより、図１２に戻り、コード生成部１５は、ステップ１４７で、命令情報コード断片“fooFrame.setTitle(newTitle)”を返す。
これにより、図１１に戻り、コード生成部１５は、ステップ１３２で、コード行“fooFrame.setTitle(newTitle)”をコードバッファの最初の行に追加する。
【００９９】
（３）順序情報“３”に対応する命令情報（java.lang.StringクラスのインスタンスＢ，命名，“newTitle”）を取り出した場合
図１１において、コード生成部１５は、ステップ１２３で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ１２４で、変数名宣言コード断片“String newTitle =”を生成し、ステップ１２５で、操作対象モデル“java.lang.StringクラスのインスタンスＢ”を生成した命令情報(java.lang.Stringクラス,宣言,“指定された別文字列”）を命令情報−モデルマッピング表２３から取り出し、ステップ１２６で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【０１００】
すると、図１２において、コード生成部１５は、ステップ１４１で、この命令情報が宣言命令を表すと判定し、ステップ１４８で、命令情報コード断片“指定された別文字列”を返す。
【０１０１】
これにより、図１１に戻り、コード生成部１５は、ステップ１２７で、コード行“String newTitle = “指定された別文字列””を生成し、ステップ１３２で、このコード行をコードバッファの最初の行に追加する。
【０１０２】
（４）順序情報“２”に対応する命令情報（javax.swing.JFrameクラスのインスタンスＸ，命名，“fooFrame”）を取り出した場合
図１１において、コード生成部１５は、ステップ１２３で、操作対象モデルに命名する命令を表す命令情報が取り出されたと判定し、ステップ１２４で、変数名宣言コード断片“javax.swing.JFrame fooFrame =”を生成し、ステップ１２５で、操作対象モデル“javax.swing.JFrameクラスのインスタンスＸ”を生成した命令情報(javax.swing.JFrameクラス，コンストラクタ，java.lang.StringクラスのインスタンスＡ）を命令情報−モデルマッピング表２３から取り出し、ステップ１２６で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
【０１０３】
すると、図１２において、コード生成部１５は、ステップ１４１で、この命令情報が宣言命令を表さないと判定し、ステップ１４２で、この命令情報がコンストラクタ命令を表すと判定し、ステップ１４４で、コンストラクタコード断片“new javax.swing.JFrame（”及び“）”を生成し、ステップ１４５で、この命令情報に引数があると判定し、ステップ１４６で、この命令情報における引数“java.lang.StringクラスのインスタンスＡ”をパラメータとしてモデルコード化処理を呼び出す。
すると、図１３において、コード生成部１５は、ステップ１６１で、名前−モデルマッピング表２２を参照し、引数“java.lang.StringクラスのインスタンスＡ”に名前が付いているかどうかを確認し、ステップ１６２で、命名済みでないと判定し、ステップ１６４で、この引数を生成した命令情報(java.lang.Stringクラス,宣言,“指定された文字列”）を命令情報−モデルマッピング表２３から取り出し、ステップ１６５で、この命令情報をパラメータとして命令情報コード化処理を呼び出す。
すると、図１２において、コード生成部１５は、ステップ１４１で、この命令情報が宣言命令を表すと判定し、ステップ１４８で、命令情報コード断片“指定された文字列”を返す。
これにより、図１３に戻り、コード生成部１５は、ステップ１６６で、操作対象モデル“java.lang.StringクラスのインスタンスＡ”に対する参照カウンタＣＮＴに１を加算し、ステップ１６７で、命令情報コード断片“指定された文字列”をモデルコード断片“指定された文字列”として返す。ここで、“指定された文字列”は、引数オブジェクトの値の一例である。
【０１０４】
これにより、図１２に戻り、コード生成部１５は、ステップ１４７で、命令情報コード断片“new javax.swing.JFrame（“指定された文字列”）”を返す。
これにより、図１１に戻り、コード生成部１５は、ステップ１２７で、コード行“javax.swing.JFrame fooFrame = new javax.swing.JFrame（“指定された文字列”）”を生成し、ステップ１３２で、このコード行をコードバッファの最初の行に追加する。
【０１０５】
（５）順序情報“１”に対応する命令情報（java.lang.Stringクラス，宣言，“指定された文字列”）を取り出した場合
図１１において、コード生成部１５は、ステップ１２３で、操作対象モデルに命名する命令を表す命令情報が取り出されなかったと判定し、ステップ１２８で、操作対象モデルを生成する命令を表す命令情報が取り出されたと判定し、ステップ１２９で、操作対象モデル“java.lang.StringクラスのインスタンスＡ”が命名されておらず、後続の命令情報で参照されていると判定し、ステップ１３０で、操作対象モデル“java.lang.StringクラスのインスタンスＡ”に対する参照カウンタＣＮＴに１を加算する。
【０１０６】
そして、上記（１）〜（５）に示した処理を行うことにより、図３に示したプログラムコードが生成される。
【０１０７】
尚、ここでは、図２に示したユーザ操作が行われた場合におけるプログラム生成装置１０の動作の具体例について述べたが、図４に示したユーザ操作が行われた場合におけるプログラム生成装置１０の動作は次のようになる。
【０１０８】
即ち、まず、対象オブジェクト管理部１２が、命令実行順序表２１に、図７に示した情報に加えて、順序情報“８”の命令情報（java.lang.StringクラスのインスタンスＡ，命名，“barTitle”）を登録し、名前−モデルマッピング表２２に、図８に示した情報に加えて、名前“barTitle”と操作対象モデル“java.lang.StringクラスのインスタンスＡ”との対応情報を登録する。これにより、コード生成部１５は、命令実行順序表２１において、順序情報“１”に対応する命令情報（java.lang.Stringクラス，宣言，“指定された文字列”）を削除し、順序情報“８”に対応する命令情報（java.lang.StringクラスのインスタンスＡ，命名，“barTitle”）を順序情報“１”の位置に移動しておく。
【０１０９】
次に、上記（１）〜（４）に示したのと同様の処理を行う。図２のユーザ操作が行われた場合の処理と、図４のユーザ操作が行われた場合の処理との違いは、前者においては、図１３のステップ１６２で“java.lang.StringクラスのインスタンスＡ”が命名済みでないと判定し、ステップ１６４〜１６７を実行することでモデルコード断片“指定された文字列”を取得していたのに対し、後者においては、図１３のステップ１６２で“java.lang.StringクラスのインスタンスＡ”が命名済みであると判定し、ステップ１６３を実行することでモデルコード断片“barTitle”を取得している点である。
その後、上記（５）の代わりに、順序情報“１”に対応する命令情報（java.lang.StringクラスのインスタンスＡ，命名，“barTitle”）を取り出した場合の処理を行う。
このような処理を行うことにより、図５に示したプログラムコードが生成される。
【０１１０】
尚、本実施の形態では、Ｊａｖａ（登録商標）のＶＭ（Virtual Machine）内のオブジェクトを操作対象として説明したが、本発明で操作対象とするオブジェクトは、これに限られるものではない。
【０１１１】
このように、本実施の形態では、対象オブジェクトに対する命名を、機械的に行うのではなく、外部から名前を受け付けて行うようにした。これにより、対象オブジェクトが命名された場合にのみ、プログラムコード上で変数宣言が発生するので、理解困難な変数宣言が行われなくなる。言い換えると、対象オブジェクトが命名されない場合は、不要な変数宣言が省略されるので、より可読性の高いプログラムコードを生成できるようになった。
また、本実施の形態では、後で使われない対象オブジェクトに対して命名しないことを許容した。これにより、自然に記述したプログラムコードにより近いプログラムコードを生成できるようになった。
【０１１２】
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。図１４は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるＣＰＵ（Central Processing Unit）９０ａと、Ｍ／Ｂ（マザーボード）チップセット９０ｂを介してＣＰＵ９０ａに接続されたメインメモリ９０ｃと、同じくＭ／Ｂチップセット９０ｂを介してＣＰＵ９０ａに接続された表示機構９０ｄとを備える。また、Ｍ／Ｂチップセット９０ｂには、ブリッジ回路９０ｅを介して、ネットワークインターフェイス９０ｆと、磁気ディスク装置（ＨＤＤ）９０ｇと、音声機構９０ｈと、キーボード／マウス９０ｉと、フレキシブルディスクドライブ９０ｊとが接続されている。
【０１１３】
尚、図１４において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ９０ａとＭ／Ｂチップセット９０ｂの間や、Ｍ／Ｂチップセット９０ｂとメインメモリ９０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ／Ｂチップセット９０ｂと表示機構９０ｄとの間は、ＡＧＰ（Accelerated Graphics Port）を介して接続されてもよいが、表示機構９０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ／Ｂチップセット９０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ブリッジ回路９０ｅと接続する場合、ネットワークインターフェイス９０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置９０ｇについては、例えば、シリアルＡＴＡ（AT Attachment）、パラレル転送のＡＴＡ、ＰＣＩ（Peripheral Components Interconnect）を用いることができる。更に、キーボード／マウス９０ｉ、及び、フレキシブルディスクドライブ９０ｊについては、ＵＳＢ（Universal Serial Bus）を用いることができる。
【０１１４】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【０１１５】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【０１１６】
１０…プログラム生成装置、１１…対象オブジェクト記憶部、１２…対象オブジェクト管理部、１３…操作インターフェイス部、１４…実行履歴記憶部、１５…コード生成部、１６…コード表示部、２１…命令実行順序表、２２…名前−モデルマッピング表、２３…命令情報−モデルマッピング表
【図１】
0005779077.tif 000002
【図２】
0005779077.tif 000003
【図３】
0005779077.tif 000004
【図４】
0005779077.tif 000005
【図５】
0005779077.tif 000006
【図６】
0005779077.tif 000007
【図７】
0005779077.tif 000008
【図８】
0005779077.tif 000009
【図９】
0005779077.tif 000010
【図１０】
0005779077.tif 000011
【図１１】
0005779077.tif 000012
【図１２】
0005779077.tif 000013
【図１３】
0005779077.tif 000014
【図１４】
0005779077.tif 000015