モジュール・オブジェクトの定義

モジュール・オブジェクトは、ILE COBOL コンパイラーを含め、 すべての ILE コンパイラーの出力です。 それらはタイプ *MODULE のシステム・オブジェクトです。 ILE COBOL の場合、永続的に作成されたどのモジュール・オブジェクトの名前も、 最外部の ILE COBOL ソース・プログラムの CRTCBLMOD コマンドまたは PROGRAM-ID 段落によって決定されます。 ソース・メンバー内の各コンパイル単位は、それぞれ別個のモジュール・オブジェクトを作成します。 あるモジュール・オブジェクトの最外部の ILE COBOL プログラムは、 バインド・プロシージャー呼び出しによって、異なるモジュール・オブジェクトの別の ILE COBOL プログラムにより呼び出すことができます。 このプログラムはまた、モジュール・オブジェクトがプログラム・オブジェクトにバインドされた後に、 動的プログラム呼び出しを使用して呼び出すこともできます。 バインド・プロシージャー呼び出しと動的プログラム呼び出しの説明については ILE COBOL プログラムの呼び出しを参照してください。

モジュール・オブジェクトは単独で実行することはできません。 モジュール・オブジェクトは、まずバインドしてプログラム・オブジェクトにしなければなりません。 1 つまたは複数のモジュール・オブジェクトをバインドして、1 つのプログラム・オブジェクト (タイプ *PGM) またはサービス・プログラム (タイプ *SRVPGM) を作成することができます。 このようにモジュール・オブジェクトを結合できることによって、次のことが可能になります。

1 つのモジュール・オブジェクトは、1 つまたは複数の ILE プロシージャーで構成できます。

COBOL モジュールの作成 (CRTCBLMOD) コマンドにより、ILE COBOL ソース・ステートメントから 1 つまたは複数のオブジェクトを作成できます。 これらのモジュール・オブジェクトは、 明示的に削除または置換されるまで、指定されたライブラリーの中に保管されます。 その後モジュール・オブジェクトは、 プログラム作成 (CRTPGM) コマンドを使用してバインドして実行可能プログラム・オブジェクトにするか、 またはサービス・プログラム作成 (CRTSRVPGM) コマンドを使用してバインドしてサービス・プログラムにすることができます。 モジュール・オブジェクトは、プログラム・オブジェクトまたはサービス・プログラムが作成された後もライブラリーに存在しています。 1 つまたは複数のモジュール・オブジェクトからプログラム・オブジェクトを作成する詳細については プログラム作成 (CRTPGM) コマンドの使用を参照してください。 1 つまたは複数のモジュール・オブジェクトからサービス・プログラムを作成する詳細については サービス・プログラムの作成を参照してください。

バインド COBOL PGM の作成 (CRTBNDCBL) コマンドにより、ILE COBOL ソース・ステートメントから 1 ステップでプログラム・オブジェクトを作成できます。 CRTBNDCBL コマンドはモジュール・オブジェクトも作成します。 しかし、これらのモジュール・オブジェクトは一時的に作成されるもので、再使用はできません。 CRTBNDCBL コマンドでのプログラム・オブジェクトの作成が完了すると、一時的なモジュール・オブジェクトは削除されます。

1 ステップのプログラム・オブジェクト作成の詳細については バインド COBOL PGM の作成 (CRTBNDCBL) コマンドの使用を参照してください。

モジュール・オブジェクトの作成時には、次のものを含めることもできます。

図 8. CRTCBLMOD コマンドを使用してモジュール・オブジェクトを作成する
テキストの図、下記

図 8 では、*PGM A は、 プログラム・オブジェクトの入り口点を含むモジュール・オブジェクトとして *MODULE A が指定されて作成されます。 *MODULE A の PEP は ILE プロシージャー A を呼び出します。 *MODULE A の PEP は *PGM A の PEP にもなるため、*PGM A の PEP は ILE プロシージャー A を呼び出します。 *PGM A の UEP も ILE プロシージャー A になります。 *MODULE B、*MODULE C、および *MODULE D にも PEP はありますが、それらは *PGM A では無視されます。 さらに、ILE プロシージャー Z は ILE プロシージャー A からしか呼び出せません。 ILE プロシージャー B、C、および D はそれぞれ独立したモジュール・オブジェクトに入っており、ILE プロシージャー Z は *MODULE A の最外部の COBOL プログラムではないため、ILE プロシージャー Z は ILE プロシージャー B、C、 および D からは見えません。 ILE プロシージャー A、B、C および D は相互に呼び出すことができます。 それらすべてのプロシージャーは、再帰プロシージャーでないため、再帰を行うことはできません。

ILE COBOL ソース・プログラム内の各宣言型プロシージャーは、それぞれ独立した ILE プロシージャーを生成します。

ネストした COBOL プログラムは、それぞれ独立した ILE プロシージャーを生成します。

モジュール・オブジェクトには、モジュール・エクスポートとモジュール・インポートを関連付けることができます。

モジュール・エクスポートとは、 バインディング処理によって他の ILE オブジェクトが使用できるプロシージャーまたはデータ項目の名前です。 モジュール・エクスポートは、その名前とそれに関連したタイプによって、 それがプロシージャーであるかデータであるかが識別されます。 モジュール・エクスポートの有効範囲は、プログラム・オブジェクトと活動化グループとの 2 通りがあります。 プログラム・オブジェクトにエクスポートされるすべての名前が活動化グループにエクスポートされるわけではありません。 ILE COBOL コンパイラーは、次の COBOL プログラミング言語構成要素ごとにモジュール・エクスポートを作成します。

モジュール・インポートとは、 参照元モジュール・オブジェクトでは定義されていないプロシージャーやデータ項目の名前を使用したり参照したりすることです。 モジュール・インポートは、その名前と関連タイプによって、プロシージャーまたはデータのどちらであるかを識別します。 ILE COBOL コンパイラーは、次の COBOL プログラミング言語構成要素ごとにモジュール・インポートを作成します。

ターゲット・プロシージャーが参照元モジュール・オブジェクトで定義されていない場合に、モジュール・インポートが生成されます。 データ項目への弱インポートは、ILE COBOL プログラム内でデータ項目が参照される場合に生成されます。