Langphilia! / KL1 / Tips / OOP

Object Oriented KL1 Programming

KL1はオブジェクト指向言語ではありませんが、 プロセスとストリームを多用するプログラミング・スタイルは、 オブジェクト指向プログラミングのオブジェクトと 非同期メッセージ渡しに相当します。 [KLIC講習会テキスト 1.2.2]


Objects

KL1のプロセスはオブジェクトです。 多くのオブジェクトはメッセージを受け取って状態遷移しますが、これは メッセージを受け取って状態遷移するサーバ・プロセスとして表現できます。


Classes

プロセスを定義する述語はクラス定義です。 プロセスへの入口の述語はコンストラクタです。 他のプロセスからメッセージを受け取るには、 メッセージ(ストリーム)を述語の引数として受け取る必要があります。

すなわち、KLICでは{生成木で親子関係にないプロセス}から メッセージを受け取ることができません。 PIMOSではOSがストリームを管理しており、 システム内のストリームを取得することができました。 分散KL1でも、ストリームのネーミング・サービスが検討されています。

Instances

クラスのインスタンスを作るには、コンストラクタを呼び出します。 すると自動的にメモリが割り当てられ、プロセスがゴール・プールに入れられます。 プロセスが死ぬと、ゴミ集めによって自動的にメモリが解放されます。 コンストラクトとデストラクトは自分でやりましょう。

Inheritance

KL1には継承の概念はありません。 全てのプロセスはfinalクラスです。 従って、総称/集約 (aggregation) のための抽象クラスを直接 表現することはできません。 オーバライドの心配がないので基底クラスも拡張も気楽に書けます。

クラスを拡張するには、拡張部分を自分で持ち、 それ以外は元のクラスに委任 (delegation) します。 継承はできませんが、隠蔽はできます。


Messages

Instance methods

プロセスにメッセージを渡すことによって望みの反応を引き出します。 サーバ・プロセスに対してはストリームにメッセージを流すことによって、 サーバ・プロセス内の述語呼び出しを引き起こします。

Class methods

クラス・メソッドはインスタンスを作らずに呼び出せる、普通の述語です。 クラスとの関連を強調したければ、クラス名を関した述語名を付けるなどの 名付け規約に従えば良いでしょう。


Attributes

KL1にはグローバル変数がないので、 オブジェクトの属性は述語の引数として持ち回る必要があります。


Copyright 2001, TAKAGI Yusuke.