COBOL クラス定義構造
COBOL for Windows では、オブジェクト指向の構文をサポートしているので、COBOL プログラムと Java プログラムの相互協調処理が容易になります。
オブジェクト指向構文を使用して、以下のことを行うことができます。
- メソッドとデータを COBOL でインプリメンテーションした状態で、クラスを定義する。
- Java クラスまたは COBOL クラスのインスタンスを作成する。
- Java オブジェクトまたは COBOL オブジェクトにメソッドを呼び出す。
- Java クラスまたは別の COBOL クラスから継承したクラスを書き込む。
- 多重定義メソッドを定義して呼び出す。
Java のオブジェクトの基本的な機能は、COBOL 言語から直接アクセスできます。
COBOL プログラマーは、Java Native Interface (JNI) を介してサービスを呼び出すことによって、追加の機能を利用できます。詳しくは、「COBOL for Windows プログラミング・ガイド」を参照してください。
Java プログラムは、マルチスレッド化することができ、
Java の相互運用を行うには非同期シグナルの許容が必要です。
したがって、このような Java プログラムと COBOL を混在させるには、THREAD コンパイラー・オプションによって提供されるスレッド使用可能化を使用する必要があります。詳しくは、「COBOL for Windows プログラミング・ガイド」を参照してください。
Java の String データは実行時に Unicode で表現されます。
COBOL for Windows では、Unicode サポートによって国別データ型が使用できるため、COBOL プログラムと Java の String データの交換が可能となります。
以下に、Java との相互運用性 (インターオペラビリティー) を実現するために
オブジェクト指向 COBOL で使用するエンティティーおよび概念を示します。
- クラス
- ゼロ、1 つ、または複数のオブジェクト・インスタンスの操作および状態を定義し、複数のオブジェクト・インスタンスが共用する共通オブジェクト (ファクトリー・オブジェクト) の操作
および状態を定義するエンティティー。
COBOL INVOKE ステートメントの NEW オペランドを使用して、または
Java クラス・インスタンス生成式を使用して、オブジェクト・インスタンスを作成します。
オブジェクト・インスタンスは、もはや使用されない状態になったときに、
Java ランタイム・システムのガーベッジ・コレクションによって自動的に解放されます。
個々のオブジェクトを明示的に解放することはできません。
-
インスタンス・メソッド
- サポートされる操作の 1 つを、クラスのオブジェクト・インスタンスに
定義するプロシージャー・コード。COBOL クラスが導入するインスタンス・メソッドは、
クラス定義の OBJECT 段落内で定義されます。
COBOL インスタンス・メソッドは、
Java の public 非静的メソッドと同義です。
インスタンス・メソッドの実行は、特定のオブジェクト・インスタンス上で、
COBOL INVOKE ステートメント、または Java メソッド呼び出し式を使用して行います。
-
インスタンス・データ
- 個々のオブジェクト・インスタンスの状態を定義するデータ。
COBOL クラス内のインスタンス・データは、クラス定義の OBJECT 段落のデータ部の作業用ストレージ・セクションで定義されます。
COBOL インスタンス・データは、Java クラスの private 非静的メンバー・データと
同義です。
オブジェクトの状態には、継承されたクラスによって導入されたインスタンス・データの状態も含まれます。それぞれのインスタンス・オブジェクトごとに、
そのクラス定義で定義されているインスタンス・データのコピーと、
継承されたクラスで定義されているインスタンス・データのコピーがあります。
COBOL オブジェクト・インスタンス・データへのアクセスは、
データを定義するクラス定義に定義されている、COBOL インスタンス・メソッド内からのみ行うことができます。
オブジェクト・インスタンス・データの初期化は VALUE 文節を使用して行うことができます。または、インスタンス・メソッドを書き込んで、カスタム初期化を行うことができます。
-
ファクトリー・メソッド、静的メソッド
- サポートされる操作の 1 つを、クラスの共通ファクトリー・オブジェクトに定義するプロシージャー・コード。
COBOL ファクトリー・メソッドは、クラス定義の FACTORY 段落内で定義されます。ファクトリー・メソッドは、クラスの個々のインスタンス・オブジェクトに関連付けられるのではなく、クラスに関連付けられます。
COBOL ファクトリー・メソッドは、
Java の public 静的メソッドと同義です。
COBOL からの COBOL ファクトリー・メソッドの実行は、
クラス名を第 1 オペランドとして指定する INVOKE ステートメントを使用して行います。Java プログラムからの COBOL ファクトリー・メソッドの実行は、
静的メソッド呼び出し式を使用して行います。
ファクトリー・メソッドは、データが同一のクラス定義で記述されていたとしても、そのクラスのインスタンス・データを直接処理することはできません。ファクトリー・メソッドは、
インスタンス・メソッドを呼び出して、インスタンス・データを処理する必要があります。
COBOL ファクトリー・メソッドは一般的に、オブジェクト・インスタンスを
作成するカスタマイズ・メソッドを定義するために使用されます。例えば、
カスタマイズ・ファクトリー・メソッドをコーディングすることができます。これによって、
初期値をパラメーターとして受け入れ、INVOKE ステートメントの NEW オペランドを使用してインスタンス・オブジェクトを作成し、インスタンス・オブジェクトの初期化に使用するために、
これらの初期値を引数として渡してカスタマイズ・インスタンス・メソッドを呼び出します。
-
ファクトリー・データ、静的データ
- 個々のオブジェクト・インスタンスにではなく、クラスに関連付けられるデータ。
COBOL ファクトリー・データは、クラス定義の FACTORY 段落内のデータ部の作業用ストレージ・セクションで定義されます。
COBOL ファクトリー・データは、Java の private 静的データと同義です。
1 つのクラスに対して 1 つのファクトリー・データのコピーがあります。ファクトリー・データは、そのクラスのみに関連付けられ、クラスのすべてのオブジェクト・インスタンスによって共用されます。ファクトリー・データは、特定のインスタンス・オブジェクトに関連付けられてはいません。
例えば、ファクトリー・データ項目は、作成されたインスタンス・オブジェクトの数を
保持するために使用される場合があります。
COBOL ファクトリー・データへのアクセスは、
同じクラス定義に定義された COBOL ファクトリー・メソッド内でのみ行うことができます。
-
継承
- 継承 とは、クラス定義 (継承側クラス) が、別のクラス定義 (被継承クラス) に書き込まれているメソッド、データ記述、およびファイル記述を
取得するメカニズムです。継承関係にある 2 つのクラスがともに認識されるとき、継承側クラスはサブクラス (派生クラスまたは子クラス) であり、
被継承クラスはスーパークラス (親クラス) です。また、継承側クラスは、
親クラスがその親クラスから継承した、メソッド、データ記述、およびファイル記述を
間接的に取得することもできます。
COBOL クラスは、正確に 1 つの親クラスから継承する必要があります。これは、
COBOL または Java でインプリメンテーションすることができます。
すべての COBOL クラスは、java.lang.Object クラスから、直接的または間接的に継承する必要があります。
-
インスタンス変数
- OBJECT 段落のデータ部で定義される個々のデータ項目。
-
Java
Native Interface (JNI)
- 非 Java プログラムとの相互運用を実現するために設計された Java の機能。
-
Java
Native Interface (JNI) 環境ポインター
- JNI サービスの呼び出しに使用する JNI 環境構造のアドレスを取得するために使用するポインター。JNI 環境ポインターを参照するために、COBOL 特殊レジスター JNIENVPTR が
用意されています。
-
オブジェクト・リファレンス
- 個々のオブジェクトを識別して参照するために使用される情報が含まれているデータ項目。オブジェクト・リファレンスは、Java クラスまたは COBOL クラスのインスタンスであるオブジェクトを参照することができます。
-
サブクラス
- 別のクラスから継承するクラス。被継承クラスの派生クラス または子クラス とも呼ばれます。
-
スーパークラス
- 別のクラスによって継承されるクラス。継承側クラスの親クラス とも呼ばれます。
COPY ステートメントおよび REPLACE ステートメントと END CLASS
マーカーを除き、COBOL クラス定義のステートメント、項目、段落、
およびセクションは、以下の構造に分類されます。
- 見出し部
- 環境部 (構成セクションのみ)
- ファクトリー定義
- オブジェクト定義
COBOL クラス定義の終了は、END CLASS マーカーによって示されます。
COBOL クラス定義のフォーマットは、以下のとおりです。
| フォーマット: COBOL クラス定義 |
 >>-+-IDENTIFICATION-+--DIVISION.--CLASS-ID--.--クラス名-1------->
'-ID-------------'
>--INHERITS--クラス名-2--.--+------------------------+---------->
'-その他の見出し部の内容-'
>--ENVIRONMENT DIVISION.--クラス環境部の内容-------------------->
>--+----------------------+--+----------------------+----------->
'-| ファクトリー定義 |-' '-| オブジェクト定義 |-'
>--+-----------------------+-----------------------------------><
'-END CLASS--クラス名-1-'
ファクトリー定義:
|--+-IDENTIFICATION-+--DIVISION.--FACTORY.---------------------->
'-ID-------------'
>--+----------------------------------------------+------------->
'-DATA DIVISION.--ファクトリー・データ部の内容-'
>--+-------------------------------------------+---------------->
'-PROCEDURE DIVISION.--+------------------+-'
| .--------------. |
| V | |
'---メソッド定義-+-'
>--END FACTORY.-------------------------------------------------|
オブジェクト定義:
|--+-IDENTIFICATION-+--DIVISION.--OBJECT.----------------------->
'-ID-------------'
>--+----------------------------------------------+------------->
'-DATA DIVISION.--オブジェクト・データ部の内容-'
>--+-------------------------------------------+--END OBJECT.---|
'-PROCEDURE DIVISION.--+------------------+-'
| .--------------. |
| V | |
'---メソッド定義-+-'
|
- END CLASS
- クラス定義の終了を指定します。
- END FACTORY
- ファクトリー定義の終了を指定します。
- END OBJECT
- オブジェクト定義の終了を指定します。
|