﻿1
00:00:07,560 --> 00:00:08,600
みなさん、こんにちは。

2
00:00:09,120 --> 00:00:12,720
第4週の1講目へようこそ。

3
00:00:13,200 --> 00:00:17,960
今週は、Pharo の継承の基本と

4
00:00:18,440 --> 00:00:21,840
メソッド探索とウェブ開発をカバーします。

5
00:00:22,480 --> 00:00:24,280
第1講目では

6
00:00:24,840 --> 00:00:29,120
継承の基本を紹介します。

7
00:00:29,440 --> 00:00:32,360
Java のような

8
00:00:32,520 --> 00:00:35,360
クラスがある他の言語での継承と

9
00:00:35,520 --> 00:00:36,840
とても似ています。

10
00:00:37,120 --> 00:00:40,560
継承の基本に通じている人もぜひ見てください。

11
00:00:40,720 --> 00:00:42,840
紹介するのは語彙や

12
00:00:44,040 --> 00:00:47,680
図的表現です。
このコースの残りの部分で

13
00:00:48,120 --> 00:00:50,720
もう一度お見せします。

14
00:00:51,200 --> 00:00:54,280
この講義では継承とは何か

15
00:00:54,480 --> 00:00:55,800
そしてどうやって継承を使うのか
をカバーします。

16
00:00:56,120 --> 00:00:59,040
右側に2つのクラスが示されています。

17
00:00:59,200 --> 00:01:02,840
まず最初にRectangle（矩形）クラスがあり
名前と

18
00:01:03,880 --> 00:01:05,280
インスタンス変数と

19
00:01:06,120 --> 00:01:07,160
メソッドが示されています。

20
00:01:07,560 --> 00:01:11,800
その下に同じものがあります。
クラス名の ColoredRectangle と

21
00:01:12,480 --> 00:01:15,360
そのインスタンス変数とメソッドです。

22
00:01:16,800 --> 00:01:22,160
この白抜きの三角形がついた垂直の矢印は

23
00:01:22,320 --> 00:01:25,200
継承関係を示しています。

24
00:01:25,360 --> 00:01:29,720
ColoredRectangle サブクラスは
Rectangle クラスから継承しています。

25
00:01:29,880 --> 00:01:33,000
一般に ColoredRectangle のようなサブクラスは

26
00:01:33,160 --> 00:01:37,320
スーパークラスの振る舞いや状態を詳細化します。

27
00:01:37,960 --> 00:01:42,400
ColoredRectangle のようなサブクラスは
状態や振る舞いを

28
00:01:42,760 --> 00:01:43,960
スーパークラスに追加します。

29
00:01:45,120 --> 00:01:49,080
ここでは、ColoredRectangle クラスは
状態を追加しています。

30
00:01:49,320 --> 00:01:53,840
具体的には、color と borderColor の
2つのインスタンス変数です。

31
00:01:55,240 --> 00:01:57,640
color メソッドも追加しています。

32
00:01:58,120 --> 00:02:01,160
あらゆるクラスは

33
00:02:01,520 --> 00:02:04,280
なんらかの形で
Object クラスから継承しています。

34
00:02:04,480 --> 00:02:06,160
しかし、厳密にはそうではありません。

35
00:02:06,480 --> 00:02:10,240
あらゆるクラスは
ProtoObject クラスから継承しています。

36
00:02:10,520 --> 00:02:15,600
ProtoObject スーパークラスは
とても特殊な場合に使われています。

37
00:02:15,960 --> 00:02:18,440
このコースの目的からいうと

38
00:02:18,600 --> 00:02:21,600
Pharo では 全てのクラスは
Object から継承しているということにします。

39
00:02:21,760 --> 00:02:23,880
このコースではそれで十分です。

40
00:02:24,120 --> 00:02:28,320
ProtoObject クラスはある特別な場合のためにあります。

41
00:02:28,800 --> 00:02:33,440
Pharo の基本を学ぶために必要になることは
まずないでしょう。

42
00:02:34,360 --> 00:02:37,360
継承は2つの異なる振舞い方をします。

43
00:02:37,520 --> 00:02:41,320
状態を継承するか振る舞いを継承するかで変わります。

44
00:02:41,840 --> 00:02:43,840
状態の継承は静的です。

45
00:02:44,040 --> 00:02:47,400
つまり、サブクラスを作る時には

46
00:02:47,760 --> 00:02:53,320
全てのインスタンス変数を把握しています。

47
00:02:54,280 --> 00:02:57,240
しかし、振る舞いの継承は動的です。

48
00:02:57,400 --> 00:03:00,840
プログラムの実行中に
サブクラスやスーパークラスで定義された

49
00:03:01,000 --> 00:03:02,920
メソッドを参照します。

50
00:03:03,480 --> 00:03:05,240
インスタンス変数については

51
00:03:05,560 --> 00:03:08,840
継承はクラス定義の時点で発生します。

52
00:03:09,240 --> 00:03:11,160
サブクラスを定義する時に

53
00:03:12,800 --> 00:03:16,760
サブクラスで定義されるインスタンス変数を示します。

54
00:03:16,920 --> 00:03:21,080
ここでは、color と borderColor です。

55
00:03:21,600 --> 00:03:26,080
そして、スーパークラスで定義された

56
00:03:26,240 --> 00:03:29,960
インスタンス変数にマージします。
Object までずっと

57
00:03:30,120 --> 00:03:31,960
継承のラインを辿っていきます。

58
00:03:34,080 --> 00:03:37,000
ここでは、ColoredRectangle の
インスタンス変数には

59
00:03:37,160 --> 00:03:40,200
color と borderColor が含まれます。

60
00:03:41,400 --> 00:03:44,120
振る舞いの場合には
継承メカニズムが変わります。

61
00:03:44,560 --> 00:03:47,120
これに続く一連の講義を見て

62
00:03:47,760 --> 00:03:50,280
それがどう発生するのか正確なところを
見てください。

63
00:03:50,560 --> 00:03:51,680
全体的に見ると

64
00:03:52,000 --> 00:03:54,720
振る舞いの継承は実行時に発生します。

65
00:03:55,520 --> 00:03:59,040
別の言い方をすると、
オブジェクトにメッセージを送ると

66
00:04:00,040 --> 00:04:03,480
適合したメソッドを探して
クラス階層を探索します。


67
00:04:04,480 --> 00:04:07,440
ここでは ColoredRectangle に

68
00:04:08,200 --> 00:04:11,280
例えば area メッセージを送ると

69
00:04:11,880 --> 00:04:14,880
クラスから探します。

70
00:04:15,040 --> 00:04:18,920
メソッドを見つけるために
ColoredRectangle クラスを探すと

71
00:04:19,360 --> 00:04:22,080
area メソッドは見つかりません。

72
00:04:22,240 --> 00:04:24,640
するとスーパークラスへ行きます。

73
00:04:25,160 --> 00:04:29,120
area メソッドが見つかります。
そのメソッドが選択されて実行されます。

74
00:04:30,040 --> 00:04:31,080
では、まとめます。

75
00:04:31,480 --> 00:04:35,280
継承では、サブクラスとスーパークラスがあり

76
00:04:35,600 --> 00:04:38,600
サブクラスはスーパークラスの振る舞いを
詳細化して

77
00:04:38,760 --> 00:04:41,280
拡張します。

78
00:04:41,560 --> 00:04:45,600
サブクラスはスーパークラスの状態を

79
00:04:46,000 --> 00:04:47,960
拡張したり追加したりします。

80
00:04:48,400 --> 00:04:52,640
Pharo のシンプルな継承モデルでは
1つのクラスに1つのスーパークラスを定めています。

81
00:04:52,920 --> 00:04:56,440
Traits（トレイツ）という概念が
多重な継承を可能にします。

82
00:04:56,600 --> 00:04:58,280
しかしそれはこのコースではカバーしていません。

83
00:04:58,920 --> 00:05:01,120
Object は階層の頂点にあります。

84
00:05:01,320 --> 00:05:05,320
ProtoObject もですが、このコースでは
そこまでの詳細には触れません。

85
00:05:05,800 --> 00:05:08,240
状態の継承は静的で

86
00:05:08,640 --> 00:05:11,960
サブクラスを定義した時に発生します。

87
00:05:12,200 --> 00:05:14,640
しかし振る舞いの継承は動的で

88
00:05:14,920 --> 00:05:16,280
実行時に発生します。

89
00:05:16,440 --> 00:05:19,000
オブジェクトにメッセージを送るたびに。
