こんにちは、みなさん。
継承とメソッド探索の第 5 回の講義です。
カバーする内容は メタクラスでの
メッセージングと探索アルゴリズムです。
Pharo では
あらゆるものがオブジェクトです。
そしてオブジェクトはメッセージを 受け取ることができます。
そしてクラスもオブジェクトです。
オブジェクトはメッセージを 受けることができることから
クラスはメッセージを受けることができます。
レシーバーがクラスであろうが 他のオブジェクトであろうが
メッセージ機構は同じです。
メソッドを探索する方法は1つだけです。
これが探索アルゴリズムです。 何度も
前の講義で見てきました。
では、クラスにメッセージを送る例を
見てみましょう。
基本的な原則を理解してください。
クラスはオブジェクトです。
そして各オブジェクトはクラスに 結びつけらています。
つまりオブジェクトはクラスの インスタンスです。
aNode は Node クラスのインスタンスです。
Node クラスはオブジェクトなので
Node クラスはあるクラスのインスタンスです。
あるクラスとは、Node class です。
つまり aNode は Node クラスのインスタンスで
Node クラスはオブジェクトであり Node class クラスのインスタンスです。
だとすると 不思議に思うかもしれません。
Node クラスはクラスで、クラスはオブジェクトで クラスのインスタンスです。
では、Node class クラスは どのクラスのインスタンスでしょう？
答えは次の講義でわかるでしょう。 メタクラスの講義です。
いくつかの例があります。
これは aWorkstation オブジェクトは Workstation クラスのインスタンスです。
Workstation は Node のサブクラスで Node は Object のサブクラスです。
ここで、この矢印に注意してください。
頭が白抜きの矢印は
サブクラス関係を示しています。
Node は Object のサブクラスです。
Workstation は Node のサブクラスです。
頭が黒く塗られた矢印は
ときどき頭が単に線で書かれた矢印で示される こともありますが
インスタンス関係を示します。
aWorkstation は Workstation の インスタンスです。
Workstation は Workstation class の インスタンスです。
同じように、Object は Object class の インスタンスです。
もしメッセージを
オブジェクト a Workstation に送ったら
探索アルゴリズムが Workstation クラスを探索して
マッチするメソッドが見つかるまで
スーパークラスを遡っていきます。
このメカニズムは
メッセージを Workstation クラスに 送った時も全く同じです。
例えば new メッセージを
Workstation へ送ると 探索アルゴリズムは
Workstation class から new メソッドを探します。
ここで見つかれば実行します。
見つからなければ スーパークラスを遡っていきます。
そしてまた次のスーパークラスへ
という具合です。 この階層が続いていきます。
このスライドはメッセージを 標準的なオブジェクトや
標準的なオブジェクトとしてのクラスに 送る場合のことをまとめたものです。
覚えておくことは
クラスは他のオブジェクトと同様に オブジェクトです。
メッセージはオブジェクトに送られます。 したがってクラスにも送られます。
探索機構は両者で全く同一です。
レシーバーのクラスから探索を始めて
継承関係の繋がりからスーパークラスを 辿って探索していきます。
マッチするメソッドが見つかるまで。
メタクラスについては "Understanding Metaclasses" の講義で詳しく説明します。