Руководство по actionscript. часть 2, стр. 158
Этот код определяет метод getNamespace ( ), который возвращает пространство имен fruit:
public function getNamespace ( ):Namespace { return fruit:
}
Пространство имен может возвращаться из метода для того, чтобы предоставить вызывающему коду привилегированный доступ к закрытым переменным и методам. Полный пример, демонстрирующий возврат пространства имен из метода в качестве части системы управления доступом на основе разрешений, можно найти далее, в подразд. «Пример: управление доступом на основании разрешений» разд. «Практические примеры использования пространств имен».
Пример использования значения пространства имен
Теперь, когда мы познакомились с тем, как работают значения пространств имен в теории, вернемся к нашему предыдущему примеру детской игры и посмотрим, как значения пространств имен могут быть использованы в реальном приложении. Напомним, что указанная игра представляет собой упражнение на чтение, в котором игрок пытается распознать выбранный случайным образом цвет или фрукт.
Первая версия кода игры (см. листинг 17.1) демонстрировала единственный, чрезвычайно упрощенный фрагмент игры. В этой измененной версии мы сделаем игру полностью функциональной, подробно рассмотрев возможность применения пространств имен для управления несколькими наборами данных.
Бегло просмотрите код в листинге 17.3, чтобы получить общее представление о программе. В данном примере пространства имен используются только в классах I terns и Kids Game, поэтому вы должны сосредоточить свое внимание на этих классах. Информацию о методиках, применяемых для создания пользовательского интерфейса в этом примере, можно найти в части П. Подробный анализ кода представлен сразу после листинга.
Листинг 17.3. Детская игра: пример использования значения пространства имен
// Файл fruit. as package {
public namespace fruit = «http://www. example. com/games/kidsgame/fruit»;
}
// Файл color. as package {
public namespace color = «http://www. example. com/games/kidsgame/color»;
}
// Файл Items. as package {
‘ // Простой класс для хранения данных, содержащий объекты Item для игры, public class Items { // Фрукты
fruit var orange:Item = new Item(«Orange», «fruit-orange. jpg», 1); fruit var apple:Item = new ItemC’Apple», «fruit-apple. jpg», 2);
// Цвета
color-var orange-.Item = new Item( «Orange», «color-orange. jpg», 3); color var purple:Item = new ItemCPurple», «color-purple. jpg», 4);
// Массивы, хранящие полные наборы элементов (то есть все фрукты // или все цвета)
fruit var itemSet:Array = [fruit::orange, fruit::apple]; color var itemSet:Array = [color::orange, color::purple];
// Массив пространств имен, представляющих
// типы наборов элементов в игре
private var itemTypes:Array = [color, fruit];
// Возвращает все элементы-фрукты, используемые в игре fruit function getltems ( ):Array { return fruit::itemSet. slice(0);
}
// Возвращает все элементы-цвета, используемые в игре color function getltems ( ):Array {
return color::itemSet. siice(O);
}
// Возвращает список доступных типов элементов, используемых в игре public function getltemTypes ( ):Аггау { return i temTypes. s1i се(0);
}
}
// Файл KidsGame. as package {
import flash. display.*;
import flash. events.*;
import flash. utils.*;
// Основной класс приложения для детской игры «Учусь читать», которое // демонстрирует основы использования пространств имен в языке ActionScript. // Игроку показывается картинка с цветом или фруктом и предлагается выбрать // название этого цвета или фрукта из списка вариантов, public class KidsGame extends Sprite { private var gameltems:Items; // Список всех элементов, используемых
// в игре
private var thisQuestionltem:Item; // Элемент для каждого вопроса private var questionScreen:QuestionScreen; // Пользовательский интерфейс
// Конструктор
public function KidsGame( ) { // Получаем элементы, используемые в игре (фрукты и цвета, // названия которых должен указать игрок) gameltems = new Items( ); // Отображаем первый вопрос newQuestion( );
}
// Создаем и отображаем новый случайный вопрос public function newQuestion ( ):void {
// Получаем полный список типов элементов (массив пространств имен)
var itemTypes:Array = gameltems. getItemTypes( );
// Случайным образом выбираем тип элемента (одно из пространств имен,
// на которые ссылается переменная itemTypes)
var randomltemType:Namespace = itemTypes[Math. floor(
Math. random( )*itemTypes.1ength)];
// Получаем элементы набора, выбранного случайным образом var items:Array = gameltems. randomltemType: -.getItems( );
// Случайным образом выбираем элемент для данного вопроса // из набора элементов
thisQuestionltem = iterns[Math. floor(Math. random( )*iterns. length)];