Przegląd języka

Istotą języka ActionScript 3.0 oraz jego fundamentalnymi elementami składowymi są obiekty. Obiektem jest każda zadeklarowana zmienna, napisana funkcja i utworzona instancja klasy. Program ActionScript 3.0 można postrzegać jako grupę obiektów realizujących zadania, reagujących na zdarzenia i komunikujących się ze sobą nawzajem.

Programiści zaznajomieni z programowaniem zorientowanym obiektowo w języku Java lub C++ mogą traktować obiekty jak moduły zawierające dwa rodzaje członków: dane przechowywane w zmiennych obiektu (właściwościach) oraz zachowania dostępne za pośrednictwem metod. Język ActionScript 3.0 definiuje obiekt w sposób podobny, ale nieznacznie inny. W języku ActionScript 3.0 obiekty są po prostu kolekcjami właściwości. Właściwości te są kontenerami, które mogą zawierać nie tylko dane, lecz również funkcje lub inne obiekty. Funkcja dołączona w ten sposób do obiektu nazywana jest metodą.

Wprawdzie definicja języka ActionScript 3.0 może wydawać się nieco nietypowa z perspektywy programistów przyzwyczajonych do języków Java lub C++, w praktyce definiowanie typów obiektów za pomocą klas ActionScript 3.0 odbywa się bardzo podobnie, jak w języku Java lub C++. Rozróżnienie między dwiema definicjami obiektów jest ważne przy omawianiu modelu obiektów języka ActionScript oraz innych zaawansowanych zagadnień, ale w większości innych sytuacji termin właściwości oznacza zmienne należące do klasy, w odróżnieniu od metod. W skorowidzu ActionScript 3.0 dla platformy Adobe Flash termin właściwości oznacza zmienne lub właściwości pobierania/ustawiania. Termin metody oznacza funkcje stanowiące część klasy

Jedną z subtelnych różnic między klasami w języku ActionScript a klasami w języku Java lub C++ jest fakt, że w języku ActionScript klasy nie są tylko jednostkami abstrakcyjnymi. Klasy ActionScript są reprezentowane przez obiekty klas zawierające właściwości i metody klasy. Umożliwia to stosowanie technik, które mogą wydawać się obce programistom posługującym się językami Java i C++ — na przykład umieszczanie instrukcji lub kodu wykonywalnego na najwyższym poziomie klasy lub pakietu.

Inna różnica między klasami języka ActionScript a klasami Java lub C++ polega na tym, że każda klasa ActionScript ma tzw. obiekt prototypowy . W poprzednich wersjach języka ActionScript obiekty prototypowe, powiązane w łańcuchy , stanowiły łącznie fundament całej hierarchii dziedziczenia klas. Jednak w wersji ActionScript 3.0 obiekty prototypowe odgrywają tylko uboczną rolę w systemie dziedziczenia. Obiekt prototypowy może być nadal użyteczny jako alternatywa dla właściwości i metod statycznych, jeśli chcemy udostępnić właściwość i jej wartość wszystkim instancjom danej klasy.

W przeszłości zaawansowani programiści posługujący się językiem ActionScript mogli bezpośrednio manipulować łańcuchem prototypów za pomocą specjalnych wbudowanych elementów języka. Ponieważ obecnie język udostępnia bardziej dojrzałą implementację interfejsu programowania w oparciu o klasy, wiele z tych specjalnych elementów języka, m.in. __proto__ i __resolve, usunięto z jego specyfikacji. Ponadto optymalizacja wewnętrznego mechanizmu dziedziczenia, która zapewnia znaczną poprawę wydajności, wyklucza bezpośredni dostęp do mechanizmu dziedziczenia.