![](/user_photo/2706_HbeT2.jpg)
- •Юридическая информация
- •Содержание
- •Глава 1. Введение в ActionScript 3.0
- •О языке ActionScript
- •Преимущества ActionScript 3.0
- •Новые возможности ActionScript 3.0
- •Возможности языка ядра
- •Функции прикладных интерфейсов программирования (API)
- •Глава 2. Начало работы с языком ActionScript
- •Основы программирования
- •Какие функции выполняют компьютерные программы
- •Переменные и постоянные
- •Типы данных
- •Работа с объектами
- •Свойства
- •Методы
- •События
- •Основные сведения об обработке событий
- •Процесс обработки событий
- •Примеры обработки событий
- •Создание экземпляров объекта
- •Общие элементы программы
- •Операторы
- •Комментарии
- •Управление исполнением программы
- •Пример. Фрагмент анимации портфолио (Flash Professional)
- •Подготовка и добавление интерактивных элементов
- •Создание и добавление кнопок
- •Написание кода
- •Проверка приложения
- •Создание приложений с ActionScript
- •Параметры для организации кода
- •Правильный выбор инструмента
- •Процесс разработки в ActionScript
- •Создание пользовательских классов
- •Стратегия разработки класса
- •Написание кода для класса
- •Пример: создание базового приложения
- •Проектирование приложения ActionScript
- •Создание проекта HelloWorld и класса Greeter
- •Добавление кода к классу Greeter
- •Создание приложения с использованием кода ActionScript
- •Публикация и проверка приложения ActionScript
- •Модернизация приложения HelloWorld
- •Глава 3. Язык ActionScript и его синтаксис
- •Обзор языка
- •Объекты и классы
- •Пакеты и пространства имен
- •Пакеты
- •Создание пакетов
- •Импорт пакетов
- •Пространства имен
- •Переменные
- •Знакомство с областью действия переменной
- •Значения по умолчанию
- •Типы данных
- •Проверка типа
- •Проверка типа во время компиляции
- •Проверка типа при выполнении
- •Оператор is
- •Оператор as
- •Динамические классы
- •Описания типов данных
- •Логический тип данных (Boolean)
- •Тип данных int
- •Тип данных Null
- •Тип данных Number
- •Тип данных String
- •Тип данных uint
- •Тип данных void
- •Тип данных Object
- •Преобразования типа
- •Синтаксис
- •Чувствительность к регистру
- •Синтаксис с точкой
- •Синтаксис с косой чертой
- •Литералы
- •Точки с запятой
- •Скобки
- •Комментарии
- •Ключевые слова и зарезервированные слова
- •Константы
- •Операторы
- •Старшинство и ассоциативность операторов
- •Основные операторы
- •Постфиксные операторы
- •Унарные операторы
- •Мультипликативные операторы
- •Аддитивные операторы
- •Операторы побитового сдвига
- •Реляционные операторы
- •Операторы равенства
- •Побитовые логические операторы
- •Логические операторы
- •Оператор условия
- •Операторы присваивания
- •Условия
- •инструкция if..else
- •инструкция if..else if
- •switch
- •Повтор
- •for each..in
- •while
- •do..while
- •Функции
- •Концепции основной функции
- •Параметры функций
- •Функции в качестве объектов
- •Область действия функции
- •Глава 4. Объектно-ориентированное программирование на языке ActionScript
- •Введение в объектно-ориентированное программирование
- •Классы
- •Определения классов
- •Атрибуты свойств классов
- •Атрибуты пространства имен для управления доступом
- •Атрибут static
- •Определенные пользователем атрибуты пространства имен
- •Переменные
- •Методы
- •Методы-конструкторы
- •Статические методы
- •Методы экземпляра
- •Методы доступа get и set
- •Связанные методы
- •Перечисления с классами
- •Классы встроенных ресурсов
- •Использование классов встроенных ресурсов в инструменте Flash Professional
- •Использование классов встроенных ресурсов с помощью компилятора Flex
- •Интерфейсы
- •Определение интерфейса
- •Реализация интерфейса в классе
- •Наследование
- •Свойства экземпляра и наследование
- •Переопределение методов
- •Статические свойства не наследуются
- •Статические свойства и цепочка области действия
- •Дополнительные темы
- •История объектно-ориентированного программирования на языке ActionScript
- •Объект класса в ActionScript 3.0
- •Объект признаков
- •Объект прототипа
- •Пространство имен AS3
- •Пример: GeometricShapes
- •Определение классов GeometricShapes
- •Определение общего поведения с помощью интерфейсов
- •Определение классов фигур
- •Полиморфизм и фабричный метод
- •Расширение примера приложения
![](/html/2706/605/html_0NER5I2Q_9.BOEh/htmlconvd-7N9Qoy112x1.jpg)
ИЗУЧЕНИЕ ACTIONSCRIPT 3.0 |
109 |
Объектно-ориентированное программирование на языке ActionScript
Интерфейсы
Интерфейс — это набор объявлений методов, который позволяет несвязанным объектам взаимодействовать друг с другом. Например, ActionScript 3.0 определяет интерфейс IEventDispatcher, который содержит объявления методов, которые класс может использовать для обработки событий. Интерфейс IEventDispatcher устанавливает стандартную процедуру передачи событий между объектами. Следующий код демонстрирует определение интерфейса IEventDispatcher.
public interface IEventDispatcher
{
function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean = false):void;
function removeEventListener(type:String, listener:Function, useCapture:Boolean=false):void;
function dispatchEvent(event:Event):Boolean; function hasEventListener(type:String):Boolean; function willTrigger(type:String):Boolean;
}
Интерфейсы основаны на различии между интерфейсом метода и его реализацией. Интерфейс метода включает всю информацию, необходимую для вызова этого метода, включая имя метода, все его параметры и тип возвращаемого значения. Реализация метода включает не только сведения об интерфейсе, но и исполняемые инструкции, определяющие поведение метода. Определение интерфейса содержит только интерфейсы метода, и класс, внедряющий интерфейс, несет ответственность за определение реализаций метода.
В ActionScript 3.0 класс EventDispatcher реализует интерфейс IEventDispatcher, определяя все методы интерфейса IEventDispatcher и добавляя соответствующие тела методов. Следующий код представляет собой фрагмент определения класса EventDispatcher.
public class EventDispatcher implements IEventDispatcher
{
function dispatchEvent(event:Event):Boolean
{
/* implementation statements */
}
...
}
Интерфейс IEventDispatcher служит в качестве протокола, который используют экземпляры EventDispatcher для обработки событий и их отправки другим объектам, также внедрившим этот интерфейс.
Интерфейс также можно описать как элемент, определяющий тип данных так же, как и класс. Соответствующим образом, интерфейс можно использовать в качестве аннотации типа, как и класс. В качестве типа данных, интерфейс можно также использовать вместе с операторами, требующими тип данных, такими как is и as. Однако, в отличие от класса, интерфейс не поддерживает создание экземпляров. Из-за этого отличия многие программисты называют интерфейсы абстрактными типами данных, а классы — конкретными типами данных.
Последнее обновление 12.5.2011.
![](/html/2706/605/html_0NER5I2Q_9.BOEh/htmlconvd-7N9Qoy113x1.jpg)
ИЗУЧЕНИЕ ACTIONSCRIPT 3.0 |
110 |
Объектно-ориентированное программирование на языке ActionScript
Определение интерфейса
Структура определения интерфейса похожа на структуру определения класса за тем исключением, что интерфейс может содержать только методы без тел. Интерфейсы не могут содержать переменных или констант, но могут включать функции get и set. Для определения интерфейса используется ключевое слово interface. Например, следующий интерфейс, IExternalizable, входит в пакет flash.utils в ActionScript 3.0. Интерфейс IExternalizable определяет протокол для сериализации объекта, то есть для преобразования объекта в формат, пригодный для хранения на устройстве или для транспортировки по сети.
public interface IExternalizable
{
function writeExternal(output:IDataOutput):void; function readExternal(input:IDataInput):void;
}
Интерфейс IExternalizable объявляется с использованием модификатора управления доступом public. Определения интерфейса можно изменить только с использованием спецификаторов управления доступом public и internal. Объявления методов внутри определения интерфейса не могут иметь модификаторов управления доступом.
В ActionScript 3.0 используется правило именования интерфейсов с заглавной буквы I, однако в качестве имени интерфейса можно использовать любой допустимый идентификатор. Определения интерфейсов часто помещаются в верхнем уровне пакета. Определения интерфейсов нельзя помещать внутри определения класса или определения другого интерфейса.
Интерфейс может расширять один или несколько других интерфейсов. Например, следующий интерфейс IExample расширяет интерфейс IExternalizable.
public interface IExample extends IExternalizable
{
function extra():void;
}
Любой класс, внедряющий интерфейс IExample, должен включать реализации не только для метода extra(), но также методы writeExternal() и readExternal(), унаследованные от интерфейса IExternalizable.
Реализация интерфейса в классе
Класс является единственным элементом языка ActionScript 3.0, который может реализовать интерфейс. Используйте ключевое слово implements в объявлении класса, чтобы реализовать один или несколько интерфейсов. В следующем примере определяется два интерфейса (IAlpha и IBeta), а также реализующий их класс Alpha.
Последнее обновление 12.5.2011.
![](/html/2706/605/html_0NER5I2Q_9.BOEh/htmlconvd-7N9Qoy114x1.jpg)
ИЗУЧЕНИЕ ACTIONSCRIPT 3.0 |
111 |
Объектно-ориентированное программирование на языке ActionScript
interface IAlpha
{
function foo(str:String):String;
}
interface IBeta
{
function bar():void;
}
class Alpha implements IAlpha, IBeta
{
public function foo(param:String):String {} public function bar():void {}
}
В классе, внедряющем интерфейс, реализованные методы должны выполнять следующие действия:
•использовать идентификатор управления доступом public;
•использовать то же имя, что и метод интерфейса;
•иметь столько же параметров, сколько и методы интерфейса, а их типы данных должны соответствовать типам данных параметров методов интерфейса;
•использовать тот же тип возвращаемых значений.
public function foo(param:String):String {}
Однако вам предоставляется некоторая свобода в наименовании параметров для реализуемых методов. Хотя реализуемый метод должен иметь столько же параметров и с теми же типами данных, что и метод интерфейса, имена параметров могут быть разными. Например, в предыдущем примере параметру метода Alpha.foo()
было присвоено имя param.
А в методе интерфейса IAlpha.foo() он называется str.
function foo(str:String):String;
Также предоставляется некоторая гибкость в отношении значений параметров по умолчанию. Определение интерфейса можно включать объявления функций со значениями параметров по умолчанию. Для метода, реализующего такое объявление функции, параметра должен иметь значение по умолчанию, являющееся членом того же типа данных, что и значение, заданное в определении интерфейса, но само значение может быть другим. Например, следующий код определяет интерфейс, содержащий метод со значением параметра по умолчанию 3.
interface IGamma
{
function doSomething(param:int = 3):void;
}
Следующее определение класса реализует интерфейс IGamma, но использует другое значение параметра по умолчанию:
class Gamma implements IGamma
{
public function doSomething(param:int = 4):void {}
}
Последнее обновление 12.5.2011.