WEBVTT

00:00:07.560 --> 00:00:08.600 align:middle
みなさん、こんにちは。

00:00:09.120 --> 00:00:12.720 align:middle
第4週の1講目へようこそ。

00:00:13.200 --> 00:00:17.960 align:middle
今週は、Pharo の継承の基本と

00:00:18.440 --> 00:00:21.840 align:middle
メソッド探索とウェブ開発をカバーします。

00:00:22.480 --> 00:00:24.280 align:middle
第1講目では

00:00:24.840 --> 00:00:29.120 align:middle
継承の基本を紹介します。

00:00:29.440 --> 00:00:32.360 align:middle
Java のような

00:00:32.520 --> 00:00:35.360 align:middle
クラスがある他の言語での継承と

00:00:35.520 --> 00:00:36.840 align:middle
とても似ています。

00:00:37.120 --> 00:00:40.560 align:middle
継承の基本に通じている人もぜひ見てください。

00:00:40.720 --> 00:00:42.840 align:middle
紹介するのは語彙や

00:00:44.040 --> 00:00:47.680 align:middle
図的表現です。
このコースの残りの部分で

00:00:48.120 --> 00:00:50.720 align:middle
もう一度お見せします。

00:00:51.200 --> 00:00:54.280 align:middle
この講義では継承とは何か

00:00:54.480 --> 00:00:55.800 align:middle
そしてどうやって継承を使うのか
をカバーします。

00:00:56.120 --> 00:00:59.040 align:middle
右側に2つのクラスが示されています。

00:00:59.200 --> 00:01:02.840 align:middle
まず最初にRectangle（矩形）クラスがあり
名前と

00:01:03.880 --> 00:01:05.280 align:middle
インスタンス変数と

00:01:06.120 --> 00:01:07.160 align:middle
メソッドが示されています。

00:01:07.560 --> 00:01:11.800 align:middle
その下に同じものがあります。
クラス名の ColoredRectangle と

00:01:12.480 --> 00:01:15.360 align:middle
そのインスタンス変数とメソッドです。

00:01:16.800 --> 00:01:22.160 align:middle
この白抜きの三角形がついた垂直の矢印は

00:01:22.320 --> 00:01:25.200 align:middle
継承関係を示しています。

00:01:25.360 --> 00:01:29.720 align:middle
ColoredRectangle サブクラスは
Rectangle クラスから継承しています。

00:01:29.880 --> 00:01:33.000 align:middle
一般に ColoredRectangle のようなサブクラスは

00:01:33.160 --> 00:01:37.320 align:middle
スーパークラスの振る舞いや状態を詳細化します。

00:01:37.960 --> 00:01:42.400 align:middle
ColoredRectangle のようなサブクラスは
状態や振る舞いを

00:01:42.760 --> 00:01:43.960 align:middle
スーパークラスに追加します。

00:01:45.120 --> 00:01:49.080 align:middle
ここでは、ColoredRectangle クラスは
状態を追加しています。

00:01:49.320 --> 00:01:53.840 align:middle
具体的には、color と borderColor の
2つのインスタンス変数です。

00:01:55.240 --> 00:01:57.640 align:middle
color メソッドも追加しています。

00:01:58.120 --> 00:02:01.160 align:middle
あらゆるクラスは

00:02:01.520 --> 00:02:04.280 align:middle
なんらかの形で
Object クラスから継承しています。

00:02:04.480 --> 00:02:06.160 align:middle
しかし、厳密にはそうではありません。

00:02:06.480 --> 00:02:10.240 align:middle
あらゆるクラスは
ProtoObject クラスから継承しています。

00:02:10.520 --> 00:02:15.600 align:middle
ProtoObject スーパークラスは
とても特殊な場合に使われています。

00:02:15.960 --> 00:02:18.440 align:middle
このコースの目的からいうと

00:02:18.600 --> 00:02:21.600 align:middle
Pharo では 全てのクラスは
Object から継承しているということにします。

00:02:21.760 --> 00:02:23.880 align:middle
このコースではそれで十分です。

00:02:24.120 --> 00:02:28.320 align:middle
ProtoObject クラスはある特別な場合のためにあります。

00:02:28.800 --> 00:02:33.440 align:middle
Pharo の基本を学ぶために必要になることは
まずないでしょう。

00:02:34.360 --> 00:02:37.360 align:middle
継承は2つの異なる振舞い方をします。

00:02:37.520 --> 00:02:41.320 align:middle
状態を継承するか振る舞いを継承するかで変わります。

00:02:41.840 --> 00:02:43.840 align:middle
状態の継承は静的です。

00:02:44.040 --> 00:02:47.400 align:middle
つまり、サブクラスを作る時には

00:02:47.760 --> 00:02:53.320 align:middle
全てのインスタンス変数を把握しています。

00:02:54.280 --> 00:02:57.240 align:middle
しかし、振る舞いの継承は動的です。

00:02:57.400 --> 00:03:00.840 align:middle
プログラムの実行中に
サブクラスやスーパークラスで定義された

00:03:01.000 --> 00:03:02.920 align:middle
メソッドを参照します。

00:03:03.480 --> 00:03:05.240 align:middle
インスタンス変数については

00:03:05.560 --> 00:03:08.840 align:middle
継承はクラス定義の時点で発生します。

00:03:09.240 --> 00:03:11.160 align:middle
サブクラスを定義する時に

00:03:12.800 --> 00:03:16.760 align:middle
サブクラスで定義されるインスタンス変数を示します。

00:03:16.920 --> 00:03:21.080 align:middle
ここでは、color と borderColor です。

00:03:21.600 --> 00:03:26.080 align:middle
そして、スーパークラスで定義された

00:03:26.240 --> 00:03:29.960 align:middle
インスタンス変数にマージします。
Object までずっと

00:03:30.120 --> 00:03:31.960 align:middle
継承のラインを辿っていきます。

00:03:34.080 --> 00:03:37.000 align:middle
ここでは、ColoredRectangle の
インスタンス変数には

00:03:37.160 --> 00:03:40.200 align:middle
color と borderColor が含まれます。

00:03:41.400 --> 00:03:44.120 align:middle
振る舞いの場合には
継承メカニズムが変わります。

00:03:44.560 --> 00:03:47.120 align:middle
これに続く一連の講義を見て

00:03:47.760 --> 00:03:50.280 align:middle
それがどう発生するのか正確なところを
見てください。

00:03:50.560 --> 00:03:51.680 align:middle
全体的に見ると

00:03:52.000 --> 00:03:54.720 align:middle
振る舞いの継承は実行時に発生します。

00:03:55.520 --> 00:03:59.040 align:middle
別の言い方をすると、
オブジェクトにメッセージを送ると

00:04:00.040 --> 00:04:03.480 align:middle
適合したメソッドを探して
クラス階層を探索します。

67 align:middle
00:04:04,480 --> 00:04:07,440
ここでは ColoredRectangle に

00:04:08.200 --> 00:04:11.280 align:middle
例えば area メッセージを送ると

00:04:11.880 --> 00:04:14.880 align:middle
クラスから探します。

00:04:15.040 --> 00:04:18.920 align:middle
メソッドを見つけるために
ColoredRectangle クラスを探すと

00:04:19.360 --> 00:04:22.080 align:middle
area メソッドは見つかりません。

00:04:22.240 --> 00:04:24.640 align:middle
するとスーパークラスへ行きます。

00:04:25.160 --> 00:04:29.120 align:middle
area メソッドが見つかります。
そのメソッドが選択されて実行されます。

00:04:30.040 --> 00:04:31.080 align:middle
では、まとめます。

00:04:31.480 --> 00:04:35.280 align:middle
継承では、サブクラスとスーパークラスがあり

00:04:35.600 --> 00:04:38.600 align:middle
サブクラスはスーパークラスの振る舞いを
詳細化して

00:04:38.760 --> 00:04:41.280 align:middle
拡張します。

00:04:41.560 --> 00:04:45.600 align:middle
サブクラスはスーパークラスの状態を

00:04:46.000 --> 00:04:47.960 align:middle
拡張したり追加したりします。

00:04:48.400 --> 00:04:52.640 align:middle
Pharo のシンプルな継承モデルでは
1つのクラスに1つのスーパークラスを定めています。

00:04:52.920 --> 00:04:56.440 align:middle
Traits（トレイツ）という概念が
多重な継承を可能にします。

00:04:56.600 --> 00:04:58.280 align:middle
しかしそれはこのコースではカバーしていません。

00:04:58.920 --> 00:05:01.120 align:middle
Object は階層の頂点にあります。

00:05:01.320 --> 00:05:05.320 align:middle
ProtoObject もですが、このコースでは
そこまでの詳細には触れません。

00:05:05.800 --> 00:05:08.240 align:middle
状態の継承は静的で

00:05:08.640 --> 00:05:11.960 align:middle
サブクラスを定義した時に発生します。

00:05:12.200 --> 00:05:14.640 align:middle
しかし振る舞いの継承は動的で

00:05:14.920 --> 00:05:16.280 align:middle
実行時に発生します。

00:05:16.440 --> 00:05:19.000 align:middle
オブジェクトにメッセージを送るたびに。

