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 オブジェクトにメッセージを送るたびに。