Panoramica del linguaggio

Al centro del linguaggio ActionScript 3.0 vi sono gli oggetti che rappresentano i suoi blocchi costituitivi. Ogni variabile che dichiarate, ogni funzione che scrivete e ogni istanza di classe che create è un oggetto. Potete pensare a un programma ActionScript 3.0 come se fosse un gruppo di oggetti che svolgono certe attività, rispondono agli eventi e comunicano gli uni con gli altri.

I programmatori che hanno esperienza con la programmazione orientata agli oggetti (OOP) in Java o C++ possono pensare agli oggetti come moduli contenenti due tipi di membri: dati memorizzati in variabili membro o proprietà e comportamento accessibile tramite metodi. ActionScript 3.0 definisce oggetti in modo simile ma leggermente diverso. In ActionScript 3.0 gli oggetti sono semplicemente raccolte di proprietà, le quali sono contenitori non solo di dati, ma anche di funzioni e altri oggetti. Se una funzione è associata a un oggetto in questo modo, prende il nome di metodo.

Sebbene la definizione di ActionScript 3.0 possa sembrare un po' strana per i programmatori Java o C++, in pratica la definizione dei tipi di oggetto con le classi ActionScript 3.0 è molto simile al modo in cui le classi vengono definite in Java o C++. La distinzione tra le due definizioni di oggetto è importante ai fini della discussione sul modello di oggetti di ActionScript e per altri argomenti avanzati, ma nella maggior parte delle situazioni il termine proprietà equivale a variabile membro di classe e si contrappone a metodo. In Adobe ActionScript 3.0 Reference for the Adobe Flash Platform (Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash), ad esempio, viene utilizzato il termine proprietà per indicare variabili o proprietà di acquisizione-impostazione e il termine metodi per indicare le funzioni che fanno parte di una classe.

Una sottile differenza tra le classi di ActionScript e quelle di Java o C++ è rappresentata dal fatto che in ActionScript le classi non sono semplicemente entità astratte, ma sono rappresentate da oggetti di classe che memorizzano le proprietà e i metodi della classe. Ciò rende possibile l'uso di tecniche che possono sembrare inusuali ai programmatori Java e C++, come l'inclusione di istruzioni o di codice eseguibile al livello principale di una classe o di un pacchetto.

Un'altra differenza tra le classi ActionScript e le classi Java o C++ è costituita dal fatto che ogni classe ActionScript possiede un elemento chiamato oggettoprototipo. Nelle versioni precedenti di ActionScript, gli oggetti prototipo, collegati tra loro nelle catene di prototipi, costituivano insieme la base dell'intera gerarchia di ereditarietà delle classi. In ActionScript 3.0, invece, gli oggetti prototipo svolgono una funzione secondaria nel sistema dell'ereditarietà. L'oggetto prototipo può tuttavia essere ancora utile come alternativa a proprietà e metodi statici quando si desidera condividere una proprietà e il relativo valore tra tutte le istanze di una classe.

In passato, i programmatori ActionScript esperti potevano modificare direttamente la catena di prototipi con elementi di linguaggio incorporati speciali. Ora che il linguaggio fornisce un'implementazione più avanzata di un'interfaccia di programmazione basata su classi, molti di questi elementi speciali, ad esempio __proto__ e __resolve, non fanno più parte del linguaggio. Inoltre, ottimizzazioni del meccanismo di ereditarietà interno che forniscono miglioramenti significativi delle prestazioni precludono l'accesso diretto a tale meccanismo.