﻿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"
の講義で詳しく説明します。