.NET COBOL ラッパー クラスの使用例

次の例は、手続き型プログラムをまず .NET COBOL ラッパー クラスでラップすることで、.NET COBOL アプリケーションに公開する方法を示しています。その後、他の マネージ アプリケーションがオブジェクト指向 (OO) 構文を使用して、ラッパー クラスと対話できるようにします。ラッパー クラスは次に、手続き型プログラムと対話します。

ラッパー クラスを書く方法はさまざまあり、この例では、そのうち 2 つを紹介します。

基本的な算術操作を行う、シンプルな手続き型 COBOL プログラム (計算) を使用します。Enterprise Developer を使用して、手続き型プログラムのコードとその手続き型コードの .NET COBOL ラッパー クラスを保持する、.NET COBOL プロジェクトを作成します。また、ラッパー クラスを使用して手続き型モジュールとやり取りする、.NET COBOL フロントエンド アプリケーション用のプロジェクトも作成します。

.NET COBOL プロジェクトの作成

まず、手続き型プログラムとラッパー クラスを保持する .NET COBOL プロジェクトを作成する必要があります。.NET COBOL クラス ライブラリ プロジェクトを作成します。

  1. Visual Studio で、[ファイル > 新規作成 > プロジェクト] をクリックします。
  2. [新しいプロジェクトの作成] ダイアログ ボックスで、[言語] ドロップダウン リストから [COBOL] を選択します。
  3. [Class Library (.NET Framework)] をクリックします。
  4. calclib などの名前を指定します。
  5. [ソリューションとプロジェクトを同じディレクトリに配置する] をオフにします。
  6. [作成] をクリックします。

    これによって、指定された場所にプロジェクト用の calclib サブフォルダーが作成されます。プロジェクトには、削除できる 1 つの COBOL クラス ファイル Class1.cbl が含まれます。

  7. 手続き型コード プログラムを保持するプログラムを calclib プロジェクトに追加します。プロジェクトを右クリックし、[追加 > 新しい項目] をクリックします。
  8. [COBOL Items] セクションで [COBOL program] をクリックして、[名前] フィールドで Calc.cbl を指定し、[OK] をクリックします。

    プロジェクトに新しいプログラムが追加され、そのプログラムがエディターで開かれます。

  9. プログラムのコードを以下のものに置き換えます。
           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.
    
  10. [ファイル > すべて保存] をクリックします。
  11. ソース プログラムをコンパイルし、実行可能なプログラムを作成するため、[ビルド > ソリューションのビルド] をクリックします。

ラッパー クラスの作成

手続き型プログラム用のラッパー クラスの 1 つを作成します。

  1. 新しい .NET COBOL クラスをプロジェクトに追加します。プロジェクトを右クリックし、[追加 > 新しい項目] をクリックします。
  2. [COBOL Class] をクリックして、WrapperClass などの名前を入力し、[Add] をクリックします。

    プロジェクトにファイルが追加され、そのプログラムがエディターで開かれます。

  3. WrapperClass のコードを以下のものに置き換えます。
           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 データ項目を使用します。このメソッドは、op1op2 を、.NET コードで同等の型となる変数 p1p2 にマッピングします。このメソッドは、追加操作を実行する手続き型プログラムを呼び出します。

    他のマネージ言語が元の手続き型プログラムの機能にアクセスするには、OO 構文を使用して Add メソッドを呼び出します。

  4. 手続き型プログラムの他の 3 つの算術操作のメソッドはこのトピックに含まれていないため、ここでそれらを書き込みます。

プロパティ クラスとしても知られるデータ転送オブジェクト (DTO) を使用する、わずかに異なるラッパー クラスを作成します。他のマネージ言語に渡すため、ラッパー クラスのプロパティとして元のプログラムのデータ項目を公開します。

  1. 新しいクラス ClassDTO をプロジェクトに追加し、次のコードをそれに貼り付けます。
           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 elementaryoperands で使用すると、すべての基本グループ項目が 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 でクラスのプロパティとして個別データ項目のみ公開します。

  2. 手続き型プログラムで他の算術操作のメソッドを書き込めます。

.NET COBOL のフロントエンド アプリケーションの作成

両方のラッパー クラスとやり取りできる、COBOL の .NET フロントエンド アプリケーションを作成します。

  1. ソリューションでは、新しい .NET COBOL コンソール アプリケーション プロジェクトを作成します。ソリューション エクスプローラーでソリューションを右クリックし、[追加 > 新しいプロジェクト] をクリックします。
  2. [Console Application (.NET Framework)] を選択し、[次へ] をクリックして、OOCalc などの名前を指定し、[作成] をクリックします。
  3. このプロジェクトのプロジェクト参照を元の calclib プロジェクトに追加します。OOCalc を右クリックし、[参照の追加] をクリックします。
  4. [参照の追加] ダイアログ ボックスで [プロジェクト] タブをクリックして、calclib プロジェクトが選択されていることを確認し、[OK] をクリックします。

    これによって、OOCalc プロジェクトが calclib プロジェクトからビルド出力ファイルにアクセスできるようになります。

  5. プロジェクトの Program1.cbl ファイルで、ラッパー クラスとやり取りする .NET COBOL コードを追加します。
           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 と型 ClassDTOcalc2) を定義します。

  6. oocalc プロジェクトをスタートアップ プロジェクトとして設定します。これを行うには、oocalc を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。

    プログラム実行時、このコードは calc1calc2 のインスタンスを作成します。そして、このコード例では、calc1 のインスタンスを作成し、追加操作を実行する Add メソッド (WrapperClass) を呼び出す方法が示されています。

    次に、calc2 のインスタンスが作成され、op1 および op2 にアクセスします。これらは、ClassDTO のプロパティとして公開され、値が割り当てられます。その後、Add メソッド (ClassDTO) が呼び出されて追加操作を実行します。