「ワールド」(Ctrl + 右クリック)→「デスクトップメニュー」→「開く」→「ブラウザ」を選択
薄い緑色のウインドウがブラウザである。このウインドウは、5つの枠(ペインと呼ばれる)で構成されている。上段の左端のペインから順に、「カテゴリ」、「クラス」、「プロトコル」、「メソッド」をそれぞれ表示する。下段のペインで、選択した項目を編集する。
※ 「了解」のショートカットーキーは、「ALT + s」
※ 初めて定義するとき、イニシャルが問われる。簡単に自分のイニシャルを入れておこう。
ブラウザで、人(Person)のクラスを定義しよう。このクラスは、次の仕様とする:
ヒント1:文字列の結合には、2項メッセージのコンマ「,」を使う。
ヒント2:返り値(C言語での return)は、「↑(ハットキー「^」を押す)」
ワークスペースで、以下の動作を確認しよう。
a := Person new (ALT + d) a inspect (ALT + d) インスペクトのウインドウが表示される。「name」を左クリックしておこう。 a setName: 'taro' (ALT + d) a introduce (ALT + p) 'My name is taro .'と表示される。 |
新しいクラスが、既存のクラスのインスタンス変数とメソッドの定義を引き継ぐことを、継承という。
用語:
継承するクラスの定義方法:
継承の御利益(その1)
下記のクラス定義を見てみよう。
Object subclass: #Person instanceVariableNames: 'name' - - - 省略 - - - |
「Object」は既存のクラスであり、「Person」は新しいクラスである。
「Person」のクラスに、メソッド「inspectnew」を定義していない。しかし、先の練習1ではそれを使うことができた。これは「Object」クラスから「inspectnew」メソッドを継承しているからである。
継承の御利益(その2)
自分で作ったクラス(Person)を継承して、新しいクラス(Student)を定義してみよう。
Person subclass: #Student instanceVariableNames: '' - - - 省略 - - - |
ワークスペースで、「a := Student new」とし、「a inspect」としてみよう。すると、インスタンス変数 name を定義していないのに、name が存在する。
上記の具体例を試してみよう。
(1) 人(Person)クラスを継承して、学生(Student)のクラスを定義しよう。
(2) ワークスペースで、変数 a が、学生クラスのインスタンスを指すように実行しよう。
(3) インスペクトで、変数 a のインスタンス変数を確認しよう。
上位クラスで定義されているメソッドと同名のメソッドを、下位クラスで定義することができる。このことを「メソッドのオーバーライド」という。同名のメソッドであるので、上位と下位の両方のクラスのメソッドは、類似した機能とすることが多い。
上位クラスのメソッドと同じ処理を、下位クラスのメソッドで定義することは、単に無駄というだけではなく、ソースコードの分散化になり保守の面で不具合が生じる。
そこで、下位クラスのメソッドから、上位クラスのメソッドを呼び出す仕掛けが存在する。それは、「super メッセージ」である。
練習2の続きとする。学生(Student)クラスの定義において、次の追加をしよう。
さらに、自己紹介のメソッド「introduce」を実行すると、'My name is 〔name〕 . My ID is 〔id〕 .' という文字列を返すことにしよう。このとき、「super」を使用せよ。
商品のクラス(Goods)を定義しよう。このクラスは以下の仕様を満たすものとする。インスタンス変数は必要に応じて使用して良い。
おまけ付き商品のクラス(GoodsPlus)を定義しよう。このクラスは以下の仕様を満たすものとする。インスタンス変数は必要に応じて使用して良い。
ワークスペースで、以下を実行しよう。
a := Goods new. a setName: 'toy'. a setBuyingPrice: 10. おまけ商品の仕入れ値 a setSellingPrice: 30 (以上をまとめて、ALT+d) a name (ALT+p) a profit (ALT+p) b := GoodsPlus new. b setName: 'choco'. b setBuyingPrice: 20. おまけ抜き商品の仕入れ値 b setSellingPrice: 60. おまけ付き商品の仕入れ値 b setExtra: a (以上をまとめて、ALT+d) b name (ALT+p) b extra name (ALT+p) b profit (ALT+p) 60 - 20 - 10 = 30 を返り値としたい |
来週、演習の開始時に集めます。
画面の取り込みは、Linux の画面の左下の「メニュー」から「プログラム」→「グラフィック」→「スクリーンショット」を選択する。
小レポートは、採点後に、いったん返却します。返却されたレポートは各自でファイルに綴じておいて下さい。最終レポートと同時にそのファイルを提出してもらいます。その後、ファイルは返却しませんので、必要ならば、最後の提出の前に、自分でコピーをとっておいて下さい。