みなさん、こんにちは。
第4週の1講目へようこそ。
今週は、Pharo の継承の基本と
メソッド探索とウェブ開発をカバーします。
第1講目では
継承の基本を紹介します。
Java のような
クラスがある他の言語での継承と
とても似ています。
継承の基本に通じている人もぜひ見てください。
紹介するのは語彙や
図的表現です。 このコースの残りの部分で
もう一度お見せします。
この講義では継承とは何か
そしてどうやって継承を使うのか をカバーします。
右側に2つのクラスが示されています。
まず最初にRectangle（矩形）クラスがあり 名前と
インスタンス変数と
メソッドが示されています。
その下に同じものがあります。 クラス名の ColoredRectangle と
そのインスタンス変数とメソッドです。
この白抜きの三角形がついた垂直の矢印は
継承関係を示しています。
ColoredRectangle サブクラスは Rectangle クラスから継承しています。
一般に ColoredRectangle のようなサブクラスは
スーパークラスの振る舞いや状態を詳細化します。
ColoredRectangle のようなサブクラスは 状態や振る舞いを
スーパークラスに追加します。
ここでは、ColoredRectangle クラスは 状態を追加しています。
具体的には、color と borderColor の 2つのインスタンス変数です。
color メソッドも追加しています。
あらゆるクラスは
なんらかの形で Object クラスから継承しています。
しかし、厳密にはそうではありません。
あらゆるクラスは ProtoObject クラスから継承しています。
ProtoObject スーパークラスは とても特殊な場合に使われています。
このコースの目的からいうと
Pharo では 全てのクラスは Object から継承しているということにします。
このコースではそれで十分です。
ProtoObject クラスはある特別な場合のためにあります。
Pharo の基本を学ぶために必要になることは まずないでしょう。
継承は2つの異なる振舞い方をします。
状態を継承するか振る舞いを継承するかで変わります。
状態の継承は静的です。
つまり、サブクラスを作る時には
全てのインスタンス変数を把握しています。
しかし、振る舞いの継承は動的です。
プログラムの実行中に サブクラスやスーパークラスで定義された
メソッドを参照します。
インスタンス変数については
継承はクラス定義の時点で発生します。
サブクラスを定義する時に
サブクラスで定義されるインスタンス変数を示します。
ここでは、color と borderColor です。
そして、スーパークラスで定義された
インスタンス変数にマージします。 Object までずっと
継承のラインを辿っていきます。
ここでは、ColoredRectangle の インスタンス変数には
color と borderColor が含まれます。
振る舞いの場合には 継承メカニズムが変わります。
これに続く一連の講義を見て
それがどう発生するのか正確なところを 見てください。
全体的に見ると
振る舞いの継承は実行時に発生します。
別の言い方をすると、 オブジェクトにメッセージを送ると
適合したメソッドを探して クラス階層を探索します。
ここでは ColoredRectangle に
例えば area メッセージを送ると
クラスから探します。
メソッドを見つけるために ColoredRectangle クラスを探すと
area メソッドは見つかりません。
するとスーパークラスへ行きます。
area メソッドが見つかります。 そのメソッドが選択されて実行されます。
では、まとめます。
継承では、サブクラスとスーパークラスがあり
サブクラスはスーパークラスの振る舞いを 詳細化して
拡張します。
サブクラスはスーパークラスの状態を
拡張したり追加したりします。
Pharo のシンプルな継承モデルでは 1つのクラスに1つのスーパークラスを定めています。
Traits（トレイツ）という概念が 多重な継承を可能にします。
しかしそれはこのコースではカバーしていません。
Object は階層の頂点にあります。
ProtoObject もですが、このコースでは そこまでの詳細には触れません。
状態の継承は静的で
サブクラスを定義した時に発生します。
しかし振る舞いの継承は動的で
実行時に発生します。
オブジェクトにメッセージを送るたびに。