/
JA_C019SD-W4-S5.vtt
240 lines (170 loc) · 6.95 KB
/
JA_C019SD-W4-S5.vtt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
WEBVTT
00:00:00.400 --> 00:00:01.400 align:middle
こんにちは、みなさん。
00:00:01.640 --> 00:00:06.720 align:middle
継承とメソッド探索の第 5 回の講義です。
00:00:07.320 --> 00:00:10.320 align:middle
カバーする内容は
メタクラスでの
00:00:10.600 --> 00:00:13.120 align:middle
メッセージングと探索アルゴリズムです。
00:00:13.440 --> 00:00:14.560 align:middle
Pharo では
00:00:14.880 --> 00:00:16.400 align:middle
あらゆるものがオブジェクトです。
00:00:16.520 --> 00:00:19.400 align:middle
そしてオブジェクトはメッセージを
受け取ることができます。
00:00:19.800 --> 00:00:23.200 align:middle
そしてクラスもオブジェクトです。
00:00:23.760 --> 00:00:26.120 align:middle
オブジェクトはメッセージを
受けることができることから
00:00:26.320 --> 00:00:28.040 align:middle
クラスはメッセージを受けることができます。
00:00:28.480 --> 00:00:33.480 align:middle
レシーバーがクラスであろうが
他のオブジェクトであろうが
00:00:33.800 --> 00:00:37.040 align:middle
メッセージ機構は同じです。
00:00:38.840 --> 00:00:42.360 align:middle
メソッドを探索する方法は1つだけです。
00:00:42.720 --> 00:00:46.280 align:middle
これが探索アルゴリズムです。
何度も
00:00:46.440 --> 00:00:48.320 align:middle
前の講義で見てきました。
00:00:49.200 --> 00:00:51.560 align:middle
では、クラスにメッセージを送る例を
00:00:51.760 --> 00:00:54.200 align:middle
見てみましょう。
00:00:56.240 --> 00:00:58.160 align:middle
基本的な原則を理解してください。
00:00:58.640 --> 00:01:00.880 align:middle
クラスはオブジェクトです。
00:01:02.040 --> 00:01:04.400 align:middle
そして各オブジェクトはクラスに
結びつけらています。
00:01:04.560 --> 00:01:07.000 align:middle
つまりオブジェクトはクラスの
インスタンスです。
00:01:07.240 --> 00:01:10.520 align:middle
aNode は Node クラスのインスタンスです。
00:01:10.920 --> 00:01:15.040 align:middle
Node クラスはオブジェクトなので
00:01:16.160 --> 00:01:19.120 align:middle
Node クラスはあるクラスのインスタンスです。
00:01:19.680 --> 00:01:22.560 align:middle
あるクラスとは、Node class です。
00:01:22.880 --> 00:01:25.200 align:middle
つまり
aNode は Node クラスのインスタンスで
00:01:25.760 --> 00:01:30.120 align:middle
Node クラスはオブジェクトであり
Node class クラスのインスタンスです。
00:01:30.840 --> 00:01:33.280 align:middle
だとすると
不思議に思うかもしれません。
00:01:34.120 --> 00:01:39.280 align:middle
Node クラスはクラスで、クラスはオブジェクトで
クラスのインスタンスです。
00:01:39.600 --> 00:01:43.400 align:middle
では、Node class クラスは
どのクラスのインスタンスでしょう?
00:01:43.840 --> 00:01:47.800 align:middle
答えは次の講義でわかるでしょう。
メタクラスの講義です。
00:01:48.240 --> 00:01:50.560 align:middle
いくつかの例があります。
00:01:50.960 --> 00:01:56.880 align:middle
これは aWorkstation オブジェクトは
Workstation クラスのインスタンスです。
00:01:57.040 --> 00:02:00.480 align:middle
Workstation は Node のサブクラスで
Node は Object のサブクラスです。
00:02:00.640 --> 00:02:03.320 align:middle
ここで、この矢印に注意してください。
00:02:04.200 --> 00:02:06.360 align:middle
頭が白抜きの矢印は
00:02:07.000 --> 00:02:09.160 align:middle
サブクラス関係を示しています。
00:02:09.400 --> 00:02:12.280 align:middle
Node は Object のサブクラスです。
00:02:12.640 --> 00:02:14.760 align:middle
Workstation は Node のサブクラスです。
00:02:15.040 --> 00:02:17.600 align:middle
頭が黒く塗られた矢印は
00:02:17.920 --> 00:02:21.800 align:middle
ときどき頭が単に線で書かれた矢印で示される
こともありますが
00:02:22.160 --> 00:02:23.960 align:middle
インスタンス関係を示します。
00:02:25.320 --> 00:02:27.880 align:middle
aWorkstation は Workstation の
インスタンスです。
00:02:28.160 --> 00:02:30.600 align:middle
Workstation は Workstation class の
インスタンスです。
00:02:30.920 --> 00:02:34.280 align:middle
同じように、Object は Object class の
インスタンスです。
00:02:34.680 --> 00:02:36.160 align:middle
もしメッセージを
00:02:36.360 --> 00:02:37.880 align:middle
オブジェクト a Workstation に送ったら
00:02:39.680 --> 00:02:42.880 align:middle
探索アルゴリズムが
Workstation クラスを探索して
00:02:43.400 --> 00:02:45.640 align:middle
マッチするメソッドが見つかるまで
00:02:45.800 --> 00:02:48.240 align:middle
スーパークラスを遡っていきます。
00:02:48.720 --> 00:02:51.920 align:middle
このメカニズムは
00:02:52.440 --> 00:02:56.320 align:middle
メッセージを Workstation クラスに
送った時も全く同じです。
00:02:56.720 --> 00:03:00.440 align:middle
例えば new メッセージを
00:03:00.960 --> 00:03:04.080 align:middle
Workstation へ送ると
探索アルゴリズムは
00:03:04.280 --> 00:03:08.280 align:middle
Workstation class から
new メソッドを探します。
00:03:08.920 --> 00:03:11.160 align:middle
ここで見つかれば実行します。
00:03:11.400 --> 00:03:14.960 align:middle
見つからなければ
スーパークラスを遡っていきます。
00:03:15.120 --> 00:03:17.880 align:middle
そしてまた次のスーパークラスへ
00:03:19.000 --> 00:03:21.760 align:middle
という具合です。
この階層が続いていきます。
00:03:22.960 --> 00:03:26.880 align:middle
このスライドはメッセージを
標準的なオブジェクトや
00:03:27.040 --> 00:03:30.560 align:middle
標準的なオブジェクトとしてのクラスに
送る場合のことをまとめたものです。
00:03:31.800 --> 00:03:33.120 align:middle
覚えておくことは
00:03:33.480 --> 00:03:36.360 align:middle
クラスは他のオブジェクトと同様に
オブジェクトです。
00:03:37.040 --> 00:03:40.680 align:middle
メッセージはオブジェクトに送られます。
したがってクラスにも送られます。
00:03:41.480 --> 00:03:45.640 align:middle
探索機構は両者で全く同一です。
00:03:47.400 --> 00:03:51.280 align:middle
レシーバーのクラスから探索を始めて
00:03:51.680 --> 00:03:55.400 align:middle
継承関係の繋がりからスーパークラスを
辿って探索していきます。
00:03:55.760 --> 00:03:58.120 align:middle
マッチするメソッドが見つかるまで。
00:03:58.600 --> 00:04:02.880 align:middle
メタクラスについては "Understanding Metaclasses"
の講義で詳しく説明します。