以下の例は、まずマネージ COBOL ラッパー クラスでプログラムをラップすることで、マネージ アプリケーションに公開する方法について示しています。そして、他のマネージ アプリケーションがオブジェクト指向 (OO) 構文を使用して、ラッパー クラスと対話できるようにします。ラッパー クラスは次に、手続き型プログラムと対話します。
ラッパー クラスを書く方法はさまざまあり、この例では、そのうち 2 つを紹介します。
基本的な算術操作を行う、シンプルな手続き型 COBOL プログラム (計算) を使用します。Enterprise Developer を使用して、手続き型プログラムのコードとその手続き型コードのマネージ COBOL ラッパー クラスを保持する、マネージ プロジェクトを作成します。また、ラッパー クラスを使用して手続き型モジュールとやり取りする、マネージ COBOL フロントエンド アプリケーション用のプロジェクトも作成します。
まず、手続き型プログラムとラッパー クラスを保持するマネージ COBOL プロジェクトを作成する必要があります。
これによって、指定された場所にプロジェクト用の calclib サブフォルダーが作成されます。プロジェクトには、すぐに削除できる 1 つの COBOL クラス ファイル Class1.cbl が含まれます。
プロジェクトに新しいプログラムが追加され、そのプログラムがエディターで開かれます。
program-id. Calc.
data division.
working-storage section.
linkage section.
01 operands.
03 op1 pic 9(4) comp-5.
03 op2 pic 9(4) comp-5.
01 the-result pic 9(8) comp-5.
01 func-code pic x.
78 add-op value '+'.
78 sub-op value '-'.
78 mult-op value 'x'.
78 div-op value '/'.
procedure division using by reference func-code operands the-result.
evaluate func-code
when add-op
add op1 to op2 giving the-result
when sub-op
subtract op2 from op1 giving the-result
when mult-op
multiply op1 by op2 giving the-result
when div-op
divide op1 by op2 giving the-result
end-evaluate.
goback.
end program Calc.
手続き型プログラム用のラッパー クラスの 1 つを作成します。
プロジェクトにファイルが追加され、そのプログラムがエディターで開かれます。
class-id calclib.WrapperClass.
working-storage section.
method-id Add.
local-storage section.
01 operands.
03 op1 pic 9(4) comp-5.
03 op2 pic 9(4) comp-5.
linkage section.
01 the-result pic 9(8) comp-5.
procedure division using by value p1 as binary-short
p2 as binary-short
returning the-result.
move p1 to op1
move p2 to op2
call "calc" using '+' operands the-result
goback.
end method.
end class.
WrapperClass はメソッドAddを定義します。このメソッドは、手続き型コード プログラムで使用されるものと同じ comp-5 データ項目を使用します。このメソッドは、op1 およびop2 を、マネージ コードで同等の型となる変数p1 およびp2 にマッピングします。このメソッドは、追加操作を実行する手続き型プログラムを呼び出します。
他のマネージ言語が元の手続き型プログラムの機能にアクセスするには、OO 構文を使用してAdd メソッドを呼び出します。
プロパティ クラスとしても知られるデータ転送オブジェクト (DTO) を使用する、わずかに異なるラッパー クラスを作成します。他のマネージ言語に渡すため、ラッパー クラスのプロパティとして元のプログラムのデータ項目を公開します。
class-id calclib.ClassDTO.
working-storage section.
01 operands property all elementary.
03 op1 pic 9(4) comp-5.
03 op2 pic 9(4) comp-5.
method-id Add.
linkage section.
01 the-result pic 9(8) comp-5.
procedure division returning the-result.
call "calc" using '+' operands the-result
goback.
end method.
end class.
property all elementary をoperands で使用すると、すべての基本グループ項目がClassDTO のプロパティとして公開され、OO 構文 (他のマネージ COBOL プログラムからアクセスする場合、ClassDTO::op1 など) を使用する他のマネージ プログラムからアクセスできます。
ClassDTO は類似メソッドAdd を定義します。このメソッドは、算術操作を実行する手続き型プログラムを呼び出します。
property の使用の代替方法は、以下のとおり個別データ項目ごとにキーワードを設定することです。
01 operands.
03 op1 pic 9(4) comp-5 property as "Operand1".
03 op2 pic 9(4) comp-5 property as "Operand2".
これによって、新しい名前Operand1 およびOperand2でクラスのプロパティとして個別データ項目のみ公開します。
両方のラッパー クラスとやり取りできる、COBOL のマネージ フロントエンド アプリケーションを作成します。
これによって、OOCalc プロジェクトが calclib プロジェクトからビルド出力ファイルにアクセスできるようになります。
program-id. Program1 as "OOCalc.Program1".
data division.
working-storage section.
01 calc1 type calclib.WrapperClass.
01 the-result pic 9(8) comp-5.
01 calc2 type calclib.ClassDTO.
procedure division.
set calc1 to new type calclib.WrapperClass
set the-result to calc1::Add(2, 2)
set calc2 to new calclib.ClassDTO
set calc2::op1 to 5
set calc2::op2 to 4
set the-result to calc2::Add
goback.
end program Program1.
このプログラムは、calc1 (WrapperClass 型) およびcalc2 (ClassDTO型) という 2 つのオブジェクトを定義します。
プログラム実行時、このコードはcalc1 およびcalc2のインスタンスを作成します。そして、このコード例では、calc1 のインスタンスを作成し、追加操作を実行するAdd メソッド (WrapperClass 型) を呼び出す方法が示されています。
次に、calc2 のインスタンスが作成され、op1 およびop2 にアクセスします。これらは、ClassDTO のプロパティとして公開され、値が割り当てられます。その後、Add メソッド (ClassDTO ) が呼び出されて追加操作を実行します。