お知らせ‎ > ‎

friendメソッド, enemyメソッド

2009/03/25 18:34 に SmalltalkUsers Admin が投稿   [ 2009/03/31 6:47 に Kazuki Minamitani さんが更新しました ]
SmallTalk R4.1では、従来のprotected、privateに加え、よりきめ細かなアクセス制御をサポートするfriendメソッド、enemyメソッドの機能を提供しています。

1. friendメソッド
呼び出し元となれる友好オブジェクトの素性を指定します。

MyClass>>friendExample
    self friend: FriendClass.
    ...

上記の例では、friendメソッドの引数にFriendClassクラスを指定することで、friendExampleメソッドの利用者をFriendClassのインスタンスのみに制限しています。
friendの条件に合わないオブジェクトがfriendExampleメソッドを呼び出した際には、直ちにFriendNotFoundエラーが生起されます。

friendメソッドの引数には、呼び出し側のクラス(必須)、およびメソッド(オプション)を指定することができます。

-指定例
self friend: Friend. "Friendクラスのインスタンス"
self friend: #Friend. "同上"
self friend: 'Friend'. "同上"
self friend: 'Fr*'. "クラス名がFrで始まるクラスのインスタンス(*はワイルドカード)"
self friend: #(FriendA FriendB). "FriendAクラスのインスタンス、およびFriendBクラスのインスタンス"
self friend: Friend + #super. ”Friendクラスとそのスーパークラスのインスタンス
                                               (サブクラスを指定する場合は次のいずれかを+メソッドの引数とする。
                                               (#super | #superclasses | #parents | #base))”

self friend: Friend allSubclasses. "同上"
self friend: Friend + #sub. ”Friendクラスとそのサブクラスのインスタンス
                                            (サブクラスを指定する場合は次のいずれかを+メソッドの引数とする。
                                            (#sub | #subclasses | #children | #derived))”

self friend: Friend allSubclasses. "同上"
self friend: Friend + #all. "Friendクラスのインスタンス、およびそのスーパークラス・サブクラスのインスタンス"
self friend: Friend allSuperclasses , Friend allSubclasses. "同上"
self friend: Friend ->> #aaa. "Friendクラスのインスタンスのaaaメソッド"
self friend: Friend ->> #(#aaa #bbb). "Friendクラスのインスタンスのaaaメソッドおよびbbbメソッド"
self friend: Friend ->> '*ccc'. "Friendクラスのインスタンスのメソッド名がcccで終わるメソッド"
self friend: Friend + #sub ->> #(#ddd 'eee*'). "Friendクラスのインスタンス、およびそのサブクラスのインスタンスで、
                                                                          dddメソッド、もしくはメソッド名がeeeで始まるメソッド"



2. enemyメソッド

呼び出し元になれない敵性オブジェクトの素性を指定します。

MyClass>>enemyExample
    self enemy: EnemyClass.
    ...

上記の例では、enemyメソッドの引数にEnemyClassクラスを指定することで、enemyExampleメソッドの利用者をEnemyClass以外のインスタンスのみに制限しています。
enemyの条件に合致するオブジェクトがenemyExampleメソッドを呼び出した際には、直ちにEnemyFoundエラーが生起されます。

enemyメソッドの引数については、friendメソッドの引数を参考にしてください。



Comments