MF 

クラス拡張

クラス拡張により、元のソース コードを変更せずに、オブジェクト COBOL クラスに機能を追加できる。

クラス拡張によってクラスを拡張することと継承を行うことの違いは、クラス拡張が既存のすべてのサブクラスに継承されることである。たとえば、クラス A のサブクラスとしてクラス B がある場合 (B INHERITS FROM A)、クラス A のサブクラスとしてサブクラス C を生成することによって、クラス A にメソッドを追加できる。ただしその場合、クラス B はクラス A のサブクラスであるため、クラス C のメソッドは継承しない。クラス拡張 X によってクラス A を拡張する場合、実行時の効果はクラス A を変更して再コンパイルした場合と同じである。つまり、クラス B はクラス X の追加メソッドをすべて継承する。

一般形式


*

構文規則

  1. extension-name-1 は class-name-1 と同じにはできない。
  2. END CLASS 見出し内の extension-name-1 は、先行する Class-ID 段落で指定されている extension-name-1 と同じにする必要がある。
  3. class-name-1 は Class-Control 段落で指定されているクラスの名前にする必要がある。
  4. クラス本体のデータ部には、空のオブジェクト記憶節を含めることもできる。クラス拡張のデータ部には、その他に作業場所節と連絡節のみ指定できる。
  5. 以下の両方の条件に該当する場合にのみ、クラス拡張内の文から class-name-1 で宣言されているデータを参照できる。
    • class-name-1 の Class-ID 段落内に DATA IS PROTECTED 指定または DATA IS RESTRICTED 指定がある。
    • クラス拡張の Class-ID 段落内に WITH DATA 指定がある。

一般規則

  1. EXTEND 句はクラス拡張を指定する。クラス拡張は、オブジェクト クラスにメソッドを追加する。extension-name-1 で指定されたメソッドは、class-name-1 の既存および新規のすべてのサブクラスに継承される。
  2. 実行単位の実行中は、extension-name-1 に対して COBOL の呼び出し文を実行した後に、クラス拡張内のメソッドを呼び出す必要がある。これにより、クラス拡張内のメソッドがオブジェクト指向ランタイム システムに登録される。