friendメソッド, enemyメソッド
投稿日: Mar 26, 2009 1:34:25 AM
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メソッドの引数を参考にしてください。