以下の例は、手続き型プログラムを 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) はそのクラスのプロパティ op-1 および op-2 として公開されているものとみなします。同様に、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 は、型 Class1 のオブジェクト calculation を定義し、Class1 の Add メソッドを実行します。
このコードは、変数として、型 Operands の operand (クラスとして公開されている手続き型プログラムからのグループ項目)、型 Calc の CalcOO (クラスとみなされている手続き型プログラム)、型 FuncCode の func-code (手続き型プログラムの func-code がどのように公開されるか) を使用するメソッド Add を定義します。
そして、func-code、operand、および CalcOO のインスタンスを作成して、手続き型プログラムで op-1 とop-2 に値を与え、add-op 操作を呼び出すことを指定し、算術計算 invoke CalcOO::Calc(func-code, operand, result) を行うパラメーターとして func-code、operand、result を使用して手続き型コードを呼び出します。
まず、手続き型プログラムを保持するプロジェクトを作成します。
これによって、指定された場所にプロジェクト用の calclib サブフォルダーが作成されます。次に、手続き型コードを保持するプログラムを作成する必要があります。
これによって、デフォルト パッケージでプロジェクトの src サブフォルダーにプログラムを作成し、エディターでプログラムを開きます。
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) はそのクラスのプロパティ op-1 および op-2 として公開されているものとみなします。同様に、func-code は FuncCode として公開されます。
次に、クラスとそのプロパティとして公開されている calclib プロジェクトの手続き型コードのグループ項目エントリにアクセスする、マネージ COBOL にアプリケーションを作成します。
これによりプロジェクトに Class1.cbl が作成され、エディターでそのファイルが開かれます。
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.
自動ビルドは、型 Calc、FuncCode、および Operands を認識しないため、コードのコンパイルに失敗します。これを解決するには、OOCalc のJVM Build Path に calclib プロジェクトを追加する必要があります。
calclib は OOCalc の JVM ビルド パスにあるため、OOCalc のコードは calclib で定義されたクラスを検出し、以降のビルドが成功します。
Class1 で、プログラムのメイン エントリ ポイントになっている静的メソッド main を定義します。main は、型 calculation のオブジェクト Class1 を定義し、Add の Class1 メソッドを実行します。
このコードは、変数として、型 Operands の operand (クラスとして公開されている手続き型プログラムからのグループ項目)、型 Calc の CalcOO (クラスとみなされている手続き型プログラム)、型 FuncCode の func-code (手続き型プログラムの func-code がどのように公開されるか) を使用するメソッド Add を定義します。
そして、func-code、operand、および CalcOO のインスタンスを作成して、手続き型プログラムで op-1 とop-2 に値を与え、add-op 操作を呼び出すことを指定し、算術計算 invoke CalcOO::Calc(func-code, operand, result) を行うパラメーターとして func-code、operand、result を使用して手続き型コードを呼び出します。