(57)【要約】【課題】簡易な仕様書からオブジェクト指向プログラム言語のクラスの雛形ソースコードを自動生成する。【解決手段】コンピュータにオブジェクト指向プログラム言語のソースコードを自動生成させるプログラムであって、コンピュータに、生成するソースコードのクラス名、メソッド名、メソッド引数、およびメソッド戻り型を記載したクラス設計書を読み込む設計書読込ステップと、クラス設計書から読み込んだクラス名、メソッド名、メソッド引数、およびメソッド戻り型を用いて当該クラスの雛形を記述したソースコードを生成する生成ステップと、を実行させる。【選択図】図２
2010152667.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにオブジェクト指向プログラム言語のソースコードを自動生成させるプログラムであって、
前記コンピュータに、
生成するソースコードのクラス名、メソッド名、メソッド引数、およびメソッド戻り型を記載したクラス設計書を読み込む設計書読込ステップと、
前記クラス設計書から読み込んだクラス名、メソッド名、メソッド引数、およびメソッド戻り型を用いて当該クラスの雛形を記述したソースコードを生成する生成ステップと、
を実行させることを特徴とするソースコード自動生成プログラム。
【請求項２】
前記クラス設計書は、
当該ソースコード自動生成プログラムが生成するソースコードのクラスのメソッド引数およびメソッド戻り型に代えて、またはこれらとともに、当該クラスのメンバ変数名を記載しており、
前記生成ステップでは、前記コンピュータに、
前記メンバ変数名に対応するメンバ変数と、そのメンバ変数に対するアクセサメソッドと、を有するクラスの雛形を記述したソースコードを生成させる
ことを特徴とする請求項１記載のソースコード自動生成プログラム。
【請求項３】
前記クラス設計書は、
前記メンバ変数が保持する値が当該クラス外からセットされるのか、それとも当該クラス外にその値を引き渡すのかを区別するための入出力種別を、前記メンバ変数毎に記載しており、
前記生成ステップでは、前記コンピュータに、
前記メンバ変数が保持する値が他クラスからセットされるべき旨を前記入出力種別が示す場合はそのメンバ変数に対するセッターメソッドを記述したソースコードを生成させ、
前記メンバ変数が保持する値を当該クラス外に引き渡すべき旨を前記入出力種別が示す場合はそのメンバ変数に対するゲッターメソッドを記述したソースコードを生成させる
ことを特徴とする請求項２記載のソースコード自動生成プログラム。
【請求項４】
前記セッターメソッドおよび前記ゲッターメソッドの名称は、
対応するメンバ変数の名称の最初の１文字を英大文字に変更した名称である
ことを特徴とする請求項３記載のソースコード自動生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータにオブジェクト指向プログラム言語のソースコードを自動生成させるプログラムに関するものである。
【背景技術】
【０００２】
従来、ソースコードの自動生成システムに関し、『既存のプログラム資産として有効に再利用可能なソースコードの自動生成システムに関し、構造化プログラミングの手法によるプログラム開発で得られた既存のプログラム資産とオブジェクト指向プログラミングとの融合を図る。』ことを目的とした技術として、『新たなアプリケーションについての仕様関連情報を入力部１に入力する。この仕様関連情報に基づいて、ファイル／ＤＢ情報処理部２Ａは入出力処理を実現する“オブジェクト”を有するソースコードを、パターン情報処理部２Ｂは決定される処理パターンに対応する“オブジェクト”を有するソースコードを、カスタマイズ情報処理部２Ｃは固有の処理を実現するための“オブジェクト”を有するソースコードを、それぞれ生成する。ソースファイル出力処理部２Ｄは、仕様関連情報に基づき、生成されたソースコードをそれぞれ所定のソースファイルに出力する。』というものが提案されている（特許文献１）。
【０００３】
また、仕様書からプログラムを自動生成する技術として、下記非特許文献１〜２のようなものが提案されている。
【０００４】
一方、オブジェクト指向プログラム言語であるＪａｖａ（登録商標、以下同様）を用いたプログラムを効率良く開発するための仕組みとして、フレームワークがしばしば活用される。
Ｊａｖａフレームワークの１例として、下記非特許文献３に記載の「Ｓｅａｓａｒ２」がある。
【０００５】
【特許文献１】特開平１１−３９１４８号公報（要約）
【非特許文献１】”アプリケーション開発・保守一貫支援システム：ＹＰＳ／ＡＰＧ”、杉田登、八田信、全国大会講演論文集、ｐｐ．１１８３−１１８４、情報処理学会第３８回全国大会
【非特許文献２】”ＨＣＰチャートエディタによるプログラム自動生成の一方式”、小泉泰則、全国大会講演論文集、ｐｐ．１１５８、情報処理学会第４０回全国大会
【非特許文献３】Ｓｅａｓａｒ２、ＵＲＬ＜http://www.seasar.org/＞
【発明の開示】
【発明が解決しようとする課題】
【０００６】
オブジェクト指向プログラム言語を使用した開発では、似たようなソースコードを大量に作成しなければならない場合がある。例えば、クラスやメソッドの定義部分を記載する作業は、比較的単調な作業であるため、自動化することが好ましい。
クラスやメソッドの定義部分があらかじめ記載された雛形ソースコードを自動生成することができれば、開発者は実体部分の開発に専念することができるので、開発者の負担を軽減することができる。
【０００７】
この点、上記特許文献１に記載の技術は、オブジェクト指向プログラム言語と非オブジェクト指向プログラム言語の融合を目的としており、クラスの雛形を生成するようなことは目的としていない。
【０００８】
また、上記非特許文献１では、完成したプログラムを自動生成することを想定しているため、仕様書が複雑なものになりやすく、クラスの雛形のみのソースコードを生成するような比較的軽い処理には必ずしも向いていない。
【０００９】
また、上記非特許文献２では、特別な規定にしたがった仕様書（ＨＣＰチャート）をあらかじめ記載しておかなければならず、必ずしも汎用性はない。さらには、同文献に記載の技術では、オブジェクト指向プログラム言語の使用は想定されていない。
【００１０】
本発明は、上記のような課題を解決するためになされたものであり、簡易な仕様書からオブジェクト指向プログラム言語のクラスの雛形ソースコードを自動生成することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係るソースコード自動生成プログラムは、コンピュータにオブジェクト指向プログラム言語のソースコードを自動生成させるプログラムであって、前記コンピュータに、生成するソースコードのクラス名、メソッド名、メソッド引数、およびメソッド戻り型を記載したクラス設計書を読み込む設計書読込ステップと、前記クラス設計書から読み込んだクラス名、メソッド名、メソッド引数、およびメソッド戻り型を用いて当該クラスの雛形を記述したソースコードを生成する生成ステップと、を実行させるものである。
【発明の効果】
【００１２】
本発明に係るソースコード自動生成プログラムによれば、クラス名やメソッド名を設計書にあらかじめ記載しておくのみで、クラスの雛形ソースコードを自動生成することができる。
そのため、設計書の記載は簡易で済み、さらには雛形ソースコードが提供されるので、開発者は実体部分の開発に専念することができ、開発効率が向上する。また、ソースコードのうち定型的な部分は、雛形ソースコードにあらかじめ記述されているので、記述ミスを低減することができる。
【発明を実施するための最良の形態】
【００１３】
実施の形態１．
図１は、本発明の実施の形態１に係るソースコード自動生成プログラム１００を実行するコンピュータの機能ブロック図である。
このコンピュータは、記憶部３００、演算部４００、表示部５００を備える。これらの構成は、例えば市販のパーソナルコンピュータなどの一般的なコンピュータが備えているものを用いることができる。
【００１４】
記憶部３００は、本実施の形態１に係るソースコード自動生成プログラム１００、後述するクラス設計書２００、当該コンピュータのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などの必要なソフトウェアを格納している。
【００１５】
演算部４００は、ＯＳやソースコード自動生成プログラム１００を記憶部３００から読み出し、これらが規定する動作にしたがって演算動作や制御動作などを実行する。
表示部５００は、ディスプレイデバイスなどで構成され、演算部４００が実行する動作の結果を画面表示する。
【００１６】
図２は、クラス設計書２００の記載項目例を示す図である。
プログラム開発者は、ソースコードを作成する前に、図２に例示するクラス設計書２００を作成する。以下、プログラム開発者がクラス設計書２００に記載する各項目について説明する。
なお、図２では、１つのクラスの設計書のみ例示したが、複数のクラスを開発するときは、図２と同様の事項をクラス数と同数記載する。
【００１７】
（１）クラス名
図２の１行目には、クラス名が記載される。パッケージ名を併せて記載してもよい。
図２の例では、「ｓａｍｐｌｅ．ｌｏｇｉｃ．」までがパッケージ名、「ＳｃｒｅｅｎＥｖｅｎｔＬｏｇｉｃ」がクラス名である。
【００１８】
（２）メソッド名
図２の１列目には、当該クラスが備えるメソッド名が記載される。
図２の例では、「ｓａｍｐｌｅ．ｌｏｇｉｃ．ＳｃｒｅｅｎＥｖｅｎｔＬｏｇｉｃ」クラスは、４つのメソッドを有することが分かる。
【００１９】
（３）補足説明
図２の２列目には、各メソッドの補足説明が記載される。例えば、当該メソッドの目的や処理内容について記載しておくと、プログラム開発者にとって便宜である。
【００２０】
（４）入出力種別
図２の３列目には、各メソッドに関係するパラメータの入出力種別が記載される。
同列の値が「ｉｎ」であるパラメータは、当該メソッドの引数であることを示す。
同列の値が「ｏｕｔ」である場合、その行の５列目は、当該メソッドの戻りクラス型を示す。
【００２１】
（５）名称
図２の４列目には、各メソッドの引数に割り当てる変数名が記載される。
３列目が「ｏｕｔ」である行については、本列の値は形式的に記載する。
【００２２】
（６）型
図２の５列目には、各メソッドに関係するパラメータの型が記載される。
３列目の値が「ｉｎ」である行については、本列は各引数のクラス型を示す。
３列目の値が「ｏｕｔ」である行については、本列は、当該メソッドの戻りクラス型を示す。
【００２３】
以上、プログラム開発者がクラス設計書２００に記載する事項について説明した。
【００２４】
プログラム開発者は、クラス設計書２００を記載した後、ソースコード自動生成プログラム１００を起動するよう、図１で説明したコンピュータに指示する。
演算部４００は、その指示を受け取り、記憶部３００に格納されているソースコード自動生成プログラム１００を読み取って起動する。演算部４００は、ソースコード自動生成プログラム１００が規定する動作を実行する。
以後の説明では、記載の簡易の観点から、演算部４００の動作がソースコード自動生成プログラム１００の規定にしたがっていることは、適宜省略する。
【００２５】
演算部４００は、記憶部３００に格納されているクラス設計書２００を読み取り、その記載内容に基づきソースコードを自動生成し、記憶部３００に格納する。
これにより、クラス設計書２００に記述されているクラスの雛形ソースコードが、記憶部３００に格納される。
【００２６】
図３は、演算部４００が図２のクラス設計書２００に基づき生成する雛形ソースコードを示す図である。以下、図２に示すクラス設計書２００の各項目と、図３に示すソースコードとの対応関係について説明する。なお、説明の便宜上、行番号を付与した。
また、図３ではＪａｖａのクラス雛形ソースコードを生成した例を示したが、その他のオブジェクト指向言語のクラス雛形ソースコードについても、同様の手法を用いて自動生成することができることを付言しておく。
【００２７】
（１）クラス名
図３の７行目には、クラス設計書２００に記載されているクラス名が反映されている。なお、クラス名と併せてパッケージ名を記載した場合は、１行目にそのパッケージ名が反映される。パッケージ名を記載しなかった場合は、１行目の記載は省略される。
【００２８】
（２）メソッド名
図３の９行目以降では、図２の１列目に記載されている各メソッド名に対応する４つのメソッドの雛形が生成されている。各項目について以下に補足する。
【００２９】
（２．１）公開属性
各メソッド雛形は、「ｐｕｂｌｉｃ」公開属性で生成される。
【００３０】
（２．２）メソッド引数
各メソッド引数の変数名は、図２の３列目の値が「ｉｎ」である行の４列目の値が使用される。また、各引数のクラス型は、同行の５列目の値が使用される。
各引数のクラス型は、フルパッケージ名でなくともよい。フルパッケージ名を使用しない場合には、使用するパッケージの一覧がクラス名の前の「ｉｍｐｏｒｔ」宣言部分に記述される。
この例では、図２の５行目で使用されている各クラス型のパッケージ名部分の一覧が演算部４００によって抽出され、図３の３〜５行目に記載されている。
【００３１】
（２．３）メソッド戻りクラス型
各メソッドの戻りクラス型は、図２の３列目の値が「ｏｕｔ」である行の５列目の値が使用される。図２の５列目の値が空欄である場合は、戻り型として「ｖｏｉｄ」型が使用される。
【００３２】
（２．４）各メソッドのコメント
各メソッドの名称部分の直上行には、各メソッドの引数と戻りクラス型が、それぞれ「＠ｐａｒａｍ」欄と「＠ｒｅｔｕｒｎ」欄に、コメントとして記載される。
【００３３】
（３）補足説明
図２の２列目に記載されている事項は、各メソッド内のコメントとして記載される。
（４）入出力種別〜（６）型
図２におけるこれらの項目は、それぞれ上記（１）〜（２）で説明したように用いられる。
【００３４】
なお、図３に示すソースコードのファイル名は、「ＳｃｒｅｅｎＥｖｅｎｔＬｏｇｉｃ．ｊａｖａ」である。プログラム言語がＪａｖａである場合、ファイル名はクラス名と一致させる必要があるからである。
【００３５】
以上、図２に示すクラス設計書２００の各項目と、図３に示すソースコードとの対応関係について説明した。
【００３６】
一般に、プログラム開発は、まずプログラム設計書を作成し、その後にプログラム開発に入る、という手順を取る。
本実施の形態１に係るソースコード自動生成プログラム１００によれば、図２で説明した書式にしたがってクラス設計書２００を作成しておくのみで、図３で説明したようなクラス雛形ソースコードを自動生成することができる。
そのため、プログラム開発者は、プログラム設計書の書式を図２で説明したものに合わせるのみで、クラス雛形ソースコードを得ることができるので、プログラム開発の手間を削減することができる。
【００３７】
また、本実施の形態１によれば、ソースコードの定型的な部分を自動生成することができるので、プログラム開発者の不注意などに起因するコーディングミスを低減することができる。
【００３８】
実施の形態２．
実施の形態１では、クラス設計書２００に記載されているクラス名やメソッド名などに基づき、クラスの雛形ソースコードを生成する例を説明した。
本発明の実施の形態２では、クラスの雛形ソースコードとともに、ｉｎｔｅｒｆａｃｅのソースコードを生成する例を説明する。
【００３９】
Ｊａｖａ言語では、ｉｎｔｅｒｆａｃｅという仕組みが存在する。ｉｎｔｅｒｆａｃｅは、メソッドの名称、引数、戻り型のみを定義した抽象メソッドのみを有する、クラスに類似した定義体のことである。
ｉｎｔｅｒｆａｃｅは、各クラスがメソッドの実体を備えていることを保証する際や、クラス同士の依存関係を緩めるためなど、比較的頻繁に用いられる。
【００４０】
そこで、クラス設計書２００に記載されているクラス定義から、ｉｎｔｅｒｆａｃｅのソースコードとクラス雛形のソースコードをともに自動生成することを考える。
これにより、ｉｎｔｅｒｆａｃｅを用いてクラス同士の依存関係を緩める等の目的で使用可能な雛形ソースコードを自動生成する。
【００４１】
ただし、自動生成するｉｎｔｅｒｆａｃｅのソースコードとクラス雛形ソースコードの間に、関連性を持たせなければならない。以下、図４〜図５を用いて、そのための留意点について説明する。
【００４２】
図４は、演算部４００が図２のクラス設計書２００に基づき生成するｉｎｔｅｒｆａｃｅのソースコードを示す図である。図４のソースコードは、図３で説明したソースコードとほぼ同様であるが、以下の点が異なる。
【００４３】
（１）７行目において、ｉｎｔｅｒｆａｃｅである旨が明示されている。
（２）各メソッドは抽象メソッドであるため、メソッド定義部分のみが記述されている。
（３）補足説明に相当するコメントは省略されている。
【００４４】
図５は、演算部４００が図２のクラス設計書２００に基づき生成するクラス雛形ソースコードを示す図である。図５のソースコードは、図３で説明したソースコードとほぼ同様であるが、以下の点が異なる。
【００４５】
（１）ソースコードのファイル名は、「ＳｃｒｅｅｎＥｖｅｎｔＬｏｇｉｃＩｍｐｌ．ｊａｖａ」である。これは、ｉｎｔｅｒｆａｃｅのソースコードとクラス雛形のソースコードを区別するために行われる。
【００４６】
（２）１行目のパッケージ名部分の末尾に、「．ｉｍｐｌ」が付与されている。
（３）クラス名は、「ＳｃｒｅｅｎＥｖｅｎｔＬｏｇｉｃＩｍｐｌ」である。
（４）ｉｎｔｅｒｆａｃｅ「ＳｃｒｅｅｎＥｖｅｎｔＬｏｇｉｃ」を実装している旨が、７行目で示されている。
【００４７】
以上、本実施の形態２では、ｉｎｔｅｒｆａｃｅのソースコードとクラス雛形ソースコードの双方を自動生成する例を説明した。
【００４８】
実施の形態３．
実施の形態１〜２では、クラスが備えるメソッドと、各メソッドの引数および戻り値とをクラス設計書２００に記載しておき、これに基づきクラス雛形ソースコードを自動生成する例を説明した。
本発明の実施の形態３では、クラスが備えるメンバ変数をクラス設計書２００に記載しておき、メンバ変数およびそのアクセサメソッドを備えたクラス雛形ソースコードを自動生成する例を説明する。
【００４９】
図６は、本実施の形態３におけるクラス設計書２００の記載項目例を示す図である。以下、図６の各記載項目について説明する。
【００５０】
（１）クラス名〜（３）補足説明
これらの項目については、実施の形態１の図２で説明した内容と同様である。
【００５１】
（４）入出力種別
図６の３列目には、当該クラスが備えるメンバ変数の入出力種別が記載される。メンバ変数については、次項目以降で説明する。
同列の値が「ｉｎ」である場合、当該メンバ変数が保持する値は、当該クラスの外部からセットされるべき旨を表す。
同列の値が「ｏｕｔ」である場合、当該メンバ変数が保持する値は、当該クラスの外部に引き渡されることを表す。
【００５２】
（５）名称
図６の４列目には、各メンバ変数の変数名が記載される。
【００５３】
（６）型
図６の５列目には、各メンバ変数の型が記載される。
なお、実施の形態１で説明した図２では、本列には各メソッドの引数型や戻り型を記載すべきこととしていたが、本実施の形態３では、各メソッドは引数なし、戻り型は「ｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇ」型で固定であるものとする。
したがって、本実施の形態３では、各メソッドの引数や戻り型を記載する欄は必要ないため、同欄にメンバ変数を記載することとした。
なお、必要であれば、メンバ変数を記載する欄をクラス設計書２００内に別途設けてもよい。同時に、各メンバ変数の入出力種別を記載する欄を設けてもよい。
【００５４】
以上、本実施の形態３においてクラス設計書２００に記載すべき事項を説明した。
【００５５】
図７は、演算部４００が図６のクラス設計書２００に基づき生成する雛形ソースコードを示す図である。以下、図６に示すクラス設計書２００の各項目と、図７に示すソースコードとの対応関係について説明する。
【００５６】
（１）クラス名
図７の３行目には、クラス設計書２００に記載されているクラス名が反映されている。なお、クラス名と併せてパッケージ名を記載した場合は、１行目にそのパッケージ名が反映される。パッケージ名を記載しなかった場合は、１行目の記載は省略される。
【００５７】
（２）メソッド名
図７の２２行目以降では、図６の１列目に記載されている各メソッド名に対応する２つのメソッドの雛形が生成されている。各項目について以下に補足する。
【００５８】
（２．１）公開属性
各メソッド雛形は、「ｐｕｂｌｉｃ」公開属性で生成される。
（２．２）メソッド引数および戻り型
各メソッドは、上述の通り引数なしである。また、戻り型は「ｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇ」型で固定である。
【００５９】
（２．３）各メソッドのコメント
２２行目以降の各メソッドの名称部分の直上行には、各メソッドの戻りクラス型が、「＠ｒｅｔｕｒｎ」欄にコメントとして記載される。
【００６０】
（３）補足説明
図６の２列目に記載されている事項は、２２行目以降の各メソッド内のコメントとして記載される。
【００６１】
（４）入出力種別
図６の３列目に記載されている事項は、以下に説明するセッターメソッドとゲッターメソッドのいずれを自動生成すべきかを区別するために用いられる。なお、セッターメソッドとゲッターメソッドを総称して、アクセサ（Ａｃｃｅｓｓｏｒ）メソッドと呼ぶこともある。
【００６２】
（４．１）セッターメソッド
図６の３列目の値が「ｉｎ」であるメンバ変数については、当該メンバ変数の値を当該クラスの外部からセットするためのメソッドが、自動的に生成される。
図６の例では、メンバ変数「ｎａｍｅ」の入出力種別が「ｉｎ」となっているので、同メンバ変数の値をセットするためのメソッド「ｓｅｔＮａｍｅ」（８行目〜１３行目）が自動生成される。
このような、メンバ変数の値を当該クラスの外部からセットするためのメソッドを、セッターメソッドと呼ぶ。
【００６３】
（４．２）ゲッターメソッド
図６の３列目の値が「ｏｕｔ」であるメンバ変数については、当該メンバ変数の値を当該クラスの外部に引き渡すためのメソッドが、自動的に生成される。
図６の例では、メンバ変数「ｄｅｐ」の入出力種別が「ｏｕｔ」となっているので、同メンバ変数の値を当該クラスの外部に引き渡すためのメソッド「ｇｅｔＤｅｐ」（１５行目〜２０行目）が自動生成される。
このような、メンバ変数の値を当該クラスの外部へ引き渡すためのメソッドを、ゲッターメソッドと呼ぶ。
【００６４】
（４．３）各アクセサメソッドの命名規則
各アクセサメソッドは、対応するメンバ変数の最初の１文字のみ大文字とし、それ以外の部分はメンバ変数の名称をそのまま用いる。さらに、セッターメソッドであればメソッド名の最初に「ｓｅｔ」、ゲッターメソッドであればメソッド名の最初に「ｇｅｔ」が付与される。
この命名規則によれば、例えばメンバ変数「ｄｅｐ」のゲッターメソッドは「ｇｅｔＤｅｐ」となる。
このような命名規則を採用することにより、ソースコードの可読性が向上する利点がある。また、後述の実施の形態５で説明する状況下では、別の利点も存在する。詳細は実施の形態５で改めて述べる。
【００６５】
（５）名称
図６の４列目の値は、メンバ変数の名称として用いられる。図７の５〜６行目に、同名称のメンバ変数の定義が記載されている。
なお、各メンバ変数は「ｐｒｏｔｅｃｔｅｄ」属性で定義される。したがって、当該クラスの外部からメンバ変数の値をセットしたり、メンバ変数の値を当該クラスの外部へ引き渡したりするためには、当該クラスの外部よりセッターメソッドやゲッターメソッドを呼び出さなければならない。
したがって、各セッターメソッドやゲッターメソッドは、「ｐｕｂｌｉｃ」属性で定義されている。
【００６６】
（６）型
図６の５列目の値は、各メンバ変数の定義部分に反映される。また、セッターメソッドの引数や、ゲッターメソッドの戻り型にも、同じクラス型が反映される。
【００６７】
なお、図７に示すソースコードのファイル名は、「ＳａｍｐｌｅＡｃｔｉｏｎ．ｊａｖａ」である。
【００６８】
以上、図６に示すクラス設計書２００の各項目と、図７に示すソースコードとの対応関係について説明した。
【００６９】
以上のように、本実施の形態３によれば、メンバ変数を有するクラスの雛形ソースコードを自動生成することができる。また、各メンバ変数に対応するアクセサメソッドを併せて自動生成することもできる。
これにより、メンバ変数やそのアクセサメソッドを大量に記載しなければならない場合でも、コーディングミスを低減することができる。
【００７０】
また、本実施の形態３において、アクセサメソッド以外のメソッドは引数なし、戻り型を固定とすれば、実施の形態１の図２で説明したクラス設計書２００の３〜５列目にメンバ変数関連事項を記載することができる。
そのため、実施の形態１〜２と同じクラス設計書２００の書式を用いて、メンバ変数やアクセサメソッドを有するクラス雛形ソースコードを生成することができる。
【００７１】
実施の形態４．
本発明の実施の形態４では、メンバ変数を有するクラス雛形ソースコードに加え、実施の形態２と同様にｉｎｔｅｒｆａｃｅの雛形ソースコードを自動生成する例を説明する。また、メンバ変数の定義とアクセサメソッドを別クラス内に分離してソースコードを整理する手法も併せて説明する。
なお、クラス設計書２００の記載内容は、実施の形態３と同様である。
【００７２】
図８は、演算部４００が図６のクラス設計書２００に基づき生成するｉｎｔｅｒｆａｃｅのソースコードを示す図である。図８のソースコードは、図７で説明したソースコードと類似しているが、以下の点が異なる。
【００７３】
（１）３行目において、ｉｎｔｅｒｆａｃｅである旨が明示されている。
（２）各メソッドは抽象メソッドであるため、メソッド定義部分のみが記述されている。
（３）補足説明に相当するコメントは省略されている。
（４）メンバ変数に関する記述はない。
【００７４】
図９は、演算部４００が図６のクラス設計書２００に基づき生成する２つのクラス雛形ソースコードのうち１つ目を示す図である。図９のソースコードは、図７で説明したソースコードのうち、メンバ変数に関連する部分を切り出したものである。
【００７５】
（１）ソースコードのファイル名は、「ＳａｍｐｌｅＡｃｔｉｏｎＩＯ．ｊａｖａ」である。
（２）１行目のパッケージ名部分の末尾に、「．ｉｏ」が付与されている。
（３）クラス名は、「ＳａｍｐｌｅＡｃｔｉｏｎＩＯ」である。
（４）メンバ変数と各アクセサメソッドが定義されている。
【００７６】
図１０は、演算部４００が図６のクラス設計書２００に基づき生成するクラス雛形ソースコードを示す図である。図１０のソースコードは、図７で説明したソースコードと以下の点が異なる。
【００７７】
（１）ソースコードのファイル名は、「ＳａｍｐｌｅＡｃｔｉｏｎＩｍｐｌ．ｊａｖａ」である。
（２）１行目のパッケージ名部分の末尾に、「．ｉｍｐｌ」が付与されている。
（３）クラス名は、「ＳａｍｐｌｅＡｃｔｉｏｎＩｍｐｌ」である。
（４）３〜４行目に、「ＳａｍｐｌｅＡｃｔｉｏｎ」「ＳａｍｐｌｅＡｃｔｉｏｎＩＯ」のｉｍｐｏｒｔ宣言が記載されている。
（５）クラス「ＳａｍｐｌｅＡｃｔｉｏｎＩＯ」を継承している旨が、６行目で示されている。
（６）ｉｎｔｅｒｆａｃｅ「ＳａｍｐｌｅＡｃｔｉｏｎ」を実装している旨が、６行目で示されている。
（７）メンバ変数に関する記述はない。これらは継承元のクラス「ＳａｍｐｌｅＡｃｔｉｏｎＩＯ」に記述されているため、本クラスでは改めて記述する必要はない。
【００７８】
以上、本実施の形態４では、ｉｎｔｅｒｆａｃｅのソースコードとクラス雛形ソースコードの双方を自動生成する例を説明した。また、メンバ変数に関連する部分を別クラスに切り出し、そのクラスを継承することで、間接的にメンバ変数とアクセサメソッドを実装する例を説明した。
メンバ変数とアクセサメソッドを他クラスに切り出すことにより、各ソースコードの分量を減らして簡潔にすることができるので、可読性が増し、プログラム開発を行い易いというメリットがある。
【００７９】
実施の形態５．
本発明の実施の形態５では、実施の形態３〜４で説明したソースコードを用いて、簡易なＷｅｂアプリケーションを開発する例を説明する。なお、開発の前提として、非特許文献３に挙げたＪａｖａフレームワーク「Ｓｅａｓａｒ２」を採用するものとする。
【００８０】
まず、Ｓｅａｓａｒ２の特徴について、簡単に説明しておく。
【００８１】
（特徴１）ＤＩ（Ｄｅｐｅｎｄｅｎｃｙ  Ｉｎｊｅｃｔｉｏｎ）
一般に、Ｊａｖａで開発されたアプリケーションは、各クラス同士の連携関係が固定的である。例えば、「クラスＡのメソッドＢからクラスＣのメソッドＤをコールする」という具合である。
この場合、クラスＡとクラスＣが強く結び付けられ、クラス間の依存関係が固定化されてしまうので、例えばクラスＡを修正すると、その影響がクラスＣにも及ぶかもしれないなど、様々な点で不便となる可能性がある。
【００８２】
Ｓｅａｓａｒ２は、このようなクラス間の依存関係を、ソースコードの中ではなく別途準備する設定ファイルに記述することにより、抽象化することを支援するためのフレームワークである。
このような、クラス間の依存関係をクラスの外部からセットすることを、ＤＩと呼ぶ。Ｓｅａｓａｒ２は、ＤＩ手法を用いた開発を支援するためのＤＩフレームワークである。
【００８３】
（特徴２）命名規則にしたがった開発
クラス間の依存関係を設定ファイルに記述すると、ソースコード内におけるクラス間依存関係は抽象化されるが、その反作用として、設定ファイルの記述量が多くなってしまう場合がある。
そこで、Ｓｅａｓａｒ２では、変数やメソッドの名称が、ある所定の命名規則にしたがっている場合には、設定ファイルに個別の依存関係を記述しなくとも、自動的に依存関係が設定されるように設計されている。具体例は、以下の図１１以降で説明する。
【００８４】
以上、Ｓｅａｓａｒ２の特徴について説明した。
次に、本実施の形態５におけるＷｅｂアプリケーションの詳細を説明する。
【００８５】
図１１は、本ＷｅｂアプリケーションのＨＴＭＬソースコードである。
同ＨＴＭＬソースコードは、文字ラベル、テキストボックス、および送信ボタンの３つの画面部品をＷｅｂページ上に配置することを想定したものである。各画面部品には、実施の形態３〜４で説明したＪａｖａソースコードと対応する名称（ｉｄ属性の値）が付けられている。これについては後述する。
【００８６】
図１２は、図１１のＨＴＭＬソースコードをＷｅｂブラウザでそのまま画面表示した場合の表示例を示す画面イメージである。同画面イメージでは、「ｓｐａｎ」タグの部分に何も表示されていない。
ただし、後述する本Ｗｅｂアプリケーションの動作により、この部分の表示は補完されることになる。
【００８７】
本Ｗｅｂアプリケーションでは、図１１のＨＴＭＬファイルに対して取得リクエスト（ＨＴＴＰ  ＧＥＴなど）があった際に、実施の形態４で説明した「ＳａｍｐｌｅＡｃｔｉｏｎＩｍｐｌ」クラスの「ｄｏＩｎｉｔｉａｌｉｚｅ」メソッドがコールされるよう、ＷｅｂサーバやＳｅａｓａｒ２の設定ファイルをあらかじめ設定しておくものとする。
【００８８】
図１３は、本実施の形態５における「ＳａｍｐｌｅＡｃｔｉｏｎＩｍｐｌ」クラスのソースコードである。プログラム開発者は、実施の形態３〜４で説明したような、自動生成されたクラス雛形ソースコードを得る。次に、プログラム開発者は、その雛形ソースコード内に、必要な処理を追加する。
本実施の形態５では、プログラム開発者は、図１３の１３行目、２４行目、２６行目を雛形ソースコードに追加するものとする。
【００８９】
以上、本実施の形態５におけるＷｅｂアプリケーションの構成要素を説明した。
次に、本Ｗｅｂアプリケーションの動作を、Ｓｅａｓａｒ２の動作と併せて説明する。
【００９０】
（１）ｓａｍｐｌｅ．ｈｔｍｌの閲覧時
【００９１】
（１．１）ｓａｍｐｌｅ．ｈｔｍｌの取得要求
Ｗｅｂアプリケーションのユーザは、Ｗｅｂブラウザを起動し、ｓａｍｐｌｅ．ｈｔｍｌのＵＲＬに対して取得要求を発行する。
【００９２】
（１．２）「ｄｏＩｎｉｔｉａｌｉｚｅ」メソッド
Ｓｅａｓａｒ２の設定ファイルの記載に準じて、「ＳａｍｐｌｅＡｃｔｉｏｎＩｍｐｌ」クラスの「ｄｏＩｎｉｔｉａｌｉｚｅ」メソッドがコールされる。
「ｄｏＩｎｉｔｉａｌｉｚｅ」メソッドの中で、メンバ変数「ｄｅｐ」の値が設定される。ここでは、「テストです。」という文字列がセットされる。
【００９３】
（１．３）Ｓｅａｓａｒ２の処理
Ｓｅａｓａｒ２は、ｓａｍｐｌｅ．ｈｔｍｌのソースコードを読み取り、各画面部品とアクセサメソッドの対応付けを行う。ここでは、「ｉｄ＝ｄｅｐ」を有する画面部品が存在するので、これに対応するアクセサメソッドをコールする。
各画面部品とアクセサメソッドの対応関係は、実施の形態３で説明した命名規則と同様である。即ち、ここでは「ｇｅｔＤｅｐ」メソッドがコールされる。
【００９４】
（１．４）「ｇｅｔＤｅｐ」メソッド
「ｇｅｔＤｅｐ」メソッドは、メンバ変数「ｄｅｐ」の値を戻す。ここでは、「ｄｏＩｎｉｔｉａｌｉｚｅ」メソッド内でセットされた「テストです。」という文字列が戻される。
【００９５】
（１．５）画面部品への反映
Ｓｅａｓａｒ２は、「ｇｅｔＤｅｐ」メソッドから戻された値を、「ｉｄ＝ｄｅｐ」に対応する画面部品に対応する。必要に応じて、ＨＴＭＬタグも書き換える。
【００９６】
（１．６）Ｓｅａｓａｒ２処理後のＨＴＭＬ返送
Ｗｅｂサーバは、Ｓｅａｓａｒ２が以上の処理を施した後のＨＴＭＬを、ユーザのＷｅｂブラウザに返送する。
【００９７】
図１４は、ユーザのＷｅｂブラウザに表示されるＷｅｂページ例である。図１２では空白だった部分に、「テストです。」という文字列が反映されていることが分かる。
【００９８】
（２）「ｐｕｓｈ  ｍｅ」ボタン押下時
【００９９】
（２．１）テキスト入力
ユーザは、図１４の状態に続いて、テキストボックスに文字列を入力し、「ｐｕｓｈ  ｍｅ」ボタンを押下する。ここでは、「ａｂｃ」と入力したものと仮定する。
テキストボックスに入力された文字列と、テキストボックスおよび押下ボタンの「ｉｄ」属性の値が、Ｗｅｂサーバ宛に送信される。
【０１００】
（２．２）送信された文字列等を受信
Ｓｅａｓａｒ２は、Ｗｅｂサーバを介して、テキストボックスに入力された文字列、テキストボックスおよび押下ボタンの「ｉｄ」属性の値を、それぞれ受け取る。
【０１０１】
（２．３）Ｓｅａｓａｒ２の処理その１
Ｓｅａｓａｒ２は、受け取った文字列や各画面部品の「ｉｄ」属性の値に基づき、各画面部品とアクセサメソッドの対応付けを行う。ここでは、「ｉｄ＝ｎａｍｅ」を有する画面部品が存在するので、これに対応するアクセサメソッドをコールする。
各画面部品とアクセサメソッドの対応関係は、実施の形態３で説明した命名規則と同様である。即ち、ここでは「ｓｅｔＮａｍｅ」メソッドがコールされる。引数として、テキストボックスに入力された文字列「ａｂｃ」が渡される。
【０１０２】
（２．４）「ｓｅｔＮａｍｅ」メソッド
「ｓｅｔＮａｍｅ」メソッド内で、メンバ変数「ｎａｍｅ」に、テキストボックスに入力された文字列「ａｂｃ」がセットされる。
【０１０３】
（２．５）Ｓｅａｓａｒ２の処理その２
Ｓｅａｓａｒ２は、押下ボタンの「ｉｄ」属性に対応するメソッドを実行する。ここでは、「ＳａｍｐｌｅＡｃｔｉｏｎＩｍｐｌ」クラスの「ｄｏＬｏｇｉｎ」メソッドがコールされる。
【０１０４】
（２．６）「ｄｏＬｏｇｉｎ」メソッド
「ｄｏＬｏｇｉｎ」メソッド内で、既に値をセット済みのメンバ変数「ｎａｍｅ」の値を用いて、適当なログイン処理が実行される。
【０１０５】
以上、本実施の形態５におけるＷｅｂアプリケーションの動作を、Ｓｅａｓａｒ２の働きと対応付けながら説明した。
【０１０６】
以上のように、本実施の形態５によれば、実施の形態３〜４で説明した雛形ソースコードを用いて、Ｗｅｂアプリケーションを短期間で開発することができる。
特に、各アクセサメソッドの命名規則を、Ｓｅａｓａｒ２における各画面部品の命名規則と合わせておき、ＨＴＭＬソースコード内の各画面部品の「ｉｄ」属性をその命名規則に準じて記載しておけば、Ｓｅａｓａｒ２のメリットを大いに享受することができ、開発効率が大幅に向上する。
【図面の簡単な説明】
【０１０７】
【図１】実施の形態１に係るソースコード自動生成プログラム１００を実行するコンピュータの機能ブロック図である。
【図２】クラス設計書２００の記載項目例を示す図である。
【図３】演算部４００が図２のクラス設計書２００に基づき生成する雛形ソースコードを示す図である。
【図４】演算部４００が図２のクラス設計書２００に基づき生成するｉｎｔｅｒｆａｃｅのソースコードを示す図である。
【図５】演算部４００が図２のクラス設計書２００に基づき生成するクラス雛形ソースコードを示す図である。
【図６】実施の形態３におけるクラス設計書２００の記載項目例を示す図である。
【図７】演算部４００が図６のクラス設計書２００に基づき生成する雛形ソースコードを示す図である。
【図８】演算部４００が図６のクラス設計書２００に基づき生成するｉｎｔｅｒｆａｃｅのソースコードを示す図である。
【図９】演算部４００が図６のクラス設計書２００に基づき生成する２つのクラス雛形ソースコードのうち１つ目を示す図である。
【図１０】演算部４００が図６のクラス設計書２００に基づき生成する２つのクラス雛形ソースコードのうち２つ目を示す図である。
【図１１】ＷｅｂアプリケーションのＨＴＭＬソースコードである。
【図１２】図１１のＨＴＭＬソースコードをＷｅｂブラウザでそのまま画面表示した場合の表示例を示す画面イメージである。
【図１３】実施の形態５におけるＳａｍｐｌｅＡｃｔｉｏｎＩｍｐｌクラスのソースコードである。
【図１４】ユーザのＷｅｂブラウザに表示されるＷｅｂページ例である。
【符号の説明】
【０１０８】
１００  ソースコード自動生成プログラム、２００  クラス設計書、３００  記憶部、４００  演算部、５００  表示部。
【図１】
2010152667.tif 000003
【図２】
2010152667.tif 000004
【図３】
2010152667.tif 000005
【図４】
2010152667.tif 000006
【図５】
2010152667.tif 000007
【図６】
2010152667.tif 000008
【図７】
2010152667.tif 000009
【図８】
2010152667.tif 000010
【図９】
2010152667.tif 000011
【図１０】
2010152667.tif 000012
【図１１】
2010152667.tif 000013
【図１２】
2010152667.tif 000014
【図１３】
2010152667.tif 000015
【図１４】
2010152667.tif 000016