モジュール・オブジェクトは、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) コマンドの使用を参照してください。
モジュール・オブジェクトの作成時には、次のものを含めることもできます。
デバッグ・データとは、ILE ソース・デバッガーを使用してプログラム・オブジェクトをデバッグするために必要なデータです。 このデータは、CRTCBLMOD または CRTBNDCBL コマンドの DBGVIEW パラメーターで指定されるオプションに基づいて生成されます。
プログラム入り口プロシージャーとは、 動的プログラム呼び出しにおいてプログラム・オブジェクトの入り口点となるコンパイラー生成コードのことです。 プログラム・オブジェクトが動的プログラム呼び出しを使用して呼び出されると、その PEP に制御が渡されます。 これは OPM プログラムの入り口点に提供されるコードと類似しています。 PEP は、そのプログラム・オブジェクトが動的プログラム呼び出しを使用して呼び出されると最初に実行されることになっているモジュール・オブジェクト内の ILE プロシージャーを識別します。 モジュール・オブジェクトが ILE COBOL コンパイラーによって作成された時点で、PEP が生成されます。 この PEP は、コンパイル単位に含まれる最外部の ILE COBOL プログラムを呼び出します。
複数部分からなるモジュール・オブジェクトをバインドしてプログラム・オブジェクトを作成する場合、 どのモジュール・オブジェクトに作成されるプログラム・オブジェクトの PEP が入るかを指定しなければなりません。 これは CRTPGM コマンドの ENTMOD パラメーターでモジュール・オブジェクトを識別することによって実行します。 これによりモジュール・オブジェクトの PEP はプログラム・オブジェクトの PEP になります。 他のすべてのモジュール・オブジェクトの PEP は、プログラム・オブジェクトから論理的に削除されます。
ユーザー入り口プロシージャーとは、 モジュール・オブジェクトが ILE COBOL コンパイラーによって作成されるときに、コンパイル単位に含まれる最外部の ILE COBOL プログラムです。 動的プログラム呼び出しにおいて、UEP は PEP から制御を獲得する ILE プロシージャーです。 複数の異なるモジュール・オブジェクトに含まれる ILE プロシージャーの間での静的プロシージャー呼び出しでは、UEP に直接制御が与えられます。
図 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 プログラム内でデータ項目が参照される場合に生成されます。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.