Руководство по actionscript. часть 3, стр. 016
Restricted var secretData:String = «No peeking»;
// Это метод с ограниченным доступом.
// К нему могут обращаться только авторизованные
// классы.
restricted function secretMethod ( ).void { trace(«Restricted method secretMethod( ) called»);
}
}
}
Защищаемый класс хранит массив авторизованных классов. Кроме того, в нем объявлено пространство имен с использованием модификатора управления доступом private, которое применяется для уточнения методов и переменных с ограниченным доступом. Более того, идентификатор URI для этого пространства имен генерируется автоматически, поэтому его невозможно узнать и использовать за пределами данного класса. Наконец, защищаемый класс определяет сами переменные и методы с ограниченным доступом.
Для обращения к методу или переменной с ограниченным доступом (например, secretData или secretMethod ( ) ) потенциальный класс должен получить общеизвестные «ключи от парадной двери». Другими словами, он должен получить ссылку на пространство имен, которое уточняет методы и переменные с ограниченным доступом. Однако защищаемый класс предоставит эту ссылку только в том случае, если потенциальный класс — будем называть его «вызывающим классом» — является одним из элементов массива authorizedClasses.
В нашем примере вызывающий класс будет просить у класса ShelteredClass ссылку на пространство имен restricted, используя метод getRestricted Namespace ( ) класса ShelteredClass. Метод getRestrictedAccess ( ) принимает экземпляр вызывающего класса в качестве аргумента. Если экземпляр вызывающего класса оказывается авторизованным, метод getRestrictedNames расе ( ) вернет ссылку на пространство имен restricted. В противном случае метод вернет значение null, которое сообщает о том, что вызывающий класс не имеет права обращаться к методам и переменным с ограниченным доступом. Рассмотрим код метода getRestrictedNamespace ( ):
public function getRestrictedNamespace
(cal lerObject:Object.):Namespace { // Проверяем, есть ли объект cal1erObject в массиве authorizedClasses. for each (var authorizedClass:Class in authorizedClasses) { // Если вызывающий объект является экземпляром авторизованного класса… if (callerObject is authorizedClass) { // …возвращаем обратно ссылку на пространство имен restricted // («ключи от парадной двери») return restricted;
// Вызывающий объект не является экземпляром
// авторизованного класса, поэтому
// запрещаем дальнейшее обращение к переменной
// и методу с ограниченным доступом.