オブジェクト

オブジェクト指向プログラミングは、述語の内部状態を隠しておいて、 その状態を操作するのに適しています。

MINERVAでは、クラスとそのメソッドを定義することができます。

あるクラスのあるオブジェクトには、 黒板データ、つまり、bb_ で始まる 述語を使ってアクセスすることができる内部状態があります。

例:

:- class(counter).

Counter :: init :- bb_put(Counter, index, 0).

Counter :: init(InitialValue) :- bb_put(Counter, index, InitialValue).

Counter :: get(Value) :- bb_get(Counter, index, Value).

Counter :: set(Value) :- bb_put(Counter, index, Value).

Counter :: next(Value) :- Counter :: get(OldValue), NewValue is OldValue + 1, Counter :: set(NewValue), Value = NewValue.

:- endclass.

新しいオブジェクトを作るために、MINERVAコンパイラは、これらの述語を処理し、 create_CLASS/1/2の述語を生成します。

結果として生成された述語は、

	Object::Method(Arg1,..,ArgN)
となります。 ここで、 Objectは、create_object/2で生成され、Methodは、アトム あるいは複合項でなければなりません。

上の例は、古典的なPrologでは以下のようになります。

	create_counter(10,Counter),
	Counter :: next(Index)

上の例は、関数表記では、以下のようになります。

	Counter <- create_counter(10),
	Index <- Counter::next,
	...


戻る 続く..