卒論が終わっても忙しかったのでなかなかSqueak自体の勉強ができなかったのですが,ようやく念願だったTraitsを使ってみました.
TraitsはSqueakで多重継承みたいなことができるようにするための仕組み?のようです.(RubyのMix-inとは違うらしい.)
本当にまだ勉強中なので実態はわからないのですが,非常に興味深いものです.
Squeak3.9から標準装備なので,使ってみました.
まずは,多重継承?(トレイトというべきなのでしょうか)するための定義を書きます.
Smalltalkおなじみの定義を書き換えます.
これは少しとまどいました.
Trait named: #Atok
uses: {}
category: 'Study-Traits'
あとはmethodを定義
Atok>>change
^ '日本語変換が得意です'
これで準備よし.非常に簡単ですね.(当たり前か)
あとはこんな感じでクラスを定義します.
Object subclass: #KanjiTalk
KanjiTalk>>henkan
^ '日本語変換は苦手かもしれません'
----
KanjiTalk subclass: #Kotoeri
uses: Atok
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Study-Traits'
KanjiTalk>>conversion
^ '日本語変換はまぁまぁです'
ここでのポイントはuses: Atokのあたりです.
これを記述すると,Kotoeriクラスにmethodペインにchangeというmethodも表示されます.
最後に実行です.
x := Kotoeri new.
x henkan. '日本語変換は苦手かもしれません'
x conversion. '日本語変換はまぁまぁです'
x change. '日本語変換が得意です'
一応,できたようです.
ちなみにプログラムの内容は実際に思っているわけではありません.僕もMacユーザですし,イージーブリッジが終了したのでことえりを使っています.これでまた一つSqueakの魅力が増えました.
あとはMix-inとの違いを知ることと,多重継承で有名な菱形継承とかを調べたらいいのかな.