(57)【要約】【課題】サブプログラム呼び出しに関するＣＯＢＯＬの言語仕様を再現する。【解決手段】プログラム変換システムは、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力する初期化メソッド出力部と、ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する初期化属性出力部と、を備える。【選択図】図６
2020052707.tif 000002
【特許請求の範囲】
【請求項１】
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力する初期化メソッド出力部と、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する初期化属性出力部と、
を備えるプログラム変換システム。
【請求項２】
請求項１に記載されたプログラム変換システムから出力されたＪａｖａソースプログラムを実行する変換プログラム実行システムであって、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用するインスタンス管理部と、
を備える変換プログラム実行システム。
【請求項３】
請求項２に記載の変換プログラム実行システムであって、
前記インスタンスキャッシュ部は、各インスタンスについて、ＣＡＮＣＥＬ文が事前に呼ばれたかどうかを示す情報を記憶し、
前記インスタンス管理部は、前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在する場合は、前記ＣＯＢＯＬソースプログラムが初期化属性を有する場合、または当該インスタンスについてＣＡＮＣＥＬ文が事前に呼ばれている場合に、前記データ項目の初期化を行う、
変換プログラム実行システム。
【請求項４】
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力する初期化メソッド出力部と、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する初期化属性出力部と、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用するインスタンス管理部と、
を備える情報処理システム。
【請求項５】
コンピュータが、
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込み、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力し、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する、
プログラム変換方法。
【請求項６】
請求項５に記載されたプログラム変換方法により出力されたＪａｖａソースプログラムを実行するコンピュータが、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持し、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用する、
を備える変換プログラム実行方法。
【請求項７】
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込み、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力し、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力し、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持し、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用する、
を備える情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法に関する。
【背景技術】
【０００２】
基幹システムのオープン化に伴い、ＣＯＢＯＬソースプログラムのＪａｖａ（登録商標）ソースプログラムへの変換が注目されている。例えば、特許文献１には、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの実行時における、集団項目単位でのデータ転送の処理コストを削減する手法が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−１１５０７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、ＣＯＢＯＬの言語仕様では、実行時に最初に起動されるプログラム（メインプログラム）及びＣＡＬＬ文で呼び出されるサブプログラムの集合を実行単位とした場合、各サブプログラムは、実行単位内で最初に呼び出された時に、当該サブプログラムの初期化処理が行われる。初期化処理では、ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ（作業場所節）で定義されたデータ項目が初期化される。すなわち、ＶＡＬＵＥ句が指定されたデータ項目は、当該ＶＡＬＵＥ句の値で初期化される。
【０００５】
そして、実行単位内におけるサブプログラムの２回目以降の呼び出し時には、ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮで定義されたデータ項目は初期化されず、直前の状態を引き継ぐこととなる。ただし、実行単位内における２回目以降の呼び出し時であっても、サブプログラムの見出し部にＩＮＩＴＩＡＬ句が指定されている場合、又はサブプログラムを指定したＣＡＮＣＥＬ文が実行されている場合には、ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮで定義されたデータ項目が初期化される。
【０００６】
ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムを実行する際には、ＣＯＢＯＬの上記言語仕様を再現することが求められる。
【０００７】
本発明はこのような事情に鑑みてなされたものであり、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムを実行するシステムにおいて、サブプログラム呼び出しに関するＣＯＢＯＬの言語仕様を再現することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面に係るプログラム変換システムは、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力する初期化メソッド出力部と、ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する初期化属性出力部と、を備える。
【０００９】
また、本発明の一側面に係る変換プログラム実行システムは、ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、ＣＡＬＬ文から変換された第１の命令が実行されると、サブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第２のソースコードの実行結果に基づいて、ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、第１のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用するインスタンス管理部と、を備える。
【００１０】
また、本発明の一側面に係る情報処理システムは、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力する初期化メソッド出力部と、ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する初期化属性出力部と、ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、ＣＡＬＬ文から変換された第１の命令が実行されると、サブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第２のソースコードの実行結果に基づいて、ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、第１のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用するインスタンス管理部と、を備える。
【００１１】
また、本発明の一側面に係るプログラム変換方法は、コンピュータが、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込み、データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力し、ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する。
【００１２】
また、本発明の一側面に係る変換プログラム実行方法は、プログラム変換方法により出力されたＪａｖａソースプログラムを実行するコンピュータが、ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持し、ＣＡＬＬ文から変換された第１の命令が実行されると、サブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第２のソースコードの実行結果に基づいて、ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、第１のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用する。
【００１３】
また、本発明の一側面に係る情報処理方法は、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込み、データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力し、ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力し、ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持し、ＣＡＬＬ文から変換された第１の命令が実行されると、サブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第２のソースコードの実行結果に基づいて、ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、第１のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用する。
【００１４】
なお、本発明において、「部」とは、単に物理的手段を意味するものではなく、その「部」が有する機能をソフトウェアによって実現する場合も含む。また、１つの「部」や装置が有する機能が２つ以上の物理的手段や装置により実現されても、２つ以上の「部」や装置の機能が１つの物理的手段や装置により実現されてもよい。
【発明の効果】
【００１５】
本発明によれば、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムを実行するシステムにおいて、サブプログラム呼び出しに関するＣＯＢＯＬの言語仕様を再現することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】プログラム変換が行われるシステム全体の概略を示す図である。
【図２】プログラム変換システム１００が備える機能の一例を示すブロック図である。
【図３】変換プログラム実行システム１２０が備える機能の一例を示すブロック図である。
【図４】プログラム変換システム１００におけるデータ型の変換規則の一例を示す図である。
【図５】図４に示した変換規則に基づいてＣＯＢＯＬのデータ定義を変換した一例を示す図である。
【図６】ＣＯＢＯＬのデータ定義の変換処理の一例を示すフローチャートである。
【図７】変換処理において出力されるコードの一例を示す図である。
【図８Ａ】ＣＯＢＯＬソースプログラムからＪａｖａソースプログラムへの変換の一例を示す図である。
【図８Ｂ】ＣＯＢＯＬソースプログラムからＪａｖａソースプログラムへの変換の一例を示す図である。
【図９】ＣＯＢＯＬにおけるサブプログラム（モジュール）の呼び出しの一例を示す図である。
【図１０】ＣＡＬＬ文を含むＣＯＢＯＬソースプログラムのＪａｖａソースプログラムへの変換の一例を示す図である。
【図１１】サブプログラムを呼び出すＣＯＢＯＬソースプログラムを変換したＪａｖａソースプログラムを実行するための機構の一例を示す図である。
【図１２】サブプログラムに対応するインスタンスを再利用する処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本発明の一実施形態について説明する。図１は、プログラム変換が行われるシステム全体の概略を示す図である。本システムでは、プログラム変換システム１００により、ホストコンピュータ１１０で稼働するプログラムが、変換プログラム実行システム１２０で稼働するプログラムに変換される。具体的には、ホストコンピュータ１１０では、ＣＯＢＯＬプログラム１３０が動作している。プログラム変換システム１００は、ＣＯＢＯＬプログラム１３０のソースコードであるＣＯＢＯＬソースプログラム１４０をＪａｖａソースプログラム１５０に変換する。Ｊａｖａソースプログラム１５０は、コンパイルされてＪａｖａバイトコード１６０となる。そして、Ｊａｖａバイトコード１６０は、変換プログラム実行システム１２０で実行される。
【００１８】
図２は、プログラム変換システム１００が備える機能の一例を示すブロック図である。プログラム変換システム１００は、変換規則記憶部２００、プログラム変換部２１０、ＣＯＢＯＬソースプログラム記憶部２２０、及びＪａｖａソースプログラム記憶部２３０を備える。また、プログラム変換部２１０は、データ定義読み取り部２１１、項目定義コード出力部２１２、初期化メソッド出力部２１３及び初期化属性出力部２１４を含む。また、項目定義コード出力部２１２は、集団項目定義コード出力部２１５、第１の基本項目定義コード出力部２１６、及び第２の基本項目定義コード出力部２１７を含む。プログラム変換システム１００は、例えば、１台または複数台のコンピュータを用いて構成される。プログラム変換システム１００を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【００１９】
変換規則記憶部２００は、ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換するための変換規則を記憶する。
【００２０】
プログラム変換部２１０は、変換規則に基づいて、ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換する。
【００２１】
データ定義読み取り部２１１は、ＣＯＢＯＬソースプログラムのＤＡＴＡ  ＤＩＶＩＳＩＯＮ（データ部）におけるＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮ（作業場所節）の変換のために、ＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮにおけるデータ定義を順次読み込む。
【００２２】
データ定義コード出力部２１２は、データ定義読み取り部２１２が読み込んだデータ定義をＪａｖａソースプログラムにおいて実現するためのソースコードを出力する。
【００２３】
集団項目定義コード出力部２１５は、ＣＯＢＯＬソースプログラムにおけるデータ定義が集団項目の定義である場合、Ｊａｖａソースプログラムにおいて当該集団項目を実現するためのクラス（ＣＧｒｐ）のインスタンスを生成するソースコードを出力する。
【００２４】
第１の基本項目定義コード出力部２１６は、ＣＯＢＯＬソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位（例えば「０１」）である場合、Ｊａｖａソースプログラムにおいて当該基本項目を実現するためのクラス（Ｊａｖａラッパークラス）のインスタンスを生成するソースコードを出力する。
【００２５】
第２の基本項目定義コード出力部２１７は、ＣＯＢＯＬソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を、集団項目を実現するためのクラス（ＣＧｒｐ）のメンバ変数とするソースコードを出力する。
【００２６】
なお、集団項目を実現するためのクラス（ＣＧｒｐ）及び基本項目を実現するためのクラス（Ｊａｖａラッパークラス）には、データ項目を初期値に初期化するメソッド（ｒｅｓｅｔＦｏｒＲｅｕｓｅ）が実装されている。
【００２７】
データ定義読み取り部２１１及びデータ定義コード出力部２１２の詳細については、具体例を用いて後述する。
【００２８】
初期化メソッド出力部２１３は、ＣＯＢＯＬソースプログラムのデータ定義において初期値が設定されているデータ項目が存在する場合に、当該データ項目を実現するクラスにおいてデータ項目を初期値に初期化するメソッド（ｒｅｓｅｔＦｏｒＲｅｕｓｅ）を呼び出すためのメソッド（ｒｅｓｅｔＦｏｒＲｅｕｓｅ）のソースコードを出力する。
【００２９】
初期化属性出力部２１４は、ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを判定する。具体的には、初期化属性出力部２１４は、ＣＯＢＯＬソースプログラムの見出し部において、ＩＮＩＴＩＡＬ句が指定されているかどうかを判定する。ＣＯＢＯＬの言語仕様では、初期化属性を有する（ＩＮＩＴＩＡＬ句が指定されている）プログラムは、呼び出されるたびに変数の初期化が行われる。初期化属性出力部２１４は、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムにおいて、初期化属性の有無を判断可能とするための情報を出力する。具体的には、初期化属性出力部２１４は、初期化属性の有無を示す情報を出力するためのメソッド（ｉｓＩｎｉｔｉａｌ）のソースコードを出力する。
【００３０】
ＣＯＢＯＬソースプログラム記憶部２２０は、変換前のＣＯＢＯＬソースプログラムを記憶する。
【００３１】
Ｊａｖａソースプログラム記憶部２３０は、変換後のＪａｖａソースプログラムを記憶する。
【００３２】
図３は、変換プログラム実行システム１２０が備える機能の一例を示すブロック図である。変換プログラム実行システム１２０は、ＪａｖａＶＭ実行部３００、Ｊａｖａバイトコード記憶部３１０、及びプログラム実行部３２０を含む。また、プログラム実行部３２０は、インスタンスキャッシュ部３２１及びインスタンス管理部３２２を含む。変換プログラム実行システム１２０は、例えば、１台または複数台のコンピュータを用いて構成される。変換プログラム実行システム１２０を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【００３３】
ＪａｖａＶＭ実行部３００は、Ｊａｖａバイトコードを実行するためのプラットフォームであるＪａｖａＶＭを実行する。
【００３４】
Ｊａｖａバイトコード記憶部３１０は、変換されたＪａｖａソースプログラムをコンパイルしたＪａｖａバイトコードを記憶する。
【００３５】
プログラム実行部３２０は、Ｊａｖａバイトコードを実行する。プログラム実行部３２０は、Ｊａｖａバイトコードを実行するための各種ライブラリ（クラスライブラリ等）を含む。
【００３６】
インスタンスキャッシュ部３２１は、ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応する、Ｊａｖａのインスタンスのキャッシュを保持する。
【００３７】
インスタンス管理部３２２は、サブプログラムを呼び出すＣＡＬＬ文から変換された命令が実行されると、当該サブプログラムに対応するインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、キャッシュ内の当該インスタンスを再利用する。
【００３８】
インスタンスキャッシュ部３２１及びインスタンス管理部３２２の詳細については、具体例を用いて後述する。
【００３９】
図４は、プログラム変換システム１００におけるデータ型の変換規則の一例を示す図である。図４において、左側の欄には、ＣＯＢＯＬのデータ型が示されており、右側の欄には、ＣＯＢＯＬのデータ型と同等の機能を実現するためのＪａｖａラッパークラスが示されている。例えば、１〜９桁の符号無し整数（ＰＩＣ  ９（１）〜ＰＩＣ  ９（９））は、ＣＩｎｔというＪａｖａラッパークラスに変換される。
【００４０】
図５は、図４に示した変換規則に基づいてＣＯＢＯＬのデータ定義を変換した一例を示す図である。例えば、ＣＯＢＯＬでは、「０１  ＮＵＭ０１  ＰＩＣ  Ｓ９（００３）  ＣＯＭＰ−３  ＶＡＬＵＥ  ０６０．」により、符号付きパック形式の３桁の整数（初期値「６０」）として、変数「ＮＵＭ０１」が定義されている。この定義をＪａｖａに変換したものが、「ｐｕｂｌｉｃ  ＣＩｎｔ  ＮＵＭ０１＝ｎｅｗ  ＣＩｎｔ（３，  Ｓ，  ＣＯＭＰ３）．ＶＡＬＵＥ（６０）；」である。ここで、ＣＩｎｔの引数（３，  Ｓ，  ＣＯＭＰ３）は、順に、桁数、符号付き、パック形式を表している。また、ＣＩｎｔのメソッドＶＡＬＵＥ（６０）は、変数ＮＵＭ０１に初期値「６０」をセットするものである。
【００４１】
図６は、ＣＯＢＯＬのデータ定義の変換処理の一例を示すフローチャートである。図７は、変換処理において出力されるコードの一例を示す図である。図８Ａ及び図８Ｂは、ＣＯＢＯＬソースプログラムからＪａｖａソースプログラムへの変換の一例を示す図である。図７、図８Ａ及び図８Ｂを参照しつつ、図６の処理について説明する。
【００４２】
まず、データ定義読み取り部２１１は、ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を１行読み込む（Ｓ６０１）。
【００４３】
データ定義が終了でない場合（Ｓ６０２：Ｎ）、集団項目定義コード出力部２１５は、データ定義が集団項目の定義であるかどうか確認する（Ｓ６０３）。集団項目の定義である場合（Ｓ６０３：Ｙ）、集団項目定義コード出力部２１５は、集団項目用のラッパークラスＣＧｒｐを継承したクラスとして、当該集団項目を定義するソースコードを出力する（Ｓ６０４）。例えば、図７（ａ）には、集団項目ＧＲＰ１を定義するソースコードの一例が示されている。具体的には、クラスＣＧｒｐを継承したクラスとしてＣＧＲＰ１が定義され、当該ＣＧＲＰ１のオブジェクトとして、ＧＲＰ１が定義されている。
【００４４】
集団項目の定義ではない（即ち、基本項目である）場合（Ｓ６０３：Ｎ）、第１の基本項目定義コード出力部２１６は、データ定義がレベル０１であるかどうか確認する（Ｓ６０５）。レベル０１である場合（Ｓ６０５：Ｙ）、基本項目用のラッパークラスのオブジェクトとして当該基本項目を定義するソースコードを出力する（Ｓ６０６）。例えば、図７（ｂ）には、基本項目ＩＤＸ１を定義するソースコードの一例が示されている。具体的には、クラスＣＩｎｔのオブジェクトとして、ＩＤＸ１が定義されている。
【００４５】
基本項目であり（Ｓ６０３：Ｎ）、かつ、レベル０１でない場合（Ｓ６０５：Ｎ）、第２の基本項目定義コード出力部２１７は、当該基本項目を、当該基本項目が属する集団項目のクラスのメンバ変数として定義するソースコードを出力する（Ｓ６０７）。例えば、図７（ｃ）には、集団項目ＧＲＰ１に属する基本項目ＧＲＰ１＿ＩＤＸ１を定義するソースコードの一例が示されている。ここで、図７（ｃ）に示すソースコードは、図７（ａ）に示すソースコードに、クラスＣＧＲＰ１のメンバ変数として追加される。
【００４６】
データ定義が終了すると（Ｓ６０２：Ｙ）、初期化メソッド出力部２１３は、ＣＯＢＯＬソースプログラムのデータ定義において初期値が設定されているデータ項目が存在する場合に、当該データ項目を実現するクラスにおいてデータ項目を初期値に初期化するメソッドを呼び出すためのメソッドのソースコードを出力する（Ｓ６０８）。
【００４７】
また、初期化属性出力部２１４は、ＣＯＢＯＬソースプログラムにおける初期化属性の有無を示す情報を出力するためのメソッドのソースコードを出力する（Ｓ６０９）。
【００４８】
図８Ａ及び図８Ｂには、図６に示した処理による変換の一例が示されている。ここで、図８Ａは、変換元のＣＯＢＯＬソースプログラムの一例、図８Ｂは、変換後のＪａｖａソースプログラムの一例を示している。図８Ｂに示すように、集団項目ＧＲＰ１は、クラスＣＧｒｐを継承したクラスＣＧＲＰ１のオブジェクトとして定義されている。そして、集団項目ＧＲＰ１に属する基本項目ＧＲＰ１＿ＩＤＸ１，ＧＲＰ１＿ＩＤＸ２，ＧＲＰ１＿ＩＤＳ１は、クラスＣＧＲＰ１のメンバ変数として定義されている。また、集団項目に属しない基本項目ＩＤＸ１は、クラスＣＩｎｔのオブジェクトとして定義されている。
【００４９】
また、図８Ａに示すＣＯＢＯＬソースプログラムでは、集団項目ＧＲＰ１に属する基本項目ＧＰＲ１＿ＩＤＳ１は、初期値’００’が設定されている。また、集団項目に属しない基本項目ＩＤＳ１は、初期値’９９’が設定されている。これに対応して、図８Ｂに示すように、集団項目ＧＲＰ１を実現するクラスにおいてデータ項目を初期値に初期化するためのメソッド（ＧＲＰ１．ｒｅｓｅｔＦｏｒＲｅｕｓｅ（））及び基本項目ＩＤＳ１を実現するクラスにおいてデータ項目を初期値に初期化するためのメソッド（ＩＤＳ１．ｒｅｓｅｔＦｏｒＲｅｕｓｅ（））を呼び出すためのメソッド（ｒｅｓｅｔＦｏｒＲｅｕｓｅ（））のソースコードが出力されている。
【００５０】
また、図８Ｂに示すように、Ｊａｖａソースプログラムには、初期化属性の有無を示す情報を出力するためのメソッド（ｉｓＩｎｉｔｉａｌ）のソースコードが出力されている。図８Ａに示すＣＯＢＯＬソースプログラムは、見出し部においてＩＮＩＴＩＡＬ句が指定されており、初期化属性を有している。そのため、図８Ｂに示す例では、メソッドｉｓＩｎｉｔｉａｌが、初期化属性を有することを示す情報として値ｔｒｕｅを返す仕様となっている。初期化属性を有しないＣＯＢＯＬソースプログラムの場合であれば、これとは異なる値（ｆａｌｓｅ）を返せばよい。
【００５１】
次に、変換プログラム実行システム１２０において、サブプログラムを実行する際の処理負荷を軽減する手法について説明する。
【００５２】
図９は、ＣＯＢＯＬにおけるサブプログラムの呼び出しの一例を示す図である。図９に示すように、メインプログラム（例えば、プログラムＭＡＩＮ０１）において、ＣＡＬＬ文により、サブプログラム（例えば、サブプログラムＳＵＢ０１）を呼び出すことができる。
【００５３】
図１０は、ＣＡＬＬ文を含むＣＯＢＯＬソースプログラムのＪａｖａソースプログラムへの変換の一例を示す図である。図８Ｂにも示したように、サブプログラムは、クラスＣｂｌＳｕｂのオブジェクトとして実現される。
【００５４】
図１１は、サブプログラムを呼び出すＣＯＢＯＬソースプログラムを変換したＪａｖａソースプログラムを実行するための機構の一例を示す図である。メインプログラム（例えば、プログラムＭＡＩＮ０１）は、クラスＣｂｌＢａｓｅのインスタンスとして実現されている。サブプログラム（例えば、サブプログラムＳＵＢ０１）は、サブブログラム名（例えば、「ＳＵＢ０１」）を引数として、クラスＦａｃｔｏｒｙのメソッドｃｒｅａｔｅを実行することにより呼び出すことができる。
【００５５】
サブプログラムは、クラスＣｂｌＳｕｂのインスタンスとして実現される。サブプログラムのインスタンスは、生成されると、インスタンスキャッシュ部３２１にキャッシュされる。そして、メソッドｃｒｅａｔｅによりサブプログラムが呼び出されると、インスタンス管理部３２２は、当該キャッシュに保持されているインスタンスのリストをサブプログラム名で検索する。呼び出し対象のサブプログラムに対応するインスタンスがキャッシュに存在する場合、インスタンス管理部３２２は、当該インスタンスを、必要に応じてメンバ変数の値を初期化したうえで再利用する。メンバ変数の初期化については後述する。また、呼び出し対象のサブプログラムに対応するインスタンスがキャッシュに存在しない場合、インスタンス管理部３２２は、当該インスタンスを新たに生成し、キャッシュに登録する。
【００５６】
図１２は、サブプログラムに対応するインスタンスを再利用する処理の一例を示すフローチャートである。サブプログラムの呼び出しに対応するメソッド（例えば、「Ｆａｃｔｏｒｙ．ｃｒｅａｔｅ（“ＳＵＢ０１”）」が実行されると、インスタンス管理部３２２は、サブプログラムに対応するインスタンスのキャッシュのリストを、指定されたクラス名（例えば、「ＳＵＢ０１」）で検索する（Ｓ１２０１）。
【００５７】
リストに存在しない場合（Ｓ１２０２：Ｎ）、インスタンス管理部３２２は、指定されたクラス名（例えば、「ＳＵＢ０１」）でインスタンスを生成する（Ｓ１２０３）。なお、インスタンス生成の際には、ＣＯＢＯＬソースプログラムのＶＡＬＵＥ句に対応する初期値の設定処理も行われる。そして、インスタンス管理部３２２は、生成したインスタンスをキャッシュのリストに追加する（Ｓ１２０４）。
【００５８】
リストに存在する場合（Ｓ１２０２：Ｙ）、インスタンス管理部３２２は、呼び出されたサブプログラムが、初期化属性を有しているか、またはＣＡＮＣＥＬ文が事前に実行されているかどうかを確認する（Ｓ１２０５）。なお、初期化属性の有無については、メソッドｉｓＩｎｉｔｉａｌを実行することにより確認することができる。また、インスタンスキャッシュ部３２１は、キャッシュされている各インスタンスについて、ＣＡＮＣＥＬ文が事前に実行されているかどうかを示す情報を記憶しておくことができる。インスタンス管理部３２２は、当該情報を参照することにより、ＣＡＮＣＥＬ文が事前に実行されているかどうかを確認することができる。
【００５９】
初期化属性が無く、かつ、ＣＡＮＣＥＬ文が事前に実行されていない場合（Ｓ１２０５：Ｎ）、インスタンス管理部３２２は、初期化処理を行わずにインスタンスを再利用する。他方、初期化属性があるか、またはＣＡＮＣＥＬ文が事前に実行されている場合（Ｓ１２０５：Ｙ）、インスタンス管理部３２２は、キャッシュに存在するインスタンスに対してメソッドｒｅｓｅｔＦｏｒＲｅｕｓｅ（）を実行し、インスタンスのメンバ変数のデータをＣＯＢＯＬソースプログラムのＶＡＬＵＥ句に対応する初期値に初期化したうえで、インスタンスを再利用する（Ｓ１２０６）。
【００６０】
このように、変換プログラム実行システム１２０では、サブプログラムに対応するインスタンスがキャッシュで管理され、再利用される。これにより、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムを実行するシステムにおいて、サブプログラム呼び出しに関するＣＯＢＯＬの言語仕様を再現するとともに、サブプログラム呼び出し時の負荷を軽減することが可能となる。
【００６１】
以上、本発明の一実施形態であるプログラム変換システム１００及び変換プログラム実行システム１２０について説明した。
【００６２】
プログラム変換システム１００では、データ定義が、初期値が設定されているデータ項目を含む場合、当該データ項目を初期値に初期化するためのメソッドを呼び出すための第１のソースコードが出力される。さらに、プログラム変換システム１００では、ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードが出力される。これにより、ＣＯＢＯＬにおけるサブプログラムの初期化に関する言語仕様を再現することが可能となる。
【００６３】
また、変換プログラム実行システム１２０では、ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュが保持される。そして、変換プログラム実行システム１２０では、ＣＡＬＬ文から変換された第１の命令が実行されると、サブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスがキャッシュに存在しない場合は、当該インスタンスが新たに生成される。他方、キャッシュに存在する場合は、第２のソースコードの実行結果に基づいて、ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、第１のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスが再利用され、初期化属性を有しない場合はデータ項目の初期化を行わずに当該インスタンスが再利用される。これにより、ＣＯＢＯＬにおけるサブプログラムの初期化に関する言語仕様を再現するとともに、プログラム呼び出し時の負荷を軽減することが可能となる。
【００６４】
さらに、変換プログラム実行システム１２０では、各インスタンスについて、ＣＡＮＣＥＬ文が事前に呼ばれたかどうかを示す情報が記憶される。そして、変換プログラム実行システム１２０では、サブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスがキャッシュに存在する場合は、ＣＯＢＯＬソースプログラムが初期化属性を有する場合、または当該インスタンスについてＣＡＮＣＥＬ文が事前に呼ばれている場合に、データ項目の初期化が行われる。これにより、ＣＯＢＯＬにおけるサブプログラムの初期化に関する言語仕様を再現するとともに、プログラム呼び出し時の負荷を軽減することが可能となる。
【００６５】
なお、本実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更／改良され得るととともに、本発明にはその等価物も含まれる。
【符号の説明】
【００６６】
１００  プログラム変換システム
１１０  ホストコンピュータ
１２０  変換プログラム実行システム
１３０  ＣＯＢＯＬプログラム
１４０  ＣＯＢＯＬソースプログラム
１５０  Ｊａｖａソースプログラム
１６０  Ｊａｖａバイトコード
２００  変換規則記憶部
２１０  プログラム変換部
２１１  データ定義読み取り部
２１２  データ定義コード出力部
２１３  初期化メソッド出力部
２１４  初期化属性出力部
２１５  集団項目定義コード出力部
２１６  第１の基本項目定義コード出力部
２１７  第２の基本項目定義コード出力部
２２０  ＣＯＢＯＬソースプログラム記憶部
２３０  Ｊａｖａソースプログラム記憶部
３００  ＪａｖａＶＭ実行部
３１０  Ｊａｖａバイトコード記憶部
３２０  プログラム実行部
３２１  インスタンスキャッシュ部
３２２  インスタンス管理部
【図１】
2020052707.tif 000003
【図２】
2020052707.tif 000004
【図３】
2020052707.tif 000005
【図４】
2020052707.tif 000006
【図５】
2020052707.tif 000007
【図６】
2020052707.tif 000008
【図７】
2020052707.tif 000009
【図８Ａ】
2020052707.tif 000010
【図８Ｂ】
2020052707.tif 000011
【図９】
2020052707.tif 000012
【図１０】
2020052707.tif 000013
【図１１】
2020052707.tif 000014
【図１２】
2020052707.tif 000015
【手続補正書】
【提出日】平成30年11月21日(2018.11.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力する初期化メソッド出力部と、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する初期化属性出力部と、
を備えるプログラム変換システム。
【請求項２】
請求項１に記載されたプログラム変換システムから出力されたＪａｖａソースプログラムを実行する変換プログラム実行システムであって、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用するインスタンス管理部と、
を備える変換プログラム実行システム。
【請求項３】
請求項２に記載の変換プログラム実行システムであって、
前記インスタンスキャッシュ部は、各インスタンスについて、ＣＡＮＣＥＬ文が事前に呼ばれたかどうかを示す情報を記憶し、
前記インスタンス管理部は、前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在する場合は、前記ＣＯＢＯＬソースプログラムが初期化属性を有する場合、または当該インスタンスについてＣＡＮＣＥＬ文が事前に呼ばれている場合に、前記データ項目の初期化を行う、
変換プログラム実行システム。
【請求項４】
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力する初期化メソッド出力部と、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する初期化属性出力部と、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用するインスタンス管理部と、
を備える情報処理システム。
【請求項５】
コンピュータが、
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込み、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力し、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力する、
プログラム変換方法。
【請求項６】
請求項５に記載されたプログラム変換方法により出力されたＪａｖａソースプログラムを実行するコンピュータが、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持し、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用する、
変換プログラム実行方法。
【請求項７】
コンピュータが、
ＣＯＢＯＬソースプログラムのデータ部におけるデータ定義を順次読み込み、
前記データ定義をＪａｖａソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第１のソースコードを出力し、
前記ＣＯＢＯＬソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第２のソースコードを出力し、
前記ＣＯＢＯＬソースプログラムにおいてＣＡＬＬ文で呼び出されるサブプログラムに対応するＪａｖａソースプログラムのクラスのインスタンスのキャッシュを保持し、
前記ＣＡＬＬ文から変換された第１の命令が実行されると、
前記サブプログラムに対応する前記Ｊａｖａソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第２のソースコードの実行結果に基づいて、前記ＣＯＢＯＬソースプログラムが、初期化属性を有する場合は、前記第１のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用する、
情報処理方法。