![]() |
[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. |
|