(57)【要約】      （修正有）【課題】  データベースのスキーマを記述する情報を利用して、アプリケーションプログラムを効率よく開発するためのプログラム生成装置を提供する。【解決手段】スキーマ情報を取得し、また、データベース操作コードの雛形を保持しておき、取得されたスキーマ情報と保持されているデータベース操作コードの雛形とに基づいてプログラムコードを完成させる。また、データベースで使用されるデータ型とプログラム言語で使用されるデータ型との対応関係を利用したり、データベースの列名の命名規則とプログラム言語で使用されるデータ型と対応付けたりすることでプログラムコードを完成させる。【選択図】  図２
2006004145.tif 000002
【特許請求の範囲】
【請求項１】
データベースへアクセスを行なうプログラムコードを生成するプログラムコード生成装置であって、
前記データベースのスキーマを記述する情報であるスキーマ情報を取得するスキーマ情報取得部と、
生成すべきプログラムコードと対応してデータベース操作コード雛形を保持する操作コード雛形保持部と、
前記スキーマ情報取得部で取得したスキーマ情報と前記操作コード雛形保持部に保持されているデータベース操作コード雛形とに基づいて、プログラムコードを完成させるプログラムコード完成部と、
を有するプログラムコード生成装置。
【請求項２】
前記スキーマ情報の記述で使用される列のデータ型を示す列データ型情報と、前記プログラムコードにて使用される変数のデータ型を示す変数データ型情報とを対応付ける表であるデータ型対応表を保持するデータ型対応表保持部を有し、
前記プログラムコード完成部は、前記データ型対応表保持部で保持されているデータ型対応表を利用してプログラムコードを完成させるデータ型調整手段を有する請求項１に記載のプログラムコード生成装置。
【請求項３】
前記スキーマ情報の記述に現れる列の名前の命名規則を示す列命名規則情報と、前記プログラムコードにて使用される変数のデータ型を示す変数データ型情報とを対応付ける表である第二データ型対応表を保持する第二データ型対応表保持部を有し、
前記プログラムコード完成部は、前記第二データ型対応表保持部で保持されている第二データ型対応表を利用してプログラムコードを完成させる第二データ型調整手段を有する請求項１または２に記載のプログラムコード生成装置。
【請求項４】
前記スキーマ情報取得部は、取得されるスキーマ情報に、特定の列が特定の値を有するかどうかによりその列の値を含む行データが削除されたと扱う論理削除に使用する列を特定する情報である論理削除列情報を取得する論理削除列情報取得手段を有し、
前記操作コード雛形保持部は、論理削除のためのデータベース操作コード雛形を保持し、
前記プログラムコード完成部は、前記論理削除列情報取得手段で取得した論理削除列情報に基づいてプログラムコードを完成させる請求項１から３のいずれか一に記載のプログラムコード生成装置。
【請求項５】
前記プログラムコード完成部にて完成されるプログラムコードは、継承機構を持つプログラム言語で記述されている請求項１から４のいずれか一に記載のプログラムコード生成装置。
【請求項６】
前記プログラムコード完成部にて完成されるプログラムコードは、テーブル名又は／及び列名の文字列を定義し、前記プログラムコードを継承するプログラム部分で参照可能とする請求項５に記載のプログラムコード生成装置。
【請求項７】
前記プログラムコードは、データベースへのデータの挿入、データベースの更新、データの削除、データの検索のいずれか一又は二以上を実現するためのプログラムコードである請求項１から６のいずれか一に記載のプログラムコード生成装置。
【請求項８】
データベースへアクセスを行なうプログラムコードを生成するプログラムコード生成方法であって、
前記データベースのスキーマを記述する情報であるスキーマ情報を取得するスキーマ情報取得ステップと、
生成すべきプログラムコードと対応してデータベース操作コード雛形を読み出す操作コード雛形読出ステップと、
前記スキーマ情報取得ステップで取得したスキーマ情報と前記操作コード雛形読出ステップにて読み出されたデータベース操作コード雛形とに基づいて、プログラムコードを完成させるプログラムコード完成ステップと、
を含むプログラムコード生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムコードを生成するプログラム生成装置に関し、特に、データベースへアクセスを行なうプログラムコードを生成するプログラム生成装置に関する。
【背景技術】
【０００２】
データベースを操作するためには、ＳＱＬ（一般には「Ｓｔｒｕｃｔｕｒｅｄ  Ｑｅｕｒｙ  Ｌａｎｇｕａｇｅ」の略と言われている）などのデータベース操作言語に習熟している必要があるが、一般の人々が習得するには困難が伴なう。そこで、データベースの構造（すなわち、データベースのスキーマ）を示す情報からグラフィカルユーザインターフェース（ＧＵＩ）を生成して、そのＧＵＩを通してデータベースを操作する技術が知られている（例えば、特許文献１参照。）。
【０００３】
一方、データベースの構造を対話形式により作成するツールがいくつか知られており（例えば、非特許文献１参照。）、これらのツールは、スキーマ情報をＣＳＶ（Ｃｏｍｍａ  Ｓｅｐａｒａｔｅｄ  Ｖａｌｕｅｓ）形式やＸＭＬ（ｅＸｔｅｎｅｄｅｄ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）形式で出力している。
【０００４】
また、データベースへアクセスするアプリケーションプログラムの開発においては、人間が個別にプログラムを書いている。
【０００５】
図１は、データベースへアクセスするアプリケーションプログラムの動作を例示する。データベースへアクセスするアプリケーションプログラム１０１は、プロセス間通信などの手法を用いて、リレーショナルデータベース管理サーバ１０２と通信を行なう。具体的には、アプリケーションプログラム１０１がＳＱＬ文をリレーショナルデータベース管理サーバ１０２へ送信すると、そのＳＱＬ文に従って、リレーショナルデータベース管理サーバ１０２はデータベース１０３の参照あるいは変更などの操作を行ない、その結果をアプリケーションプログラムへ返すことを行なう。ＳＱＬ文の種類としては、検索を行なうＳＥＬＥＣＴ文、データを追加するＩＮＳＥＲＴ文、更新を行なうＵＰＤＡＴＥ文、削除を行なうＤＥＬＥＴＥ文、があり、また、データベースの構造を変更するスキーマ操作のための文や、スキーマの構造を参照するための文がある。これらの文は、アプリケーションプログラムに文字列として埋め込まれており、適宜実行されるようになっている。
【特許文献１】特開２００４−１２６６８０号公報
【非特許文献１】"製品情報>ＡｌｌＦｕｓｉｏｎ  ＥＲｗｉｎ  Ｄａｔａ  Ｍｏｄｅｌｅｒ"，［ｏｎｌｉｎｅ］，２００４，［検索日：２００４．０６．０７］，インターネット<http://www.jsys-products.com/product/al_erwin/>
【発明の開示】
【発明が解決しようとする課題】
【０００６】
このようにデータベースへアクセスするアプリケーションプログラムの開発においては、人間が個別にプログラムを書いているため、時間や労力が掛かる割には、プログラムの信頼性が高くならないという課題がある。データベースのスキーマが変更になると、対応するアプリケーションプログラムを個別に修正しなければならず、さらに労力と時間がかかっている。また、データベースで使用できるデータ型とプログラム言語で使用できるデータ型が同じではなく、アプリケーションプログラムの開発においては、常にデータ型の違いを意識しなければならず、この点でバグを誘発しやすい。
【０００７】
ＧＵＩを通してデータベースを操作する技術は、人間との対話機能を重視しているため、この技術を転用して上記の問題を解決することはできない。
【０００８】
また、データベースの構造を対話形式により作成するツールが生成するＣＳＶ形式やＸＭＬ形式によるスキーマを記述するファイルはテキスト形式であり、利用しやすい形式であるにもかかわらず、このようなファイルを利用してアプリケーションプログラムの開発の信頼性などを向上させることなどは、あまり行なわれていない。
【０００９】
そこで、本発明においては、スキーマを記述するファイルなどを利用して、アプリケーションプログラムを効率よく開発するためのプログラムコード生成装置、プログラムコード生成方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
かかる目的を解決するために、本発明においては、スキーマ情報を取得し、また、データベース操作コードの雛形を保持しておき、取得されたスキーマ情報と保持されているデータベース操作コードの雛形とに基づいてプログラムコードを完成させるプログラム生成装置を提供する。これにより、データベースへアクセスするアプリケーションプログラムの開発工程が自動化され、アプリケーションプログラムの生産性が向上し、また、信頼性も向上することとなる。
【００１１】
また、プログラムコード生成装置においては、データベースで使用されるデータ型とプログラム言語で使用されるデータ型との対応関係を有し、その対応関係を利用してプログラムコードが生成されるようになっていてもよい。これにより、プログラマがデータ型の違いを意識することが軽減され、バグが減少する。
【００１２】
また、データベースの列名の命名規則とプログラム言語で使用するデータ型とを対応付けてもよい。これにより、列の役割に応じたアプリケーションプログラムが開発できることになる。
【００１３】
また、特定の列の値が特定の値を有するかどうかによりその列を含む行データが削除されたと扱う、いわゆる論理削除に対応したプログラムコードを生成することにより、論理削除という複雑な操作も自動的にプログラミングすることができ、生産性や信頼性の向上ができる。
【００１４】
また、生成されるプログラムコードは、継承（インヘリタンス）機構を持つプログラム言語で記述されるようになっていてもよい。これにより、生成されたプログラムコードを、継承機構を用いて人間が修正することが容易となる。
【００１５】
また、生成されたプログラムコードにおいて、テーブル名又は／及び列名の文字列を変数や定数などとして定義し、生成されたプログラムコードを継承するプログラム部分で、それらの変数や定数などを参照可能としてもよい。これにより、テーブル名や列名の変更があっても人間が修正したプログラムコードを修正する必要がなくなったり、テーブル名や列名の変更により、人間が修正したプログラムコードを修正する必要があることを容易に知ることができる。
【発明の効果】
【００１６】
本発明により、データベースへアクセスするアプリケーションプログラムの開発工程が自動化され、アプリケーションプログラムの生産性が向上し、また、信頼性も向上するなどの効果が得られる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明を実施するための最良の形態について、実施形態として図を用いて説明する。なお、本発明は、これら実施形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施し得る。
【００１８】
（実施形態１：主に請求項１、７、８について説明する）
【００１９】
本発明の実施形態１として、スキーマ情報を取得し、また、データベース操作コードの雛形を保持しておき、取得されたスキーマ情報と保持されているデータベース操作コードの雛形とに基づいてプログラムコードを完成させるプログラム生成装置、プログラム生成方法について説明する。
【００２０】
（実施形態１：構成）
本実施形態に係るプログラムコード生成装置は、データベースへアクセスを行なうプログラムコードを生成する。「アクセス」とはデータベースを管理するサーバと通信を行なったり、あるいは、データベースを管理するためのライブラリを操作したりすることにより、データベースの内容を参照したり、変更したりすることである。
【００２１】
図２は、本実施形態に係るプログラムコード生成装置の機能ブロック図を例示する。プログラムコード生成装置２００は、スキーマ情報取得部２０１と、操作コード雛形保持部２０２と、プログラムコード完成部２０３と、を有する。
【００２２】
なお、本実施形態に限らず、本発明のプログラムコード生成装置の構成要素である各部は、ハードウェア、ソフトウェア、ハードウェアとソフトウェア（プログラム）の両者、のいずれかによって構成することが可能であり、したがって、プログラムコード生成装置は、計算機を用いて実現することが可能である。たとえば、ＣＰＵ、メモリ、バス、インターフェース、周辺装置などから構成されるハードウェアと、これらのハードウェア上にて実行可能なソフトウェアを用いて実現することができる。また、そのようなソフトウェア（プログラム）を媒体に記録することも可能である。
【００２３】
「スキーマ情報取得部」２０１は、スキーマ情報を取得する。「スキーマ情報」とは、前記データベースのスキーマを記述する情報である。すなわち、データベースの構造を表現する情報である。データベースとしてリレーショナルデータベースを使用する場合には、データベースは一または複数の列からなる表により構成される。したがって、この場合には、表の構造を表わす情報がスキーマ情報となる。
【００２４】
図３は、リレーショナルデータベースの表を例示する。図３では、表としてＴＡＢＬＥ＿ＡとＴＡＢＬＥ＿Ｂとが示されている。ＴＡＢＬＥ＿Ａは、ＩＤ、Ａ＿ＣＯＤＥ、Ａ＿ＦＬＡＧ、Ａ＿ＤＡＴＥ、Ａ＿ＴＩＭＥＳＴＡＭＰ、ＤＥＬＥＴＥ＿ＴＩＭＥＳＴＡＭＰという名前の列からなる。また、ＴＡＢＬＥ＿Ｂは、ＩＤ、ＴＡＢＬＥ＿Ａ＿ＩＤ、Ｂ＿ＮＡＭＥという名前の列からなる。
【００２５】
図４は、図３に例示されたデータベースの構造を記述するスキーマ情報を例示する。図４では、一行がテーブルの列の情報を記述している。なお、図４の第一行目は、「＃」で始まっているので、コメント行として扱われ、コンマで区切られたそれぞれの部分が何を表わしているかを人間が理解しやすいように表わしている。すなわち、各行の最初の部分は、テーブルの名前を表わし、次の部分は、列の名前を表わし、以後順に、列のデータ型、列がプライマリキーであるかどうか、空値を格納することができるかどうか、列に対するコメント、を表わす。なお、「プライマリキー」とは、表に格納される行を一意に特定するための列を意味する。例えば、表に社員の情報を格納する場合、社員に一人一人に互いに異なるように与えられた社員番号により社員が一人特定できるので、社員番号を格納する列がプライマリキーとなる。また、「空値」とは、列の値が、特定されない、あるいは、不明であることを表わす特別な値である。
【００２６】
スキーマ情報取得部２０１は、例えば、図４に例示されたスキーマ情報を読み込むことを行ない、スキーマ情報の取得を行なう。もし、プログラムコード生成装置２００が計算機を用いて実現される場合には、スキーマ情報の取得の結果としてスキーマ情報を表わすデータ構造が主記憶メモリに構築される。
【００２７】
図５は、主記憶メモリに構築されるデータ構造であって、スキーマ情報を表わすデータ構造を例示する。ノード５０１は、ＴＡＢＬＥ＿Ａという表に対応して作られており、ノード５０３、５０４、５０５などは、ＴＡＢＬＥ＿Ａの各列に対応して作られたノードであり、各列の名前、データ型、プライマリキーかどうか、空値を格納できるかどうかが格納される。ＴＡＢＬＥ＿Ｂという表に対応するノード５０２も同様に作られる。
【００２８】
「操作コード雛形保持部」２０２は、生成すべきプログラムコードと対応して、データベース操作コード雛形を保持する。「データベース操作コード雛形」とはプログラムコードを生成するために参照されるプログラムの雛形であるプロトタイプを意味する。例えば、関数を単位としてプログラムが構築されるＣ言語などでは、関数の雛形を意味する。また、「生成すべきプログラムコードと対応して」とは、生成されるプログラムコードそれぞれが、データベース操作コード雛形に基づいていることを意味する。操作コード雛形保持部２０２は、例えば、計算機のハードディスク領域にデータベース操作コード雛形を保持する。あるいは、プログラムコード生成装置を計算機で実現するためのプログラムのデータとしてデータベース操作コード雛形が保持されるようになっていてもよい。なお、プログラムのデータとしてデータベース操作コード雛形が保持されている場合には、図６などで例示するようにデータベース操作コード雛形が一まとまりになっている必要はなく、適宜分断された形式で保持されていてもよい。
【００２９】
図６から図９は、データベース操作コード雛形を例示する。図６は、ＳＱＬ文のＳＥＬＥＣＴ文に対応する雛形であり、図７は、ＩＮＳＥＲＴ文に対応する雛形であり、図８は、ＵＰＤＡＴＥ文に対応する雛形であり、図９は、ＤＥＬＥＴＥ文に対応する雛形である。
【００３０】
図６から図９を代表し、図６に例示されたデータベース操作コード雛形について説明する。１行目は、関数名を表わす。なお、＄とそれに続くアルファベットは、データベース操作コード雛形からプログラムコードを生成する際の変数を意味するものとする。例えば、＄Ｔは、テーブル名を表わす。したがって、＄Ｔは、ＴＡＢＬＥ＿Ａという値を取り得る。また、＄Ｃは操作対象となる列名を表わす。例えば、＄Ｃは、Ａ＿ＣＯＤＥという値を取り得る。したがって、ｓｅｌｅｃｔ＿＄Ｔ＿＄Ｃは、ｓｅｌｅｃｔ＿ＴＡＢＬＥ＿Ａ＿Ａ＿ＣＯＤＥに置換され得る。３行目から７行目は、関数の中で使用する作業用の変数である。
【００３１】
３行目の「ＥＸＥＣ  ＳＱＬ  ＤＥＣＬＡＲＥ  ＳＥＣＴＩＯＮ」は、ＳＱＬ文をプログラムに埋め込みコンパイルなどを可能とするためのＳＱＬプリプロセッサへの指示を表わす。このように「ＥＸＥＣ  ＳＱＬ」で始まる行は、ＳＱＬプリプロセッサへの指示を表わす。３行目の指示は、ＳＱＬプリプロセッサが認識するべき変数の宣言の開始を意味する。また、７行目の指示は、ＳＱＬプリプロセッサが認識するべき変数の宣言の終了を意味する。したがって、ｓｐｖ、ｓｏｖ、ｓｔｍｔという変数がＳＱＬプリプロセッサに認識される。
【００３２】
９行目は、関数に渡された引数の値、すなわち、変数ｐｖの値をｓｐｖに代入する。また、１０行目は、実行するべきＳＱＬ文を表わす文字列をｓｔｍｔという変数に代入する。なお、ここの文字列に現れる＄Ｐという変数は、プライマリキーを表わすとする。また、「？」は、文字列により表現されるＳＱＬ文が有するパラメータを示す記号である。
【００３３】
１２行目は、ｓｔｍｔという変数に代入された文字列をＳＱＬ文として実行するための準備を行ない、その準備が行なわれたＳＱＬ文にｓ＿ｓｔｍｔという名前を付すことを表わしている。「実行するための準備」とは、例えば、文字列で表わされたＳＱＬ文に構文エラーがないかどうか、「？」で示されるパラメータの位置を管理するなどのことである。なお、：ｓｔｍｔに現れる「：」は、その次のｓｔｍｔが、ＳＱＬプリプロセッサにより認識される変数であることを意味している。
【００３４】
１３行目では、ｓ＿ｓｔｍｔという名前を付されたＳＱＬ文のパラメータにｓｐｖの値を代入して実行し、その結果をｓｏｖという変数に代入するべきことを意味する。これにより、プライマリキーの値がｓｐｖに代入されものである行が検索され、その行の＄Ｃという名前の列の値がｓｏｖに代入されることになる。
【００３５】
１４行目では、ｓ＿ｓｔｍｔという名前が付されたＳＱＬ文の情報を破棄する。例えば、１２行目や１３行目で動的にメモリ領域が確保された場合には、そのメモリ領域の破棄を行なう。
【００３６】
１６行目では、ｓｏｖの値を返すことを行なう。
【００３７】
したがって、図６に例示されたデータベース操作コード雛形は、＄Ｔという表の行のうち、引数に与えられた値をプライマリキーの列の値として持つ行を検索し、その行の＄Ｃという列に格納されている値を得る関数を表わしていることになる。
【００３８】
以下、図７は、引数として与えられた値をプライマリキーとして持つ行を＄Ｔという表に挿入する関数を表わす。図８は、＄Ｔという表の行のうち、プライマリキーの列の値が最初の引数となっている行の＄Ｃという列の値を第二引数の値に変更する関数を表わす。図９は、引数として与えられた値をプライマリキーとして持つ行を＄Ｔという表から削除する関数を表わしている。
【００３９】
なお、図６から図９に例示されたデータベース操作コード雛形は、あくまでも例であり、種々の変形などが可能である。例えば、図６においては、一つの列の値を指定して検索を行なっているが、複数の列の値を指定して検索するようにデータベース操作コード雛形を変形することは当業者にとって容易であるし、値を指定する列をプライマリキーに制限される理由もなく、任意の列を指定するようにすることもできる。また、図７では、検索結果が一であることを想定しているが、より複雑な記述をすることにより、検索結果が０または複数である場合にも対応が可能である。同様に、図７、図８においては、複数の列の値を挿入、あるいは変更するようにすることもできる。また、図９においてはプライマリキー以外の列の値を用いて行を削除するようにすることもできる。
【００４０】
また、図６から図９においては、ＳＱＬプリプロセッサを必要としている言語の場合について説明したが、例えば、Ｊａｖａ（登録商標）言語などのオブジェクト指向言語を使用することにより、ＳＱＬプリプロセッサを不要とすることができる。例えば、connがリレーショナルデータベース管理システムとのプロセス間通信を表わすオブジェクトを格納する変数であるとすると、
s_stmt = conn.PrepareStatement("select $C where $T where $P = ?");
という PrepareStatement というメソッド呼び出しにより、実行するべきＳＱＬ文の準備を行ない、その結果を示す情報を s_stmt という変数に代入し、
s_stmt.setValue(1, pv);
により、１番目のパラメータに変数 pv の値を設定し、
s_stmt.executeQuery();
により、パラメータの値が設定された準備されたＳＱＬ文を問い合わせ文として実行するようにできる。
【００４１】
「プログラムコード完成部」２０３は、スキーマ情報取得部２０１で取得したスキーマ情報と、操作コード雛形保持部２０２に保持されているデータベース操作コード雛形に基づいてプログラムコードを完成させる。例えば、＄Ｔ、＄Ｃ、＄Ｔ、＄Ｐに適宜値を設定してデータベース操作コード雛形に現れる＄Ｔ、＄Ｃ、＄Ｔ、＄の置換を行ない、プログラムコードを生成する。
【００４２】
図１０は、＄ＴにＴＡＢＬＥ＿Ａ、＄ＣにＡ＿ＣＯＤＥ、＄ＰにＩＤを設定して図６に例示されたデータベース操作コード雛形を置換して得られるプログラムコードを例示する。
【００４３】
なお、上述したように、複数の列の値を指定して検索などする場合には、複数の列の値だけの引数を有する関数を定義するようにしてもよいが、それでは、生成されるプログラムコードが複雑になるため、例えば、複数の値を一つにまとめるプログラム言語が有する機能を用いるようなプログラムコードを完成させるようにしてもよい。
【００４４】
図１１は、プログラム言語の複数の値を一つにまとめる機能を有して、複数の列の値を挿入するプログラムコードの例を示す。図１１（Ａ）は、例えば、Ｃ言語やＣ＋＋言語などでの構造体（あるいはクラス）として、ＴＡＢＬＥ＿Ａの行を表わすデータ構造を定義した例を示す。また、図１１（Ｂ）は、図１１（Ａ）で定義された構造体を用いて、ＴＡＢＬＥ＿Ａにデータを挿入する関数の例を示す。
【００４５】
（実施形態１：処理の流れ）
図１２は、プログラムコード生成装置の処理の流れ図を例示する。プログラムコード生成装置は、スキーマ情報を取得するごとに、図１２の流れ図を実行する。ステップＳ１２０１において、スキーマ情報取得部２０１によりスキーマ情報を取得する（スキーマ情報取得ステップ）。ステップＳ１２０２において、プログラムコードの生成を終了するべきかどうか判断する。この判断は、例えば、データベース操作コード雛形を全て使用したかどうか、あるいは、例えば、＄Ｔ、＄Ｃなどの変数の値の全ての組み合わせ、あるいは所定の組み合わせを用いてプログラムコードの生成が終了したかどうかなどに基づいて行なう。もし生成を終了するべきでないと判断されれば、ステップＳ１２０３へ処理を移行する。ステップＳ１２０３において、操作コード雛形保持部２０２よりデータベース操作コード雛形を読み出す（操作コード雛形読出ステップ）。データベース操作コード雛形が複数あれば、所定の順序で読み出し、あるいは、プログラムコード生成装置の操作者によりマウスやキーボードなどを用いて指示が行なわれていれば、その指示に従って読み出す。ステップＳ１２０４において、取得されたスキーマ情報と読み出されたデータベース操作コード雛形とに基づいて、プログラムコード完成部２０３により、プログラムコードを完成する。完成されたプログラムコードは、例えば、ファイルとして記録したり、プリンタに出力したりする。ステップＳ１２０４の処理が終了すれば、ステップＳ１２０２へ処理を戻す。
【００４６】
（実施形態１：主な効果）
本実施形態により、データベースへアクセスするアプリケーションプログラムの開発工程が自動化され、アプリケーションプログラムの生産性が向上し、また、信頼性も向上することとなる。
【００４７】
（実施形態２：主に請求項２について説明する）
【００４８】
本発明の実施形態２として、実施形態１のプログラムコード生成装置であって、データベースで使用されるデータ型とプログラム言語で使用されるデータ型との対応関係を有し、その対応関係を利用してプログラムコードを生成するプログラムコード生成装置について説明する。実施形態１は、Ｐｅｒｌ言語やＬｉｓｐ言語などのデータ型についてあまり配慮する必要のないプログラミング言語に主に適していたが、実施形態１は、Ｃ言語など、データ型について配慮する必要のある言語に主に適した実施形態である。
【００４９】
（実施形態２：構成）
図１３は、本実施形態に係るプログラムコード生成装置の機能ブロック図を例示する。プログラムコード生成装置１３００は、スキーマ情報取得部２０１と、操作コード雛形保持部２０２と、プログラムコード完成部２０３と、データ型対応表保持部１３０１を有し、プログラムコード完成部２０３は、データ型調整手段１３０２を有している。
【００５０】
したがって、本実施形態に係るプログラムコード生成装置は、実施形態１に係るプログラムコード生成装置が、さらにデータ型対応表保持部１３０１を有し、そのプログラムコード完成部２０３がデータ型調整手段１３０２を有する構成となっている。
【００５１】
「データ型対応表保持部」１３０１は、データ型対応表を保持する。「データ型対応表」とは、列データ型情報と変数データ型情報とを対応付ける表である。ここに、「列データ型情報」とは、前記スキーマ情報の記述で使用される列のデータ型を示す情報であり、「変数データ型情報」とは、前記プログラムコードにて使用される変数のデータ型を示す情報である。
【００５２】
図１４は、データ型対応表の一例を示す。図１４に例示された左の列には、列データ型情報が格納され、右の列には、変数データ型情報が格納されている。なお、図１４に例示されている表の列データ型情報は、図４に例示されたデータ型に、not null や with null という空値可の値に対応する情報を加えた情報となっている。空値はプログラミング言語では特殊な扱いを必要とするためである。例えば、空値を取らない文字列型は、プログラミング言語では、文字列の配列とすることができるが、空値を取る場合には、プログラミング言語では、例えば文字列のアドレスを格納するポインタ型とし、ＮＵＬＬという値により空値を表わすようにする必要がある。同様に、ある列に整数型（Ｉｎｔｅｇｅｒ）であって空値を取らない値が格納される場合には、プログラミング言語で通常使用できるｉｎｔ型が使用できるが、空値を取り得る整数型には、Ｉｎｔｅｇｅｒという特別な型（例えば、Ｃ＋＋言語やＪａｖａ（登録商標）言語ではクラスとして実装される）を用いる必要がある。
【００５３】
「データ型調整手段」１３０２は、データ型対応表保持部１３０１で保持されているデータ型対応表を利用してプログラムコードを完成させる。例えば、スキーマ情報取得部２０１で取得されたスキーマ情報に対応して構築されるデータ構造（図５参照）の各列に対応するノードにプログラムコードにて使用される変数のデータ型を示す情報を付加して、その付加された情報を参照しながらプログラムコードを完成させる。
【００５４】
図１５は、図５に例示されたデータ構造の各列に対応するノードにプログラムコードにて使用される変数のデータ型を示す情報を、データ型調整手段などにより付加した例を示す。例えば、ＴＡＢＬＥ＿Ａという表のＩＤという列は、ＩＮＴＥＧＥＲ型であり、空値をとらないので、ｉｎｔを表わすノード１５０１を付加し、ＩＤ＿ＣＨＡＲという列の型は、ＣＨＡＲ（２０）、すなわち、２０バイトの長さの文字列型であるので、ｃｈａｒ［２０］を表わすノード１５０２を付加する。データ型調整手段は、例えば、このように変数のデータ型を示す情報が付加されたデータ構造を参照して、適宜プログラムコードを完成させる。
【００５５】
図１６は、本実施形態で用いるべきデータベース操作コード雛形を例示する。実施形態１との違いは、変数がデータ型を有する点であり、＄Ｐｔ、＄Ｃｔは、データ型対応表により、列のデータ型に対応付けられている変数のデータ型を表わす。例えば、＄Ｐｔには、ｉｎｔ、＄Ｃｔには、ｃｈａｒ［２０］が設定され、結果として、図１７に例示されるプログラムコードが完成される。
【００５６】
（実施形態２：主な効果）
本実施形態により、プログラマがデータ型の違いを意識することが軽減され、バグが減少するなどの効果が生ずる。
【００５７】
（実施形態３：主に請求項３について説明する）
【００５８】
本発明の実施形態３として、実施形態１または２のプログラムコード生成装置であって、列名の命名規則とプログラム言語で使用するデータ型とを対応付けてプログラムコードを生成するプログラムコード生成装置について説明する。
【００５９】
（実施形態３：構成）
図１８は、本実施形態に係るプログラムコード生成装置の機能ブロック図を例示する。プログラムコード生成装置１８００は、スキーマ情報取得部２０１と、操作コード雛形保持部２０２と、プログラムコード完成部２０３と、第二データ型対応表保持部１８０１を有し、プログラムコード完成部２０３は、第二データ型調整手段１８０２を有している。また、本実施形態に係るプログラムコード生成装置は、データ型対応表保持部１３０１を有し、プログラムコード完成部２０３は、データ型調整手段を有していてもよい。例えば、図１９に例示される機能ブロックで示される構成であってもよい。
【００６０】
したがって、本実施形態に係るプログラムコード生成装置は、実施形態１または２のプログラムコード生成装置が、第二データ型対応表保持部１８０１を有し、プログラムコード完成部２０３が第二データ型調整手段１８０２を有する構成となっている。
【００６１】
「第二データ型対応表保持部」１８０１は、第二データ型対応表を保持する。「第二データ型対応表」とは、列命名規則情報と変数データ型情報とを対応付ける表である。ここに、「列命名規則情報」とは、前記スキーマ情報の記述に現れる列の名前の命名規則を示す情報である。例えば、列の名前をワイルドカードを用いて表現したり、正規表現を用いて表現したりなどして、命名規則を示す。「変数データ型情報」とは、実施形態２と同じであり、前記プログラムコードにて使用される変数のデータ型を示す情報である。
【００６２】
図２０は、第二データ型対応表の一例を示す。図２０に例示された左の列には、列命名規則情報が格納され、右の列には、変数データ型情報が格納されている。なお、図２０には例示されている表の列命名規則情報は、ワイルドカードを用いて命名規則を表わしている。例えば、「＊＿ＦＬＡＧ」とは、＊の部分として任意の長さの文字列を用い、その後に＿ＦＬＡＧを連接するという命名規則を表わしている。一般に、名前の後半部分に＿ＦＬＡＧを有する列は、真か偽かを表わす場合が多い。そこで、プログラム言語では、例えば、ｕｎｓｉｇｎｅｄ  ｉｎｔという型を用いる場合が多い。あるいは真偽値を表わす例えばＢｏｏｌｅａｎという型があれば、その型を用いるように対応付けてもよい。また、名前の後半部分に＿ＴＩＭＥＳＴＡＭＰを有する列は、時刻を表わす場合がほとんどであるので、プログラム言語で時刻を表わす例えばｔｉｍｅ＿ｔという型を対応づけるようにしてもよい。
【００６３】
なお、本実施形態に係るプログラムコード生成装置がデータ型対応表保持部１３０１を有し、プログラムコード完成部２０３がデータ型調整手段１３０２を有する場合には、データ型調整手段１３０２によるデータ型と第二データ型調整手段１８０２によるデータ型とが異なる場合があるが、その場合には、その旨を画面に表示してプログラムコード生成装置の操作者にデータ型の選択を行なわせたり、あるいは、第二データ型調整手段１８０２によるデータ型を優先させたりしてもよい。また、図４に例示されたスキーマ情報のコメントなどに、どちらのデータ型を優先させるかの指定を含ませるようにしてもよい。
【００６４】
（実施形態３：主な効果）
本実施形態により、列の役割に応じたアプリケーションプログラムが生成されることになり、プログラマにとって読みやすいアプリケーションプログラムが生成され、結果として、プログラマが修正しやすいアプリケーションプログラムが作成されることになる。
【００６５】
（実施形態４：主に請求項４について説明する）
【００６６】
本発明の実施形態４として、実施形態１から３のいずれか一のプログラムコード生成装置であって、論理削除に対応したプログラムコードを生成するプログラムコード生成装置について説明する。
【００６７】
（実施形態４：構成）
図２１は、本実施形態に係るプログラムコード生成装置の機能ブロック図を例示する。プログラムコード生成装置２１００は、スキーマ情報取得部２０１と、操作コード雛形保持部２０２と、プログラムコード完成部２０３と、を有し、スキーマ情報取得部２０１は、論理削除列情報取得手段２１０１を有する。なお、図２１は、本実施形態に係るプログラムコード生成装置２１００の要部を示しているに過ぎず、プログラムコード生成装置２１００は、さらにデータ型対応表保持部１３０１、第二データ型対応表保持部１８０１を有し、プログラムコード完成部２０３は、それぞれ、データ型調整手段１３０２、第二データ型調整手段１８０２を有していてもよい。
【００６８】
したがって、本実施形態に係るプログラムコード生成装置は、実施形態１から３のいずれか一の実施形態に係るプログラムコード生成装置のスキーマ情報取得部２０１が論理削除列情報取得手段２１０１を有する構成となっている。
【００６９】
「論理削除列情報取得手段」２１０１は、論理削除列情報を取得する。「論理削除列情報」とは、論理削除に使用する列を特定する情報であり、「論理削除」とは、特定の列が特定の値を有するかどうかによりその列の値を含む行データが削除されたと扱う手法をいう（例えば、<http://www.kei-ha.co.jp/magdb/magdb0001.html>参照。）。例えば、図３に例示されたＴＡＢＬＥ＿Ａのある行のＤＥＬＥＴＥ＿ＴＩＭＥＳＴＡＭＰという列に格納されている値が空値以外の値を取っていれば、その行は削除されたと扱うことをいう。
【００７０】
図２２は、ＸＭＬにより表現されている論理削除列情報を例示している。この例では、ＤＥＬＥＴＥ＿ＴＩＭＥＳＴＡＭＰというＴｉｍｅｓｔａｍｐ型の列が、ＮＵＬＬすなわち空値であれば、削除されないとみなし（すなわち、有効（ｖａｌｉｄ）な行として扱う）、空値でなければ削除されたとみなすことを表わしている。
【００７１】
論理削除列情報取得手段２１０１は、図２２に例示されるような論理削除列情報を読み取るなどして取得をして、例えば、図５に例示されるデータ構造の列に対応するノードにフラグなどを立てることにより、その列が論理削除に使用されることを表わす。
【００７２】
このように論理削除の手法を使用する場合には、表への挿入、削除が複雑となり、操作に対応するＳＱＬ文を単に実行するだけでは実現ができない。図２３は挿入の際の処理の流れ図を例示している。プログラムコード完成部２０３は、例えば、図２３の処理を表現するデータベース操作コード雛形に基づいてプログラムコードを完成させる。ステップＳ２３０１において、まず、ｉｎｓｅｒｔ文を実行する。ステップＳ２３０２において、エラーが発生したかどうかを判定する。エラーが発生しなければ、挿入の処理を終了する。もし、エラーが発生すれば、ステップＳ２３０３へ処理を移行させ、一意制約エラーが発生したかどうかを判定する。「一意制約エラー」とは、プライマリキーの値が、すでに表に挿入されている行のプライマリキーの列の値と重複したことによるエラーを意味する。もし、一意制約エラーが発生したと判定されれば、ステップＳ２３０４へ処理を移行させ、そうでなければ、ステップＳ２３０５へ処理を移行させる。
【００７３】
ステップＳ２３０４においては、論理削除用の列の値をｖａｌｉｄとして指定された値へ更新する。図２２の場合には、空値に更新する。ステップＳ２３０５においては、一意制約エラー以外のエラーが発生したので、適切なエラー処理を行なう。
【００７４】
なお、ステップＳ２３０２におけるようなエラーが発生したかどうかは、例えば、ｓｑｌｅｒｒｏｒという変数の値を調べることにより検出が可能である。あるいは、Ｊａｖａ（登録商標）言語などの場合には、例外（ｅｘｃｅｐｔｉｏｎ）が発生したかどうかで検出が可能であり、ｔｒｙ−ｃａｔｃｈ節などにより検出できる。また、発生したエラーが一意制約エラーであるかどうかは、ｓｑｌｅｒｒｏｒの値を分析したり、発生した例外の型やその値を分析することにより判定が可能である。
【００７５】
また、削除の場合には、ＳＱＬ文のＤＥＬＥＴＥ文を実行するのではなく、図２４に例示されるように、論理削除用の列の値をｄｅｌｅｔｅｄとして指定された値へ更新することを行なう。図２２の場合には、空値以外の値に変更する。具体的に例を挙げると、ＤＥＬＥＴＥ＿ＴＩＭＥＳＴＡＭＰの値を、現在の時刻を取得してその時刻の値に更新するなどである。
【００７６】
同様に検索の場合には、論理削除用の列の値が、ｖａｌｉｄとして指定された値である行を検索するように、検索条件をａｎｄで付加を行なう。図２２の場合には、「ＤＥＬＥＴＥ＿ＴＩＭＥＳＴＡＭＰ  ｉｓＮｕｌｌ」という条件をａｎｄの一肢として付加を行なう。
【００７７】
（実施形態４：主な効果）
本実施形態により、論理削除という複雑な操作も自動的にプログラミングすることができ、生産性や信頼性の向上ができる。
【００７８】
（実施形態５：主に請求項５について説明する）
【００７９】
本発明の実施形態５として、継承機構を持つプログラム言語で記述されたプログラムコードを生成するプログラムコード生成装置について説明する。
【００８０】
（実施形態５：構成）
本実施形態に係るプログラムコード生成装置は、実施形態１から４のいずれか一に係るプログラムコード生成装置であって、そのプログラムコード完成部にて完成されるプログラムコードは、継承機構を持つプログラム言語で記述されているプログラムコード生成装置である。
【００８１】
例えば、操作コード雛形保持部に保持されるデータベース操作コード雛形が、継承機構を持つプログラム言語にもとづいて記述されているプログラムコード生成装置である。
【００８２】
なお、継承機構とは、オブジェクト指向言語などが有する機構であり、既に定義されているオブジェクト（対象）を基にして拡張や変更を加えたオブジェクトを定義することである。
【００８３】
図２５は、継承について説明するための図であり、オブジェクトの一種であるクラス２５０１が既に定義され、自身に対する操作を表わすメソッド１とメソッド２とを有するとする。サブクラス２５０２は、クラス２５０１を基にして拡張や変更を加えるために定義されるクラスである。サブクラス２５０２は、メソッド２とメソッド３を有するが、サブクラス２５０２のメソッド２は、クラス２５０１のメソッド２を変更するメソッドとして扱われ、クラス２５０１に無いメソッド３は、クラス２５０１を拡張するメソッドとして扱われることになる。ここでは、メソッドについて説明したが、クラスの有する変数などについても同様のことが言える。
【００８４】
なお、図２５の場合、サブクラス２５０２は、クラス２５０１を継承するといい、クラス２５０１のサブクラス（Ｓｕｂｃｌａｓｓ）であるという。また、クラス２５０１をサブクラス２５０１のスーパークラス（Ｓｕｐｅｒｃｌａｓｓ）または、上位クラスという。
【００８５】
そこで、本実施形態では、プログラムコード生成装置は、クラス２５０１に相当するクラスの定義をプログラムコードとして生成することとし、データベースへアクセスする操作をメソッドとして提供する。このようにすれば、サブクラス２５０２を例えば人間が定義することにより、プログラムコード生成装置が生成したプログラムコードを拡張したり変更したりすることが容易に行なえる。例えば、クラス２５０１とサブクラス２５０２との記述は異なるファイルで行なうことができるので、プログラムコード生成装置によりクラス２５０１の記述が新たに生成されても、直接にクラス２５０１の記述を人間などが変更してしまうと、プログラムコードを生成するたびに変更を加えないといけないが、サブクラスにより拡張や変更を行なうようにすれば、プログラムコードの生成を行なっても、サブクラス２５０２の記述には影響が及ばない。
【００８６】
（実施形態５：主な効果）
本実施形態により、プログラムコード生成装置で生成されたプログラムコードの修正拡張を容易に行なうことができる。
【００８７】
（実施形態６：主に請求項６について説明する）
【００８８】
本発明の実施形態６として、実施形態５のプログラムコード生成装置であって、テーブル名又は／及び列名の文字列を定数として定義して、参照可能とするプログラムコード生成装置について説明する。
【００８９】
（実施形態６：構成）
本実施形態に係るプログラムコード生成装置は、実施形態５のプログラムコード生成装置であって、プログラムコード完成部にて完成されるプログラムコードは、テーブル名又は／及び列名の文字列を定義し、そのプログラムコードを継承するプログラム部分で参照可能とする。
【００９０】
図２６は、本実施形態に係るプログラムコード生成装置が生成するプログラムコードを例示する。プログラムコードは、ＴＡＢＬＥ＿Ａ＿ｍａｎａｇｅｒというクラスの定義であり、Ｓｔｒｉｎｇ型の変数として、表の名前を表わすために、ＴＡＢＬＥ＿Ａとして"ＴＡＢＬＥ＿Ａ"という文字列を定義し、ＩＤ、Ａ＿ＣＯＤＥなどの列の名前を表わすために、ＳＱＬＣｏｌｕｍｎ型の変数としてＩＤ、Ａ＿ＣＯＤＥを定義している。なお、変数であることは本質ではなく、値の変更が不可能な定数であってもよい。このように表の名前や列の名前を定義しておくことにより、サブクラスで、その定義を使用することができる。
【００９１】
図２７は、ＴＡＢＬＥ＿Ａ＿ｍａｎａｇｅｒのサブクラスとしてＡ＿ｍａｎａｇｅｒを定義した例を示している。列であるＡ＿ＣＯＤＥの値が特定の文字列と等しいことを示す条件式を生成するために、ＴＡＢＬＥ＿Ａ＿ｍａｎａｇｅｒで定義されたＡ＿ＣＯＤＥという変数を参照している。このようにすることにより、Ａ＿ＣＯＤＥという列の名前が別の名前に変更になった場合には、ＴＡＢＬＥ＿Ａ＿ｍａｎａｇｅｒのＡ＿ＣＯＤＥの定義の部分を修正するだけで済む。また、列名や表の名前が変更された場合には、列名や表の名前を表わす変数の名前も変更されるようにしておけば、列名や表の名前が変更されると、サブクラスのコンパイルでエラーが発生するので、列名や表の名前が変更になったことを容易に知ることができ、アプリケーションプログラムの信頼性が向上する。
【００９２】
（実施形態６：プログラムコード例）
図２８と図２９は、本実施形態に係るプログラムコード生成装置により生成されたプログラムコードを例示する。この例では、ＣＵＳＴＯＭＥＲという表が定義されており、ＣＵＳＴＯＭＥＲは、ＩＤ、ＮＡＭＥ、ＢＩＲＴＨ＿ＤＡＴＥ、ＣＵＳＴＯＭＥＲ＿ＣＯＤＥ、という名前の列を有する。それぞれの列のデータ型は、ＩＮＴＥＧＥＲ、ＶＡＲＣＨＡＲ、ＤＡＴＥ、ＶＡＲＣＨＡＲ、である。図２８は、ＣＵＳＴＯＭＥＲという表を操作するために生成されたＡｂｓｔｒａｃｔＣｕｓｔｏｍｅｒＭａｎａｇｅｒというクラスである。その中で、ＣｕｓｔｏｍｅｒＥｎｔｉｔｙというクラスが用いられているが、これは、ＣＵＳＴＯＭＥＲという表に格納される行データを表わすクラスである。ＣｕｓｔｏｍｅｒＥｎｔｉｔｙは、図２９に定義されているＡｂｓｔｒａｃｔＣｕｓｔｏｍｅｒＥｎｔｉｔｙのサブクラスである。図２９に示されているように、ＡｂｓｔｒａｃｔＣｕｓｔｏｍｅｒＥｎｔｉｔｙは、列に対応するｉｄ、ｎａｍｅ、ｂｉｒｔｈＤａｔｅ、ｃｕｓｔｏｍｅｒＣｏｄｅという変数を持ち、それぞれの変数に値をセットするメソッド（例えば、ｓｅｔＩｄ）と変数の値を取得するメソッド（例えば、ｇｅｔＩｄ）を持っている。
【００９３】
図３０と図３１は、図２８と図２９とに定義されたクラスを拡張あるいは変更するためのクラス定義を例示する。図３０は、ＡｂｓｔｒａｃｔＣｕｓｔｏｍｅｒＭａｎａｇｅｒというクラスのサブクラスとしてＣｕｓｔｏｍｅｒＭａｎａｇｅｒを定義しており、ＣＵＳＴＯＭＥＲ＿ＣＯＤＥの列の値により検索を行なうｆｉｎｄＢｙＣｕｓｔｏｍｅｒＣｏｄｅというメソッドを定義している。この中で、ＡｂｓｔｒａｃｔＣｕｓｔｏｍｅｒＭａｎａｇｅｒで定義されているＣＵＳＴＯＭＥＲ＿ＣＯＤＥという変数を参照している。例えば、もし、ＣＵＳＴＯＭＥＲ＿ＣＯＤＥという列の名前が別の名前に変更されると、変数の名前が変更されるので、コンパイルエラーが発生し、ＣｕｓｔｏｍｅｒＭａｎａｇｅｒを修正しなければならないことを検出できる。なお、ｑｕｅｒｙというメソッドは、ＡｂｓｔｒａｃｔＣｕｓｔｏｍｅｒＭａｎａｇｅｒの上位クラスで定義されているメソッドである。図３１は、ＡｂｓｔｒｃｔＣｕｓｔｏｍｅｒＥｎｔｉｔｙのサブクラスであるＣｕｓｔｏｍｅｒＥｎｔｉｔｙの定義である。
【００９４】
（実施形態６：主な効果）
本実施形態により、列名や表の名前の変更に伴なうプログラムの変更を少なくしたり、あるいは、列名や表の名前に変更があり、プログラムを変更しなければならないことを簡単に知ることができ、信頼性の高いアプリケーションプログラムが開発できる。
【産業上の利用可能性】
【００９５】
本発明に係るプログラムコード生成装置、プログラムコード生成方法は、データベースへアクセスするアプリケーションプログラムの開発工程が自動化され、アプリケーションプログラムの生産性が向上し、また、信頼性も向上するなどの効果が得られ、産業上有用である。
【図面の簡単な説明】
【００９６】
【図１】データベースへアクセスするアプリケーションプログラムの動作を説明する図
【図２】本発明の実施形態１に係るプログラムコード生成装置の機能ブロック図
【図３】リレーショナルデータベースの表の一例図
【図４】スキーマ情報の一例図
【図５】主記憶メモリに構築されるデータ構造であって、スキーマ情報を表わすデータ構造の一例図
【図６】データベース操作コード雛形の一例図
【図７】データベース操作コード雛形の一例図
【図８】データベース操作コード雛形の一例図
【図９】データベース操作コード雛形の一例図
【図１０】データベース操作コード雛形を置換して得られるプログラムコードの一例図
【図１１】プログラムコードの一例図
【図１２】プログラムコード生成装置の処理の流れ図
【図１３】本発明の実施形態２に係るプログラムコード生成装置の機能ブロック図
【図１４】データ型対応表の一例図
【図１５】図５に例示されたデータ構造の各列に対応するノードにプログラムコードにて使用される変数のデータ型を示す情報を付加した状態を示す図
【図１６】本発明の実施形態２で用いるべきデータベース操作コード雛形の一例図
【図１７】プログラムコードの一例図
【図１８】本発明の実施形態３に係るプログラムコード生成装置の機能ブロック図
【図１９】本発明の実施形態３に係るプログラムコード生成装置の機能ブロック図
【図２０】第二データ型対応表の一例図
【図２１】本発明の実施形態４に係るプログラムコード生成装置の機能ブロック図
【図２２】論理削除列情報の一例図
【図２３】論理削除を用いる場合のプログラムコードにおける挿入の処理の流れ図
【図２４】論理削除を用いる場合のプログラムコードにおける削除の処理の流れ図
【図２５】継承について説明するための図
【図２６】本発明の実施形態６に係るプログラムコード生成装置が生成するプログラムコードの一例図
【図２７】ＴＡＢＬＥ＿Ａ＿ｍａｎａｇｅｒのサブクラスとしてＡ＿ｍａｎａｇｅｒを定義した一例図
【図２８】生成されたプログラムコードの一例図
【図２９】生成されたプログラムコードの一例図
【図３０】生成されたプログラムコードのサブクラスの一例図
【図３１】生成されたプログラムコードのサブクラスの一例図
【符号の説明】
【００９７】
２００  プログラムコード生成装置
２０１  スキーマ情報取得部
２０２  操作コード雛形保持部
２０３  プログラムコード完成部
【図１】
2006004145.tif 000003
【図２】
2006004145.tif 000004
【図３】
2006004145.tif 000005
【図４】
2006004145.tif 000006
【図５】
2006004145.tif 000007
【図６】
2006004145.tif 000008
【図７】
2006004145.tif 000009
【図８】
2006004145.tif 000010
【図９】
2006004145.tif 000011
【図１０】
2006004145.tif 000012
【図１１】
2006004145.tif 000013
【図１２】
2006004145.tif 000014
【図１３】
2006004145.tif 000015
【図１４】
2006004145.tif 000016
【図１５】
2006004145.tif 000017
【図１６】
2006004145.tif 000018
【図１７】
2006004145.tif 000019
【図１８】
2006004145.tif 000020
【図１９】
2006004145.tif 000021
【図２０】
2006004145.tif 000022
【図２１】
2006004145.tif 000023
【図２２】
2006004145.tif 000024
【図２３】
2006004145.tif 000025
【図２４】
2006004145.tif 000026
【図２５】
2006004145.tif 000027
【図２６】
2006004145.tif 000028
【図２７】
2006004145.tif 000029
【図２８】
2006004145.tif 000030
【図２９】
2006004145.tif 000031
【図３０】
2006004145.tif 000032
【図３１】
2006004145.tif 000033