![]() |
[1999 年 4 月号] |
[Happy Squeaking!!]
3.Squeak演習:イントロスペクション
3.1 オブジェクトの構造を調べる つづき
スーパークラス、サブクラスを取り出す
ではOrderedCollectionクラスに対して、更に幾つかのイントロスペクション用のメッセージを送ってみましょう。
ワークスペースで"print it"していってください。
"クラスに対してスーパークラスを聞く" OrderedCollection superclass => SequenceableCollection が得られます。
"継承ルートまでの全てのスーパークラスを聞く" OrderedCollection allSuperclasses => OrderedCollection (SequenceableCollection Collection Object )
Object が最上位のクラスで、その下にCollection、さらに下にSequenceableColectionと続き、OrderedCollectionが定義されていることがわかります。(返り値が、OrderedCollectionのインスタンスとして帰ってきています。 allSuperclassesを送ったOrderedCollectionクラスとは全くの別物ですから混乱しないようにしてください)。
次にサブクラスを聞いてみます。
"クラスに対してサブクラスを聞く" OrderedCollection subclasses => Set (GraphicSymbol SortedCollection )
OrderedCollectionの直下にGraphicSymbolとSortedCollectionの二つのサブクラスが定義されていることがわかります。
ここででてきたSetは、要素の重複を許さない集合を指します。例を示します。
| se | se := Set new. se add: 'Squeak'; add: 'is'; add: 'Cool'; add: 'Cool'. Transcript show: se printString.
トランスクリプトには、Set ('Squeak' 'Cool' 'is' )と表示されます。
文字列'Cool'は、4番目のadd:の際には、追加要素として自動的に無視されます。OrderedCollectionと違い、格納の順番は記録されません。Setは一般的には、重複を許さないキーの管理などに有効に使われています。
SmallTip: 重複を許さないデータの格納にはSetを使うことができる |
今度は、OrderedCollectionのサブクラスを再帰的に聞いてみます。サブクラスにサブクラスがあった場合は、それらも含めた集合を得るということです。
"クラスに対して全てのサブクラスを聞く" OrderedCollection allSubclasses => Set (GraphicSymbol SortedCollection )
OrderedCollectionの場合はたまたまsubclassesの結果と同じになってしまいました。GraphicSymbolも、SortedCollectionもサブクラスを持たないようです。
これでは面白味に欠けるので、OrderedCollectionの二つ上のスーパークラスである、Collectionで試してみましょう。
Collection subclasses => Set (CharacterSet SequenceableCollection Bag Set )
Collection allSubclasses => Set (HtmlAttributes SoundBuffer RunArray Array Symbol Text Bitmap GraphicSymbol MethodDictionary LiteralDictionary Array2D ArrayedCollection LinkedList SortedCollection SystemDictionary SequenceableCollection DirectoryEntry String OrderedCollection CharacterSet Bag Dictionary Interval TextLineInterval IdentitySet ByteArray Semaphore TranslatedMethod CompiledMethod Set IdentityDictionary )
ここではSmalltalkのコレクションクラスについての解説はしませんが、非常に豊富であることが確認できます。
更につづく
© 1999-2001 OGIS-RI Co., Ltd. |
|