はじめてのMorphicチュートリアル(第4回)「クラス定義」

ここまでモーフの状態を取得したり、設定を行う方法について学んできた。今回は基本的なモーフを拡張して、新たな機能を持ったモーフの作り方について学ぶ。

モーフを拡張して新たなモーフを作るには、Morphクラスのサブクラスを作る必要がある。

そのために、デスクトップをクリックしてワールドメニューを出してSystem Browserを選ぶ。
System Browser
System Browser(システムブラウザ)は、古くからあるSmalltalk上の開発ツールの一つで、コードを作成する場合はたいていこれを使う。5つの大きなペインを持ち、その他にも入力欄やボタンなどが配置されている。これらは重要な機能を持っているので少しずつ紹介していく。

下側の一番大きなペインをコードペインと呼ぶ。ここには、こんな内容が表示されているはずだ。

Object subclass: #NameOfSubclass
	instanceVariableNames: ''
	classVariableNames: ''
	category: ''

これは新たなクラスを生成する際のテンプレートである。新しいクラスを作りたいなら、このテンプレートを修正して使うことができる。新しいモーフを作るために、上の内容を以下のように書き換える。

Morph subclass: #MyMorph
	instanceVariableNames: ''
	classVariableNames: ''
	category: 'Hajimeteno Morphic Tutorial'

書き換えたのは3カ所で、1カ所目は Object を Morph に変えた。Morphを新しく作成するクラスの親(基底)クラスとして、新たなクラスがMorphの性質を受け継ぐようにする。

2カ所目は #NameOfSubclass を #MyMorph に変えた。これは新たなクラスの名前(MyMorph)を表している。名前の前に#(シャープ)記号が付けられているのは、この文字列がSymbol(シンボル)であることを表している。Symbolとは環境内で唯一性を持つ文字列のことである。クラス名は環境内で一意に決まるので命名にはSymbolを用いる。

最後は、category:の後の ” を ‘Hajimeteno Morphic Tutorial’ に変えた。Smalltalkではカテゴリを用いてコードを管理する。カテゴリにはクラスカテゴリとメソッドカテゴリ(プロトコル)があり、ここで指定するのはクラスカテゴリである。後から参照しやすいようなカテゴリ名を付けておく。

ところでSmalltalkでは両端をシングルクオート(’)で囲むことで文字列を表す。だから、 ” は空の文字列ということになる。

クラスを実際に定義するには、入力したコードペインで右クリックして Accept を選ぶかCommand-S(Alt-S)を押す。すると、System Browserの左上のペインが変化して Hajimeteno Morph Tutorial という項目が現れる。

このペインはクラスカテゴリペインと呼ばれ、さまざまに分類されたクラスカテゴリの一覧が表示される。

ワールドメニューでPlaygroundを開き、左側のペインで以下を入力する。

MyMorph new openInWorld.

すると、今までと同じモーフが画面左上に表示されるのがわかる。

さて、今まではMorphにnewというメッセージを送っていた。これは、Morphクラスに属する新しいモーフを生成することを意味している。

今回、MyMorphにnewメッセージを送ることで、MyMorphクラスに属する新しいモーフを生成することになる。

このようにSmalltalkでは、定義したクラスにnewというメッセージを送ることで新たなモーフを生成する。生成されたモーフを定義したクラスのインスタンスとも呼ぶので覚えておこう。

次回、このクラスを拡張する。

(第4回おわり)