Lisp-clos
LISP-CLOS
Common LISPは、オブジェクト指向プログラミングの進歩よりも数十年前に先んじました。 ただし、オブジェクト指向は後の段階で組み込まれました。
クラスの定義
スロットは、データまたはフィールドを格納する変数です。
スロット記述の形式は(slot-name slot-option *)です。各オプションは、名前、式、その他のオプションが続くキーワードです。 最も一般的に使用されるスロットオプションは-
- *:accessor *関数名
- *:initform *式
- *:initarg *シンボル
たとえば、3つのスロットの長さ、幅、高さを持つBoxクラスを定義してみましょう。
スロットへのアクセスおよび読み取り/書き込み制御の提供
スロットにアクセス、読み取り、または書き込みできる値がない限り、クラスはほとんど役に立ちません。
クラスを定義するときに、各スロットに accessors を指定できます。 たとえば、私たちのBoxクラスを取ります-
スロットの読み取りと書き込みに別々の accessor 名を指定することもできます。
クラスのインスタンスの作成
汎用関数 make-instance は、クラスの新しいインスタンスを作成して返します。
次の構文があります-
例
長さ、幅、高さの3つのスロットを持つBoxクラスを作成しましょう。 これらのフィールドに値を設定するには、3つのスロットアクセサーを使用します。
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
あなたがコードを実行すると、それは次の結果を返します-
クラスメソッドの定義
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
あなたがコードを実行すると、それは次の結果を返します-
継承
LISPでは、オブジェクトを別のオブジェクトの観点から定義できます。 これは* inheritance。*と呼ばれます。新しいまたは異なる機能を追加することで、派生クラスを作成できます。 派生クラスは、親クラスの機能を継承します。
次の例はこれを説明します-
例
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
あなたがコードを実行すると、それは次の結果を返します-