![](/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-7N9Qoy137x1.jpg)
ИЗУЧЕНИЕ ACTIONSCRIPT 3.0 |
134 |
Объектно-ориентированное программирование на языке ActionScript
Здесь не приводится подробное описание класса Square, но он похож на класс EquilateralTriangle, в котором есть конструктор и собственные версии методов getArea() и describe().
Полиморфизм и фабричный метод
Набор классов, в которых используются интерфейсы и наследования, может применяться для достижения разных интересных целей. Например, все классы фигур, описанные выше, либо реализуют интерфейс IGeometricShape, либо расширяют реализующий его суперкласс. Поэтому если переменная определена в качестве экземпляра IGeometricShape, совершенно не нужно знать, является ли она на самом деле экземпляром класса Circle или Square, чтобы вызвать ее метод describe().
Следующий код демонстрирует, как это происходит.
var myShape:IGeometricShape = new Circle(100); trace(myShape.describe());
Когда вызывается метод myShape.describe(), он выполняет метод Circle.describe(), так как несмотря на то, что переменная определена как экземпляр IGeometricShape, ее базовым классом является Circle.
Этот пример демонстрирует принцип полиморфизма в действии: один и тот же метод может вызывать результаты другого выполняемого в данный момент кода в зависимости от класса того объекта, для которого вызывался метод.
Приложение GeometricShapes применяет этот тип полиморфизма на базе интерфейса, используя упрощенную версию шаблона, известного под названием «фабричный метод». Термин фабричный метод обозначает функцию, которая возвращает объект, базовый тип данных или содержимое которого могут быть разными в зависимости от контекста.
Описанный здесь класс GeometricShapeFactory определяет фабричный метод с именем createShape().
Последнее обновление 12.5.2011.
![](/html/2706/605/html_0NER5I2Q_9.BOEh/htmlconvd-7N9Qoy138x1.jpg)
ИЗУЧЕНИЕ ACTIONSCRIPT 3.0 |
135 |
Объектно-ориентированное программирование на языке ActionScript
package com.example.programmingas3.geometricshapes
{
public class GeometricShapeFactory
{
public static var currentShape:IGeometricShape;
public static function createShape(shapeName:String, len:Number):IGeometricShape
{
switch (shapeName)
{
case "Triangle":
return new EquilateralTriangle(len);
case "Square":
return new Square(len);
case "Circle":
return new Circle(len);
}
return null;
}
public static function describeShape(shapeType:String, shapeSize:Number):String
{
GeometricShapeFactory.currentShape = GeometricShapeFactory.createShape(shapeType, shapeSize);
return GeometricShapeFactory.currentShape.describe();
}
}
}
Фабричный метод createShape() позволяет конструкторам подклассов фигур определять детали создаваемых ими экземпляров и возвращать новые объекты в качестве экземпляров IGeometricShape, чтобы они проходили более общую обработку в приложении.
Метод describeShape() в предыдущем примере демонстрирует, как приложение может использовать фабричный метод для получения общей ссылки на более конкретный объект. Приложение может получить описание для только что созданного объекта Circle, как показано ниже.
GeometricShapeFactory.describeShape("Circle", 100);
Затем метод describeShape() вызывает фабричный метод createShape() с теми же параметрами, сохраняя новый объект Circle в статической переменной currentShape, которая была задана в качестве объекта IGeometricShape. После этого вызывается метод describe() объекта currentShape, и в результате разрешения этот метод автоматически выполняет метод Circle.describe(), возвращая подробное описание круга.
Расширение примера приложения
Настоящая сила интерфейсов и наследования становится очевидной, когда требуется расширить или изменить приложение.
Последнее обновление 12.5.2011.
![](/html/2706/605/html_0NER5I2Q_9.BOEh/htmlconvd-7N9Qoy139x1.jpg)
ИЗУЧЕНИЕ ACTIONSCRIPT 3.0 |
136 |
Объектно-ориентированное программирование на языке ActionScript
Допустим, требуется добавить новую фигуру, пятиугольник, в этот пример приложения. Для этого нужно создать класс Pentagon, который расширяет класс RegularPolygon и определяет собственные версии методов getArea() и describe(). После этого следует добавить новый элемент «Pentagon» (Пятиугольник) в комбинированное поле пользовательского интерфейса приложения. Вот и все! Класс Pentagon автоматически получает методы getPerimeter() и getSumOfAngles(), наследуя их от класса RegularPolygon. Так как класс Pentagon является потомком класса, который реализует интерфейс IGeometricShape, его экземпляр также можно создать в качестве экземпляра IGeometricShape. Это означает, что для добавления нового типа фигуры не требуется изменять сигнатуру методов класса GeometricShapeFactory (и, следовательно, не требуется изменять коды, использующие класс GeometricShapeFactory).
В качестве упражнения, попробуйте добавить класс Pentagon в пример GeometricShapes, чтобы оценить, насколько интерфейсы и наследование упрощают добавление новых возможностей в приложение.
Последнее обновление 12.5.2011.