次の例は、手続き型プログラムをまず .NET COBOL ラッパー クラスでラップすることで、.NET COBOL アプリケーションに公開する方法を示しています。その後、他の マネージ アプリケーションがオブジェクト指向 (OO) 構文を使用して、ラッパー クラスと対話できるようにします。ラッパー クラスは次に、手続き型プログラムと対話します。
ラッパー クラスを書く方法はさまざまあり、この例では、そのうち 2 つを紹介します。
基本的な算術操作を行う、シンプルな手続き型 COBOL プログラム (計算) を使用します。Visual COBOL を使用して、手続き型プログラムのコードおよびその手続き型コードの .NET COBOL ラッパー クラスを保持する、.NET COBOL プロジェクトを作成します。また、ラッパー クラスを使用して手続き型モジュールとやり取りする、.NET COBOL フロントエンド アプリケーション用のプロジェクトも作成します。
まず、手続き型プログラムおよびラッパー クラスを保持する .NET COBOL プロジェクトを作成する必要があります。.NET COBOL クラス ライブラリ プロジェクトを作成します。
これによって、指定された場所にプロジェクト用の calclib サブフォルダーが作成されます。プロジェクトには、削除できる 1 つの COBOL クラス ファイル Class1.cbl が含まれます。
プロジェクトに新しいプログラムが追加され、そのプログラムがエディターで開かれます。
program-id. Calc as "calclib.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 を、.NET コードで同等の型となる変数 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 構文 (他の .NET 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 の .NET フロントエンド アプリケーションを作成します。
これによって、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.
このプログラムは、2 つのオブジェクト (型 WrapperClass の calc1 および型 ClassDTO の calc2) を定義します。
プログラム実行時、このコードは calc1 および calc2 のインスタンスを作成します。そして、このコード例では、calc1 のインスタンスを作成し、追加操作を実行する Add メソッド (WrapperClass) を呼び出す方法が示されています。
次に、calc2 のインスタンスが作成され、op1 および op2 にアクセスします。これらは、ClassDTO のプロパティとして公開され、値が割り当てられます。その後、Add メソッド (ClassDTO) が呼び出されて追加操作を実行します。