(57)【要約】      （修正有）【課題】ＣＯＢＯＬプログラムから変換されたＪａｖａ（登録商標）プログラムにおける集団項目単位でのデータ転送コストを削減する。【解決手段】ＣＯＢＯＬプログラムのデータ定義を順次読み込むＳ６０１データ定義読み取り部と、データ定義が集団項目の定義である場合、Ｊａｖａプログラムにおいて当該集団項目を実現するための第１のクラスの第１のインスタンスを生成するコードを出力するＳ６０４集団項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、Ｊａｖａプログラムにおいて当該基本項目を実現するための第２のクラスの第２のインスタンスを生成するコードを出力するＳ６０６第１の基本項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を第１のクラスのメンバ変数とするコードを出力するＳ６０７第２の基本項目定義コード出力部と、を備える。【選択図】図６
2016115070.tif 000002
【特許請求の範囲】
【請求項１】
ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換するプログラム変換システムであって、
前記ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義が集団項目の定義である場合、前記Ｊａｖａソースプログラムにおいて当該集団項目を実現するための第１のクラスの第１のインスタンスを生成する第１のソースコードを出力する集団項目定義コード出力部と、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、前記Ｊａｖａソースプログラムにおいて当該基本項目を実現するための第２のクラスの第２のインスタンスを生成する第２のソースコードを出力する第１の基本項目定義コード出力部と、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を前記第１のクラスのメンバ変数とする第３のソースコードを出力する第２の基本項目定義コード出力部と、
を備えるプログラム変換システム。
【請求項２】
請求項１に記載の前記Ｊａｖａソースプログラムをコンパイルして得られるＪａｖａバイトコードを実行する変換プログラム実行システムであって、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するインスタンスのキャッシュを保持するインスタンスキャッシュ部と、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、当該サブプログラムに対応するインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、前記キャッシュに存在する場合は、前記キャッシュ内の当該インスタンスを、メンバ変数の値を初期化して再利用するインスタンス管理部と、
を備える変換プログラム実行システム。
【請求項３】
請求項２に記載の変換プログラム実行システムであって、
前記サブプログラムは、前記集団項目の前記データ定義を含み、
前記キャッシュは、前記集団項目における各基本項目について、当該基本項目に対応する前記メンバ変数のデータ領域に関する情報を含む、
プログラム変換システム。
【請求項４】
ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換するプログラム変換方法であって、
コンピュータが、前記ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込み、
前記コンピュータが、前記データ定義が集団項目の定義である場合、前記Ｊａｖａソースプログラムにおいて当該集団項目を実現するための第１のクラスの第１のインスタンスを生成する第１のソースコードを出力し、
前記コンピュータが、前記データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、前記Ｊａｖａソースプログラムにおいて当該基本項目を実現するための第２のクラスの第２のインスタンスを生成する第２のソースコードを出力し、
前記コンピュータが、前記データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を前記第１のクラスのメンバ変数とする第３のソースコードを出力する、
プログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム変換システムに関する。
【背景技術】
【０００２】
基幹システムのオープン化に伴い、ＣＯＢＯＬソースプログラムのＪａｖａ（登録商標）ソースプログラムへの変換が注目されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−８６２１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＣＯＢＯＬからＪａｖａへの変換の際には、ＣＯＢＯＬ独自の仕様を、Ｊａｖａにおいてどのように実現するかという点が問題となる。例えば、ＣＯＢＯＬにおける「集団項目」はその一つである。ＣＯＢＯＬにおける集団項目の定義は、例えば、以下のように行われる。
【０００５】
01 GRP1.
02 GRP1-E1  PIC  X(4).
02 GRP1-E2  PIC  X(4).
01 GRP2.
02 GRP2-E1  PIC  X(4).
02 GRP2-E2  PIC  X(4).
【０００６】
上記の例では、２つの集団項目GRP1，GRP2が定義されている。そして、集団項目GRP1は、２つの基本項目GRP1-E1，GRP1-E2を有し、集団項目GRP2は、２つの基本項目GRP2-E1，GRP2-E2を有している。ＣＯＢＯＬでは、このような集団項目において、基本項目単位でのデータ処理と集団項目単位でのデータ処理の両方が可能である。具体的には、例えば、「MOVE GRP1-E1 OF GRP1 TO GRP2-E1 OF GRP2.」のように、基本項目単位でのデータ転送も可能であるし、「MOVE GRP1 TO GRP2.」のように、集団項目単位でのデータ転送も可能である。
【０００７】
特許文献１に開示されているシステムでは、このような集団項目をＪａｖａで実現する際に、集団項目内の各基本項目のデータ領域と、集団項目のデータ領域とを別個に管理している。そのため、集団項目単位でのデータ転送が発生すると、まず、各基本項目のデータ領域から集団項目のデータ領域にデータを反映させる処理が行われ、その後、集団項目単位でのデータ転送が実行される。従って、集団項目単位でのデータ転送の処理コストが大きくなってしまう。
【０００８】
本発明はこのような事情に鑑みてなされたものであり、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの実行時における、集団項目単位でのデータ転送の処理コストを削減することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一側面に係るプログラム変換システムは、ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換するプログラム変換システムであって、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義が集団項目の定義である場合、Ｊａｖａソースプログラムにおいて当該集団項目を実現するための第１のクラスの第１のインスタンスを生成する第１のソースコードを出力する集団項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、Ｊａｖａソースプログラムにおいて当該基本項目を実現するための第２のクラスの第２のインスタンスを生成する第２のソースコードを出力する第１の基本項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を第１のクラスのメンバ変数とする第３のソースコードを出力する第２の基本項目定義コード出力部と、を備える。
【００１０】
なお、本発明において、「部」とは、単に物理的手段を意味するものではなく、その「部」が有する機能をソフトウェアによって実現する場合も含む。また、１つの「部」や装置が有する機能が２つ以上の物理的手段や装置により実現されても、２つ以上の「部」や装置の機能が１つの物理的手段や装置により実現されてもよい。
【発明の効果】
【００１１】
本発明によれば、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの実行時における、集団項目単位でのデータ転送処理の処理コストを削減することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】プログラム変換が行われるシステム全体の概略を示す図である。
【図２】プログラム変換システム１００が備える機能の一例を示すブロック図である。
【図３】変換プログラム実行システム１２０が備える機能の一例を示すブロック図である。
【図４】プログラム変換システム１００におけるデータ型の変換規則の一例を示す図である。
【図５】図４に示した変換規則に基づいてＣＯＢＯＬのデータ定義を変換した一例を示す図である。
【図６】ＣＯＢＯＬのデータ定義の変換処理の一例を示すフローチャートである。
【図７】変換処理において出力されるコードの一例を示す図である。
【図８】ＣＯＢＯＬソースプログラムからＪａｖａソースプログラムへの変換の一例を示す図である。
【図９】Ｊａｖａで定義された変数のデータ領域の構造の一例を示す図である。
【図１０】集団項目間のデータ転送を含むプログラムの変換の一例を示す図である。
【図１１】集団項目間のデータ転送の一例を示す図である。
【図１２】ＣＯＢＯＬにおけるサブプログラム（モジュール）の呼び出しの一例を示す図である。
【図１３】ＣＡＬＬ文を含むＣＯＢＯＬソースプログラムのＪａｖａソースプログラムへの変換の一例を示す図である。
【図１４】サブプログラムを呼び出すＣＯＢＯＬソースプログラムを変換したＪａｖａソースプログラムを実行するための機構の一例を示す図である。
【図１５】サブプログラム内における集団項目の定義の一例を示す図である。
【図１６】図１５に示した集団項目が定義されるサブプログラムのインスタンスが生成された場合の、当該集団項目のデータ領域の一例を示す図である。
【図１７】サブプログラムに対応するインスタンスの実行及び再利用時における、集団項目のデータ領域の変遷の一例を示す図である。
【図１８】サブプログラムに対応するインスタンスを再利用する処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の一実施形態について説明する。図１は、プログラム変換が行われるシステム全体の概略を示す図である。本システムでは、プログラム変換システム１００により、ホストコンピュータ１１０で稼働するプログラムが、変換プログラム実行システム１２０で稼働するプログラムに変換される。具体的には、ホストコンピュータ１１０では、ＣＯＢＯＬプログラム１３０が動作している。プログラム変換システム１００は、ＣＯＢＯＬプログラム１３０のソースコードであるＣＯＢＯＬソースプログラム１４０をＪａｖａソースプログラム１５０に変換する。Ｊａｖａソースプログラム１５０は、コンパイルされてＪａｖａバイトコード１６０となる。そして、Ｊａｖａバイトコード１６０は、変換プログラム実行システム１２０で実行される。
【００１４】
図２は、プログラム変換システム１００が備える機能の一例を示すブロック図である。プログラム変換システム１００は、変換規則記憶部２００、プログラム変換部２１０、ＣＯＢＯＬソースプログラム記憶部２２０、及びＪａｖａソースプログラム記憶部２３０を備える。また、プログラム変換部２１０は、データ定義読み取り部２１１、集団項目定義コード出力部２１２、第１の基本項目定義コード出力部２１３、及び第２の基本項目定義コード出力部２１４を含む。プログラム変換システム１００は、例えば、１台または複数台のコンピュータを用いて構成される。プログラム変換システム１００を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【００１５】
変換規則記憶部２００は、ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換するための変換規則を記憶する。
【００１６】
プログラム変換部２１０は、変換規則に基づいて、ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換する。
【００１７】
データ定義読み取り部２１１は、ＣＯＢＯＬソースプログラムのデータ部（DATA DIVISION）の変換のために、データ部におけるデータ定義を順次読み込む。
【００１８】
集団項目定義コード出力部２１２は、ＣＯＢＯＬソースプログラムにおけるデータ定義が集団項目の定義である場合、Ｊａｖａソースプログラムにおいて当該集団項目を実現するためのクラスのインスタンスを生成するソースコードを出力する。
【００１９】
第１の基本項目定義コード出力部２１３は、ＣＯＢＯＬソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位（例えば「０１」）である場合、Ｊａｖａソースプログラムにおいて当該基本項目を実現するためのクラスのインスタンスを生成するソースコードを出力する。
【００２０】
第２の基本項目定義コード出力部２１４は、ＣＯＢＯＬソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を、集団項目を実現するためのクラスのメンバ変数とするソースコードを出力する。
【００２１】
データ定義読み取り部２１１、集団項目定義コード出力部２１２、第１の基本項目定義コード出力部２１３、及び第２の基本項目定義コード出力部２１４の詳細については、具体例を用いて後述する。
【００２２】
ＣＯＢＯＬソースプログラム記憶部２２０は、変換前のＣＯＢＯＬソースプログラムを記憶する。
【００２３】
Ｊａｖａソースプログラム記憶部２３０は、変換後のＪａｖａソースプログラムを記憶する。
【００２４】
図３は、変換プログラム実行システム１２０が備える機能の一例を示すブロック図である。変換プログラム実行システム１２０は、ＪａｖａＶＭ実行部３００、Ｊａｖａバイトコード記憶部３１０、及びプログラム実行部３２０を含む。また、プログラム実行部３２０は、インスタンスキャッシュ部３２１及びインスタンス管理部３２２を含む。変換プログラム実行システム１２０は、例えば、１台または複数台のコンピュータを用いて構成される。変換プログラム実行システム１２０を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【００２５】
ＪａｖａＶＭ実行部３００は、Ｊａｖａバイトコードを実行するためのプラットフォームであるＪａｖａＶＭを実行する。
【００２６】
Ｊａｖａバイトコード記憶部３１０は、変換されたＪａｖａソースプログラムをコンパイルしたＪａｖａバイトコードを記憶する。
【００２７】
プログラム実行部３２０は、Ｊａｖａバイトコードを実行する。プログラム実行部３２０は、Ｊａｖａバイトコードを実行するための各種ライブラリ（クラスライブラリ等）を含む。
【００２８】
インスタンスキャッシュ部３２１は、ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応する、Ｊａｖａのインスタンスのキャッシュを保持する。
【００２９】
インスタンス管理部３２２は、サブプログラムを呼び出すＣＡＬＬ文から変換された命令が実行されると、当該サブプログラムに対応するインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、キャッシュ内の当該インスタンスを再利用する。
【００３０】
インスタンスキャッシュ部３２１及びインスタンス管理部３２２の詳細については、具体例を用いて後述する。
【００３１】
図４は、プログラム変換システム１００におけるデータ型の変換規則の一例を示す図である。図４において、左側の欄には、ＣＯＢＯＬのデータ型が示されており、右側の欄には、ＣＯＢＯＬのデータ型と同等の機能を実現するためのＪａｖａのラッパークラスが示されている。例えば、１〜９桁の符号無し整数（PIC 9(1)〜PIC 9(9)）は、CIntというラッパークラスに変換される。
【００３２】
図５は、図４に示した変換規則に基づいてＣＯＢＯＬのデータ定義を変換した一例を示す図である。例えば、ＣＯＢＯＬでは、「01 NUM01 PIC S9(003) COMP-3 VALUE 060.」により、符号付きパック形式の３桁の整数（初期値「６０」）として、変数「NUM01」が定義されている。この定義をＪａｖａに変換したものが、「public CInt NUM01=new CInt(3, S, COMP3).VALUE(60);」である。ここで、CIntの引数(3, S, COMP3)は、順に、桁数、符号付き、パック形式を表している。また、CIntのメソッドVALUE(60)は、変数NUM01に初期値「６０」をセットするものである。
【００３３】
図６は、ＣＯＢＯＬのデータ定義の変換処理の一例を示すフローチャートである。図７は、変換処理において出力されるコードの一例を示す図である。図８は、ＣＯＢＯＬソースプログラムからＪａｖａソースプログラムへの変換の一例を示す図である。図９は、Ｊａｖａで定義された変数のデータ領域の構造の一例を示す図である。図７〜図９を参照しつつ、図６の処理について説明する。
【００３４】
まず、データ定義読み取り部２１１は、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を１行読み込む（Ｓ６０１）。データ定義が終了であれば（Ｓ６０２：Ｙ）、処理は終了する。
【００３５】
データ定義が終了でない場合（Ｓ６０２：Ｎ）、集団項目定義コード出力部２１２は、データ定義が集団項目の定義であるかどうか確認する（Ｓ６０３）。集団項目の定義である場合（Ｓ６０３：Ｙ）、集団項目定義コード出力部２１２は、集団項目用のラッパークラスCGrpを継承したクラスとして、当該集団項目を定義するソースコードを出力する（Ｓ６０４）。例えば、図７（ａ）には、集団項目GRP1を定義するソースコードの一例が示されている。具体的には、クラスCGrpを継承したクラスとしてCGRP1が定義され、当該CGRP1のオブジェクトとして、GRP1が定義されている。
【００３６】
集団項目の定義ではない（即ち、基本項目である）場合（Ｓ６０３：Ｎ）、第１の基本項目定義コード出力部２１３は、データ定義がレベル０１であるかどうか確認する（Ｓ６０５）。レベル０１である場合（Ｓ６０５：Ｙ）、基本項目用のラッパークラスのオブジェクトとして当該基本項目を定義するソースコードを出力する（Ｓ６０６）。例えば、図７（ｂ）には、基本項目IDX1を定義するソースコードの一例が示されている。具体的には、クラスCIntのオブジェクトとして、IDX1が定義されている。
【００３７】
基本項目であり（Ｓ６０３：Ｎ）、かつ、レベル０１でない場合（Ｓ６０５：Ｎ）、第２の基本項目定義コード出力部２１４は、当該基本項目を、当該基本項目が属する集団項目のクラスのメンバ変数として定義するソースコードを出力する（Ｓ６０７）。例えば、図７（ｃ）には、集団項目GRP1に属する基本項目GRP1_IDX1を定義するソースコードの一例が示されている。ここで、図７（ｃ）に示すソースコードは、図７（ａ）に示すソースコードに、クラスCGRP1のメンバ変数として追加される。
【００３８】
図８には、図７に示した処理による変換の一例が示されている。図８に示すように、集団項目GRP1は、クラスCGrpを継承したクラスCGRP1のオブジェクトとして定義されている。そして、集団項目GRP1に属する基本項目GRP1_IDX1，GRP1_IDX2，GRP1_IDS1は、クラスCGRP1のメンバ変数として定義されている。また、集団項目に属しない基本項目IDX1は、クラスCIntのオブジェクトとして定義されている。
【００３９】
図９には、集団項目GRP1及び基本項目IDX1のデータ領域の構造の一例が示されている。図９（ａ）に示すように、集団項目GRP1用にデータ領域が確保され、当該データ領域内に、集団項目GPR1の各基本項目のデータ領域が連続して確保される。具体的には、GRP1_IDX1，GRP1_IDX2，GRP1_IDS1用のデータ領域として、順に、６バイト、１２バイト、１２バイトが確保される。また、図９（ｂ）に示すように、集団項目に属しない基本項目IDX1には、独立したデータ領域が確保される。なお、IDX1は、６桁の整数であるが、パック形式（COMP3）であるため、４バイトとなっている。
【００４０】
図１０は、集団項目間のデータ転送を含むプログラムの変換の一例を示す図である。また、図１１は、集団項目間のデータ転送の一例を示す図である。
【００４１】
図１０に示すように、集団項目GRP1は、クラスCGrpを継承したクラスCGRP1のオブジェクトとして定義されている。そして、集団項目GRP1に属する基本項目GRP1_IDX1，GRP1_IDX2，GRP1_IDS1は、クラスCGRP1のメンバ変数として定義されている。同様に、集団項目GRP2は、クラスCGrpを継承したクラスCGRP2のオブジェクトとして定義されている。そして、集団項目GRP2に属する基本項目GRP2_IDX1，GRP2_IDX2，GRP2_IDS1は、クラスCGRP2のメンバ変数として定義されている。
【００４２】
上述のように定義された集団項目GRP1、GRP2間におけるデータ転送「move(GRP1, GRP2);」が実行されると、図１１に示すように、集団項目GRP1の３０バイトの連続した領域が、集団項目GRP2の３０バイトの連続した領域へコピーされる。なお、集団項目に属する各基本項目のデータ領域は、初めから、集団項目のデータ領域内に確保されている。そのため、集団項目単位でデータ転送を実行する際に、各基本項目の値を集団項目のデータ領域にコピーする等の準備は不要である。従って、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの実行時における、集団項目単位でのデータ転送の処理コストを削減することが可能となる。
【００４３】
次に、変換プログラム実行システム１２０において、サブプログラムを実行する際の処理負荷を軽減する手法について説明する。
【００４４】
図１２は、ＣＯＢＯＬにおけるサブプログラム（モジュール）の呼び出しの一例を示す図である。図１２に示すように、メインプログラム（例えば、プログラムＡＢＣ）において、ＣＡＬＬ文により、サブプログラム（例えば、サブプログラムＤＥＦ）を呼び出すことができる。
【００４５】
図１３は、ＣＡＬＬ文を含むＣＯＢＯＬソースプログラムのＪａｖａソースプログラムへの変換の一例を示す図である。図１３に示すように、サブプログラムは、クラスCblSubのオブジェクトとして実現される。
【００４６】
図１４は、サブプログラムを呼び出すＣＯＢＯＬソースプログラムを変換したＪａｖａソースプログラムを実行するための機構の一例を示す図である。メインプログラム（例えば、プログラムＡＢＣ）は、クラスCblBaseのインスタンスとして実現されている。サブプログラム（例えば、サブプログラムＤＥＦ）は、サブブログラム名（例えば、「ＤＥＦ」）を引数として、クラスFactoryのメソッドcreateを実行することにより呼び出すことができる。
【００４７】
サブプログラムは、クラスCblSubのインスタンスとして実現される。サブプログラムのインスタンスは、生成されると、インスタンスキャッシュ部３２１にキャッシュされる。そして、メソッドcreateによりサブプログラムが呼び出されると、インスタンス管理部３２２は、当該キャッシュに保持されているインスタンスのリストをサブプログラム名で検索する。呼び出し対象のサブプログラムに対応するインスタンスがキャッシュに存在する場合、インスタンス管理部３２２は、当該インスタンスを、メンバ変数の値を初期化して再利用する。また、呼び出し対象のサブプログラムに対応するインスタンスがキャッシュに存在しない場合、インスタンス管理部３２２は、当該インスタンスを新たに生成し、キャッシュに登録する。
【００４８】
続いて、サブプログラム内で集団項目が定義される場合におけるデータ領域の管理の一例について説明する。
【００４９】
図１５は、サブプログラム内における集団項目の定義の一例を示す図である。図１５に示す例では、基本項目GRP1_IDX1，GRP1_IDX2，GRP1_IDS1を有する集団項目GRP1が定義されている。図１６は、図１５に示した集団項目が定義されるサブプログラムのインスタンスが生成された場合の、当該集団項目のデータ領域の一例を示す図である。前述したように、各基本項目のデータ領域は、集団項目のデータ領域内に連続して設けられている。そして、インスタンスは、各基本項目のデータ領域の位置に関する情報を保持している。具体的には、インスタンスは、集団項目のデータ領域の位置と、集団項目内における各基本項目のデータ領域の開始位置（オフセット）及びバイト数とを保持している。なお、各基本項目のデータ領域の位置に関する情報は、インスタンスの生成時に計算される。
【００５０】
図１７は、サブプログラムに対応するインスタンスの実行及び再利用時における、集団項目のデータ領域の変遷の一例を示す図である。図１７に示すように、インスタンスの実行時には、集団項目への値の代入が行われる。同じサブプログラムの呼び出しを行う際には、このインスタンスが再利用されることとなるが、集団項目に前回実行時の値が代入されたままでは支障がある。そこで、インスタンスの再利用時には、初期値を設定するメソッドresetForReuseを実行することにより、初期値が設定される。
【００５１】
図１８は、サブプログラムに対応するインスタンスを再利用する処理の一例を示すフローチャートである。サブプログラムの呼び出しに対応するメソッド（例えば、「Factory.create("DEF")」が実行されると、インスタンス管理部３２２は、サブプログラムに対応するインスタンスのキャッシュのリストを、指定されたクラス名（例えば、「ＤＥＦ」）で検索する（Ｓ１８０１）。
【００５２】
リストに存在しない場合（Ｓ１８０２：Ｎ）、インスタンス管理部３２２は、指定されたクラス名（例えば、「ＤＥＦ」）でインスタンスを生成する（Ｓ１８０３）。なお、インスタンス生成の際には、ＣＯＢＯＬソースプログラムのＶＡＬＵＥ句に対応する初期値の設定処理も行われる。そして、インスタンス管理部３２２は、生成したインスタンスをキャッシュのリストに追加する（Ｓ１８０４）。
【００５３】
リストに存在する場合（Ｓ１８０２：Ｙ）、インスタンス管理部３２２は、キャッシュに存在するインスタンスに対してメソッドresetForReuse()を実行し、インスタンスのメンバ変数のデータをクリアする（Ｓ１８０５）。そして、インスタンス管理部３２２は、ＣＯＢＯＬソースプログラムのＶＡＬＵＥ句に対応する初期値の設定処理を再実行し、インスタンスを再利用する（Ｓ１８０６）。
【００５４】
このように、変換プログラム実行システム１２０では、サブプログラムに対応するインスタンスがキャッシュで管理され、再利用される。これにより、サブプログラムを実行するたびに集団項目に属する各基本項目のデータ領域の位置に関する情報を計算する必要がなく、処理負荷を軽減することができる。
【００５５】
以上、本発明の一実施形態であるプログラム変換システム１００及び変換プログラム実行システム１２０について説明した。
【００５６】
プログラム変換システム１００では、ＣＯＢＯＬソースプログラムのデータ定義において、集団項目に属する基本項目については、当該集団項目を実現するクラスのメンバ変数として定義される。これにより、集団項目に属する各基本項目のデータ領域は、初めから、集団項目のデータ領域内に確保される。そのため、集団項目単位でデータ転送を実行する際に、各基本項目の値を集団項目のデータ領域にコピーする等の準備は不要である。従って、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの実行時における、集団項目単位でのデータ転送の処理コストを削減することが可能となる。
【００５７】
また、変換プログラム実行システム１２０では、サブプログラムに対応するインスタンスがキャッシュで管理され、再利用される。即ち、サブプログラムが実行されるたびにインスタンスの生成を行う必要がない。従って、集団項目の定義を含むサブプログラムが繰り返し実行される場合において、サブプログラムの実行のたびに集団項目に属する各基本項目のデータ領域の位置に関する情報を計算する必要がない。これにより、サブプログラムを実行する際の処理負荷を軽減することが可能となる。
【００５８】
なお、本実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更／改良され得るととともに、本発明にはその等価物も含まれる。
【符号の説明】
【００５９】
１００  プログラム変換システム
１１０  ホストコンピュータ
１２０  変換プログラム実行システム
１３０  ＣＯＢＯＬプログラム
１４０  ＣＯＢＯＬソースプログラム
１５０  Ｊａｖａソースプログラム
１６０  Ｊａｖａバイトコード
２００  変換規則記憶部
２１０  プログラム変換部
２１１  データ定義読み取り部
２１２  集団項目定義コード出力部
２１３  第１の基本項目定義コード出力部
２１４  第２の基本項目定義コード出力部
２２０  ＣＯＢＯＬソースプログラム記憶部
２３０  Ｊａｖａソースプログラム記憶部
３００  ＪａｖａＶＭ実行部
３１０  Ｊａｖａバイトコード記憶部
３２０  プログラム実行部
３２１  インスタンスキャッシュ部
３２２  インスタンス管理部
【図１】
2016115070.tif 000003
【図２】
2016115070.tif 000004
【図３】
2016115070.tif 000005
【図４】
2016115070.tif 000006
【図５】
2016115070.tif 000007
【図６】
2016115070.tif 000008
【図７】
2016115070.tif 000009
【図８】
2016115070.tif 000010
【図９】
2016115070.tif 000011
【図１０】
2016115070.tif 000012
【図１１】
2016115070.tif 000013
【図１２】
2016115070.tif 000014
【図１３】
2016115070.tif 000015
【図１４】
2016115070.tif 000016
【図１５】
2016115070.tif 000017
【図１６】
2016115070.tif 000018
【図１７】
2016115070.tif 000019
【図１８】
2016115070.tif 000020