20.2.3 メソッドの呼び起こし(メッセージパッシング)
COBOL2002でのメソッドの呼び起こし(メッセージパッシング)には,「INVOKE文」を使用します。次に例を示します。
INVOKE CLASS-A 'HIKIDASHI' USING H-1 RETURNING H-2 1 2 3 4
-
呼び起こすメソッドを参照するためのクラス名またはオブジェクト参照
-
呼び起こしたいメソッド名
-
メソッドに渡すデータ項目
-
メソッドから返される結果を受け取る項目の名称
(1) メソッドの呼び起こし
COBOL2002は,クラス名またはオブジェクト参照で指定したオブジェクトが実装しているメソッドを探します。INVOKE文によって,オブジェクトに対しメソッドの実行を要求することを「メソッドを呼び起こす」といいます。メソッドを呼び起こす場合には,INVOKE文にクラス名,オブジェクト参照データ項目名,または既定義オブジェクト参照を指定します。
INVOKE文の文法規則については,マニュアル「COBOL2002 言語 標準仕様編」 「10.8.26 INVOKE文」を参照してください。
(a) ファクトリメソッドの呼び起こし
クラス名を指定すると,そのクラスに定義されているファクトリメソッドが呼び起こされます。記述例を,次に示します。
INVOKE CLASS-A 'FACTORY-METHOD' USING ARG1 1 RETURNING ARG2.
-
クラス名
(b) インスタンスメソッドの呼び起こし
インスタンスメソッドを呼び起こす場合,そのメソッドを内包するインスタンスオブジェクトを指すオブジェクト参照を指定します。
オブジェクト参照とは,生成されたオブジェクトを参照するデータ項目です。オブジェクト参照は,USAGE IS OBJECT REFERENCE句を使用して宣言します。オブジェクト参照の詳細はマニュアル「COBOL2002 言語 標準仕様編」 「9.16.86 USAGE句」を参照してください。
記述例を,次に示します。
: 01 H-1 USAGE OBJECT-REFERENCE. : INVOKE CLASS1 'NEW' RETURNING H-1. : INVOKE H-1 'OBJECT-METHOD' USING ARG1 1 RETURNING ARG2.
-
オブジェクト参照
(2) メソッドの検索
INVOKE文を実行すると,呼び起こすメソッドが検索されます。メソッドは,INVOKE文の記述によって次のように検索されます。
-
INVOKE クラス名 メソッド名
指定したクラスのファクトリメソッドが検索されます。指定したクラスに該当するメソッドがなければ,指定したクラスのスーパクラスのファクトリメソッドが,継承した順に検索されます。
-
INVOKE SELF メソッド名
実行中のメソッドを呼び起こした際に指定したオブジェクトが属するクラスのファクトリメソッドまたはインスタンスメソッドが検索されます。指定したクラスに該当するメソッドがなければ,そのクラスのスーパクラスのメソッドが,継承した順に検索されます。
-
INVOKE SUPER メソッド名
実行中のメソッドを呼び起こした際に指定されたオブジェクトが属するクラスのスーパクラスのファクトリメソッドまたはインスタンスメソッドが検索されます。指定したクラスに該当するメソッドがなければ,そのクラスのスーパクラスのメソッドが,継承した順に検索されます。
-
INVOKE 一意名 メソッド名
オブジェクト参照が指すオブジェクトがファクトリオブジェクトの場合は,そのファクトリ定義を含むクラスのファクトリメソッドが検索されます。オブジェクト参照が指すオブジェクトがインスタンスオブジェクトの場合は,そのインスタンス定義を含むクラスのインスタンスメソッドが検索されます。指定したクラスに該当するメソッドがなければ,そのクラスのスーパクラスのメソッドが,継承した順に検索されます。
(3) メソッドに渡す引数
メソッドに渡す引数を指定します。ここで指定した引数は,メソッド側に渡されます。詳細は,「17 プログラム間の引数と返却項目」を参照してください。
(4) メソッドから返される結果を受け取る項目の名称
オブジェクトのメソッドを実行させた結果の値を受け取るための,データ項目を指定します。