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メソッドの引数を参考にしてください。 |
お知らせ >