В основу языка ActionScript 3.0 положены объекты, они являются его главным конструктивным материалом. Каждая объявленная переменная, каждая написанная функция, каждый созданный экземпляр класса являются объектами. Программу на ActionScript 3.0 можно рассматривать как группу объектов, выполняющих задачи, реагирующих на события и взаимодействующих друг с другом.
Программисты, знакомые с объектно-ориентированным программированием в Java или C++, могут воспринимать объекты как модули, включающие два типа: данные, хранимые в соответствующих переменных или свойствах, а также поведение, реализуемое с помощью методов. ActionScript 3.0 определяет объекты подобным образом, но немного по-другому. В ActionScript 3.0 объекты представляют собой просто наборы свойств. Эти свойства выступают в качестве контейнеров, которые могут содержать не только данные, но также функции или другие объекты. Если функция связана с объектом таким образом, она называется методом.
Хотя определение ActionScript 3.0 и может показаться немного странным для имеющего опыт программирования на Java или C++, на практике определение типов объектов с помощью классов ActionScript 3.0 сходно со способом, которым классы определяются в Java или C++. Различие между двумя определениями объектов важно, когда обсуждается объектная модель ActionScript и другие расширенные возможности, но в большинстве других ситуаций термин
свойства
означает переменные, являющиеся членами класса, как альтернативу методам. В справочнике Adobe ActionScript 3.0 для Adobe Flash Platform, к примеру, термин
свойства
обозначает переменные или свойства установки и получения атрибутов. Термин
методы
здесь используется для обозначения функций, являющихся частью класса.
Единственным небольшим различием между классами в ActionScript и классами в Java или С++ является то, что в ActionScript классы - это не просто абстрактные сущности. В ActionScript классы представляются
объектами классов
, хранящими свойства и методы этого класса. Это позволяет реализовывать методики, которые могут показаться незнакомыми программистам на Java и C++, например, включение инструкций или исполняемого программного кода в верхний уровень класса или пакета.
Другим различием между классами ActionScript и классами в Java или C++ является то, что каждый класс ActionScript обладает так называемым
объектом
прототипа
. В предыдущих версиях ActionScript объекты прототипов, связанные вместе в
цепочки прототипов,
совместно служили в качестве основания всей иерархии наследования класса. Однако в ActionScript 3.0 объекты прототипов играют лишь малую роль в системе наследования. Объект прототипа также может быть полезен, но как альтернатива статическим свойствам и методам, если требуется обеспечить совместное использование свойства и его значений всеми экземплярами класса.
В прошлом опытные программисты ActionScript могли напрямую управлять цепочкой прототипов с помощью специальных встроенных элементов языка. Теперь, когда в языке предлагается более зрелая реализация интерфейса программирования, основанного на классах, многие из этих специальных элементов языка, таких как
__proto__
и
__resolve,
больше не являются частью языка. Кроме того, оптимизация внутреннего механизма наследования, обеспечивающая значительный прирост производительности, предотвращает прямой доступ к механизму наследования.