本章では、使用可能なMicro Focus OO COBOL構文および、ISO/IEC
1989:2002で提供されるOO COBOL 構文を解説する。この構文のすべては、Micro Focus COBOL固有のものであるため、本章の周囲のボックスは削除している。オブジェクト指向機能の詳細な解説については、オブジェクト指向プログラミング を参照。
予約語リストにフラグを付けて修正する機能を提供するコンパイラ指令に加えて、下記の指令が本節の構文または意味のいずれかに影響を与える可能性がある
- ALIGN - 01レベルまたは77レベルのデータ項目を割り付けるメモリの境界を指定する。
- IBMCOMP - 語格納モードをオンにする。
- MAPNAME - メソッド名内のアルファベット以外の文字の取扱いに影響を与える。
- MF-OO - オブジェクト指向の構文を使えるようにする。
- REPOSITORY - クラスに関するリポジトリ記述項を作成するか、無視するか、チェックするかをコンパイラに知らせる
- OOCTRL - オブジェクト指向オプションに関する特別なスイッチを提供する。設定をオンにするには各オプションを表す文字の前に + 記号を付け、オフにするには
- 記号を付ける。省略時の解釈はOOCTRL(-G-N-P+Q-W)である。各オプションの意味は下記のとおり。
+F |
小文字に翻訳されるプログラムにより起動されるメソッド名を折り畳む。プログラムがJavaメソッドを呼び出す場合は、-Fを使用すること。これは、Javaメソッドでは大文字と小文字が区別されるためである。JavaとCOBOLの併用について詳しくは、使用しているCOBOLシステムのマニュアルを参照。 |
+G |
インスタンスに関してクラスデータをグローバルにする。
注:このオプションを使用することは推奨しない。この機能は以前のリリースとの互換性を保つために用意されている。
|
+P |
オブジェクトCOBOLランタイム システムに対して、パラメータータイプ情報を利用可能にする。
注意:OLEおよびSOMに送ったメッセージに関して必要。
|
+Q |
メソッドインターフェイス定義の動詞シグネチャ中のデータ名の後ろに続く可能性のあるどの場所についても、INおよびOFを使用できないようにする。 メソッドインターフェイス定義の動詞シグネチャ中のどの動詞も使えないようにする(翻訳集団の概念の章の文の種類節を参照)。 |
-Q |
メソッドインターフェイス定義の動詞シグネチャ中でINおよびOFを使用できるようにするメソッドを呼び出す動詞シグネチャの中で修飾を行えないようにする。 メソッドインターフェイス定義の動詞シグネチャ中で動詞も使えるようにする(翻訳集団の概念の章の文の種類節を参照)。 |
+W |
オブジェクトおよびファクトリ(クラス)オブジェクトにおいて、オブジェクト記憶の意味で作業場所を使用する。
注:ISO 2002 COBOL標準との互換性を持たせるために必要。
|
クラスはオブジェクCOBOLのクラスオブジェクトおよびそのインスタンスオブジェクトを記述する。その中には、クラスメソッドおよびインスタンスメソッドに関するネストされたプログラムが含まれる。
一般形式
構文規則
- PROTECTEDとRESTRICTEDの2つの語は同等である。
- EXTERNAL句を指定した場合は、DATA句もINHERITS句も使用できない。
-
ABSTRACT句を指定した場合は、FINAL句を指定してはならない。
- 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指定に指定されている一意名の中に、その結果が入れられる。
メソッドインターフェイス定義は、メソッドのパラメーター、パラメーターを渡す方法、メソッドを呼び出すために使用できる代替構文を定義する。
形式
where verb-signature is:
構文規則
- メソッドインターフェイス定義は外部クラスの中にネストされなければならない。
- 手続き部の見出しは、プログラムに関して指定する手続き部の見出しの形式 2 と同様である。ただし、呼び名もREPEATED指定も指定できない。上の形式に示したINVOKED指定は、見出し中の末尾の終止符の直前に置くこともできる(詳細については、手続き部の章の手続き部の見出し手続き部の見出し節を参照)。
- 動詞シグネチャ内にFUNCTION指定を指定したときは、手続き部の見出し内にRETURNING指定を指定しなければならない。
- 動詞-1はCOBOLの語でなければならない。かつ、予約語でも手続き名でもあってはならない。
- 語 <OBJECT> と <SELF> と <THIS> の意味は同じである。各動詞シグネチャ内には、それらのいずれかひとつが1回だけ現れなければならない。
- データ名-3は "<" と ">" で囲まれていなければならない。
- 必要語はCOBOLの語でなければならない。
- 補助語はCOBOLの語を "[" と "]" で囲んだもでなければならない。
- 開きかっこと閉じかっこはそれぞれ "(" と ")" である。
注 :このかっこによって、組み込み関数のように見え、かっこ内にパラメーターを指定する、関数を定義できるようになる。
- 動詞シグネチャは他の動詞シグネチャのサブセットであってはならない。
一般規則
- 動詞シグネチャを使用してメソッド名-1を呼び出すと、<SELF> が受け手のオブジェクトに対するオブジェクト参照で置き換えられる。
- 補助語は読みやすくするために使用するもであり、この構文を用いてメソッドを呼び出すときに、指定しても指定しなくてもよい。
- 動詞-1がプログラム内でデータ名としても宣言されている場合、そのプログラム内のその語を参照すると、必ずデータ名の方を指すことになる。