1 00:00:00,400 --> 00:00:01,400 こんにちは、みなさん。 2 00:00:01,640 --> 00:00:06,720 継承とメソッド探索の第 5 回の講義です。 3 00:00:07,320 --> 00:00:10,320 カバーする内容は メタクラスでの 4 00:00:10,600 --> 00:00:13,120 メッセージングと探索アルゴリズムです。 5 00:00:13,440 --> 00:00:14,560 Pharo では 6 00:00:14,880 --> 00:00:16,400 あらゆるものがオブジェクトです。 7 00:00:16,520 --> 00:00:19,400 そしてオブジェクトはメッセージを 受け取ることができます。 8 00:00:19,800 --> 00:00:23,200 そしてクラスもオブジェクトです。 9 00:00:23,760 --> 00:00:26,120 オブジェクトはメッセージを 受けることができることから 10 00:00:26,320 --> 00:00:28,040 クラスはメッセージを受けることができます。 11 00:00:28,480 --> 00:00:33,480 レシーバーがクラスであろうが 他のオブジェクトであろうが 12 00:00:33,800 --> 00:00:37,040 メッセージ機構は同じです。 13 00:00:38,840 --> 00:00:42,360 メソッドを探索する方法は1つだけです。 14 00:00:42,720 --> 00:00:46,280 これが探索アルゴリズムです。 何度も 15 00:00:46,440 --> 00:00:48,320 前の講義で見てきました。 16 00:00:49,200 --> 00:00:51,560 では、クラスにメッセージを送る例を 17 00:00:51,760 --> 00:00:54,200 見てみましょう。 18 00:00:56,240 --> 00:00:58,160 基本的な原則を理解してください。 19 00:00:58,640 --> 00:01:00,880 クラスはオブジェクトです。 20 00:01:02,040 --> 00:01:04,400 そして各オブジェクトはクラスに 結びつけらています。 21 00:01:04,560 --> 00:01:07,000 つまりオブジェクトはクラスの インスタンスです。 22 00:01:07,240 --> 00:01:10,520 aNode は Node クラスのインスタンスです。 23 00:01:10,920 --> 00:01:15,040 Node クラスはオブジェクトなので 24 00:01:16,160 --> 00:01:19,120 Node クラスはあるクラスのインスタンスです。 25 00:01:19,680 --> 00:01:22,560 あるクラスとは、Node class です。 26 00:01:22,880 --> 00:01:25,200 つまり aNode は Node クラスのインスタンスで 27 00:01:25,760 --> 00:01:30,120 Node クラスはオブジェクトであり Node class クラスのインスタンスです。 28 00:01:30,840 --> 00:01:33,280 だとすると 不思議に思うかもしれません。 29 00:01:34,120 --> 00:01:39,280 Node クラスはクラスで、クラスはオブジェクトで クラスのインスタンスです。 30 00:01:39,600 --> 00:01:43,400 では、Node class クラスは どのクラスのインスタンスでしょう? 31 00:01:43,840 --> 00:01:47,800 答えは次の講義でわかるでしょう。 メタクラスの講義です。 32 00:01:48,240 --> 00:01:50,560 いくつかの例があります。 33 00:01:50,960 --> 00:01:56,880 これは aWorkstation オブジェクトは Workstation クラスのインスタンスです。 34 00:01:57,040 --> 00:02:00,480 Workstation は Node のサブクラスで Node は Object のサブクラスです。 35 00:02:00,640 --> 00:02:03,320 ここで、この矢印に注意してください。 36 00:02:04,200 --> 00:02:06,360 頭が白抜きの矢印は 37 00:02:07,000 --> 00:02:09,160 サブクラス関係を示しています。 38 00:02:09,400 --> 00:02:12,280 Node は Object のサブクラスです。 39 00:02:12,640 --> 00:02:14,760 Workstation は Node のサブクラスです。 40 00:02:15,040 --> 00:02:17,600 頭が黒く塗られた矢印は 41 00:02:17,920 --> 00:02:21,800 ときどき頭が単に線で書かれた矢印で示される こともありますが 42 00:02:22,160 --> 00:02:23,960 インスタンス関係を示します。 43 00:02:25,320 --> 00:02:27,880 aWorkstation は Workstation の インスタンスです。 44 00:02:28,160 --> 00:02:30,600 Workstation は Workstation class の インスタンスです。 45 00:02:30,920 --> 00:02:34,280 同じように、Object は Object class の インスタンスです。 46 00:02:34,680 --> 00:02:36,160 もしメッセージを 47 00:02:36,360 --> 00:02:37,880 オブジェクト a Workstation に送ったら 48 00:02:39,680 --> 00:02:42,880 探索アルゴリズムが Workstation クラスを探索して 49 00:02:43,400 --> 00:02:45,640 マッチするメソッドが見つかるまで 50 00:02:45,800 --> 00:02:48,240 スーパークラスを遡っていきます。 51 00:02:48,720 --> 00:02:51,920 このメカニズムは 52 00:02:52,440 --> 00:02:56,320 メッセージを Workstation クラスに 送った時も全く同じです。 53 00:02:56,720 --> 00:03:00,440 例えば new メッセージを 54 00:03:00,960 --> 00:03:04,080 Workstation へ送ると 探索アルゴリズムは 55 00:03:04,280 --> 00:03:08,280 Workstation class から new メソッドを探します。 56 00:03:08,920 --> 00:03:11,160 ここで見つかれば実行します。 57 00:03:11,400 --> 00:03:14,960 見つからなければ スーパークラスを遡っていきます。 58 00:03:15,120 --> 00:03:17,880 そしてまた次のスーパークラスへ 59 00:03:19,000 --> 00:03:21,760 という具合です。 この階層が続いていきます。 60 00:03:22,960 --> 00:03:26,880 このスライドはメッセージを 標準的なオブジェクトや 61 00:03:27,040 --> 00:03:30,560 標準的なオブジェクトとしてのクラスに 送る場合のことをまとめたものです。 62 00:03:31,800 --> 00:03:33,120 覚えておくことは 63 00:03:33,480 --> 00:03:36,360 クラスは他のオブジェクトと同様に オブジェクトです。 64 00:03:37,040 --> 00:03:40,680 メッセージはオブジェクトに送られます。 したがってクラスにも送られます。 65 00:03:41,480 --> 00:03:45,640 探索機構は両者で全く同一です。 66 00:03:47,400 --> 00:03:51,280 レシーバーのクラスから探索を始めて 67 00:03:51,680 --> 00:03:55,400 継承関係の繋がりからスーパークラスを 辿って探索していきます。 68 00:03:55,760 --> 00:03:58,120 マッチするメソッドが見つかるまで。 69 00:03:58,600 --> 00:04:02,880 メタクラスについては "Understanding Metaclasses" の講義で詳しく説明します。