 |
手続き部 - SEARCH - WRITE |
|
翻訳指示文 |
 |
本章ではオブジェクト指向をサポートするために追加されたCOBOLの文法を説明する。この文法はすべて、ANS X3.23 - 1985に対するMicro Focus COBOLに固有の拡張である。したがって、本章の周囲のボックスを省略した。オブジェクト指向機能の詳細についてはオブジェクト指向プログラミングを参照。
予約語リストにフラグを付けて修正する機能を提供するコンパイラ指令に加えて、下記の指令が本節の構文または意味のいずれかに影響を与える可能性がある。
-
ALIGN - 01レベルまたは77レベルのデータ項目を割り付けるメモリの境界を指定する。
-
IBMCOMP - 語格納モードをオンにする。
-
MAPNAME - メソッド名内のアルファベット以外の文字の取扱いに影響を与える。
-
MF-OO - オブジェクト指向の構文を使えるようにする
-
REPOSITORY - クラスに関するリポジトリ記述項を作成するか、無視するか、チェックするかをコンパイラに知らせる
-
OOCTRL - オブジェクト指向オプションに関する特別なスイッチを提供する。設定をオンにするには各オプションを表す文字の前に + 記号を付け、オフにするには - 記号を付ける。省略時の解釈はOOCTRL(-G-N-P+Q-W)である。各オプションの意味は下記のとおり。
+G |
インスタンスに関してクラスデータをグローバルにする。
注意:このオプションを使用することは推奨しない。この機能は以前のリリースとの互換性を保つために用意されている。
|
+N |
CLASS-OBJECTおよびEND CLASS-OBJECTの構文を使用できるようにする。
|
+P |
オブジェクトCOBOLランタイムシステムに対して、パラメータタイプ情報を利用可能にする。
注意:OLEおよびSOMに送ったメッセージに関して必要。
|
+Q |
メソッドインターフェイス定義の動詞シグネチャ中のデータ名の後ろに続く可能性のあるどの場所についても、INおよびOFを使用できないようにする。
メソッドインターフェイス定義の動詞シグネチャ中のどの動詞も使えないようにする(「COBOLの概念」の章の「文の種類」の項を参照)。 |
-Q |
メソッドインターフェイス定義の動詞シグネチャ中でINおよびOFを使用できるようにするメソッドを呼び出す動詞シグネチャの中で修飾を行えないようにする。
メソッドインターフェイス定義の動詞シグネチャ中で動詞も使えるようにする(「COBOLの概念」の章の「文の種類」の項を参照)。 |
+W |
オブジェクトおよびクラスオブジェクトにおいて、オブジェクト記憶の意味で作業場所を使用する。
注意:ISO COBOL標準に基づく開発との互換性を持たせる。
|
クラスはオブジェクCOBOLのクラスオブジェクトおよびそのインスタンスオブジェクトを記述する。その中には、クラスメソッドおよびインスタンスメソッドに関するネストされたプログラムが含まれる。
一般形式
構文規則
- PROTECTEDとRESTRICTEDの2つの語は同等である。
- EXTERNAL句を指定した場合、DATA句もINHERITS句も使用できない。
- INHERITS句の中にWITH DATA句を指定した場合、DATA IS PRIVATE句を明示的にまたはクラス名-2のソースコード中に指定してはならない。
- クラス名-2はクラス名-1と同じであってはならない。
- クラス名-2はクラス名-1から直接的にまたは間接的に継承してはならない。
- クラス終了見出し中のクラス名-1は先行するクラス名段落中に指定されているクラス名-1と同じでなければならない。
一般規則
- クラス名-1は宣言する対象のクラスを識別する。
- ABSTRACT句はクラス名-1が抽象クラスであることを示す。抽象クラスのインスタンスを生成することはできない。
- EXTERNAL指定はクラス名-1が外部クラスであることを示す。コードは生成されない。
- RESTRICTED指定はクラス名-1から継承したデータにサブクラスが直接アクセスできるようにする。
- PRIVATE指定はクラス名-1から継承したデータにサブクラスが直接アクセスできないようにする。
- INHERITS指定はクラス-2がクラス-1の親クラスであることを指定する。
- INHERITS指定を指定しないと、クラス名-1は分類スキーマ内で新しいルートを形成する。
- WITH DATA指定は、クラス名-2から継承したデータにクラス名-1が直接アクセスできることを指定する。
クラス拡張を行うと、元のソースコードを変更せずに、オブジェクトCOBOLに機能を追加できる。
継承を行うのではなく、クラス拡張によってクラスを拡張することの違いは、クラス拡張は既存のすべてサブクラスによって継承されることである。たとえば、クラスAのサブクラスにクラスBがあるとする(つまり、 B INHERITS FROM A)。クラスAのサブクラスとしてクラスCを生成することによって、クラスAにメソッドを追加できる。しかし、その場合はクラスBはクラスCのメソッドを継承しない。クラス拡張XによってクラスAを拡張した場合は、実行時の効果はクラスAを変更してコンパイルし直したのと同じである。クラスXによって追加されたすべてのメソッドをクラスBも継承する。
一般形式
構文規則
- 拡張名-1はクラス名-1と同じでなければならない
- クラス終了見出し中の拡張名-1は先行するクラス名段落中に指定されている拡張名-1と同じでなければならない。
- クラス名-1はクラス管理段落に指定されているクラスの名前でなければならない。
- クラス本体のデータ部に空のオブジェクト記憶節を含めてもよい。その他にクラス拡張のデータ部に指定してもよい節は、作業場所節と連絡節だけである。
- 下記の両方に該当する場合にのみ、クラス拡張中の文からクラス名-1内に宣言されているデータを参照できる。
- クラス名-1のクラス名段落中にDATA IS PROTECTED指定またはDATA IS RESTRICTED指定がある。
- クラス拡張のクラス名段落中にWITH DATA指定がある。
一般規則
- EXTEND句はクラス拡張を指定する。クラス拡張はオブジェクトクラスにメソッドを追加する。拡張名-1に指定されたメソッドはクラス名-1の新旧のすべてのサブクラスによって継承される。
- 実行単位の実行中に、クラス拡張中のメソッドを呼び出すのに先立って、拡張名-1に対してCOBOLのCALL文を実行しなければならない。それによって、クラス拡張中のメソッドがOOランタイムシステムに登録される。
クラス本体には、クラスのデータとメソッドを定義した、すべでのコードが含まれる。
一般形式
書き方1
(コンパイラ指令のOOCTRL(+N)を指定したときに使用される。)
注意:この構文を使用することが望ましい。
書き方2
(コンパイラ指令のOOCTRL(-N)を指定したときに使用される。)
構文規則
すべての書き方
- クラス管理段落中にクラス名-3を2回以上指定してはならない。
- クラス名-3はクラス名段落中に指定されているクラス名と同じであってもよい。
- データ部に連絡節を含めてはならない。
書き方1
- データ部にオブジェクト記憶節を含めてはならない。
- データ部内に宣言したデータ項目をインスタンスメソッドおよびクラスメソッドから参照できる。
書き方2
- 局所記憶節、報告所節、画面節に宣言されたデータ項目を参照できるのは、該当のクラスの手続き部内の文からだけであって、任意のメソッドからは参照できない。
- ファイル節または作業場所節に宣言されたデータ項目をインスタンスメソッドとクラスメソッドおよび該当のクラスの手続き部から参照できる。
- オブジェクト記憶節に宣言されたデータ項目をクラスメソッドから参照できる。
一般規則
すべての書き方
- クラス名-3は暗黙的にUSAGE IS OBJECT REFERENCEと定義される。
- クラス-3はクラスの名前であって、それが属する環境部の適用範囲内でそれを使用できる。
- 外部名-1は該当のクラスを含むファイルの外部名を指定する。
- メソッド-1はクラスメソッドである。
- オブジェクト記憶節内のデータ項目だけがサブクラスによって継承される。
書き方1
- データ項目は実行単位の開始時に初期化され、メソッド呼出しの間は最後に使用されたときの状態が保たれる。
書き方2
- クラス手続き部内の文は、実行単位内で該当のクラスの何らかのクラスメソッドまたはインスタンスメソッドが最初に実行される前に、実行される。
- クラス手続き部の実行が開始されると、局所記憶節内のデータ項目の内容は保証されない。この記憶節は、クラス手続き部が実行され終わると、直ちに割当を解除される。
- ファイル節および作業場所節内で定義されたデータ項目は、クラスメソッドおよびインスタンスメソッドの呼出しの間は、最後に使用されたときの状態が保たれる。
注意:作業場所節内のデータはクラスまたはインスタンスを初期化するためのデータとして役に立つ。
- オブジェクト記憶節内で定義されたデータ項目は、クラスメソッドの呼出しの間は、最後に使用されたときの状態が保たれる。
クラスオブジェクトはオブジェクトを生成する働きをするオブジェクトである。
一般形式
一般規則
- クラスオブジェクトのオブジェクト記憶節内で宣言されたデータ項目はクラスデータである。クラスデータはサブクラスによって継承されうる。
- データ項目は実行単位の開始時に初期化され、メソッド呼出しの間は最後に使用されたときの状態が保たれる。
- メソッド-1はクラスメソッドである。
オブジェクトプログラムにはクラスのすべてのインスタンスに関するデータとメソッドの定義が含まれる。
一般形式
一般規則
- オブジェクトプログラムのオブジェクト記憶節内で宣言されたデータ項目はインスタンスデータである。インスタンスデータはインスタンスメソッド内でのみ参照できる。
- データ項目は実行単位の開始時に初期化され、メソッド呼出しの間は最後に使用されたときの状態が保たれる。
- メソッド-1はインスタンスメソッドである。
書き方
構文規則
- メソッド終了見出し中のメソッド名-1は先行するメソッド名段落中に指定されているメソッド名-1と同じでなければならない。
- メソッドのデータ部内で定義されたデータはそのメソッド内でのみアクセスできる。
- メソッド名-1の前後の引用符は指定しても指定しなくてもよい。
注意:メソッド名を使用すると、予約語をメソッド名として使用することができ、またCOBOL用以外の文字を使用できるようになる。
- メソッド定義はクラス定義内に置かなければならない。
- メソッドに関する手続き部の見出しの書き方は、プログラムに関する手続き部の見出しの書き方1と同じである。手続き部の見出しの書き方2に示されている、GIVINGまたはRETURNING データ名句を指定してもよい。(詳細については、「手続き部の見出し」を参照)。
一般規則
- メソッド名-1は該当のメソッド定義によって宣言されたメソッドの名前である。
- メソッドの局所記憶節内に宣言されたデータは、メソッドが呼び出されるごとに別の記憶域を割り当てられ、メソッドが終了すると割当を解除される。このデータは、メソッドが呼び出されたときは、未定義の状態にある。
注意: メソッド内で使用するデータは局所記憶節内に定義することを推奨する。その理由は、メソッドを別々に呼び出したインスタンスの間で、相互にデータに干渉し合うことが避けられるからである。
- 局所記憶節または連絡節以外の節内のメソッド中で宣言されたデータおよびファイルは、メソッドのすべての呼出しの間で共有され、メソッドが呼び出されたときには最後に使用された状態にある。
- 該当のメソッドが含まれるオブジェクトを参照するオブジェクト識別子を伴うメソッド呼出しの中で、メソッド名-1が使用されていてもよい。
- メソッドの手続き部の見出しの中でRETURNING指定またはGIVING指定を指定した場合、その中に指定されているデータ項目のメソッドの終了時点での内容が、そのメソッドの結果となる。INVOKE文のRETURNING指定またはGIVING指定に指定されている識別子内に、その結果が入れられる。
メソッドインターフェイス定義は、メソッドのパラメータ、パラメータを渡す方法、メソッドを呼び出すために使用できる代替構文を定義する。
書き方
動詞シグネチャは下記のとおり。
構文規則
- メソッドインターフェイス定義は外部クラスの中にネストされなければならない。
- 手続き部の見出しは、プログラムに関して指定する手続き部の見出しの書き方2と同様である。ただし、呼び名もREPEATED指定も指定できない。上の書き方に示したINVOKED指定は、見出し中の末尾の終止符の直前に置くこともできる(詳細については、「手続き部の見出し」を参照)。
- 動詞シグネチャ内にFUNCTION指定を指定したときは、手続き部の見出し内にRETURNING指定を指定しなければならない。
- 動詞-1はCOBOLの語でなければならない。かつ、予約語でも手続き名でもあってはならない。
- 語 <OBJECT> と <SELF> と <THIS> の意味は同じである。各動詞シグネチャ内には、それらのどれかひとつが1回だけ現れなければならない。
- データ名-3は "<" と ">" で囲まれていなければならない。
- 必要語はCOBOLの語でなければならない。
- 補助語はCOBOLの語を "[" と "]" で囲んだもでなければならない。
- 開きかっこと閉じかっこはそれぞれ "(" と ")" である。
注意 : それらによって、組み込み関数のように見え、かっこ内にパラメータを指定する、関数を定義できるようになる。
- 動詞シグネチャは他の動詞シグネチャのサブセットであってはならない。
一般規則
- 動詞シグネチャを使用してメソッド名-1を呼び出すと、<SELF> が受け手のオブジェクトに対するオブジェクト参照で置き換えられる。
- 補助語は読みやすくするために使用するもであり、この構文を用いてメソッドを呼び出すときに、指定しても指定しなくてもよい。
- 動詞-1がプログラム内でデータ名としても宣言されている場合、そのプログラム内のその語を参照すると、必ずデータ名の方を指すことになる
オブジェクト記憶節はオブジェクトデータを宣言するために使用する。オブジェクトへの参照を宣言するためには、OBJECT REFERENCEを使用する。
データ部内でオブジェクト記憶節を使用すると、クラスオブジェクトデータおよびインスタンスオブジェクトデータを定義できる。この節を指定するかしないかは任意である。
書き方
構文規則
- クラスオブジェクトのオブジェクト記憶節内で宣言されたデータはクラスメソッド内でのみアクセスできる。
- オブジェクトプログラムのオブジェクト記憶節内で宣言されたデータはインスタンスメソッド内でのみアクセスできる。
- クラス名段落内でDATA IS RESTRICTED指定またはDATA IS PROTECTED指定を指定した場合、オブジェクト記憶節内で宣言されたデータをサブクラス内で直接アクセスできる。そうでない場合、このデータにアクセスできるのは呼び出したメソッドのみである。
- オブジェクト記憶節内で宣言するデータに関する構文規則は、連絡節の場合と同様である。ただし、ODOSLIDEコンパイラ指令を指定した場合には、OCCURS句のDEPENDING ON指定を指定してはならない。
一般規則
- オブジェクト記憶節内で宣言されたデータはサブクラスによって継承されうる。
- 新しいインスタンスオブジェクトはそれぞれ、オブジェクト記憶節内で宣言されたデータ項目について、独自の固有な記憶域を割り当てられる。
- コンパイラ指令のOOCTRL(+W)を指定すると、作業場所節はオブジェクト記憶節として扱われる。
USAGE IS OBJECT REFERENCEを指定して定義されたデータ項目はオブジェクトへの参照を収めるために使用される。
一般形式
構文規則
- USAGE IS OBJECT REFERENCE句を指定するデータ項目には、REDEFINES句を指定してはならない。
- データ項目の宣言内にUSAGE IS OBJECT REFERENCE句が含まれる場合、そのデータ項目はREDEFINES句内に指定されてはならない。
- 基本データ項目にUSAGE IS OBJECT REFERENCE句が指定されている場合、そのデータ項目にPICTURE句が含まれていてはならない。
- 集団項目のデータ記述項内にUSAGE IS OBJECT REFERENCE句が指定されていてはならない。
- USAGE IS OBJECT REFERENCE句が指定されされているデータ項目にKEY IS句を指定してはならない。
- USAGE IS OBJECT REFERENCE句が指定されされているデータ項目にVALUE句が指定されている場合、有効な値はNULLだけである。
一般規則
- 宣言内にUSAGE IS OBJECT REFERENCE句が指定されているデータ項目には、オブジェクトへの参照が収められる。そのオブジェクトのクラスは任意である。
- 宣言内にUSAGE IS OBJECT REFERENCE句が指定されているデータ項目のサイズと形式は各オブジェクト参照ごとに異なりうる。
メソッドの手続き部には実行すべき手続きが収められる。オブジェクト定義およびクラス定義の手続き部には、それぞれ、インスタンスオブジェクトまたはクラスオブジェクトに関して呼び出されるメソッドが収められる。
2つのオブジェクト参照を比較して、両者が同じオブジェクトを指しているかどうかをチェックできる。
一般形式
構文規則
- 比較の一方の作用対象だけに表意定数のNULLを指定できる。
一般規則
- 同じオブジェクトを指す場合に、2つの作用対象は等しい。そうでない場合には、両者は等しくない。
EXIT METHOD文は呼び出されたメソッドの論理的な末尾を示す。
一般形式
構文規則
- EXIT METHOD文はメソッドの手続き部内にのみ指定できる。
一般規則
- EXIT METHOD文を実行すると、INVOKE文に続く次の実行可能文に制御が移る。元のメソッド定義中にRETURNING指定があると、RETURNING指定によって参照されるデータ項目中の値が、そのメソッド呼出しの結果となる。
INVOKE文はメソッドを呼び出す。
一般形式
構文規則
- オブジェクト識別子-1はオブジェクト識別子でなければならない。
- 識別子-1は4バイトのデータ項目でなければならない。
- 定数-1は英数字であり、かつ有効なメソッド名でなければならない。
- 定数-1、定数-2、定数-3のいずれも表意定数であってはならない。
- 識別子-2は英数字のデータ項目として定義されていなければならない。その値として、COBOLのメソッド名でもCOBOL以外のメソッド名でも取れるようにするためである。
- 識別子-3、識別子-4、識別子-5、識別子-6、識別子-7のいずれも関数識別子数であってはならない。
- 整数-1は符合付きでもゼロでもよい。
- GIVINGとRETURNINGは同等である。
- 識別子-9はサイズが4バイトでなければならない。.
- 識別子-10は連絡節内でレベル番号が01または77のデータ項目として定義されていなければならない。
- INVOKE文に定数-1が指定され(ただし識別子-2が指定された場合を除く)、現在のコンパイルユニット内にメソッドインターフェイス定義が含まれていてその名前が定数-1に合致する場合は、構文チェックの間に下記の項目の妥当性が検査される。
- 必要なパラメータの数
- パラメータのタイプ
- 呼出し方式
一般規則
- オブジェクト識別子-1および識別子-1はメソッドを呼び出す対象のオブジェクトを識別する。
- オブジェクト識別子-1によって参照されるデータ項目の内容がクラスオブジェクトである場合、クラスメソッドが呼び出される。そうでない場合は、インスタンスメソッドが呼び出される。
- 定数-1または識別子-2によって参照されるデータ項目の内容は呼び出す対象のメソッドの名前である。それがCOBOLのメソッドである場合、定数-1または識別子-2によって参照されるデータ項目の内容は、呼び出されるメソッドのメソッド名段落内のメソッド名でなければならない。呼出し対象のメソッドがCOBOLのメソッドでない場合には、メソッド名の構成は該当分野の規則に従う。
- AS指定を使用すると、COBOLのデータ項目を対象にしてメソッドを呼び出せる。テンプレート-1を指定すると、それはクラステンプレートとして使用される。テンプレートの作成は提供されるクラスライブラリ中のオブジェクトに付随する機能である(詳細については、書籍「オブジェクト指向プログラミング」を参照)。
- INVOKE文を実行すると、指定したメソッドが実行可能な状態にされて、そのメソッドに制御が移される。そのメソッドから制御が戻されると、INVOKE文の末尾に制御が移される。
- 実行単位には、呼出し対象のメソッドがCOBOLのものであるか否かは、最初は分からない。それが判明するのは、実行に先立って、呼出し対象のメソッドの所在が突き止められたときである。メソッド名の形式によって、対象のメソッドがCOBOLのものであるか否かを判定はできない。
- メソッドの呼出しまたは終了のプロセスによって、外部ファイル結合子に関連するファイルの状態または位置づけが変更されることはない。
- 呼出し対象のメソッドがCOBOLものである場合、そのメソッドの手続き部の見出し内にUSING指定がある場合にのみ、INVOKE文にUSING指定が含められる。その場合、USING指定内の作用対象の数は同じでなければならない。INVOKE文内にRETURNING指定がある場合、呼出し対象のメソッドの手続き部の見出し内にRETURNING指定がなければならない。
- 呼出し対象のメソッドがCOBOLものではない場合、そのメソッドに対していくつかのパラメータが宣言された場合にのみ、INVOKE文にUSING指定が含められる。その場合、USING指定内の作用対象の数は呼出し対象のメソッドのパラメータの数と同じでなければならない(COLOL以外の言語の処理系の中には、作用対象の数が同じでないことを認めているものがある)。
注意:COBOL言語ではデータ項目のアドレスの桁寄せについては制約を課していない。他方、COBOL以外の言語では通常はアドレスについて前提を設けており、それに反するデータ項目を参照すると何らかのエラーを起こす。桁寄せを行うには、下記のひとつまたは複数の措置を取る。
- 集団項目を変更して、無名項目を追加する
- ALIGNコンパイラ指令を使用するとともに、USING指定内の作用対象のデータ項目を01レベルまたは77レベルとする
- IBMCOMPコンパイラ指令とSYNCHRONIZED句を併用する
INVOE文内でRETURNING指定を指定した場合、COBOL以外のメソッドは適切な形式で結果を返さなければならない。
- INVOKE文のUSING指定および呼出し対象のメソッドの手続き部の見出しのUSING指定の中に現れる作用対象の順序によって、INVOKE文によって使用されるデータ項目と呼び出されるメソッドとの間の通信が決まる。つまり、この通信は位置によって対応が取られるであって、名前が等しいことによって対応が取られるのではない。一方のUSING指定内の最初のパラメータは他方の最初のパラメータに、一方の2番目のパラメータは他方の2番目のパラメータに、それぞれ対応するといったぐあいである。
パラメータが指標名であると、そのような対応関係は確立されない。呼出し元のプログラムまたはメソッドと呼出し対象のメソッドでは指標名は別々の指標を指すからである。
- INVOKE文のUSING指定内で参照されるパラメータの値は、INVOKE文が実行されたときに、呼び出されたメソッドで使用できるようになる。
- BY CONTENT、BY REFERENCE、BY VALUEの各指定は後続のパラメータにも効力を及ぼす。他のBY CONTENT、BY REFERENCE、BY VALUEの指定が出てくると、新しい指定が有効になる。
最初のパラメータの前にBY CONTENT、BY REFERENCE、BY VALUEのどの指定もないと、BY REFERENCEが指定されているものとみなされる。
- 識別子-3にBY REFERENCEが明示的または暗示的に指定された場合、その中の対応するデータ項目が呼出し元のプログラムまたはメソッド内のデータ項目と同じ記憶領域を占めるものとして、呼び出されたメソッドは処理を行う。呼び出されるメソッド内のデータ項目は、呼出し元のプログラム内の対応するデータ項目と文字数が同じであるように、記述されていなければならない。
BY REFERENCE ADDRESS OF指定が明示的にまたは暗黙的に指定された場合、USAGE POINTERを用いて追加のデータ項目が宣言され、「SET データ項目 TO ADDRESS OF 識別子-4」文によって取得された値とともにそのデータ項目がBY REFERENCEとして渡されたものとして、呼び出されたメソッドは処理を行う。
識別子-4が連絡節内にあってそのレベル番号が01または77以外であるか、または作業場所節内にある場合、そのデータ項目をBY CONTENTとして渡すことに相当する。その場合、識別子-4のアドレスを呼び出されたメソッドで変更することはできない。定数-2にBY REFERENCE指定が明示的または暗黙的に指定された場合、呼び出されたメソッドは定数-2を定数-3のために記述されたものとして処理する。
- パラメータに対してBY CONTENT指定が明示的または暗黙的に指定された場合、INVOKE文のUSING指定内で参照されているこのパラメータの値を、呼び出されたメソッドは変更できない。ただし、呼び出されたメソッドは、その手続き部の見出し内の対応するデータ名によって参照されるデータ項目の値を変更することはできる。INVOKE文のBY CONTENT指定内の各パラメータのデータ記述は、手続き部の見出しのUSING指定内の対応するパラメータのデータ記述と同じでなければならない。つまり、変換も拡張も切詰めもあってはならない。
パラメータに対してBY CONTENT指定が明示的または暗黙的に指定された場合、追加のデータ項目が宣言され、それがBY REFERENCE指定内でパラメータとして使用されているものとして、オブジェクトプログラムは処理を行う。識別子-5が指定された場合、追加されたデータ項目の暗黙的なデータ記述とその内容は、識別子-5のものと同じである。定数-3が指定された場合、追加されたデータ項目の暗黙的なデータ記述は定数-3と同じサイズの英数字データ項目と同等であり、その内容は定数-3の値に設定される。LENGTH OF 識別子-6が指定された場合、追加されたデータ項目のデータ記述はPIC S9(9) USAGE BINARYと同等であり、その内容は識別子-6に割り当てられた記憶域のバイト数に設定される。
- パラメータに対してBY VALUE指定が明示的または暗黙的に指定された場合、INVOKE文のUSING指定内で参照されているこのパラメータの値を、呼び出されたメソッドは変更できない。ただし、呼び出されたメソッドは、その手続き部の見出し内の対応するデータ名によって参照されるデータ項目の値を変更することはできる。概念的には、COBOL以外の言語でパラメータの受け渡しに使用されるシステム領域(通常は「スタック」)内に追加データが宣言されており、そのデータ項目は呼び出されたメソッド内の対応するデータ項目と同じ記憶領域を占めるもとして、呼び出されたメソッドは処理を行う。識別子-7が指定された場合、追加されたデータ項目の暗黙的なデータ記述とその内容は、識別子-7のものと同じである。定数-1が指定された場合、追加されたデータ項目の暗黙的なデータ記述は符合付きでUSAGE COMP-5の数字項目となる。ただし、そのサイズは、定数-2が指定されればその値のバイト数、そうでなければ4バイトとなる。
- LENGTH OF 識別子-8が指定された場合、追加データ項目のデータ記述はPIC S9(9) USAGE BINARYとなり、その値は識別子-8に割り当てられた記憶域のバイト数に設定される。INVOKE文のBY VALUE指定内の各パラメータに概念的なデータ項目が追加され、呼び出されるメソッドの手続き部の見出しのUSING指定内に対応するパラメータが宣言される。呼び出されるメソッド内のそれらのパラメータのデータ記述は同じでなければならない。つまり、対応する概念的な追加データ項目を変換したり拡張したり切り詰めたりするものであってはならない。それに加えて、暗黙的な概念データ項目のサイズはシステム領域の最大サイズ(通常は4バイト)を超えてはならない。そうしないと、システムが重大な障害を起こす可能性がある。
呼出し対象のメソッドがCOBOLのものである場合、INVOKE文のBY VALUE指定内の各パラメータに対応するパラメータが、手続き部の見出しのUSING指定内に存在し、かつBY VALUE指定が明示的または暗黙的に指定されていなければならない。
呼出し対象のメソッドがCOBOLのものではない場合、BY VALUE指定をいつ使用する必要があるかについて詳細は、対象のシステムによって決まる。
- 識別子-9が指定された場合、そのデータ記述は呼出し対象のメソッドの手続き部の見出しのRETURNING指定内に指定されているデータ項目と同じでなければならない。メソッドの結果は識別子-9に代入される。そのさい、識別子-9の用途がオブジェクト参照または指標であれば、SET文の規則が適用される。そうでない場合は、MOVE文の規則が適用される。呼出し元のプログラムまたはメソッドに制御が戻されたときには、識別子-9に戻り値が入っている。
- 識別子-10が指定された場合、呼び出されたメソッドは値を返さなければならない。そのさい、USAGE POINTERを明示的または暗黙的に指定しなければならない。メソッドの結果は、SET文の規則に基づいて、識別子-10に代入される。
- 呼び出されたメソッドの中にINVOKE文が含まれていてもよい。呼び出されたメソッドは、呼出し元のメソッドを直接または間接的に呼び出す、INVOKE文を実行できる。
SET文はオブジェクト参照を代入するために使用する。
一般形式
構文規則
- オブジェクト識別子-1およびオブジェクト識別子-2の用途はオブジェクト参照でなければならない。
一般規則
- SET文はオブジェクト識別子-2によって識別されるオブジェクトのオブジェクト参照を各オブジェクト識別子-1に関連する記憶域に指定された順序で設定する。
Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法によって保護されています。
 |
手続き部 - SEARCH - WRITE |
|
翻訳指示文 |
 |