Definizioni delle classi

Le definizioni delle classi in ActionScript 3.0 impiegano una sintassi simile a quella utilizzata in ActionScript 2.0. La sintassi corretta per la definizione di una classe richiede la parola chiave class seguita dal nome della classe. Il corpo della classe, racchiuso tra parentesi graffe ({}), segue il nome della classe. Ad esempio, il seguente codice consente di creare una classe denominata Shape contenente una variabile denominata visible:

public class Shape
{
    var visible:Boolean = true;
}

Una modifica significativa della sintassi riguarda la definizione di classi che si trovano all'interno di un pacchetto. In ActionScript 2.0, se una classe si trovava all'interno di un pacchetto, il nome del pacchetto doveva essere incluso nella dichiarazione della classe. In ActionScript 3.0, con l'introduzione dell'istruzione package, il nome del pacchetto deve essere incluso nella dichiarazione del pacchetto, anziché nella dichiarazione della classe. Ad esempio, le seguenti dichiarazioni di classe mostrano come la classe BitmapData, che fa parte del pacchetto flash.display, viene definita ActionScript 2.0 e in ActionScript 3.0:

// ActionScript 2.0
class flash.display.BitmapData {}

// ActionScript 3.0
package flash.display
{
    public class BitmapData {}
}

Sezioni

Attributi di classe
Corpo della classe

Attributi di classe

ActionScript 3.0 consente di modificare le definizioni delle classi mediante l'impiego di uno dei seguenti attributi:

Attributo

Definizione

dynamic

Consente di aggiungere proprietà alle istanze in fase di runtime.

final

La classe non può essere estesa da un'altra classe.

internal (valore predefinito)

Visibile ai riferimenti che si trovano all'interno del pacchetto corrente.

public

Visibile a tutti i riferimenti.

In tutti questi casi, a eccezione di internal, è necessario includere espressamente l'attributo per ottenere il comportamento associato. Ad esempio, se durante la definizione di una classe non si include l'attributo dynamic, non sarà possibile aggiungere proprietà a un'istanza della classe in fase di runtime. Per assegnare esplicitamente un attributo è necessario collocarlo all'inizio della definizione della classe, come indicato nel codice seguente:

dynamic class Shape {}

Si tenga presente che nell'elenco non è incluso un attributo denominato abstract. Le classi astratte non sono infatti supportate in ActionScript 3.0. Si noti inoltre che l'elenco non contiene attributi denominati private e protected. Tali attributi hanno un significato unicamente all'interno di una definizione di classe e non possono essere applicati alle classi stesse. Per fare in modo che una classe non sia pubblicamente visibile al di fuori di un pacchetto, è necessario inserire la classe in un pacchetto e contrassegnarla con l'attributo internal. In alternativa, è possibile omettere sia l'attributo internal che public, in tal modo il compilatore inserirà automaticamente l'attributo internal. Se si desidera che una classe non sia visibile al di fuori del file di origine che la definisce, collocare la classe alla base del file di origine, sotto la parentesi graffa che chiude la definizione del pacchetto.

Corpo della classe

Il corpo della classe, racchiuso tra parentesi graffe, consente di definire le variabili, le costanti e i metodi della classe. Nell'esempio seguente è riportata la dichiarazione per la classe Accessibility nell'API di Adobe Flash Player:

public final class Accessibility
{
    public static function get active():Boolean;
    public static function updateProperties():void;
}

All'interno del corpo di una classe è possibile definire anche uno spazio dei nomi. Nell'esempio seguente è illustrato come uno spazio dei nomi può essere definito all'interno del corpo di una classe e utilizzato come attributo di un metodo di tale classe:

public class SampleClass
{
    public namespace sampleNamespace;
    sampleNamespace function doSomething():void;
}

ActionScript 3.0 consente di inserire nel corpo di una classe non solo definizioni, ma anche istruzioni. Le istruzioni che si trovano all'interno del corpo di una classe, ma al di fuori della definizione di un metodo, vengono eseguite una sola volta, vale a dire nel momento in cui la definizione della classe viene rilevata la prima volta e l'oggetto classe associato viene creato. L'esempio seguente include una chiamata a una funzione esterna, hello(), e un'istruzione trace che consente di produrre un messaggio di conferma quando la classe viene definita:

function hello():String
{
    trace("hola");
}
class SampleClass
{
    hello();
    trace("class created");
}
// output quando viene creata la classe
hola
class created

A differenza di quanto avveniva nelle precedenti versioni di ActionScript, in ActionScript 3.0 è consentito definire una proprietà statica e una proprietà di istanza con lo stesso nome all'interno di un medesimo corpo di classe. Ad esempio, il codice seguente indica una variabile statica denominata message e una variabile di istanza con lo stesso nome:

class StaticTest
{
    static var message:String = "static variable";
    var message:String = "instance variable";
}
// Nello script
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // output: variabile statica
trace(myST.message);       // output: variabile di istanza

Flash CS3

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000061.html