: Embedding
: オブジェクトベース言語
: プロトタイプとクローン
Emerald のような簡単なオブジェクト指向言語は、共通する振る舞いを共有す
るために、オブジェクトを生成する「手続き」を使う。しかし、これらの言語は
継承メカニズムを持たない。
- プロトタイプベース言語は、生成メカニズムに加え、各オブジェクトを
update する方法を持っている。
- クローンは継承としてみなすことができ、update は、
overriding とみなすことができる。しかし、クローンと update は、
プロトタイプの形を常に保っているという意味で、継承の十分な柔軟性を提供
するものではない。
- 考慮すべき継承メカニズムは、オブジェクトに新しい
attribute を拡張することである。オブジェクトの拡張は、しかしながら
簡単ではない。第一の問題は、現存する attribute と付加する attribute と
のクラッシュである。型付き言語には注意深さが必要である。
もう一つの問題は、オブジェクトの identity を扱うオブジェクトを拡張する
ために、その表現 (representation) を update する必要があることである。
- 現存するオブジェクトを拡張するもう一つの方法は、現存する
attribute を含んだ新しいオブジェクトを構築することである。これは、プロ
トタイプベース言語でよく知られた継承メカニズムである。
- プロトタイプ言語において継承に対して 2 つの直交した見方がある。
donor オブジェクトの attribute を扱うか、新しいホストオブジェクトにそ
れら attribute を導入するかである。
これらの次元に沿って、プロトタイプ言語は 4 つのカテゴリに分割すること
ができる。
- donor オブジェクトの attribute は、implicitly または explicitly
に扱うか。これらの attribute は ホストオブジェクトに embedded されるか、
または donor から delegated されているかである。
- implicit 継承では、一つまたは複数のオブジェクトが
donor として設定され、かつそれらの attribute は implicitly に継承される。
- explicit 継承では、一つまたは複数の donor の各 attribute は
explicitly に設定される。
- 継承においてより重要な区別は、embedding と delegation の区別であ
る。embedding では donor から継承された attribute は、ホストオ
ブジェクトの一部となる。delegation では、継承された attribute は
donor の一部として残り、ホストオブジェクトから間接参照される。
- embedding、delegation の両方において self(の意味づけ)は、
しばしば出現する。original の receiver オブジェクトである。2 つの継承
の形の意味の違いにより、どのように donor オブジェクトの変化がホスト
オブジェクト (attribute を継承する) に影響を与えるかを考察する。
embedding では、ホストオブジェクトは donor オブジェクトと独立している。
delegation では、複雑な(クモの巣のような)依存関係が生成される。
平成12年8月22日