Documentazione di Flash CS3 |
|||
| Programmazione in ActionScript 3.0 > Programmazione orientata agli oggetti con ActionScript > Classi > Attributi delle proprietà di classe | |||
In relazione al modello a oggetti di ActionScript, il termine proprietà si riferisce a un qualsiasi membro di un una classe, incluse variabili, costanti e metodi. Nella Guida di riferimento al linguaggio e ai componenti di ActionScript 3.0 il termine viene invece utilizzato in senso più ristretto per indicare unicamente membri di classi corrispondenti a variabili o definiti mediante il metodo getter o setter. In ActionScript 3.0 è disponibile una serie di attributi utilizzabili con qualsiasi proprietà di classe. La tabella seguente riporta tali attributi.
|
Attributo |
Definizione |
|---|---|
|
|
Visibile ai riferimenti che si trovano all'interno dello stesso pacchetto. |
|
|
Visibile ai riferimenti che si trovano all'interno della stessa classe. |
|
|
Visibile ai riferimenti che si trovano all'interno della stessa classe e delle classi derivate. |
|
|
Visibile a tutti i riferimenti. |
|
|
Specifica che una proprietà appartiene alla classe e non alle sue istanze. |
|
|
Nome dello spazio dei nomi personalizzato definito dall'utente. |
ActionScript 3.0 fornisce quattro attributi speciali per il controllo dell'accesso alle proprietà definite all'interno di una classe: public, private, protected e internal.
L'attributo public rende una proprietà visible in qualsiasi punto dello script. Ad esempio, per rendere un metodo disponibile al codice che si trova al di fuori del pacchetto, è necessario dichiarare il metodo con l'attributo public. Ciò vale per qualsiasi proprietà che sia stata dichiarata utilizzando le parole chiave var, const o function.
L'attributo private rende una proprietà visibile unicamente ai chiamanti entro la classe che definisce le proprietà. Tale comportamento si differenzia da quello dell'attributo private di ActionScript 2.0, che consentiva a una sottoclasse di accedere a una proprietà privata di una superclasse. Un'altra significativa modifica nel comportamento ha a che fare con l'accesso in fase di runtime. In ActionScript 2.0 la parola chiave private impediva l'accesso solo in fase di compilazione e poteva essere facilmente evitata in fase di runtime. In ActionScript 3.0 ciò non è più possibile. Le proprietà contrassegnate come private non risultano disponibili né in fase di compilazione né in fase di runtime.
Ad esempio, il codice seguente crea una semplice classe denominata PrivateExample con una variabile private, quindi tenta di accedere alla variabile private dall'esterno della classe. In ActionScript 2.0, l'accesso in fase di compilazione non era consentito, ma tale divieto veniva facilmente aggirato mediante l'impiego dell'operatore di accesso alle proprietà ([]), che esegue una ricerca delle proprietà in fase di runtime, anziché in fase di compilazione.
class PrivateExample
{
private var privVar:String = "private variable";
}
var myExample:PrivateExample = new PrivateExample();
trace(myExample.privVar); // errore in fase di compilazione in modalità rigorosa
trace(myExample["privVar"]); // ActionScript 2.0 consente l'accesso, mentre in ActionScript 3.0 si verifica un errore di runtime.
In ActionScript 3.0, il tentativo di accedere a una proprietà privata mediante l'operatore punto (myExample.privVar) provoca un errore di compilazione, se ci si trova in modalità rigorosa. In caso contrario, l'errore viene riportato in fase di runtime, esattamente come accade quando si usa l'operatore di accesso alle proprietà (myExample["privVar"]).
Nella tabella seguente sono riportati i risultati di tentativi di accesso a una proprietà privata appartenente a una classe chiusa (non dinamica):
|
Modalità rigorosa |
Modalità standard |
|
|---|---|---|
|
operatore punto ( |
errore di compilazione |
errore di runtime |
|
operatore parentesi ( |
errore di runtime |
errore di runtime |
Nelle classi dichiarate con l'attributo dynamic, i tentativi di accesso a una variabile privata non provocano errori di runtime. Al contrario, la variabile risulta semplicemente invisibile, di conseguenza Flash Player restituisce il valore undefined. Un errore in fase di compilazione si verifica invece se si utilizza un operatore punto in modalità rigorosa. L'esempio seguente è uguale a quello precedente, con la sola differenza che la classe PrivateExample viene dichiarata come classe dinamica:
dynamic class PrivateExample
{
private var privVar:String = "private variable";
}
var myExample:PrivateExample = new PrivateExample();
trace(myExample.privVar); // errore in fase di compilazione in modalità rigorosa
trace(myExample["privVar"]); // output: undefined
Le classi dinamiche restituiscono in genere il valore undefined, anziché generare un errore, se un codice esterno alla classe tenta di accedere a una proprietà privata. Nella tabella seguente si evidenzia che l'errore viene generato unicamente se viene utilizzato l'operatore punto per accedere a una proprietà privata in modalità rigorosa:
|
Modalità rigorosa |
Modalità standard |
|
|---|---|---|
|
operatore punto ( |
errore di compilazione |
|
|
operatore parentesi ( |
|
|
L'attributo protected, nuovo in ActionScript 3.0, rende una proprietà visibile ai chiamanti della sua stessa classe o di una sottoclasse. In altre parole, una proprietà protetta è disponibile solo all'interno della propria classe o delle classi che si trovano sotto di essa nella gerarchia di ereditarietà. Ciò vale sia che la sottoclasse si trovi nello stesso pacchetto o in un pacchetto differente.
Per chi ha familiarità con ActionScript 2.0, questa funzionalità è simile all'attributo private di ActionScript 2.0. L'attributo protected di ActionScript 3.0 è simile anche all'attributo protected di Java, con la sola differenza che la versione per Java consente l'accesso anche ai chiamanti che si trovano all'interno dello stesso pacchetto. L'attributo protected è utile se si dispone di una variabile o di un metodo necessario alle sottoclassi, ma che si desidera tenere nascosto da codice esterno alla catena di ereditarietà.
L'attributo internal, nuovo in ActionScript 3.0, rende una proprietà visibile ai chiamanti che si trovano all'interno del suo stesso pacchetto. Si tratta dell'attributo predefinito del codice all'interno di un pacchetto e può essere applicato a qualsiasi proprietà che non presenta alcuno dei seguenti attributi:
public private protected L'attributo internal è simile al controllo dell'accesso predefinito in Java, anche se in Java non esiste un nome esplicito per tale livello di accesso, che può essere ottenuto solo mediante l'omissione di un qualsiasi altro modificatore dell'accesso. L'attributo internal di ActionScript 3.0 consente all'utente di dimostrare esplicitamente l'intenzione di rendere una proprietà visibile unicamente ai chiamanti che si trovano all'interno del suo stesso pacchetto.
L'attributo static, utilizzabile con proprietà dichiarate con le parole chiave var, const o function, consente di associare una proprietà alla classe anziché a istanze della classe. Il codice esterno alla classe deve richiamare proprietà statiche utilizzando il nome della classe anziché il nome di un'istanza.
Le proprietà statiche non vengono ereditate dalle sottoclassi, ma fanno parte della catena delle aree di validità di una sottoclasse. In altre parole, all'interno del corpo di una sottoclasse, è possibile utilizzare una variabile o un metodo senza fare riferimento alla classe in cui essa o esso è stato creato. Per ulteriori informazioni, vedere Proprietà statiche non ereditate.
In alternativa agli attributi di controllo dell'accesso predefiniti, è possibile creare uno spazio dei nomi personalizzato da utilizzare come attributo. È possibile utilizzare un solo attributo spazio dei nomi per definizione e non è possibile utilizzare un tale attributo in combinazione con un qualsiasi attributo di controllo dell'accesso (public, private, protected, internal). Per ulteriori informazioni sull'uso dello spazio dei nomi, vedere Spazi dei nomi.
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/00000062.html