ObjectSquare [1999 年 4 月号]

[Happy Squeaking!!]


5.Squeak演習: インターセッション

5.5 インターセッション応用


SmalltalkにInterface概念を追加

Smalltalkの主要なメタモデル要素は、ClassDescription下に定義された、ClassとMetaclassであるということがわかりました。

ここで、新たにInterfaceというものを言語内で使いたくなったとします。(Javaで言うあのInterfaceです)。通常では、言語自体の再設計ということになります。到底一般のユーザが対処できるレベルではありません。
しかしSmalltalkにはメタモデルがあります。メタモデル要素にInterfaceを付け加えることで、自らの存在する世界を変え、進化していくことができるのです。


Interfaceの分析

ではまず、Interfaceがどのようなものかを考えてみましょう。モデリングには分析が不可欠です。メタモデリングにおいてもこれは同様です。

Interfaceは、操作名の集合を表したものです。属性、及び操作の実装はInterfaceには含まれない点が特徴です。

Interfaceはクラスにより実装(implements)されます。例えば、IAccountというインターフェースが#(deposit: getBalance withdraw:)という操作名を集合として持つ場合には、IAccountをimplementsするクラスは、それらの全ての操作が理解できねばなりません。つまり自身かスーパークラスでメソッドとして実装していることになります。

クラスは複数のInterfaceをimplementsすることができます。 例えば、IPrintable が#(printString) 、IAccountが#(deposit: getBalance withdraw)を持つ場合には、それらの両方をクラスはimplementsできます。その場合クラスは、#(printString deposit: getBalance withdraw)の全てのメッセージに答えられねばなりません。

Interfaceは、他のInterfaceを拡張(extends)することができます。IReadableが#(read)、IWritableが#(write)を持つ場合に、両者をextendsするインターフェースとして#(read write)を持つIReadWriteStorableを定義できます。

操作の集合がクラスとは別のInterfaceとして定義されることで、特定のインスタンスが、特定のメッセージに答える保証をすることが可能になります。インスタンスinstのクラスが、IPrintableをimplementsしていた場合、クラスが何であったとしても、メッセージの送り側としてはprintStringを安心して送ることができます。

ざっと以上のような感じでInterfaceがどのようなものかを把握したとします。
これを元にして実際のSmalltalkメタモデルの追加を行ないます。

更につづく


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

Prev.

Index

Next