ObjectSquare [1999 年 1 月号]

[Happy Squeaking!!]


演習:クラスを作成する

5.1 銀行口座クラスの生成 つづき


それでは次に操作を定義していくことにしましょう。
まずは手始めに、nilの値が入っているid, moneyの変数を初期化できるようにします。

操作の定義は先ほどのクラスブラウザ上で行います。

右上の'no messages’と表示されている部分から、右クリックで"add item…"を選択してください。

クラスブラウザ上からの操作の追加

すると、カテゴリ名を聞いてきます。このカテゴリは、先ほど説明したクラスのカテゴリではなく、これから定義しようとしている操作のカテゴリ(メッセージカテゴリ)です。
メッセージカテゴリはクラスカテゴリと同様に、メソッドを意味的に纏め上げる単位です。別名プロトコルと呼ばれています。

SmallTip: 操作を纏めるための意味的なもとまりとしてメッセージカテゴリがある。

ここでは初期化用の操作を定義するので、カテゴリ名を"initializing"としておきます。
カテゴリを入力するとブラウザの一番下の部分がハイライトされます。

操作定義のテンプレートの表示

ここに表示されているのは、操作を記述するためのテンプレートです。
このテキストを編集することによって操作をAccountクラスに定義することができます。

テンプレートは以下のようになっています。
message selector and argument names
    "comment stating purpose of message"

    | temporary variable names |
    statements

1行目で操作の名前を記述します。
初期化操作なので名前は initializeです。

2行目はコメントを書く欄になっています。単なる変数の初期化処理を書くだけですのでコメントは不要でしょう。

3行目はこの操作内でテンポラリ的に使う変数を定義する欄です。
今回は使いませんので消してしまってください。

4行目意向で実際の処理を書きます。
属性として、インスタンスはid、moneyを持つことになりますので、これを適当な値に初期化するようにします。両方とも0の代入でいいでしょう。

以下のようなコードになります。

initialize
    id := 0.
    money := 0.

書き終わったところで右クリックをして、"accept" (受け入れ)を選択してください。

操作の"accept"の実行

これによりAccountクラスにinitializeという操作が定義されたことになります。
以後は右上のリストにinitializeが表示されます。

Accountクラスに定義されたinitialize操作

同様の手順で残高照会と預け入れができるようにします。左上のリストをからポップアップメニューを出し、"add item.."でメッセージカテゴリを追加してください。銀行口座の外部サービスとなる操作が収められるカテゴリということで、"services”とでもつけておきましょう。

まず残高照会としてgetBalance操作を定義します。
インスタンスの現在の残高は、moneyという変数に属性として代入されていると仮定していますので、単純にmoney変数の値を返すように記述します。

結果として以下のようなコードになります。
getBalance
    ^money

書き終わったら"accept"をお忘れなく。

つづいて、預け入れとしてdeposit:の操作を定義します。

今、クラスブラウザの下の部分に表示されている getBalanceのコード部分を以下のように書き換えてください。(メッセージカテゴリが同一の"services"のため)
deposit: newMoney
    money := money + newMoney.

同様に"accept"です。

これで3つの操作がすべてAccountクラスに定義されたことになります。

Accountクラスの作成がこれで一応完了しました。

全ての操作が定義されたAccountクラス

ここで acceptした処理内容は、まだ実行されているわけではありません。ここでは、あくまで、「このクラスからインスタンスが作られたときに操作のふるまいとしてどのようなことをするか」という処理の手順を定めたのみです。
いわばシナリオを書いたのみであり、実際の配役がされ、動き出すのはインスタンスができてからです。


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

Prev.

Index

Next