ObjectSquare [1999 年 2 月号]

[Happy Squeaking!!]


4.Squeak 演習:抽象クラスのある継承の作成

4.2 抽象クラスのブラウズ


まずAnimalについて"spawn hierarchy"で階層ブラウザを開きます。

Animalについての階層ブラウザを開く

Animalクラスでは、name, knowledge, habitatといった属性、talkといった操作が定義されています。

initializeメソッドでは、

initialize
	name := ''.
	knowledge := 0.
	habitat := ''.

といった形で、それぞれの属性を初期化しています。

また、talkメソッドでは、

talk
	self display: '...cannot talk...'

のような定義がされ、selfにメッセージを送ることで自分のクラスで定義した、display: メソッドを起動しています。

displayメソッドでは単純に、Transcriptに、自分のクラスの名前、自分の名前、引数として渡された文字列を表示します。

display: aString
	Transcript cr; 
			show: (self class name, ':', self  name, '"',aString, '"').
self class nameとself nameの違いに注意してください。前者は、インスタンスから、その属するクラスをclassメッセージで取り出し、そのクラスオブジェクトに対して、nameメッセージを起動しています。後者は、インスタンスに対して、nameメッセージを起動しています。クラスに対するメッセージ送信はnewのほかにも幾つかあり、nameはその例です。

では次にAnimalのサブクラスであるBirdを見てみます。

Birdでは、新たに canFlyという属性が付け加わりました。
操作としては、 flyが追加されています。

fly
	self canFly ifTrue:[
		self display: '*** FLYING ***'
	]

ifTrue:[] という書き方がはじめて出てきましたが、とりあえずif文はこのように書くと覚えておいてください。self canFlyの返り値となるオブジェクトがtrueであれば、[]以下が実行されるということです。

例を示します。

( 'ABCD' size = 4 ) ifTrue:[ Transcript show: 'TRUE' ]  .
true ifTrue:[ Transcript show: 'TRUE'].

また、if文には幾つかバリエーションがあります。

false ifFalse:[ Transcript show: 'FALSE'].
( 'ABC' size = 3 ) 
	ifTrue:[Transcript show: TRUE'] ifFalse:[Transcript show: 'FALSE'].
SmallTip: if文はifTrue:[]で記述できる
SmallTip: 真偽を表すオブジェクトはそれぞれ、true, false

initializeメソッドはオーバーロードされています。

initialize
	super initialize.
	habitat := 'sky'.
	canFly := true

superによりスーパークラスAnimalでの初期化を行ったあとで、変数 habitatの初期値が異なるので値を設定しなおしています。また、追加されたcanFlyをtrueオブジェクトに初期化しています。


© 1999-2001 OGIS-RI Co., Ltd.

Prev.

Index

Next