ObjectSquare [1999 年 1 月号]

[Happy Squeaking!!]


5.Squeak 演習:クラスを作成する

5.1 銀行口座クラスの生成


それでは、Squeakの中で実際にクラスを作成してみましょう。
この演習では、まず銀行口座クラスを作成し、そこから銀行口座のインスタンスを生成してみることにします。

銀行口座とはそもそのどのようなものとして定義できるでしょうか。

属性として、

口座番号
現在の残高

を持ち、

操作として、

初期化
預け入れ
残高照会

を持つというのはどうでしょうか。実際にはもっと細かな定義ができると思いますが、練習ですのでこの程度に止めておきます。

それでは、銀行口座クラスをSqueak内に定義することにしましょう。
現バージョンのSqueakは日本語の入力ができませんので、クラスの名前は、便宜的にAccountというふうにします。
ワークスペースを開き、以下のように書き、"do it"してみてください。

Object subclass: #Account
    instanceVariableNames: 'id money'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'BankApplication'

実行すると、AccountクラスがSqueak内に作成されます。

勘の鋭い方はお気づきかもしれませんが、この実行文は、前回までの演習で行ったものと同じ、オブジェクトに対するメッセージ送信の形をとっています。

subclass:instanceVariableNames:classVariableNames:poolDictionaries:category: というキーワードメッセージを'Object'という名前のオブジェクトに送っています。が、最初ですのでここではあまり詮索せずにとりあえず実行してください。

2行目のinstanceVariableNames: 'id money'のところで、インスタンスが持つべき属性として、id(口座番号)とmoney(残高)の二つを定義しています。操作に関してはまだ一切の定義はおこなっていません。3行目と4行目はまだ取り上げていませんので無視します。 5行目のcategory: では、これから作成する銀行アプリケーションが共通して置かれるクラスカテゴリを示しています。

クラスカテゴリは、多くのクラスを意味的に纏め上げるためのパッケージの単位を表します。Squeakのイメージ内では、700近いクラスが既に存在しています。これらがフラットに存在していたとすると、どれがどのようなクラスなのかわかりにくいものになってしまいます。そのためSqueakでのクラスは必ず何らかのクラスカテゴリに属しています。 クラスカテゴリはJavaでのpackageにほぼ該当しますが、名前空間を規定するものではありません。また、一部のSmalltalkでは、クラスカテゴリがなく、別の方式をとっているものもあります。

できたクラスは、クラスブラウザによってみることができます。Browser newOnClass: Account. とワークスペースで"do it"してみてください。

作成されたクラスをブラウザで見る

以下のようなクラスブラウザが立ち上がります。

Accountクラスについてのクラスブラウザ

いまの時点ですでにAccountクラスから、Accountのインスタンスを作成することができます。

ワークスペースで以下を実行してみましょう。

| account |
account := Account new.
account inspect.

以下のようにインスペクタが開きます。インスペクタの左上の窓で、クラスで定義されている属性の名前、インタンスが実際に保持する属性の値を見ることができます。Idとmoneyフィールドの値はどのようになっているでしょうか。

Accountインスタンスのインスペクト

値はどちらも nil になっています。変数に対する代入を特に行わない場合、Smalltalkでは、変数の初期値は必ず nilオブジェクト (何も無い、空という意味)になります。

SmallTip: Smalltalkでは変数の初期値は nilオブジェクトとなる。

さて、これだけではAccountのインスタンスは何もすることができません。idや、moneyといった属性が定義されているのにも関わらず、そこに値を代入することも、値を返すことすらできないのです。これはAccountのクラスに操作がまだ定義されていないからです。

更につづく


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

Prev.

Index

Next