ISO2002MF 

クラス名段落

クラス名段落は、該当の見出し部でクラス定義を行おうとしていることを示し、クラスを識別する名前を指定するとともに、クラスにクラス属性を割り当てる。

一般形式

指令

  1. 予約語リストにフラグを付けたり、その内容を修正する機能を提供するコンパイラ指令に加えて、下記の指令がこの節に記述されている構文または意味内容に影響を与える可能性がある

    • ACTUAL-PARAMS - パラメータ化されたクラスやインタフェイスからのクラスの作成に使用されるパラメータを指定する。

構文規則

  1. 定数-1は英数字の定数であり、表意定数であってはならない。

  2. クラス名-2は、リポジトリ段落

    またはこのソース要素のクラス管理段落

    の中で指定されたクラスの名前とする。.

  3. クラス名-2は、クラス定義によって定義されたクラスの名前であってはならしない。

  4. クラス名-2は、クラス名-1を直接的にも間接的にも継承しない。

  5. クラス名-2は、FINAL句で定義されたクラスの名前であってはならない。

  6. パラメータ名-1は、このクラス定義のリポジトリ段落中のクラス指定子またはインターフェイス指定子に指定された名前とする。

  7. クラス名は、INHERITS 句内に2度以上存在してはならない。

  8. 同じ名の別のメソッドが2個以上継承されている場合は、そのどちらもFINAL句で指定してはならない。同じメソッドが、2個以上の中間の上位クラスを介して、その上位クラスから継承される場合は、FINAL句で指定することができる。

  9. メソッド名が2個以上の継承されたクラスから継承される場合で、これらのメソッド用のプロトタイプが、同じインターフェイスでメソッドを定義しており、このクラス内のプロトタイプのどれかのために、このクラスが、継承された全クラスと適合できない場合は、同じメソッド名のメソッドがこのクラスで宣言されるものとする。このメソッドは、この章のメソッド名段落節にある構文規則 9 に従う。


注: クラスA が、2 個のクラス、B と C からメソッドMを継承し、M 用のメソッドインターフェイスがクラスBとCでは異なっている(たとえば、BのMはクラスXのオブジェクトを返し、CのMは関係のないクラスYのオブジェクトを返す)とする。この場合は、クラスAで、Mによる有効なメソッドの優先が定義され、メソッドインターフェイスの適合性の問題が解決されていない限り、継承は無効である。これはつねに可能であるわけではない(つまり、継承は無効となる)が、継承を有効にできる場合もある。たとえば、XとYを継承するクラスとしてZを定義すると、Mによるメソッドの優先をクラスAで指定し、クラスZのオブジェクトが返されるようにすることができる。


一般規則

  1. クラス名-1は、このクラス定義を宣言するクラスの名とする。ただし、定数-1(存在する場合)は、運用環境で外部化されたクラスの名である。

  2. INHERITS句は、クラスの継承節に従い、クラス名-1により継承されるクラスの名とする。

  3. FINAL 句が指定されている場合は、そのクラスは他のクラスの上位クラスとはなり得ない。

  4. USING 指定があれば、パラメータ化されたクラスとなる。パラメータ名-1は、仮パラメータにつけられた名とする。パラメータ化されたクラスの動作について詳しくは、翻訳集団の概念の章のパラメータ化されたクラス節を参照。

  5. パラメータ名-1は、このクラス定義内で指定され、クラス名またはインターフェイス名のみが許可される。

  6. 同じクラスが2度以上継承されている場合、そのクラス用のデータは1度だけクラス名-1に追加される。


注: 同じクラスが直接継承されるのは、1度だけであるが、間接的には複数回継承され得る。たとえば、クラスDがクラスBおよびCから継承し、クラスBおよびCのどちらもクラスAから継承するとする。この場合、クラスDは、クラスBの上位クラスおよびクラスCの上位クラスとして、クラスAから間接的に2度継承する。