(57)【要約】      （修正有）【課題】ＣＯＢＯＬ言語とＪＡＶＡ（登録商標）言語との間では、言語仕様の面で大きな隔たりがある。ＣＯＢＯＬコードをＪＡＶＡコードに変換する場合に、ＣＯＢＯＬコード上で記述されている処理をいかに効率的にＪＡＶＡコードで実現するかは、データ構造の設計によるところが大きい。そこでＪＡＶＡコードの仕様を満たし且つ高速で効率的な実行を可能とするデータ構造及び該データ構造を用いたＪＡＶＡコードの実行方法を提供する。【解決手段】ＣＯＢＯＬコードから変換されたＪＡＶＡコードを含むプログラムを実行するコンピュータ・システムは、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言であるラッパークラスをデータ型とするオブジェクトの少なくとも１の宣言を有するＪＡＶＡコードを含むプログラムを保持する記憶部と、上記プログラムを上記記憶部からメモリ内に読み出し、該プログラムを実行するＣＰＵとを含む。【選択図】図６Ａ
2010086218.tif 000002
【特許請求の範囲】
【請求項１】
ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行するコンピュータ・システムであって、
ラッパークラスをデータ型とするオブジェクトの少なくとも１の宣言を有するＪＡＶＡコードを含むプログラムを保持する記憶部であって、前記宣言夫々は、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言である、前記記憶部と、
前記プログラムを前記記憶部からメモリ内に読み出し、該プログラムを実行するＣＰＵと
を含む、前記コンピュータ・システム。
【請求項２】
前記ラッパークラスが、ＣＯＢＯＬコードにおいて宣言されているデータ項目のデータ（以下、第１のデータ）に対応するデータ（以下、第２のデータ）を管理する機能を有する、請求項１に記載のコンピュータ・システム。
【請求項３】
前記ラッパークラスが、
前記第２のデータを格納する第１のchar配列と、
前記第２のデータの文字数を格納する変数と、
前記第２のデータが格納される位置を表すオフセット値を格納する変数と
を含む、請求項２に記載のコンピュータ・システム。
【請求項４】
前記ラッパークラスから生成されるオブジェクト（以下、第１のオブジェクト）が、
前記第２のデータに対応する第３のデータを管理し、及び
前記第１のchar配列に対応する第２のchar配列と、
前記第３のデータの文字数を格納する前記変数に対応する第１の変数と、
前記第３のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第２の変数と
を含む、請求項３に記載のコンピュータ・システム。
【請求項５】
前記第２のchar配列が、
前記第３のデータを格納し、又は、
前記第１のオブジェクトの属する階層構造において上位階層にあり且つ前記ラッパークラスから生成されるところのオブジェクト（以下、第２のオブジェクト）に含まれる第３のchar配列についてのメモリ領域を共有し、
ここで、前記第２のオブジェクトは、前記第１のchar配列に対応する前記第３のchar配列を含み、及び前記第３のchar配列に対して前記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
前記第３のchar配列は、前記第３のデータが格納される前記メモリ領域を含む、請求項４に記載のコンピュータ・システム。
【請求項６】
前記第１の変数が、前記第３のデータの文字数を格納する、請求項４に記載のコンピュータ・システム。
【請求項７】
前記第２の変数が、前記メモリ領域上で前記第３のデータが格納される位置を表すオフセット値を格納する、請求項５に記載のコンピュータ・システム。
【請求項８】
前記ラッパークラスが、
数値型データを格納する変数と、
前記数値型データと前記第１のchar配列上のデータとの相互変換を行うための０又は１のオブジェクトと、
前記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含む、請求項３に記載のコンピュータ・システム。
【請求項９】
前記ラッパークラスから生成されるオブジェクト（以下、第１のオブジェクト）が、
前記第２のデータに対応する第３のデータを管理し、及び
前記第１のchar配列に対応する第２のchar配列と、
前記第３のデータの文字数を格納する前記変数に対応する第１の変数と、
前記第３のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第２の変数と、
前記数値型データを格納する前記変数に対応する第３の変数と、
前記数値型データを格納する変数の有効性を示す前記フラグに対応する第１のフラグと、
前記char配列表現の有効性を示す前記フラグに対応する第２のフラグと
を含み、
前記ラッパークラスが前記相互変換を行うためのオブジェクトを含む場合、前記相互変換を行うためのオブジェクトに対応する第１の相互変換オブジェクトと
をさらに含む、請求項８に記載のコンピュータ・システム。
【請求項１０】
前記ラッパークラスが、前記第１のchar配列についてのメモリ領域を共有する命令をさらに含み、
前記ラッパークラスから生成されるオブジェクト（以下、第１のオブジェクト）が、前記第１のchar配列に対応する第２のchar配列及び前記共有する命令を含み、
前記第１のオブジェクトの共有する命令が、
前記第２のchar配列についてのメモリ領域を、前記ラッパークラスから生成され且つ前記第１のchar配列に対応する第４のchar配列を有するところの第３のオブジェクトに含まれる前記第４のchar配列についてのメモリ領域と共有する命令
を含む、請求項３に記載のコンピュータ・システム。
【請求項１１】
前記第２のデータが、ＣＯＢＯＬのＲＥＤＥＦＩＮＥＳ句で宣言される第１のデータに対応するデータであり、
前記第１のオブジェクトの共有する命令が、前記第１のオブジェクトの生成において実行されるコンストラクタに含まれる、請求項１０に記載のコンピュータ・システム。
【請求項１２】
前記ラッパークラスが、前記第１のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも１のオブジェクト（以下、第４のオブジェクト）の定義をさらに含み、
前記ＣＰＵが下記命令をさらに実行し、該命令が、
前記第３のデータのセット又はゲットの命令を実行する命令と、
前記第２のchar配列についてのメモリ領域が割り当てられていない場合、
前記第２のchar配列に対してメモリ領域を割り当てる命令と、
前記第４のオブジェクトに含まれる第５のchar配列についてのメモリ領域を共有する命令であって、
前記第４のオブジェクトが、
前記第２のデータに対応する第４のデータを管理し、及び
前記第１のchar配列に対応する前記第５のchar配列と、
前記第４のデータの文字数を格納する前記変数に対応する第４の変数と、
前記第４のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第５の変数と
を含む、前記共有する命令と、
前記第５の変数に対して、前記第４のデータの前記第２のchar配列についての前記メモリ領域における位置を設定する命令と
を含む、請求項４に記載のコンピュータ・システム。
【請求項１３】
前記共有する命令が、
前記第５のchar配列に対してメモリ領域が割り当てられている場合に、前記第５のchar配列に格納された前記第４のデータを前記第２のchar配列にコピーする命令をさらに含む、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記ラッパークラスが、前記第１のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも１のオブジェクト（以下、第４のオブジェクト）の定義をさらに含み、
前記ＣＰＵが下記命令をさらに実行し、該命令が、
前記第３のデータのセット又はゲットの命令を実行する命令と、
前記第２のchar配列についてのメモリ領域が割り当てられていない場合、
前記第２のchar配列に対してメモリ領域を割り当てる命令と、
前記第４のオブジェクトに含まれる第５のchar配列についてのメモリ領域を共有する命令であって、
前記第４のオブジェクトが、
前記第２のデータに対応する第４のデータを管理し、及び
前記第１のchar配列に対応する前記第５のchar配列と、
前記第４のデータの文字数を格納する前記変数に対応する第４の変数と、
前記第４のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第５の変数と、
前記数値型データを格納する前記変数に対応する第６の変数と、
前記相互変換を行うためのオブジェクトに対応する第２の相互変換オブジェクトと、
前記数値型データを格納する変数の有効性を示す前記フラグに対応する第３のフラグと、
前記char配列表現の有効性を示す前記フラグに対応する第４のフラグと
を含む、前記共有する命令と、
前記第５の変数に対して、前記第４のデータの前記第２のchar配列についての前記メモリ領域における位置を設定する命令と
を含む、請求項９に記載のコンピュータ・システム。
【請求項１５】
前記共有する命令が、
前記第５のchar配列に対してメモリ領域が割り当てられている場合に、前記第５のchar配列に格納された前記第４のデータを前記第２のchar配列にコピーする命令をさらに含む、請求項１４に記載のコンピュータ・システム。
【請求項１６】
前記コピーする命令が、
前記第４のオブジェクトの有する前記第３のフラグを無効に設定する命令
をさらに含む、請求項１５に記載のコンピュータ・システム。
【請求項１７】
セットされるデータとして数値型データが与えられた場合、前記ＣＰＵが下記命令をさらに実行し、該命令が、
前記第３の変数に前記数値型データをセットする命令と、
前記第２のフラグを無効に設定する命令と
を含む、請求項９に記載のコンピュータ・システム。
【請求項１８】
前記第３の変数に前記数値型データをセットする命令が、
前記第１のフラグを有効に設定する命令
をさらに含む、請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記命令の実行がゲットの命令であり、
前記ＣＰＵが下記命令をさらに実行し、該命令が、
前記メモリ領域が共有された前記第５のchar配列から前記第４のデータを取り出す命令
を含む、請求項１４に記載のコンピュータ・システム。
【請求項２０】
前記命令の実行がゲットの命令であり、
前記ＣＰＵが下記命令をさらに実行し、該命令が、
前記第４のフラグを取得し、該取得した第４のフラグが有効に設定されていることを確認する命令
を含む、請求項１９に記載のコンピュータ・システム。
【請求項２１】
前記ＣＰＵが下記命令をさらに実行し、該命令が、
前記第３の変数から数値型データを取得する命令と、
前記第１の相互変換オブジェクトを用いて、前記取得したデータを文字型のデータに変換する命令と、
前記変換された文字型のデータを前記第２のchar配列に設定する命令と、
前記第２のフラグを有効に設定する命令と
を含む、請求項９に記載のコンピュータ・システム。
【請求項２２】
前記ＣＰＵが下記命令をさらに実行し、該命令が、
前記第２のchar配列から文字型のデータを取得する命令と、
前記第１の相互変換オブジェクトを用いて、前記取得した文字型のデータを数値型データに変換する命令と、
前記変換された数値型データを前記第３の変数に設定する命令と、
前記第１のフラグを有効に設定する命令と
を含む、請求項９に記載のコンピュータ・システム。
【請求項２３】
ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行する方法において、コンピュータ・システムに下記ステップを実行させる方法であって、
ラッパークラスをデータ型とするオブジェクトの少なくとも１の宣言を有する前記プログラムを記憶部からメモリ内に読み出すステップであって、前記宣言夫々は、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言である、前記読み出すステップと、
前記読み出したプログラムを実行するステップと
を含む、前記方法。
【請求項２４】
ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行する方法において、コンピュータ・システムに下記ステップを実行させる方法であって、
ラッパークラスをデータ型とするオブジェクトの少なくとも１の宣言を有するＪＡＶＡコードを含むプログラムを記憶部からメモリ内に読み出すステップであって、
前記宣言夫々は、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言であり、前記ラッパークラスは、ＣＯＢＯＬコードにおいて宣言されているデータ項目のデータ（以下、第１のデータ）に対応するデータ（以下、第２のデータ）を管理する機能を有し、
前記ラッパークラスは、
前記第２のデータを格納する第１のchar配列と、
前記第２のデータの文字数を格納する変数と、
前記第２のデータが格納される位置を表すオフセット値を格納する変数と、
数値型データを格納する０又は１の変数と、
前記数値型データと前記第１のchar配列上のデータとの相互変換を行うための０又は１のオブジェクトと、
前記数値型データを格納する変数の有効性を示す０又は１のフラグと、
char配列表現の有効性を示す０又は１のフラグと、
前記ラッパークラスから生成される０以上のオブジェクトの定義と
を含み、
前記ラッパークラスから生成されるオブジェクト（以下、第１のオブジェクト）は、
前記第２のデータに対応する第３のデータを管理し、及び
前記第１のchar配列に対応する第２のchar配列と、
前記第３のデータの文字数を格納する前記変数に対応する第１の変数と、
前記第３のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第２の変数と、
前記第１のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも１のオブジェクト（以下、下位階層のオブジェクト）と
を含み、
前記下位階層のオブジェクトは、
前記第２のデータに対応する第４のデータを管理し、及び
前記第１のchar配列に対応する前記第３のchar配列と、
前記第４のデータの文字数を格納する前記変数に対応する第３の変数と、
前記第４のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第４の変数と、
前記数値型データを格納する前記変数に対応する第５の変数と、
前記相互変換を行うためのオブジェクトに対応する第２の相互変換オブジェクトと、
前記数値型データを格納する変数の有効性を示す前記フラグに対応する第１のフラグと、
前記char配列表現の有効性を示す前記フラグに対応する第２のフラグと
を含む、
前記読み出すステップと、
前記第３のデータのセット又はゲットの命令を実行するステップと、
前記第２のchar配列についてのメモリ領域が割り当てられていない場合、
前記第２のchar配列に対してメモリ領域を割り当てるステップと、
前記下位階層のオブジェクトに含まれる第３のchar配列についてのメモリ領域を共有するステップと、
前記第４の変数に対して、前記第４のデータの前記第２のchar配列についての前記メモリ領域における位置を設定するステップと
を含む、前記方法。
【請求項２５】
コンピュータに、請求項２３〜２４のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラムに関する。
【背景技術】
【０００２】
いわゆるレガシーマイグレーションとは、メインフレームにおいて構築されたシステムを、ＵＮＩＸ又はＷｉｎｄｏｗｓ（商標）などのプラットフォームに移植することをいう。レガシーマイグレーションの一つの態様として、ＣＯＢＯＬからＪＡＶＡ（商標）へのコード変換の需要が年々高まっている。ＣＯＢＯＬからＪＡＶＡ（商標）へのコード変換のために、開発者は、トランスレータと呼ばれる自動変換プログラムを使い、引き続き、変換後のコードに対して一部手動でチューニングなどを施すのが一般的である。よって、変換後のＪＡＶＡ（商標）コードの実行性能は、トランスレータの変換コードの質及びその実行時ライブラリの性能に大きく依存する。
【０００３】
ＣＯＢＯＬの特徴の一つは、データ項目の宣言とデータ領域とが関連付けられていることである。よって、データ項目及びメモリの管理をＪＡＶＡ（商標）でどのように実装するかによって、変換後のＪＡＶＡ（商標）コードの実行性能が大きく変わりうる。
従来のトランスレータでは、小数点を含まない数値データはint型又はlong型に変換され、小数点を含む数値データはBigDecimal型に変換され、及び文字データはString型に変換されてきた。また、階層的な集団データ項目（ｇｒｏｕｐ  ｄａｔａ  ｉｔｅｍ）は、階層ごとに内部又は外部クラスのオブジェクトとして定義されてきた。
このような実装の問題点は、それぞれのデータ項目が個別のＪＡＶＡ（商標）のデータ型として表現されることである。String型及びBigDecimal型といった作成後にその状態を変えることのできないデータ型のオブジェクトが用いられた場合、変数の代入又は表示などが実行されるたびに、大量のオブジェクトが新たに生成され、大量のコピー操作が行われてしまう。このような非効率なオブジェクトの生成又はコピー操作は、ＣＯＢＯＬコードから変換され実用化されているＪＡＶＡ（商標）コードを実装している大規模商用アプリケーションにおいても頻繁に見られる。このことは、変換後のＪＡＶＡ（商標）コードの性能が低い大きな原因となっている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ＣＯＢＯＬ言語とＪＡＶＡ（商標）言語との間では、言語仕様の面で大きな隔たりがある。ＣＯＢＯＬコードをＪＡＶＡ（商標）コードに変換する場合に、ＣＯＢＯＬコード上で記述されている処理をいかに効率的にＪＡＶＡ（商標）コードで実現するかは、データ構造の設計によるところが大きい。従って、ＪＡＶＡ（商標）コードの仕様を満たし且つ高速で効率的な実行を可能とするデータ構造及び該データ構造を用いたＪＡＶＡ（商標）コードの実行方法が求められている。
【課題を解決するための手段】
【０００５】
本発明は、ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行するコンピュータ・システムを提供する。該コンピュータ・システムは、
ラッパークラスをデータ型とするオブジェクトの少なくとも１の宣言を有するＪＡＶＡ（商標）コードを含むプログラムを保持する記憶部であって、上記宣言夫々は、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記記憶部と、
上記プログラムを上記記憶部からメモリ内に読み出し、該プログラムを実行するＣＰＵと
を含む。
【０００６】
本発明の１つの実施態様では、上記ラッパークラスは、ＣＯＢＯＬコードにおいて宣言されているデータ項目のデータ（以下、第１のデータ）に対応するデータ（以下、第２のデータ）を管理する機能を有する。
【０００７】
本発明の１つの実施態様では、上記ラッパークラスが、
上記第２のデータを格納する第１のchar配列と、
上記第２のデータの文字数を格納する変数と、
上記第２のデータが格納される位置を表すオフセット値を格納する変数と
を含む。
【０００８】
本発明の１つの実施態様では、上記ラッパークラスから生成されるオブジェクト（以下、第１のオブジェクト）が、
上記第２のデータに対応する第３のデータを管理し、及び
上記第１のchar配列に対応する第２のchar配列と、
上記第３のデータの文字数を格納する上記変数に対応する第１の変数と、
上記第３のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第２の変数と
を含む。
【０００９】
本発明の１つの実施態様では、上記第２のchar配列が、
上記第３のデータを格納し、又は、
上記第１のオブジェクトの属する階層構造において上位階層にあり且つ上記ラッパークラスから生成されるところのオブジェクト（以下、第２のオブジェクト）に含まれる第３のchar配列についてのメモリ領域を共有し、
ここで、上記第２のオブジェクトは、上記第１のchar配列に対応する上記第３のchar配列を含み、及び上記第３のchar配列に対して上記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
上記第３のchar配列は、上記第３のデータが格納される上記メモリ領域を含む。
【００１０】
本発明の１つの実施態様では、上記第１の変数が、上記第３のデータの文字数を格納する。
【００１１】
本発明の１つの実施態様では、上記第２の変数が、上記メモリ領域上で上記第３のデータが格納される位置を表すオフセット値を格納する。
【００１２】
本発明の１つの実施態様では、上記ラッパークラスが、
数値型データを格納する変数と、
上記数値型データと上記第１のchar配列上のデータとの相互変換を行うための０又は１のオブジェクト変数と、
上記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含む。
【００１３】
本発明の１つの実施態様では、ラッパークラスから生成されるオブジェクト（第１のオブジェクト）が、
上記第２のデータに対応する第３のデータを管理し、及び
上記第１のchar配列に対応する第２のchar配列と、
上記第３のデータの文字数を格納する上記変数に対応する第１の変数と、
上記第３のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第２の変数と、
上記数値型データを格納する上記変数に対応する第３の変数と、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第１のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第２のフラグと
を含み、
上記ラッパークラスが上記相互変換を行うためのオブジェクトを含む場合、上記相互変換を行うためのオブジェクトに対応する第１の相互変換オブジェクトと
をさらに含む。
【００１４】
本発明の１つの実施態様では、ラッパークラスが、上記第１のchar配列についてのメモリ領域を共有する命令をさらに含み、
上記第１のオブジェクトが、上記第１のchar配列に対応する第２のchar配列及び上記共有する命令を含み、
上記第１のオブジェクトの共有する命令が、
上記第２のchar配列についてのメモリ領域を、上記ラッパークラスから生成され且つ上記第１のchar配列に対応する第４のchar配列を有するところの第３のオブジェクトに含まれる上記第４のchar配列についてのメモリ領域と共有する命令
を含む。
【００１５】
本発明の１つの実施態様では、上記第２のデータが、ＣＯＢＯＬのＲＥＤＥＦＩＮＥＳ句で宣言される第１のデータに対応するデータであり、
上記第１のオブジェクトの共有する命令が、上記第１のオブジェクトの生成において実行されるコンストラクタに含まれる。
【００１６】
本発明の１つの実施態様では、上記ラッパークラスが、上記第１のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも１のオブジェクト（以下、第４のオブジェクト）の定義をさらに含み、
上記ＣＰＵが下記命令をさらに実行し、該命令が、
上記第３のデータのセット又はゲットの命令を実行する命令と、
上記第２のchar配列についてのメモリ領域が割り当てられていない場合、
上記第２のchar配列に対してメモリ領域を割り当てる命令と、
上記第４のオブジェクトに含まれる第５のchar配列についてのメモリ領域を共有する命令であって、
上記第４のオブジェクトが、
上記第２のデータに対応する第４のデータを管理し、及び
上記第１のchar配列に対応する上記第５のchar配列と、
上記第４のデータの文字数を格納する上記変数に対応する第４の変数と、
上記第４のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第５の変数と
を含む、上記共有する命令と、
上記第５の変数に対して、上記第４のデータの上記第２のchar配列についての上記メモリ領域における位置を設定する命令と
を含む。
【００１７】
本発明の１つの実施態様では、上記共有する命令が、
上記第５のchar配列に対してメモリ領域が割り当てられている場合に、上記第５のchar配列に格納された上記第４のデータを上記第２のchar配列にコピーする命令をさらに含む。
【００１８】
本発明の１つの実施態様では、上記ラッパークラスが、上記第１のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも１のオブジェクト（第４のオブジェクト）の定義をさらに含み、
上記ＣＰＵが下記命令をさらに実行し、該命令が、
上記第３のデータのセット又はゲットの命令を実行する命令と、
上記第２のchar配列についてのメモリ領域が割り当てられていない場合、
上記第２のchar配列に対してメモリ領域を割り当てる命令と、
上記第４のオブジェクトに含まれる第５のchar配列についてのメモリ領域を共有する命令であって、
上記第４のオブジェクトが、
上記第２のデータに対応する第４のデータを管理し、及び
上記第１のchar配列に対応する上記第５のchar配列と、
上記第４のデータの文字数を格納する上記変数に対応する第４の変数と、
上記第４のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第５の変数と、
上記数値型データを格納する上記変数に対応する第６の変数と、
上記相互変換を行うためのオブジェクトに対応する第２の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第３のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第４のフラグと
を含む、上記共有する命令と、
上記第５の変数に対して、上記第４のデータの上記第２のchar配列についての上記メモリ領域における位置を設定する命令と
を含む。
【００１９】
本発明の１つの実施態様では、上記共有する命令が、
上記第５のchar配列に対してメモリ領域が割り当てられている場合に、上記第５のchar配列に格納された上記第４のデータを上記第２のchar配列にコピーする命令をさらに含む。
【００２０】
本発明の１つの実施態様では、上記コピーする命令が、
上記第４のオブジェクトの有する上記第３のフラグを無効に設定する命令
をさらに含む。
【００２１】
本発明の１つの実施態様では、
セットされるデータとして数値型データが与えられた場合、上記ＣＰＵが下記命令をさらに実行し、該命令が、
上記第３の変数に上記数値型データをセットする命令と、
上記第２のフラグを無効に設定する命令と
を含む。
【００２２】
本発明の１つの実施態様では、上記第３の変数に上記数値型データをセットする命令が、
上記第１のフラグを有効に設定する命令
をさらに含む。
【００２３】
本発明の１つの実施態様では、上記命令の実行がゲットの命令であり、
上記ＣＰＵが下記命令をさらに実行し、該命令が、
上記メモリ領域が共有された上記第５のchar配列から上記第４のデータを取り出す命令
を含む。
【００２４】
本発明の１つの実施態様では、上記命令の実行がゲットの命令であり、
上記ＣＰＵが下記命令をさらに実行し、該命令が、
上記第４のフラグを取得し、該取得した第４のフラグが有効に設定されていることを確認する命令
を含む。
【００２５】
本発明の１つの実施態様では、上記ＣＰＵが下記命令をさらに実行し、該命令が、
上記第３の変数から数値型データを取得する命令と、
上記第１の相互変換オブジェクトを用いて、上記取得したデータを文字型のデータに変換する命令と、
上記変換された文字型のデータを上記第２のchar配列に設定する命令と、
上記第２のフラグを有効に設定する命令と
を含む。
【００２６】
本発明の１つの実施態様では、上記ＣＰＵが下記命令をさらに実行し、該命令が、
上記第２のchar配列から文字型のデータを取得する命令と、
上記第１の相互変換オブジェクトを用いて、上記取得した文字型のデータを数値型データに変換する命令と、
上記変換された数値型データを上記第３の変数に設定する命令と、
上記第１のフラグを有効に設定する命令と
を含む。
【００２７】
本発明の１つの実施態様では、
ゲットするデータとして数値型データを取得する場合、上記ＣＰＵが下記命令をさらに実行し、該命令が
上記第１のフラグが有効に設定されていることを確認する命令と、
上記第３の変数から上記数値型データを取得する命令と
を含む。
【００２８】
本発明では、ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
ラッパークラスをデータ型とするオブジェクトの少なくとも１の宣言を有する上記プログラムを記憶部からメモリ内に読み出すステップであって、上記宣言夫々は、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記読み出すステップと、
上記読み出したプログラムを実行するステップと
を含む。
【００２９】
本発明の１つの実施態様では、上記ラッパークラスが、ＣＯＢＯＬコードにおいて宣言されているデータ項目のデータ（第１のデータ）に対応するデータ（第２のデータ）を管理する機能を有し、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第１のオブジェクトが生成されることに応じて、上記管理する機能が上記第１のオブジェクトに提供されるステップを含む。
【００３０】
本発明の１つの実施態様では、上記ラッパークラスは、
上記第２のデータを格納する第１のchar配列と、
上記第２のデータの文字数を格納する変数と、
上記第２のデータが格納される位置を表すオフセット値を格納する変数と
を含み、
上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記ラッパークラスから生成されるオブジェクト（第１のオブジェクト）が生成されることに応じて、下記を上記第１のオブジェクトに提供するステップを含む：
上記第１のchar配列に対応する第２のchar配列；
上記第３のデータの文字数を格納する上記変数に対応する第１の変数；及び
上記第３のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第２の変数。
【００３１】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第２のchar配列に、
上記第３のデータを格納するステップ、又は、
上記第１のオブジェクトの属する階層構造において上位階層にあり且つ上記ラッパークラスから生成されるところのオブジェクト（第２のオブジェクト）に含まれる第３のchar配列についてのメモリ領域を共有するステップ
を含み、
ここで、上記第２のオブジェクトは、上記第１のchar配列に対応する上記第３のchar配列を含み、及び上記第３のchar配列に対して上記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
上記第３のchar配列は、上記第３のデータが格納される上記メモリ領域を含む。
【００３２】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第１の変数に、上記第３のデータの文字数を格納するステップを含む。
【００３３】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第２の変数に、上記メモリ領域上で上記第３のデータが格納される位置を表すオフセット値を格納するステップを含む。
【００３４】
本発明の１つの実施態様では、上記ラッパークラスは、
数値型データを格納する変数と、
上記数値型データと上記第１のchar配列上のデータとの相互変換を行うための０又は１のオブジェクトと、
上記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含み、
上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記ラッパークラスから生成されるオブジェクト（第１のオブジェクト）が生成されることに応じて、下記を上記第１のオブジェクトに提供するステップを含む：
上記第１のchar配列に対応する第２のchar配列；
上記第３のデータの文字数を格納する上記変数に対応する第１の変数；
上記第３のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第２の変数；
上記数値型データを格納する上記変数に対応する第３の変数；
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第１のフラグ；及び
上記char配列表現の有効性を示す上記フラグに対応する第２のフラグ。
また、上記第１のオブジェクトに提供するステップは、
上記ラッパークラスが上記相互変換を行うためのオブジェクトを含む場合、
上記相互変換を行うためのオブジェクトに対応する第１の相互変換オブジェクトを上記第１のオブジェクトに提供するステップ
をさらに含む。
【００３５】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第１のオブジェクトに、上記第２のデータに対応する第３のデータを格納するステップを含む。
【００３６】
本発明の１つの実施態様では、上記ラッパークラスは、上記第１のchar配列についてのメモリ領域を共有する命令をさらに含み、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記ラッパークラスから生成されるオブジェクト（第１のオブジェクト）が生成されることに応じて、上記メモリ領域を共有する命令が上記第１のオブジェクトに提供されるステップを含む。
ここで、上記第１のオブジェクトは、上記第１のchar配列に対応する第２のchar配列及び上記共有する命令を含み、上記第１のオブジェクトの共有する命令は、上記第２のchar配列についてのメモリ領域を、上記ラッパークラスから生成され且つ上記第１のchar配列に対応する第４のchar配列を有するところの第３のオブジェクトに含まれる上記第４のchar配列についてのメモリ領域と共有する命令を含む。
【００３７】
本発明の１つの実施態様では、上記第２のデータが、ＣＯＢＯＬのＲＥＤＥＦＩＮＥＳ句で宣言される第１のデータに対応するデータであり、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第１のオブジェクトが生成されることに応じて、
上記第１のオブジェクトの共有する命令が、上記第１のオブジェクトの生成において実行されるコンストラクタに提供されるステップを含む。
【００３８】
本発明の１つの実施態様では、上記ラッパークラスが、上記第１のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも１のオブジェクト（第４のオブジェクト）の定義をさらに含む。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第３のデータのセット又はゲットの命令を実行するステップと、
上記第２のchar配列についてのメモリ領域が割り当てられていない場合、
上記第２のchar配列に対してメモリ領域を割り当てるステップと、
上記第４のオブジェクトに含まれる第５のchar配列についてのメモリ領域を共有するステップであって、
上記第４のオブジェクトが、
上記第２のデータに対応する第４のデータを管理し、及び
上記第１のchar配列に対応する上記第５のchar配列と、
上記第４のデータの文字数を格納する上記変数に対応する第４の変数と、
上記第４のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第５の変数と
を含む、上記共有するステップと、
上記第５の変数に対して、上記第４のデータの上記第２のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
【００３９】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記共有するステップが、
上記第５のchar配列に対してメモリ領域が割り当てられている場合に、上記第５のchar配列に格納された上記第４のデータを上記第２のchar配列にコピーするステップをさらに含む。
【００４０】
本発明の１つの実施態様では、上記ラッパークラスが、上記第１のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも１のオブジェクト（第４のオブジェクト）の定義をさらに含む。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第３のデータのセット又はゲットの命令を実行するステップと、
上記第２のchar配列についてのメモリ領域が割り当てられていない場合、
上記第２のchar配列に対してメモリ領域を割り当てるステップと、
上記第４のオブジェクトに含まれる第５のchar配列についてのメモリ領域を共有するステップであって、
上記第４のオブジェクトが、
上記第２のデータに対応する第４のデータを管理し、及び
上記第１のchar配列に対応する上記第５のchar配列と、
上記第４のデータの文字数を格納する上記変数に対応する第４の変数と、
上記第４のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第５の変数と、
上記数値型データを格納する上記変数に対応する第６の変数と、
上記相互変換を行うためのオブジェクトに対応する第２の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第３のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第４のフラグと
を含む、上記共有するステップと、
上記第５の変数に対して、上記第４のデータの上記第２のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
【００４１】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記共有するステップが、
上記第５のchar配列に対してメモリ領域が割り当てられている場合に、上記第５のchar配列に格納された上記第４のデータを上記第２のchar配列にコピーするステップをさらに含む。
【００４２】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記コピーするステップが、
上記第４のオブジェクトの有する上記第３のフラグを無効に設定するステップ
をさらに含む。
【００４３】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、セットされるデータとして数値型データが与えられた場合、
上記第３の変数に上記数値型データをセットするステップと、
上記第２のフラグを無効に設定するステップと
をさらに含む。
【００４４】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第３の変数に上記数値型データをセットするステップが、
上記第１のフラグを有効に設定するステップ
をさらに含む。
【００４５】
本発明の１つの実施態様では、上記第３のデータのセット又はゲットの命令を実行するステップにおいてゲットの命令を実行する。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記メモリ領域が共有された上記第５のchar配列から上記第４のデータを取り出すステップ
をさらに含む。
【００４６】
本発明の１つの実施態様では、上記第３のデータのセット又はゲットの命令を実行するステップにおいてゲットの命令を実行する。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第４のフラグを取得し、該取得した第４のフラグが有効に設定されていることを確認するステップ
をさらに含む。
【００４７】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第３の変数から数値型データを取得するステップと、
上記第１の相互変換オブジェクトを用いて、上記取得したデータを文字型のデータに変換するステップと、
上記変換された文字型のデータを上記第２のchar配列に設定するステップと、
上記第２のフラグを有効に設定するステップと
を含む。
【００４８】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第２のchar配列から文字型のデータを取得するステップと、
上記第１の相互変換オブジェクトを用いて、上記取得した文字型のデータを数値型データに変換するステップと、
上記変換された数値型データを上記第３の変数に設定するステップと、
上記第１のフラグを有効に設定するステップと
を含む。
【００４９】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
ゲットするデータとして数値型データを取得する場合、
上記第１のフラグが有効に設定されていることを確認するステップと、
上記第３の変数から上記数値型データを取得するステップと
を含む。
【００５０】
本発明は、ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
ラッパークラスをデータ型とするオブジェクトの少なくとも１の宣言を有するＪＡＶＡ（商標）コードを含むプログラムを記憶部からメモリ内に読み出すステップであって、
上記宣言夫々は、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言であり、上記ラッパークラスは、ＣＯＢＯＬコードにおいて宣言されているデータ項目のデータ（第１のデータ）に対応するデータ（第２のデータ）を管理する機能を有し、
上記ラッパークラスは、
上記第２のデータを格納する第１のchar配列と、
上記第２のデータの文字数を格納する変数と、
上記第２のデータが格納される位置を表すオフセット値を格納する変数と、
数値型データを格納する０又は１の変数と、
上記数値型データと上記第１のchar配列上のデータとの相互変換を行うための０又は１のオブジェクトと、
上記数値型データを格納する変数の有効性を示す０又は１のフラグと、
char配列表現の有効性を示す０又は１のフラグと、
上記ラッパークラスから生成される０以上のオブジェクトの定義と
を含み、
上記ラッパークラスから生成されるオブジェクト（第１のオブジェクト）は、
上記第２のデータに対応する第３のデータを管理し、及び
上記第１のchar配列に対応する第２のchar配列と、
上記第３のデータの文字数を格納する上記変数に対応する第１の変数と、
上記第３のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第２の変数と、
上記第１のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも１のオブジェクト（下位階層のオブジェクト：ここで、該下位階層のオブジェクトは上記第４のオブジェクトに対応する）と
を含み、
上記下位階層のオブジェクトは、
上記第２のデータに対応する第４のデータを管理し、及び
上記第１のchar配列に対応する上記第３のchar配列と、
上記第４のデータの文字数を格納する上記変数に対応する第３の変数と、
上記第４のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第４の変数と、
上記数値型データを格納する上記変数に対応する第５の変数と、
上記相互変換を行うためのオブジェクトに対応する第２の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第１のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第２のフラグと
を含む、
上記読み出すステップと、
上記第３のデータのセット又はゲットの命令を実行するステップと、
上記第２のchar配列についてのメモリ領域が割り当てられていない場合、
上記第２のchar配列に対してメモリ領域を割り当てるステップと、
上記下位階層のオブジェクトに含まれる第３のchar配列についてのメモリ領域を共有するステップと、
上記第４の変数に対して、上記第４のデータの上記第２のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
【００５１】
本発明はさらに、ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに、上記のいずれかに記載の方法の各ステップを実行させることを含む。
【００５２】
本発明は、ＣＯＢＯＬコードから変換されたＪＡＶＡ（商標）コードを含むプログラムを実行する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
ＣＯＢＯＬコードからＪＡＶＡ（商標）コードに変換するステップであって、該変換するステップは、
ＣＯＢＯＬコードを保持する記憶部からＣＯＢＯＬコードをメモリ内に読み出すステップと、
上記メモリ内に読み出したＣＯＢＯＬコードにおいて、集団データ項目の宣言を、構造体についてのラッパークラスの宣言に置き換えるステップと、
上記集団データ項目の下位階層のデータ項目の宣言を、ラッパークラスの宣言に置き換えるステップと
を含む、上記変換するステップと、
上記変換されたＪＡＶＡ（商標）コードを含むプログラムを記憶部からメモリ内に読み出すステップであって、上記プログラムはラッパークラスのオブジェクトの少なくとも１の宣言を有し、上記宣言夫々は、ＣＯＢＯＬコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記読み出すステップと、
上記読み出したプログラムを実行するステップと
を含む。
【発明の効果】
【００５３】
本発明の実施態様によると、ＣＯＢＯＬコードから変換されるＪＡＶＡ（商標）コードの可読性及び保守性が向上する。また、ＣＯＢＯＬの機能であるＲＥＤＥＦＩＮＥＳ、階層型データ構造などの、データ本体を共有することができるデータ構造がＪＡＶＡ（商標）コード上で実現される。該データ構造によって、無駄なコピー操作の発生が抑止され、またＪＡＶＡ（商標）プログラムの実行時に、無駄なメモリ領域が確保されないため、実行性能が向上する。
【発明を実施するための最良の形態】
【００５４】
本発明の実施態様において、「ラッパークラス」は、独自のデータ型を定義したクラスである。上記ラッパークラスは、ＣＯＢＯＬコードで宣言されているデータ項目のデータをＪＡＶＡ（商標）コード上で管理する機能を有する。上記データを管理する機能は、上記ラッパークラスをデータ型とするオブジェクトに提供される。上記ラッパークラスには、上記データ項目のデータをＪＡＶＡ（商標）コード上で管理するためのメンバ変数及びメソッドが含まれる。上記ラッパークラスから生成されるオブジェクトは、上記データ項目のデータをＪＡＶＡ（商標）コード上で管理する。
上記ラッパークラスは、文字データを格納するchar配列、データの文字数を格納する変数及び上記データが格納される位置を表すオフセット値を格納する変数をメンバ変数に持つ。これらのメンバ変数は、例えば共通の機能を提供するための共通クラスに定義される。ラッパークラスは、上記共通クラスを継承（ｅｘｔｅｎｄｓ）することで、上記メンバ変数を持つことができる。
上記ラッパークラスには、ＣＯＢＯＬの文字列の定義に対応するラッパークラス、ＣＯＢＯＬの小数点を含む数値の定義に対応するラッパークラス、ＣＯＢＯＬの小数点を含まない数値の定義に対応するラッパークラス及びＣＯＢＯＬの集団データ項目の定義に対応するラーパークラスがある。上記小数点を含む数値の定義に対応するラッパークラス及び小数点を含まない数値の定義に対応するラッパークラスは、数値型データを格納する変数、上記数値型データと上記char配列上のデータとの相互変換を行うためのオブジェクト、上記数値型データを格納する変数の有効性を示すフラグ及び上記char配列表現の有効性を示すフラグをメンバ変数に有する。また、ＣＯＢＯＬのＲＥＤＥＦＩＮＥＳ句で宣言されるデータ項目のデータをＪＡＶＡ（商標）コード上で管理する機能を提供するラッパークラスは、上記char配列についてのメモリ領域を、上記ラッパークラスから生成される別のオブジェクトに含まれるchar配列についてのメモリ領域と共有するためのメソッドを有する。
上記ラッパークラスは、ライブラリとして提供されうる。
【００５５】
本発明の実施態様において、「データ項目」とは、ＣＯＢＯＬにおいて、扱われるデータを一定期間記憶し、必要なときに利用できるようにするために、データを記憶するメモリ領域に固有の名前を与えたものである。データ項目は、ＪＡＶＡ（商標）における変数と対応する。本発明の実施態様では、データ項目毎に、上記ラッパークラスのオブジェクトが生成される。
【００５６】
本発明の実施態様において、「char配列」とは、char型の文字データを扱うための配列である。上記char配列は、ラッパークラスで定義される。上記char配列は、ラッパークラスから生成されるオブジェクトそれぞれが有する。上記ラッパークラスでサポートされるデータ型の内部メモリは、上記char配列で統一的に扱われる。また、char配列本体は、メモリ領域が独自に割り当てられている、又は割り当てられたメモリ領域がラッパークラスから生成される他のオブジェクトと共有されているchar配列である。char配列へのポインタは、上記char配列本体への参照である。
【００５７】
本発明の実施態様において、「データの文字数」とは、ＣＯＢＯＬのデータ項目のデータに対応し且つラッパークラスのオブジェクトで管理されるところのデータの文字数である。上記データの文字数が格納される変数は、ラッパークラスで定義される。上記データの文字数が格納される変数は、ラッパークラスから生成されるオブジェクトそれぞれが有する。また、該文字数は、char型での文字数である。例えば、ＣＯＢＯＬにおいて整数部が２桁であり且つ小数部が２桁である数字型のデータは、整数部に２文字、小数部に２文字、さらに小数点に１文字が必要であるので、データの文字数は５文字である。
【００５８】
本発明の実施態様において、「データが格納される位置を表すオフセット値」は、該オフセット値を有するオブジェクトが共有しているchar配列本体上での、管理するデータの位置を表す値である。上記オフセット値が格納される変数は、ラッパークラスで定義される。上記オフセット値が格納される変数は、ラッパークラスから生成されるオブジェクトそれぞれが有する。該オフセット値は、例えば、char配列本体の要素番号である。
【００５９】
本発明の実施態様において、「階層構造」とは、ＣＯＢＯＬの集団データ項目（Ｇｒｏｕｐ  Ｄａｔａ  Ｉｔｅｍ）で多段に階層的に宣言されるデータ項目の構造を指す。本発明の実施態様では、ラッパークラスのオブジェクト（以下、オブジェクト１）で管理されるデータが、別のラッパークラスのオブジェクト（以下、オブジェクト２）で管理されるデータの一部分であるようなデータ構造として表現される。ここで、上記オブジェクト１及び２は、階層構造に属するオブジェクトである。そして、上記オブジェクト１は上記オブジェクト２からみて下位階層のオブジェクト、上記オブジェクト２は上記オブジェクト１からみて上位階層のオブジェクトである。
また、上記階層構造の階層は、２段以上４９段以下にすることができる。例えば、上記オブジェクト２で管理されるデータが、さらに別のラッパークラスのオブジェクト（以下、オブジェクト３）で管理されるデータの一部分であってもよい。この場合、上記オブジェクト１〜３が、階層構造に属するオブジェクトである。そして、上記オブジェクト１は上記オブジェクト３からみて最も下位階層のオブジェクトであり、上記オブジェクト３は上記オブジェクト１からみて最も上位階層のオブジェクトである。
【００６０】
本発明の実施態様において、「メモリ領域を共有する」とは、ラッパークラスのオブジェクトに管理されるデータを格納するchar配列に割り当てられたメモリ領域を、１以上の他のラッパークラスのオブジェクトから利用できるようにすることである。
【００６１】
本発明の実施態様において、「数値型データを格納する変数」とは、ラッパークラスのオブジェクトに管理されるデータを数値型で格納するための変数である。上記数値型データを格納する変数は、数値型データを扱うラッパークラスで定義される。上記数値型データを格納する変数は、数値型データを扱うラッパークラスから生成されるオブジェクトそれぞれが有する。上記数値型データは、値を示すオブジェクトである値オブジェクト又はプリミティブ型のデータである。
本発明の実施態様において、ＣＯＢＯＬの小数点を含む数値の定義に対応するラッパークラスは、上記数値型データを格納する変数として上記値オブジェクトを有する。値オブジェクトは、例えば、BigDecimalオブジェクトである。また、ＣＯＢＯＬの小数点を含まない数値の定義に対応するラッパークラスであって、数値に変換された場合、プリミティブ型のデータのレンジ内である数値の定義に対応するラッパークラスは、上記数値型のデータを格納する変数として上記プリミティブ型のデータを格納する変数を有する。なお、ＣＯＢＯＬにおける小数点を含まない数値データであって、上記プリミティブ型の変数に格納されるとレンジあふれをしてしまうような桁数の多い上記数値データを管理するラッパークラスのオブジェクトは、上記プリミティブ型のデータを格納する変数を有しない。ＣＯＢＯＬにおけるデータの文字数が、上記プリミティブ型のデータを格納する変数のレンジ内であることが保証される場合のみ、ＣＯＢＯＬの小数点を含まない数値の定義に対応するラッパークラスは、上記プリミティブ型のデータを格納する変数を有する。ここで、上記プリミティブ型のデータを格納する変数は、int型またはlong型の変数である。なお、上記プリミティブ型の変数に格納されるとレンジあふれをしてしまうような桁数の多い上記数値データを管理するラッパークラスのオブジェクトは、ＣＯＢＯＬの小数点を含む数値の定義に対応するラッパークラスと同様に、値オブジェクトを有する。該値オブジェクトは、例えば、BigIntegerオブジェクトである。
【００６２】
本発明の実施態様において、「相互変換を行うためのオブジェクト」とは、char型配列のデータを数値型のデータに変換する又は数値型のデータをchar型配列のデータに変換するためのオブジェクトである。上記相互変換を行うためのオブジェクトは、小数点を含む数値型のデータを扱うラッパークラスで定義される。上記相互変換を行うためのオブジェクトは、小数点を含む数値型のデータを扱うラッパークラスから生成されるオブジェクトそれぞれが有する。上記相互変換を行うためのオブジェクトは、例えば、DecimalFormatのオブジェクトである。
【００６３】
本発明の実施態様において、「数値型データを格納する変数の有効性を示すフラグ」とは、上記数値型データを格納する変数に格納されたデータが有効であること又は無効であることを示すフラグである。また、「char配列表現の有効性を示すフラグ」とは、上記char配列本体に格納されているデータが有効であること又は無効であることを示すフラグである。上記２つのフラグは、数値型のデータを扱うラッパークラスで定義される。上記２つのフラグは、数値型のデータを扱うラッパークラスから生成されるオブジェクトそれぞれが有する。
【００６４】
本発明の実施態様において、「コンストラクタ」とは、オブジェクトが生成される場合に実行される命令である。
【００６５】
本発明の実施態様において、「セット又はゲットの命令」は、ラッパークラスのオブジェクトに管理されるデータを書き込む又は読み出す命令（メソッド）である。
【００６６】
本発明の実施態様において、「char配列についてのメモリ領域がアロケートされていない」とは、該char配列にメモリ領域が割り当てられていないことを示す。
【００６７】
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
【００６８】
図１は、ＣＯＢＯＬにおけるデータ部の記述の例を示す。
ＣＯＢＯＬでは、プログラマーは、プログラムで使用するデータ項目を上記データ部にＰＩＣＴＵＲＥ句を使って宣言する。以下は、ＣＯＢＯＬ文（１０１）の２行目を例にした、ＣＯＢＯＬにおける上記宣言の説明である。
ＣＯＢＯＬ文（１０１）の２行目１番目の項目（１０２）は、２行目で定義されるデータ項目の属する階層レベルが「０２」であることを示す。該階層レベルについては後述する。
ＣＯＢＯＬ文（１０１）の２行目の２番目の項目（１０３）は、２行目で定義されるデータ項目の名前が「Ｎａｍｅ」であることを示す。
ＣＯＢＯＬ文（１０１）の２行目の３番目の項目（１０４）は、２行目で定義されるデータ項目が任意の１０文字の文字列であることを示す。「ＰＩＣ」は、ＰＩＣＴＵＲＥ句を示す。ＰＩＣに続く記述は、データ項目のデータ領域内のサイズ及びタイプを示す。Ｘは任意の文字列であり、Ａはアルファベット文字であり、９は数値を示す。括弧内の記述は桁数を示す。また、Ｖは、小数点の位置を示す。例えば、該記述が９９９であるならば、データ項目は３桁の数値である。該記述がＡ（２０）であるならば、データ項目は２０文字のアルファベット文字である。該記述が９（１０）Ｖ９９であるならば、データ項目は、１０桁で小数点以下２桁を含む数値である。
ＣＯＢＯＬ文（１０１）の２行目の４番目の項目（１０５）は、２行目で定義されるデータ項目に与えられた初期値がスペースであることを示す。「ＶＡＬＵＥ」は、ＶＡＬＵＥ句を示し初期値を表す。ＶＡＬＵＥ句は任意に指定可能である。上記指定がない場合は、文字データの場合はスペース、数値データの場合は０がセットされる。
【００６９】
ＣＯＢＯＬでは、配列はＯＣＣＵＲＳ句を使って定義される。例えば、ＣＯＢＯＬ文（１０１）の１行目は、４０の要素を有する構造体配列ＳｔｕｄｅｎｔＲｅｃｏｒｄを定義したものである。
【００７０】
ＣＯＢＯＬコードをＪＡＶＡ（商標）コードに変換する場合に、プログラムの性能に特に大きく影響を与えると考えられるＣＯＢＯＬの仕様には、以下に示すものがある。
【００７１】
ＣＯＢＯＬでは、ＰＩＣＴＵＲＥ句で宣言されるいくつかの基本データ項目を集めて集団データ項目とすることができる。さらに、上記配列はまた、集団データ項目の１つである。該集団データ項目は、階層的なデータ構造として宣言される。例えば、ＣＯＢＯＬ文（１０１）において、１行目（１０６）の階層レベルは「０１」であり、２〜５行目の階層レベルは「０２」である。これは、２〜５行目で定義されるデータ項目であるＮａｍｅ、ＭａｔｈＳｃｏｒｅ、ＳｃｉｅｎｃｅＳｃｏｒｅ及びＡｖｇＳｃｏｒｅを集めた集団データ項目が、１行目で定義される構造体配列ＳｔｕｄｅｎｔＲｅｃｏｒｄであることを示す。
上記集団データ項目の要素には、別の集団データ項目も含めることができる。例えば、ＣＯＢＯＬ文（１０１）において、２行目のデータ項目であるＮａｍｅは、さらに、データ項目であるＦａｍｉｌｙＮａｍｅ及びＰｅｒｓｏｎａｌＮａｍｅを集めた集団データ項目に変更することができる。上記ＦａｍｉｌｙＮａｍｅ及びＰｅｒｓｏｎａｌＮａｍｅは、階層レベルが「０３」以上「４９」以下のデータ項目として定義される。階層レベルの上限が「４９」である理由は、ＣＯＢＯＬにおいて、階層は最高４９段まで重ねることができるからである。このように、階層的なデータ構造をなすデータ項目において、階層レベルの値が小さいデータ項目は上位階層のデータ項目となり、階層レベルの値が大きいデータ項目は下位階層のデータ項目となる。
ＣＯＢＯＬにおいて、集団データ項目に対してのデータのセット及びゲットの操作は、集団データ項目の要素である全てのデータ項目に対して適用される。例えば、ＣＯＢＯＬ文（１０１）において、構造体配列ＳｔｕｄｅｎｔＲｅｃｏｒｄのｎ要素目にデータ「ＡＢＣＤＥＦＧＨＩＪ１２３４５６７８９０１」がセットされたとする（ＭＯＶＥ  ＤＡＴＡ  ＴＯ  ＳｔｕｄｅｎｔＲｅｃｏｒｄ（ｎ））。該セットの後に、構造体配列ＳｔｕｄｅｎｔＲｅｃｏｒｄのｎ要素目のデータ項目ＭａｔｈＳｃｏｒｅがゲットされた場合、得られるデータは「１２３」である。このように、ＣＯＢＯＬでは、一括でセットされたデータの個々のデータ項目のデータが取得される。そして、該取得されたデータを使って処理が実行される。
また、上記構造体配列ＳｔｕｄｅｎｔＲｅｃｏｒｄのｎ要素目のデータ項目ＭａｔｈＳｃｏｒｅが「１２３」から「９８７」に変更されたとする。該変更の後に、構造体配列ＳｔｕｄｅｎｔＲｅｃｏｒｄのｎ要素目がゲットされた場合、得られるデータは「ＡＢＣＤＥＦＧＨＩＪ９８７４５６７８９０１」である。このように、ＣＯＢＯＬでは、個々のデータ項目に対してセットされたデータが、集団データ項目を使用してまとめて取得されうる。そして、該取得されたデータを使って、例えば、全体を集計する処理が実行される。
また、上記データのセット及びゲットの操作は、どの階層レベルのデータ項目に対しても実行できる。上記データのセット及びゲットの操作において、データのサイズが指定されている場合、サイズ分だけの操作が、データに適用される。
【００７２】
ＣＯＢＯＬは、あるデータ項目に対して確保されたデータ領域を、他のデータ項目に対するデータ領域として共有させる機能を有する。該機能は、ＲＥＤＥＦＩＮＥＳ句を使って定義される。該共有の機能により、異なるデータ項目名を用いて同一のデータ領域にアクセスすることができる。
ＣＯＢＯＬ文（１０７）は、ＲＥＤＥＦＩＮＥＳ句の例を示す。ＣＯＢＯＬ文（１０７）の１行目は、３６文字の文字列のデータ項目であるＭｏｎｔｈＤｅｆを定義したものである。ＭｏｎｔｈＤｅｆに対するデータ領域には、初期値として「ＪＡＮＦＥＢＭＡＲＡＰＲＭＡＹＪＵＮＪＵＬＡＵＧＳＥＰＯＣＴＮＯＶＤＥＣ」が設定されている。そして、上記ＭｏｎｔｈＤｅｆに対するデータ領域が、ＣＯＢＯＬ文（１０７）の２行目におけるＲＥＤＥＦＩＮＥＳ句によって、ＭｏｎｔｈＮａｍｅに対するデータ領域として共有されている。
ＣＯＢＯＬ文（１０７）の３行目は、ＭｏｎｔｈＮａｍｅの下位階層に配列Ｍｏｎｔｈを定義したものである。配列Ｍｏｎｔｈは、３文字の文字列である。また、配列Ｍｏｎｔｈの要素数は１２である。ここで、ＭｏｎｔｈＮａｍｅに対するデータ領域は、ＭｏｎｔｈＤｅｆに対するデータ領域と共有されている。そのため、ＭｏｎｔｈＮａｍｅの下位階層のデータ項目である配列Ｍｏｎｔｈに対するデータ領域もまた、ＭｏｎｔｈＤｅｆに対するデータ領域と共有されている。従って例えば、ＭｏｎｔｈＮａｍｅの３番目の要素であるＭｏｎｔｈ（３）に対して“ＸＸＸ”を代入し、データ項目であるＭｏｎｔｈＤｅｆを表示する以下の命令、
ＭＯＶＥ  “ＸＸＸ”    ＴＯ    Ｍｏｎｔｈ（３）
ＤＩＳＰＬＡＹ    “ＭｏｎｔｈＤｅｆ = ” ＭｏｎｔｈＤｅｆ
が実行されると、表示されるＭｏｎｔｈＤｅｆの値は、「ＪＡＮＦＥＢＸＸＸＡＰＲＭＡＹＪＵＮＪＵＬＡＵＧＳＥＰＯＣＴＮＯＶＤＥＣ」である。
【００７３】
本発明の実施態様では、上記ＣＯＢＯＬの仕様である階層的なデータ構造に対応するデータ構造として、以下の構造が用いられる。
【００７４】
ＣＯＢＯＬにおけるデータ項目のデータは、ＪＡＶＡ（商標）におけるchar配列のデータに変換されて使用される。階層が最上位のデータ項目であり且つ小数点を含まない数値のデータ以外のデータの定義に、ＪＡＶＡ（商標）のデータ型を直接用いない。ここで、ＪＡＶＡ（商標）のデータ型とは、String又はBigDecimalなどのあらかじめＪＡＶＡ（商標）に用意されている基本データ型を指す。データ項目に対応するデータが定義される場合、該定義にはラッパークラスが用いられる。該ラッパークラスは、ライブラリとして提供されうる。該ラッパークラスは、char配列をフィールドに含む共通クラスを継承して作成される。該共通クラスは、以下の内部フィールドを有する。
public class COMMON_DATA {
private char [ ] _body;  // 値のchar配列本体
private final int _length;  // 文字数
private int _start;  // char配列へのオフセット
｝
共通クラスは、文字データを格納するchar配列（_body）、データの文字数を格納する変数（_length）及びデータが格納される位置を表すオフセット値を格納する変数（_start）をフィールドに有する。変数（_body）は、char配列へのポインタを格納するための領域である。変数（_length）は、データの文字数を格納するための領域である。変数（_start）は、char配列本体において、データが開始される位置を格納するための領域である。
【００７５】
文字列のデータ項目のデータがＪＡＶＡ（商標）コードにおいて定義される場合、該定義には、ラッパークラスＣＨＡＲＳが用いられる。ここで文字列のデータ項目とは、ＣＯＢＯＬのＰＩＣＴＵＲＥ句において、タイプとして「Ｘ」又は「Ａ」が指定されたデータ項目である。具体的には、ＣＯＢＯＬ文（図１、１０１及び１０７）における、Ｎａｍｅ、ＭｏｎｔｈＤｅｆ及びＭｏｎｔｈが該当する。
ラッパークラスＣＨＡＲＳは、上記共通クラスを継承したクラスとして実装される。ラッパークラスＣＨＡＲＳのフィールドは、共通クラスのフィールドのみで構成される。ラッパークラスＣＨＡＲＳから生成されるオブジェクトは、ＪＡＶＡ（商標）において文字列を表すデータ型を操作するStringオブジェクトと同様に、データ本体として内部に文字データを格納するchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。
【００７６】
小数点を含む数値のデータ項目のデータがＪＡＶＡ（商標）コードにおいて定義される場合、該定義には、ラッパークラスＤＥＣＩＭＡＬが用いられる。ここで、小数点を含む数値のデータ項目とは、ＣＯＢＯＬのＰＩＣＴＵＲＥ句において、タイプとして「９」が指定され「Ｖ」を含むデータ項目である。具体的には、ＣＯＢＯＬ文（図１、１０１及び１０７）における、ＡｖｇＳｃｏｒｅが該当する。
ラッパークラスＤＥＣＩＭＡＬは、共通クラスを継承したものとして実装される。該継承により、ラッパークラスＤＥＣＩＭＡＬから生成されるオブジェクトは、小数点を含む数値を文字列として格納するためのchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスＤＥＣＩＭＡＬは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class DECIMAL extends COMMON_DATA {
private BigDecimal  _value;  // 値オブジェクト
private DecimalFormat _format;  //フォーマット
private boolean _validValue;  /値オブジェクトの有効性フラグ
private boolean _validChar;  //値のchar配列表現の有効性フラグ
｝
ラッパークラスＤＥＣＩＭＡＬは、上記共通クラスが有する変数に加え、値オブジェクト（_value）、相互変換オブジェクト（_format）、値オブジェクトの有効性フラグ（_validValue）及び値のchar配列表現の有効性フラグ（_validChar）をフィールドに有する。値オブジェクト（_value）は、数値型でデータ本体を有するための、BigDecimal型オブジェクトである。なお、BigDecimalは、ＪＡＶＡ（商標）言語において任意精度の符号付き１０進小数を表すデータ型を操作するためのクラスである。相互変換オブジェクト（_format）は、数値と文字列とを相互に変換する機能を有するDecimalFormat型オブジェクトである。相互変換オブジェクト（_format）は、数値のフォーマット毎にスレッド単位で同じインスタンスであることが実行効率の点から望まれる。値オブジェクトの有効性フラグ（_validValue）は、値オブジェクト（_value）の有するデータが、char配列に設定されているデータの更新により、最新の状態ではなくなったことを示すフラグである。値のchar配列表現の有効性フラグ（_validChar）はchar配列に設定されているデータが、値オブジェクト（_value）の有するデータの更新により、最新の状態ではなくなったことを示すフラグである。
【００７７】
下位階層のデータ項目であり且つ小数点を含まない数値のデータ項目のデータがＪＡＶＡ（商標）コードにおいて定義される場合、該定義には、ラッパークラスＩＮＴが用いられる。ここで、小数点を含まない数値のデータ項目とは、ＣＯＢＯＬのＰＩＣＴＵＲＥ句において、タイプとして「９」が指定され且つ「Ｖ」を含まないデータ項目である。具体的には、ＣＯＢＯＬ文（図１、１０１及び１０７）における、ＭａｔｈＳｃｏｒｅ及びＳｃｉｅｎｃｅＳｃｏｒｅが該当する。
ラッパークラスＩＮＴは、共通クラスを継承したものとして実装される。該継承により、ラッパークラスＩＮＴのオブジェクトは、小数点を含まない数値を文字列として格納するためのchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスＩＮＴは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class INT extends COMMON_DATA {
private int  _value;   // 値
private boolean _validValue;  //値の有効性フラグ
private boolean _validChar;  //値のchar配列表現の有効性フラグ
｝
ラッパークラスＩＮＴは、上記共通クラスの有する変数に加え、値変数（_value）、値の有効性フラグ（_validValue）及び値のchar配列表現の有効性フラグ（_validChar）をフィールドに有する。値変数（_value）は、数値型でデータ本体を有するための、int型変数である。値の有効性フラグ（_validValue）は、値変数（_value）の有するデータが、char配列に設定されているデータの更新により、最新の状態ではなくなったことを示すフラグである。値のchar配列表現の有効性フラグ（_validChar）はchar配列に設定されているデータが、値変数（_value）の有するデータの更新により、最新の状態ではなくなったことを示すフラグである。
【００７８】
階層が最上位のデータ項目であり且つ小数点を含まない数値のデータ項目に対応するデータが定義される場合、該定義には、符号付き整数を表すプリミティブデータ型であるintやlongが用いられる。なお、上記intの代わりにラッパークラスＩＮＴが用いられてもよい。
【００７９】
集団データ項目に対応するデータが定義される場合、該定義には、ラッパークラスＳＴＲＵＣＴが用いられる。
ラッパークラスＳＴＲＵＣＴは、上記共通クラスを継承した内部又は外部クラスとして実装される。ラッパークラスＳＴＲＵＣＴのオブジェクトは、下位の階層のデータを一括して表現するため、内部に文字データを格納するchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスＳＴＲＵＣＴは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class STRUCT extends COMMON_DATA {
private Object[]  _fields;  // 下位階層データオブジェクト
｝
ラッパークラスＳＴＲＵＣＴは、上記共通クラスが有する変数に加え、下位階層データオブジェクト（_fields）をフィールドに有する。下位階層データオブジェクト（_fields）は、直属の下位階層のデータオブジェクトを配列として保持するものである。なお、本明細書においてラッパークラスＳＴＲＵＣＴは、階層クラスともいう。
【００８０】
上記ラッパークラスから生成されるオブジェクトのコンストラクタでは、基本的に共通クラスのフィールド上の変数（_length）のみに、ＣＯＢＯＬのＰＩＣＴＵＲＥ句で指定された値が設定される。また、ＣＯＢＯＬコードのＶＡＬＵＥ句において初期値が明示的に与えられているとき以外は、上記char配列の実体であるchar配列本体、値オブジェクトは生成されない。ＪＡＶＡ（商標）言語では、変数に初期値を与えない場合、文字列変数には空白文字、数値変数には０が暗黙的に設定される。例えばnullのchar配列本体に対してデータが取得される場合、該取得の時点でchar配列本体は遅延的に（Lazy）に生成され、空白文字が返される。
【００８１】
階層型データ構造に対応するデータ領域が共有されるのは、ＪＡＶＡ（商標）コードが実行され、階層を有する集団データ項目に対応するデータのセット・ゲットが行なわれた時点である。該階層を有する集団データ項目に対応する階層クラスがchar配列をまだポイントしていない場合、新たにchar配列本体が生成され上記データのセットが行われる。更に該集団データ項目の下位階層の全てのデータ項目とchar配列の共有が行われる。すなわち下位レベルの階層のラッパークラスのオブジェクトでは、与えられたchar配列がポイントされ、各項目の文字数分位置をずらしながらオフセット値がセットされる。下位レベルの階層において既にchar配列本体が生成されていたら、上記値のゲットの場合は、新しいchar配列にデータがコピーされる。メモリ領域は、上位階層のデータついてのみ確保される。下位階層のデータについては、独自のメモリ領域は確保されない。
また、ＤＥＣＩＭＡＬクラスに対してchar配列のセットが行われた場合、対応するBigDecimalオブジェクトにおいて、使用できないことを示すフラグがセットされる（_validValue = false）。該フラグは、値の有効性フラグである。数値のデータが必要になった場合、最新のchar配列にセットされている文字列とDecimalFormatオブジェクトから、新たに数値型でデータを格納するためのBigDecimalが生成される。
ＩＮＴクラスに対してchar配列のセットが行われた場合、対応するＩＮＴオブジェクトにおいて、使用できないことを示すフラグがセットされる（_validValue = false）。該フラグは、値の有効性フラグである。数値のデータが必要になった場合、最新のchar配列にセットされている文字列から、ＪＡＶＡ（商標）の標準ライブラリ関数を使用して、新たにint型の数値データが生成される。
また逆に、ＤＥＣＩＭＡＬクラスの値オブジェクト又はＩＮＴクラスの値のデータ（_value）が更新された場合、対応するchar配列が無効であることを示すフラグがセットされる（_validChar = false）。該フラグは、値のchar配列表現の有効性フラグである。上位階層からデータが取得される際は、下位階層の全てのＤＥＣＩＭＡＬオブジェクト及びＩＮＴオブジェクトのchar配列が有効であることが確認されなければならない。
【００８２】
また、ＣＯＢＯＬにおいてＲＥＤＥＦＩＮＥＳ句を使ってデータ領域が共有されているデータ項目に対応するデータを管理するラッパークラスのオブジェクトは、該オブジェクトの生成時にデータ領域であるchar配列が共有される。該共有を実現するために、各ラッパークラスのコンストラクタにメソッドredefine()が実装される。redefine()は、共有元のオブジェクトにおいて用意されるchar配列をポイントさせることを行うメソッドである。
【００８３】
一旦char配列が共有されると、その後は集団データ項目又はＲＥＤＥＦＩＮＥＳされたデータ構造に対するデータのゲット・セットの操作で、新たなオブジェクトが作られることなく、必要な部分のchar配列データの更新だけで処理を完了することができる。以上の方式により、無駄なオブジェクト生成及び複数のコピー操作などの無駄な処理を避けることができ、大幅な性能改善、ヒープ使用量の削減が達成される。
【００８４】
基本データ項目に対応するデータのセットは、該データが文字データの場合char配列に対して実行される。
該データがＤＥＣＩＭＡＬクラスで扱われる数値データの場合、数値型のフォーマットのデータが値オブジェクト（_value）に格納される。また、数値データがchar配列で与えられた場合、相互変換オブジェクト（_format）によって文字列で与えられた数値データが数値型に変換され、値オブジェクト（_value）に格納されてもよい。
該データがＩＮＴクラスで扱われる数値データの場合、数値型のフォーマットのデータが値変数（_value）に格納される。また、数値データがchar配列で与えられた場合、ＪＡＶＡ（商標）の標準ライブラリ関数によって文字列で与えられた数値データが数値型に変換され、値変数（_value）に格納されてもよい。
なお、上記値オブジェクト（_value）又は上記値変数（_value）に新しくデータが格納された場合、数値型データを格納する変数の有効性フラグが有効に設定され、値のchar配列表現の有効性フラグが無効に設定される。
ゲットされるデータが数値データならば、変数の有効性フラグが無効に設定されていた場合、char配列データから数値データを生成し直し、値オブジェクト（_value）又は値変数（_value）にセットする必要がある。上記値オブジェクト（_value）又は値変数（_value）からデータが取得されるためには、数値型データを格納する変数の有効性フラグが有効に設定されている必要がある。
【００８５】
図２Ａは、本発明の実施態様である、階層クラスのオブジェクトへのセットの命令が実行された場合のフローの例を示す。
プログラム実行時において、階層を有する集団データ項目に対応するデータへのセットの命令が実行されると、該データを格納するためのchar配列がポイントされているかの判定が行われる（ステップ２０１）。
上記char配列がポイントされていない場合、上記char配列のメモリ領域は確保されていない。よって、上記データが格納される領域を確保するため、char配列本体が生成される（ステップ２０２）。ここで生成されるchar配列本体のサイズは、階層クラスの下位階層の全てのラッパークラスのオブジェクトの変数にセットされている文字数の合計サイズである。
次に、char配列本体に上記データがセットされる（ステップ２０３）。
次に、下位階層の全てのラッパークラスのオブジェクトについて、以下の処理が実行される(ステップ２０４)。
下位階層の全てのラッパークラスのオブジェクトのchar配列は、階層クラスのオブジェクトの上記char配列本体と共有される。まず、上記下位階層全てのラッパークラスのオブジェクトにおいて、上記char配列本体がポイントされる（ステップ２０５）。また、各項目の指定長だけ位置をずらしながらオフセット値がセットされる（ステップ２０６）。上記指定長は、例えば下位階層のオブジェクトの変数にセットされた文字数を順に加えていくことで求められる。
次に、下位階層ラッパークラスのオブジェクトのデータが数値型データの場合、数値型データを格納する変数の有効性フラグが無効に設定され、char配列表現の有効性フラグが有効に設定される（ステップ２０８）。なお上記２つのフラグは、ラッパークラスのオブジェクトにおいて、既に数値型でデータが保持されている場合に設定される。また、下位階層のラッパークラスのオブジェクトがＳＴＲＵＣＴ型の場合は、上記の処理（ステップ２０５〜２０８）が再帰的に実行される。
下位階層の全てのラッパークラスのオブジェクトについて、上記ステップ２０５〜２０８が終了すると、階層クラスのオブジェクトにおけるセットの処理は終了する。
【００８６】
図２Ｂは、本発明の実施態様である、階層クラスのオブジェクトへのゲットの命令が実行された場合のフローの例を示す。
プログラム実行時において、階層を有する集団データ項目に対応するデータへのゲットの命令が実行されると、該データを取得するためのchar配列がポイントされているかの判定が行われる（ステップ２２１）。
上記char配列がポイントされている場合、上記char配列のメモリ領域は確保されている。よってchar配列本体からデータがゲットされ（ステップ２２８）、処理は終了する。なお、該取得において、下位階層の全ての数値型のラッパークラスのオブジェクトが有するchar配列表現の有効性フラグが確認されなければならない。該フラグが無効ならば、上記ラッパークラスのオブジェクトの有する数値型データを格納する変数からchar型の配列に変換し、有効とする必要がある。
上記char配列がポイントされていない場合、上記char配列のメモリ領域は確保されていない。よって、上記データが格納される領域を確保するため、char配列本体が生成される（ステップ２２２）。ここで生成されるchar配列本体のサイズは、階層クラスの下位階層の全てのラッパークラスのオブジェクトの変数にセットされている文字数の合計サイズである。
次に、下位階層の全てのラッパークラスのオブジェクトについて、以下の処理が実行される(ステップ２２３)。
下位階層の全てのラッパークラスのオブジェクトのchar配列は、階層クラスのオブジェクトの上記char配列本体と共有される。まず、上記下位階層全てのラッパークラスのオブジェクトにおいて、上記char配列本体がポイントされる（ステップ２２４）。また、各項目の指定長だけ位置をずらしながらオフセット値がセットされる（ステップ２２５）。上記指定長は、例えば下位階層のオブジェクトの変数にセットされた文字数を順に加えていくことで求められる。
さらに、下位階層のラッパークラスのオブジェクトにおいて、既にchar配列が生成されていた場合、ステップ２２２において生成されたchar配列本体に、下位階層のラッパークラスのオブジェクトが有するデータがコピーされる。（ステップ２２７）。ここで、該下位階層のラッパークラスのオブジェクトが数値型の場合、char配列表現の有効性フラグがチェックされる。該フラグが無効に設定されているならば、数値データから変換された文字データがコピーされる。また、char配列表現の有効性フラグが有効に設定される。なお、上記コピーされるデータのchar配列本体上での位置は、下位階層のラッパークラスのオブジェクトが有するオフセット値から求められる。また、上記数値データから文字データへの変換は、ＩＮＴクラスのオブジェクトでは、ＪＡＶＡ（商標）の標準ライブラリ関数によって実現され、ＤＥＣＩＭＡＬクラスのオブジェクトでは、相互変換オブジェクトによって実現される。なお、下位階層のオブジェクトについてのchar配列本体は解放されてもよい。
下位階層の全てのラッパークラスのオブジェクトについて、上記ステップ２２４〜２２７が終了するとchar配列本体からデータがゲットされ（ステップ２２８）、階層クラスのオブジェクトにおけるゲットの処理は終了する。
【００８７】
図２Ｃは、本発明の実施態様である、構造体配列の例であるＣＯＢＯＬ文（図１、１０１）を、ＪＡＶＡ（商標）コードに変換した例を示す。
ＣＯＢＯＬ文（図１、１０１）で表わされる構造体配列は、ＪＡＶＡ（商標）コード（２３１）で表わされる構造体配列に変換される。該構造体に対して、char配列が共有されると、内部的には、オブジェクト構造（２３２）に示す構造となる。オブジェクト構造（２３２）において、ＣＨＡＲＳ、ＩＮＴ及びＤＥＣＩＭＡＬの各オブジェクトは、char配列へのポインタとオフセット値を用いて、各自の領域をポイントしている。char配列の共有は、上位階層クラスのオブジェクトStudentRecord[x]の単位でアクセスされたときに初めて行われる。よって、それ以前に下位階層のオブジェクトが直接更新されていた場合、図の点線で描かれた部分のように、以前のデータ領域は捨てられる。そして、新しくポインタがすげ替えられる。また、必要ならばデータのコピーが行なわれる。
【００８８】
図２Ｄは、ＲＥＤＥＦＩＮＥＳ句の例であるＣＯＢＯＬ文を、ＪＡＶＡ（商標）コードに変換した例を示す。
ＲＥＤＥＦＩＮＥＳ句の例であるＣＯＢＯＬ文（図１、１０７）は、ＪＡＶＡ（商標）コード（２４１）に変換される。
データ領域が共有される側のオブジェクトであるｍｏｎｔｈＤｅｆは、ラッパークラスＣＨＡＲＳのオブジェクトとして生成される。該オブジェクトの生成において、初期値が指定されている。よって、char配列もアロケートされ、データ「ＪＡＮＦＥＢＭＡＲＡＰＲＭＡＹＪＵＮＪＵＬＡＵＧＳＥＰＯＣＴＮＯＶＤＥＣ」が設定される。
データ領域を共有する側のオブジェクトであるｍｏｎｔｈＮａｍｅは、ラッパークラスＳＴＲＵＣＴを継承するクラスであるＭｏｎｔｈＮａｍｅのオブジェクトとして生成される。該クラスの定義において、配列ｍｏｎｔｈを格納するための配列は定義されるが、データは設定されない。代わりに、該オブジェクト生成時に実行されるコンストラクタにおいて、データ領域が共有される側のオブジェクトであるｍｏｎｔｈＤｅｆがredefine()メソッドに渡される。上記メソッドによって、char配列が共有される。
オブジェクト構造（２４２）は、ｍｏｎｔｈＮａｍｅ及びｍｏｎｔｈＤｅｆとchar配列との関係を示す。
ｍｏｎｔｈＤｅｆは、char配列をポイントしている。
ｍｏｎｔｈＮａｍｅは、１２のｍｏｎｔｈで構成される。ｍｏｎｔｈは、char配列の対応する個所をポイントしている。対応する個所とは、char配列の０番目の要素、３番目の要素、・・・３３番目の要素である。これは、ｍｏｎｔｈは、文字数が３の配列だからである。また、ポイントするとは、共通クラスのフィールドに含まれるchar配列へのポインタ及びオフセットを用いて、char配列の要素を指すことである。
【００８９】
ＪＡＶＡ（商標）コード上で、階層型のデータ構造の本体はchar配列として表現される。また、ＣＯＢＯＬコードにおけるＲＥＤＥＦＩＮＥＳ句及び階層型のデータ構造によるデータの共有は、ＪＡＶＡ（商標）コードにおいて実現される。よって、該ＪＡＶＡ（商標）コードにおいて、無駄なオブジェクト生成及びデータのコピー操作を省くことができる。結果として、ヒープメモリ消費を節約した高性能な実装が可能となる。
【００９０】
char配列の共有は、集団データ項目に対するデータがゲット又はセットされるタイミングで行われる。これは、プログラム中で必ずしも構造体に含まれる全てのデータがアクセスされるとは限らないためである。特にＣＯＢＯＬは、copy文を使うことによって、外部のソースプログラム及びデータ構造の宣言をコードに取り込む（include）機能を有する。該取り込みの機能は、複数のプログラムでよく利用されるデータ構造を定義するときなどに、使われる機能である。しかし、該取り込まれたデータ構造のごく一部だけが使用されるというのが一般的であり、宣言されたデータ構造に対応するメモリ領域を最初に全て確保するのはメモリの使用効率が良くない。大規模商用アプリケーションにおいて、ＣＯＢＯＬのコードをＪＡＶＡ（商標）のコードに変換する場合に、実際は使用されないメモリ領域を確保するような変換を行ったことによって、大きく性能を落としている例がある。メモリが効率よく使用されるために、データ本体を管理するためのラッパークラスのオブジェクトのchar配列の生成がまた、該データのゲット又はセットを通して行われるようになっている。よって、該データへのアクセスがあったときに遅延的に（lazy）にインスタンスが作られる。
【００９１】
また、最適化の例として、事前にＣＯＢＯＬコード又は変換後ＪＡＶＡ（商標）コードに対してデータフロー解析などのプログラム解析を行う方法も考えられうる。該解析により、階層型データ構造の上位階層のデータへアクセスする処理が実行パスに含まれることが判明した場合、変換されるＪＡＶＡ（商標）コードにおいて、初めに該上位階層のオブジェクトのメンバであるchar配列を先に定義する命令を挿入する。これによって、下位レベルの変数に対して先にchar配列を取ることなく、オブジェクト生成の無駄を更に削減することができる。
【００９２】
図３は、本発明の実施態様における、ＣＯＢＯＬコードのデータ定義部分をＪＡＶＡ（商標）コードに変換する例を示す。
上記ＣＯＢＯＬコードにおいてデータ項目が定義される個所が、ＪＡＶＡ（商標）コードに変換されうる。以下に該変換の手順を示す。
まず、上記ＣＯＢＯＬコードにおいて、データ項目が定義されるセクションである「WORKING-STORAGE SECTION.」が検索される（ステップ３０１）。上記「WORKING-STORAGESECTION.」が発見されると、上記ＣＯＢＯＬコードは、１行ずつ精査される。該精査は、精査されている現在の行（以下、第１の行）の次の行（以下、第２の行）に、階層型データ構造の特徴である「階層レベル」が含まれなくなるまで行われる（ステップ３０２）。該精査において、まず、上記第１の行と上記第２の行の「階層レベル」の値が比較される。（ステップ３０３）。
・上記第１の行の「階層レベル」の値が、上記第２の行の「階層レベル」の値より小さい場合、上記第１の行で定義されたデータ項目は、集団データ項目である。よって、上記第１の行は、ラッパークラスＳＴＲＵＣＴのオブジェクトを定義する行に変換される（ステップ３０４）。該変換は、例えば、次のような変換である。
public class （データ項目の名前） extends STRUCT{
次に、上記第１の行に「ＲＥＤＥＦＩＮＥ」が含まれるかどうかが調べられる（ステップ３０５）。上記「ＲＥＤＥＦＩＮＥ」が含まれる場合、メソッドredefine()を出力するための情報がスタックに格納される（ステップ３０６）。該情報は、例えば、コンストラクタの部分を作成する為に必要な、データ項目の名前である。次に、構造体を閉じるために必要な情報が格納される（ステップ３０７）。該情報は、第１の行の階層レベル及びオブジェクトを定義し生成するために必要なデータ項目の名前である。また、データ項目が配列に対応するならば、配列の要素数も該情報に含まれる。
・上記第１の行の「階層レベル」の値が、上記第２の行の「階層レベル」の値以上の値である場合、上記第１の行で定義されたデータ項目は、下位階層のデータ項目を持たないデータ項目である。よって、上記第１の行は、データ項目のタイプに対応したラッパークラスのオブジェクトを定義し生成する行に変換される（ステップ３０８）。該変換は、例えば、次のような変換である。
private ラッパークラス（データ項目の名前）= new ラッパークラス(文字数)；
ここで、ＣＯＢＯＬのＰＩＣＴＵＲＥ句において、タイプとして「Ｘ」又は「Ａ」が指定されたデータ項目に対応するオブジェクトは、ラッパークラスＣＨＡＲＳによって定義される。また、ＣＯＢＯＬのＰＩＣＴＵＲＥ句において、タイプとして「９」が指定され「Ｖ」を含むデータ項目に対応するオブジェクトは、ラッパークラスＤＥＣＩＭＡＬによって定義される。ＣＯＢＯＬのＰＩＣＴＵＲＥ句において、タイプとして「９」が指定され且つ「Ｖ」を含まないデータ項目に対応するオブジェクトは、ラッパークラスＩＮＴによって定義される。
次に、構造体の後処理（ステップ３０９）が実行される。該後処理では、上記第１の行と上記第２の行の階層レベルと、スタックに格納されている構造体に変換された行の階層レベルが比較される。そして、
上記第２の階層レベル＝＜スタックに格納された階層レベル
の条件を満たす数分の閉じ括弧及び構造体オブジェクトの生成処理が出力される。また、メソッドredefine()を出力するための情報が格納されている場合は、該情報も出力される。
精査する行が残り１行になると、最後の１行を精査する処理（ステップ３１１）が実行される。該処理では、データ項目のタイプに対応したラッパークラスのオブジェクトを定義し生成する処理（ステップ３０８）及び構造体の後処理（ステップ３０９）が実行される。
【００９３】
図４Ａ〜Ｃは、本発明の実施態様に従い変換されたＪＡＶＡ（商標）コードについての効果を測定するために用いたサンプルプログラムの例を示す。
【００９４】
図４Ａは、ＪＡＶＡ（商標）コードへの変換対象であるＣＯＢＯＬサンプルプログラムを示す。
ＣＯＢＯＬプログラム（４０１）は、製品工場の製品番号ごとに製品を集計するプログラムである、該プログラムは、製品番号でソートされたデータをファイルから読み込んで、製品番号ごとの集計結果を出力する。
【００９５】
図４Ｂは、図４ＡのＣＯＢＯＬプログラム（４０１）を従来の方法により変換したＪＡＶＡ（商標）コード（４０２）の例を示す。
従来の方法とは、ＣＯＢＯＬにおけるデータ型を対応するＪＡＶＡ（商標）のデータ型に変換させる方法である。具体的には、ＰＩＣ  Ｘ（＊）は、String型に変換する。ＰＩＣ  ９（＊）は、BigDecimal型又はint型に変換する。また、階層構造は、独自に内部クラスを作成し、該内部クラスを用いて定義される構造体に変換される。該構造体に含まれるデータ領域は、構造体の外にも重複して定義される。なお、ＪＡＶＡ（商標）プログラム（４０２）においてgetdata()メソッドの行う処理である入力読み込み処理は、測定時においてインライン処理として実行されている。
【００９６】
図４Ｃは、図４ＡのＣＯＢＯＬプログラム（４０１）を本発明の実施態様により変換したＪＡＶＡ（商標）コード（４０３）の例を示す。
【００９７】
図４Ｄは、本発明の実施態様に従うＪＡＶＡ（商標）プログラム（４０２、４０３）の検証結果を示す。
検証者は、該検証に１００，０００件のレコードを使用し、ヒープメモリ使用量及び実行時間を計測した。また、該測定にＩＢＭ（商標）ＪＡＶＡ（商標）５．０が使用された。ＪＩＴコンパイル時間及びＧＣ（ガーベージコレクション）時間を排除するために、検証者は、main()メソッドに手を加え、ＪＡＶＡ（商標）プログラム（４０２、４０３）の実行において、初めにウォームアップランとして同じ入力サイズのレコードを使用してプログラムの実行を１０回繰り返した。また、検証者は、上記繰り返しの後、ガーベージコレクションを実行する命令であるSystem.gc()を実施し、その後、上記計測を開始した。また、検証者は、ＪＡＶＡ（商標）の実行オプションに、-Xjit:optLevel=hot,count=3 -Xms512m -Xmx512mを指定した。また、検証者は、測定中にＧＣが発生していないことを確認した。
表（４０４）は、上記検証の結果を示す。
本発明の実施態様による変換コードを用いた場合、実行時間は２１８ミリ秒であり、ヒープメモリの使用量は１３１．３メガバイトであった。
従来の方法による変換コードを用いた場合、実行時間は２８２ミリ秒であり、ヒープメモリの使用量は１９２．２メガバイトであった。
上記結果より、本発明の実施態様による変換コードを用いた場合、従来の方法による変換コードを用いた場合と比べて、２０％以上の実行時間が短縮され、且つ３０％以上のヒープメモリ使用量が削減された。
【００９８】
図５は、本発明の実施態様であるシステム構成の例を示す。
コンピュータ・システム（５０１）は、ＣＰＵ（５０２）及びメモリ（５０３）を含む。メモリ（５０３）は、プログラム（５０４）を保持する。プログラム（５０４）は、ＪＡＶＡ（商標）コードを含む。該ＪＡＶＡコードはラッパークラスのオブジェクトに含まれるセット又はゲットの命令を含み、上記オブジェクトの扱うデータはＣＯＢＯＬ言語におけるデータ項目に対応する。
ＣＰＵ（５０２）は、メモリ（５０３）に保持されたプログラム（５０４）を読み出して実行する。ＣＰＵ（５０２）は、プログラム内のラッパークラスのオブジェクトを呼び出す。ＣＰＵ（５０２）は、該オブジェクトのアクセスの対象であるchar配列の上位階層のchar配列が生成されている場合、上記上位階層のchar配列を指すポインタ、文字数及びオフセットを保持する。ＣＰＵ（５０２）は、該オブジェクトのアクセスの対象であるchar配列の上位階層のchar配列が生成されていない場合、上記オブジェクトのアクセスの対象である上記char配列を生成する。さらにＣＰＵ（５０２）は、上記オブジェクトのアクセスの対象である上記char配列の下位階層のchar配列にアクセスするためのそれぞれのオブジェクトに、上記char配列を指すポインタ、文字数及びオフセットを保持させる。
【００９９】
図６Ａ〜図６Ｅは、特許請求の範囲に記載の発明の理解を容易にするための図である。
図６Ａは、ＣＯＢＯＬコード、ラッパークラス及び第１〜４の各オブジェクトの関係を示す。
図６Ｂは、ラッパークラスと第１のオブジェクトとの関係を示す。請求項４及び９の各構成要素は、請求項３の各構成要素に対応する。請求項９の各構成要素はまた、請求項８の各構成要素に対応する。
図６Ｃは、ラッパークラスと第２のオブジェクトとの関係を示す。請求項５の各構成要素は、請求項３の各構成要素に対応する。
図６Ｄは、ラッパークラスと第３のオブジェクトとの関係を示す。請求項１０及び１１の各構成要素は、請求項３の構成要素に対応する。
図６Ｅは、ラッパークラスと第４のオブジェクトとの関係を示す。請求項１２及び１４の各構成要素は、請求項３の各構成要素に対応する。請求項１４の各構成要素はまた、請求項８の各構成要素に対応する。
【０１００】
図７は、上記システム構成をさらに詳述したブロック図を示す。
コンピュータ・システム（７０１）は、ＣＰＵ（７０３）とメイン・メモリ（７０２）と含み、これらはバス（７１４）に接続されている。ＣＰＵ（７０３）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ及びＳｅｍｐｒｏｎ（商標）などを使用することができる。バス（７１４）には、ディスプレイ・コントローラ（７０７）を介して、ＬＣＤモニタなどのディスプレイ（７１２）が接続される。ディスプレイ（７１２）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス（７１４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（７０４）を介して、ハードディスク又はシリコン・ディスク（７０５）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢＤドライブ（７０６）が接続される。
【０１０１】
ハードディスクには、オペレーティング・システム、Ｊ２ＥＥなどのＪａｖａ処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリにロード可能に記憶されている。
【０１０２】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢＤドライブ（７０６）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢＤからプログラムをハードディスクに追加導入するために使用される。バス（７１４）には更に、キーボード・マウスコントローラ（７０９）を介して、キーボード（７１０）及びマウス（７１１）が接続されている。
【０１０３】
通信インタフェース（７１３）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（７１３）は、通信コントローラ（７０８）を介してバス（７１４）に接続され、コンピュータ・システム及び通信回線（７１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。
【図面の簡単な説明】
【０１０４】
【図１】ＣＯＢＯＬにおけるデータ部の記述の例を示す。
【図２Ａ】本発明の実施態様である、階層クラスのオブジェクトへのセットの命令が実行された場合のフローの例を示す。
【図２Ｂ】本発明の実施態様である、階層クラスのオブジェクトへのゲットの命令が実行された場合のフローの例を示す。
【図２Ｃ】本発明の実施態様である、構造体配列の例であるＣＯＢＯＬ文を、ＪＡＶＡコードに変換した例を示す。
【図２Ｄ】本発明の実施態様である、ＲＥＤＥＦＩＮＥＳ句の例であるＣＯＢＯＬ文を、ＪＡＶＡコードに変換した例を示す。
【図３】本発明の実施態様における、ＣＯＢＯＬコードをＪＡＶＡコードに変換する例を示す。
【図４Ａ】ＪＡＶＡコードへの変換対象であるＣＯＢＯＬサンプルプログラムを示す。
【図４Ｂ】図４ＡのＣＯＢＯＬプログラムを従来の方法により変換したＪＡＶＡコードの例を示す。
【図４Ｃ】図４ＡのＣＯＢＯＬプログラムを本発明の実施態様により変換したＪＡＶＡコードの例を示す。
【図４Ｄ】本発明の実施態様に従うＪＡＶＡプログラムの検証結果を示す。
【図５】本発明の実施態様であるシステム構成の例を示す。
【図６Ａ】ＣＯＢＯＬコード、ラッパークラス及び第１〜４のオブジェクトの関係を示す。
【図６Ｂ】ラッパークラスと第１のオブジェクトの関係を示す。
【図６Ｃ】ラッパークラスと第２のオブジェクトの関係を示す。
【図６Ｄ】ラッパークラスと第３のオブジェクトの関係を示す。
【図６Ｅ】ラッパークラスと第４のオブジェクトの関係を示す。
【図７】図５のシステム構成をさらに詳述したブロック図を示す。
【図１】
2010086218.tif 000003
【図２Ａ】
2010086218.tif 000004
【図２Ｂ】
2010086218.tif 000005
【図２Ｃ】
2010086218.tif 000006
【図２Ｄ】
2010086218.tif 000007
【図３】
2010086218.tif 000008
【図４Ａ】
2010086218.tif 000009
【図４Ｂ】
2010086218.tif 000010
【図４Ｃ】
2010086218.tif 000011
【図４Ｄ】
2010086218.tif 000012
【図５】
2010086218.tif 000013
【図６Ａ】
2010086218.tif 000014
【図６Ｂ】
2010086218.tif 000015
【図６Ｃ】
2010086218.tif 000016
【図６Ｄ】
2010086218.tif 000017
【図６Ｅ】
2010086218.tif 000018
【図７】
2010086218.tif 000019