以下の例は、手続き型プログラムを ILSMARTLINKAGE コンパイラ指令でマネージ コードにコンパイルすることで、マネージ アプリケーションに公開する方法について示しています。これにより、クラスのメンバーになっているより低いレベルのデータ項目とともに各グループ項目のクラスを生成することで、手続き型コードの連絡節項目とエントリ ポイントの、他のマネージ言語への公開が促進されます。
この例では、ラッパー クラスの使用例に含まれていた、計算プログラムの微調整バージョンを使用します。
まず、手続き型プログラムを保持するプロジェクトを作成します。
これによって、指定された場所にプロジェクト用の calclib サブフォルダーが作成されます。プロジェクトには、削除できる 1 つの COBOL クラス ファイル Class1.cbl が含まれます。
プロジェクトに新しいプログラムが追加され、そのプログラムがエディターで開かれます。
program-id. Calc.
data division.
working-storage section.
linkage section.
01 operands.
03 op-1 pic 9(4) comp-5.
03 op-2 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 op-1 to op-2 giving the-result
when sub-op
subtract op-2 from op-1 giving the-result
when mult-op
multiply op-1 by op-2 giving the-result
when div-op
divide op-1 by op-2 giving the-result
end-evaluate.
goback.
end program Calc.
この例のバリアントは、ハイフンでつないだバリアント (op-1 およびop-2) を使用して、ILSMARTLINKAGE がそれらをどのように扱うかを示しています。
ILSMARTLINKAGE でコンパイルすると、プログラムのグループ項目が新しいクラスとして、またグループ項目がそのクラスのプロパティとして公開されます。他のマネージ言語は、ハイフンでつながれたデータ項目を認識しませんが、ILSMARTLINKAGE はそれにも対応します。データ項目の名前からハイフンを削除し、Camel 記法で大文字と小文字を変更します。その結果、他のマネージ言語ではoperands がクラスOperandsとして公開されているものと見なし、変数op-1 およびop-2 はそのクラスのプロパティOp1 およびOp2 として公開されているものと見なされます。同様に、func-code はFuncCodeとして公開されます。
次に、クラスとそのプロパティとして公開されている手続き型コードのグループ項目エントリにアクセスする、マネージ COBOL プログラムを作成します。
これによって、OOCalc プロジェクトが calclib プロジェクトからビルド出力ファイルにアクセスできるようになります。
class-id OOCalc.Class1.
working-storage section.
78 add-op value '+'.
78 sub-op value '-'.
78 mult-op value 'x'.
78 div-op value '/'.
method-id. main static.
procedure division.
declare calculation as type Class1
set calculation to new Class1
invoke calculation::Add()
end method.
method-id Add public.
local-storage section.
01 operand type Operands.
01 CalcOO type Calc.
01 func-code type FuncCode.
01 result pic x(4) comp-5.
procedure division.
set func-code to new FuncCode()
set operand to new Operands()
set operand::Op1 to 1.
set operand::Op2 to 2.
set CalcOO to new Calc()
set func-code::FuncCode to add-op
invoke CalcOO::Calc(func-code, operand, result)
display "The result is " result
goback.
end method.
end class.
Class1では、プログラムのメイン エントリ ポイントである静的メソッドmain を定義します。main はオブジェクトcalculation (Class1型) を定義し、Add メソッド (Class1型) を実行します。
このコードは、メソッドAdd を定義します。このメソッドは、次のオブジェクトを変数として使用します。operand (Operands 型。手続き型プログラムのグループ項目はクラスとして公開)CalcOO (Calc 型。手続き型プログラムはクラスと見なされる)func-code (FuncCode 型。func-code の手続き型プログラムでの公開方法)
次に、func-code、operand、およびCalcOOのインスタンスを作成し、手続き型プログラムでop-1 およびop-2 に値を提供し、add-op 操作を呼び出すように指定して、func-code、operand 、およびresult をパラメーターとして使用して算術演算 invoke CalcOO::Calc(func-code, operand, result)を実行する手続き型コードを呼び出します。