4.3.1. クラスの紹介

UP


4.3.1. クラスの紹介

クラスは、インスタンスと呼ばれる他のオブジェクトの集合の 構造と動作を決定するためのオブジェクトです。

クラスは他のひとつ以上のクラスから構造と動作を継承できます。 クラスが継承する目的で他のクラスを参照しているようなクラスは、 それら各クラスのサブクラスであると言われます。 継承の目的で指定されているクラスは、 継承しているクラスのスーパークラスであると言われます。

クラスは名前を持つことができます。 class-name関数はクラスオブジェクトを引数に取り、 その名前を返却します。 匿名のクラスの名前はnilです。 シンボルはクラスの名前になれます。 find-class関数はシンボルを受け取り、 そのシンボルの名前のクラスを返却します。 もしあるクラスにおいて、 その名前がシンボルであり、 その名前のクラスが、あるクラスの名前を指定しているときは、 そのあるクラスは正しい名前を持っていると言います。 つまり、クラスCが正しい名前を持つとは、 S = (class-name C)でありかつC = (find-class S)のときです。 注意しなければならないとは、 (find-class S1) = (find-class S2) でありかつS1 /= S2の可能性もあるということです。 もしC = (find-class S)であるなら、 CSという名前を持ったクラスであると言います。

もしクラスC2がクラスC1のスーパークラスであると その定義で明示的に指定されたとき、 クラスC1はクラスC2directスーパークラスです。 このような場合、C2C1directサブクラスです。 もし1 <= i<nCi+1Cidirectスーパークラスのようなとき クラスC2, ..., Cn-1という順列が存在するのであれば、 クラスCnはクラスC1のスーパークラスです。 このような場合、C1Cnのサブクラスです。 クラスは自分自身がスーパークラスでもなければ サブクラスでもないことを考慮されます。 つまり、C1C2のスーパークラスのときはC1 /= C2です。 クラスCとその全てのスーパークラスを含む集合は、 「Cとそのスーパークラス」と呼ばれます。

各クラスはクラス優先順位リストを持っており、 それは与えられたクラスとそのスーパークラスの集合の 全体の順序を表すものです。 全体の順序はもっとも特定的なものから そうでないものの順番のリストで表現されます。 クラス優先順位リストはいろいろなところで使われます。 一般的にはもっとも特定的なクラスが、 継承によって他の特定的ではないクラスの機能を シャドウするのに使います。 メソッドの選択とmethod-combinationの処理は、 もっとも徳敵的なものからそうではないもののメソッドの順番を クラス優先順位リストから使います。

クラスが定義されたとき、定義フォームに記載される directスーパークラスの順番が重要になります。 各クラスは、その定義フォームに記載される directスーパークラスに従ったクラスが含まれるリストである、 ローカルの優先順位を持ちます。

クラス優先順位リストは常に各クラスのローカルの優先順位を リストとして含みます。 各ローカルの優先順位の中のクラスは、 同じ順番でクラス優先順位リストの中に現れます。 もしローカルの優先順位にお互いが含まれていないときは、 クラス優先順位リストは構築することができず、 エラーが発生します。 クラス優先順位リストとそれらの計算は、4.3.5. クラス優先順位リストの決定で説明されます。

クラスは非循環有向グラフで編成されます。 tstandard-objectという名前の 2つの特別なクラスがあります。 tというクラスはスーパークラスを持ちません。 これは自分自身を除く全てのクラスのスーパークラスです。 standard-objectというクラスは、 クラスstandard-classのインスタンスであり、 これは自分自身を除くクラスstandard-classのインスタンスである、 全てのクラスのスーパークラスです。

オブジェクトシステムのクラス空間は、型空間と対応があります。 この説明で指定されている多くの標準の型は、 その型として同じ名前を持つ対応したクラスがあります。 いくつかの型は、対応したクラスを持っていません。 型とクラスシステムの等号については、4.3.7. 型とクラスの統合で説明されています。

クラスはそれ自身がクラスのインスタンスである オブジェクトによって表現されます。 オブジェクトのクラスのクラスは、 そのオブジェクトのメタクラスという語で表現されます。 誤解が生じてないならば、メタクラスという語は、 それ自身がクラスであるというインスタンスを持つ クラスを示すときに使われます。 メタクラスは、そのインスタンスであるクラスによって使用される継承の形式と、 それらのクラスのインスタンスの表現を決定します。 オブジェクトシステムはデフォルトのメタクラスである standard-classを提供しており、 それは多くのプログラムに適しています。

特に指定された場合を除いて、 全てのクラスは標準でstandard-classクラスのインスタンスであり、 全てのジェネリック関数は標準で standard-generic-functionクラスのインスタンスであり、 全てのメソッドはstandard-methodクラスのインスタンスです。


TOP, Github