![]() |
[1999 年 7 月号] |
[Happy Squeaking!!]
まずはCounterのモデル部分を作成します。
Counterモデルは内部の属性としてdataという名前の変数を持ち、基本的な操作として、increase(増加)、decrease(減少)の二つを持つとします。
ModelのサブクラスとしてCounterクラスを以下のように定義します。
Model subclass: #Counter instanceVariableNames: 'data ' classVariableNames: '' poolDictionaries: '' category: 'MVC tutorial'
dataを設定、取得するための操作としてdata、data:の二つを定義します。
(Counter >> accessingカテゴリ)
data ^data
data: anInteger data := anInteger. self changed: #data
data:のメソッドの実装の末尾に注目してください。self changed: #dataという何やら怪しげな記述があります。実はこれが「ビューに対する間接的なメッセージ送信」を行わせるためのSqueak(Smalltlak)での書き方になります。data変数に値の更新があったことを通知はするが、どのViewに対してかは知らないといった書き方になっています。詳しくは後に説明します。
次に、increase、decreaseの基本的な操作を定義しましょう。
(Counter >> actionsカテゴリ)
increase self data: self data + 1.
decrease self data: self data - 1.
更にdata変数の初期化用メソッド、initializeを定義します。
Counter >> initialize-releaseカテゴリ)
initialize data := 0
最後は、インスタンス生成用のメソッドnewを"class側"に定義します。これで生成時に、自動的にdata変数の初期化が行われるようになります。
(Counter class>> instance creationカテゴリ)
new ^super new initialize
以上でCounterモデルの実装は終わりです。data変数の更新時に、data変数の更新時に、self changed: #data.というおまじないを書く以外は、今までのクラスの実装と何ら違っていないことに気づかれるでしょう。
さて、今までのソースです。
FileIn: Counter.st (<=Click)
© 1999-2001 OGIS-RI Co., Ltd. |
|