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