Salve a tutti !
Pronti per proseguire con la OOP ?
Bene, la volta scorsa abbiamo visto
come si crea una classe di Actionscript 3.0 e abbiamo appurato cosa è e che ruolo svolge la
funzione costruttrice di una classe.
Le proprietà di una classe ci permettono di immagazzinare o salvare dei valori in quella classe. Non sono altro che variabili Actionscript come le abbiamo sempre viste, solo che all' interno di una classe le variabili vengono chiamate proprietà.
Questi valori salvati possono essere opportunamente richiamati e utilizzati durante lo svolgimento delle nostre porzioni di codice.
Facendo un esempio, immaginiamo di avere una classe che ha il compito di caricare una immagine esterna. Quando l' immagine sarà caricata possiamo risalire alle dimensioni di questa immagine, per cui supponiamo che volessimo registrare i valori delle dimensioni per poterli poi utilizzare in un secondo momento.
Ecco che entrano in gioco le proprietà.
Quindi dichiariamo una proprietà proprio come si dichiara una variabile, solo che all' interno di una classe una proprietà può avere anche degli attributi.
Ogni proprietà di una classe va dichiarata
prima della funzione costruttrice, non è un obbligo ma è una buona regola da seguire in modo che la nostra classe sia di più facile lettura e consultazione mentre ci si lavora.
Proseguiamo... Abbiamo visto come definire una funzione costruttrice di una classe: public function NomeClasse() , ora creo un altro file AS che salvo con nome ' Seconda.as ' .
Definita come abbiamo visto fino ad ora, avremmo questa classe:
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
}
}
}
Creo ora il FLA che verrà associato alla classe Seconda, che salvo con nome ' seconda.fla '.
Anche in questo caso se pubblicassimo l' SWF avremmo il pannello Output di Flash che ci dice: la classe Seconda è stata istanziata correttamente.
Voglio dicharare una proprietà della classe Seconda e lo faccio in questo modo:
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
private var antico:Number=10;
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
}
}
}
notate questa riga: private var antico:Number;
Sì, è proprio così, sto dichiarando una variabile ( proprietà nelle classi ) che si chiama ' antico ' alla classe Seconda.
private è un attributo che dichiara privata questa proprietà e cioè non rende accessibile il suo valore dall' esterno della classe. Ci sono altri 3 attributi possibili che possiamo assegnare ad una proprietà ma per il momento utilizziamo solo private, gli altri li vedremo molto presto.
var dice a Flash di creare una nuova variabile nella sua memoria
antico è il nome che assegno alla proprietà ( potrebbe chiamarsi pinco, pallino, cesare o gatto )
:Number significa che in questa proprietà possono essere inseriti solo ed esclusivamente dei valori di tipo numerico
=10 gli assegno un valore pari a 10
Per recuperare il valore della proprietà antico, basterà richiamarla quando vogliamo, ad esempio:
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
private var antico:Number=10;
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
trace( antico );
}
}
}
in questo caso ho chiesto a Flash, tramite la funzione costruttrice di Seconda, di farmi un trace di antico e l' output generato è il seguente
la classe Seconda è stata istanziata correttamente
10
Un secondo modo di assegnare un valore alla proprietà ' antico ' è quello di farlo nella funzione costruttrice:
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
private var antico:Number;
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
antico=10;
trace( antico );
}
}
}
infatti come possiamo vedere, abbiamo solo dichirato la proprietà antico: private var antico:Number; e poi nella funzione costruttrice gli abbiamo assegnato un valore pari a 10.
In questo modo è più chiaro che, una volta dichiarata la proprietà, possiamo interagire con lei quando vogliamo.
Un altro modo è quello di chiamare o assegnare un valore di una proprietà dall' interno di un metodo ( che vedremo al prossima volta ) oppure attraverso dei getters & setters ( questo lo vedremo decisamente più avanti ).
Ora facciamo un altro esempio per esere sicuri che quello che sto cercando di trasmettere sia chiaro a tuti voi:
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
private var antico:Number=10;
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
antico+=10;
trace( antico );
}
}
}
ho dichiarato la proprietà assegnandole subito un valore pari a 10: private var antico:Number=10; e nella funzione costruttrice ne ho aumentato il valore di 10, infatti l' output ottenuto è il seguente
la classe Seconda è stata istanziata correttamente
20
Se invece, mettiamo il caso che una volta dichiarata una proprietà ed il suo valore, sappiamo con certezza che non dovremo mai più cambiarlo, allora inece di utilizzare var possiamo utilizzare const e liberare della memoria in più da Flash:
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
private var antico:Number=10;
private const nuovo:Number=30;
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
antico+=10;
trace( antico );
trace(nuovo);
}
}
}
utilizzo const per dire a Flash che quella proprietà avrà sempre un valore costante e non sarà mai cambiato: private const nuovo:Number=30;
Se dovessi provare ad assegnare alla costante ' nuovo ' un altro valore, Flash mi restituirebbe un errore.
Da sottolineare una cosa molto importante:
Flash CS3 attribuisce come proprietà della Document Class qualsiasi oggetto contenuto nello Stage del FLA associato a quella Document Class.
Mi spiego meglio con un esempio:
vado su seconda.fla e creo una MovieClip sullo Stage, gli assegno nome istanza ' clip_mc '.
Chiedo un trace di clip_mc dalla funzione costruttrice di Seconda.as :
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
private var antico:Number=10;
private const nuovo:Number=30;
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
antico+=10;
trace( antico );
trace(nuovo);
trace(clip_mc);
}
}
}
ottengo questo output:
la classe Seconda è stata istanziata correttamente
20
30
[object MovieClip]
Flash ha riconosciuto clip_mc che si trova sullo Stage di seconda.fla .
Infatti, possiamo interagire completamente con clip_mc:
Code:
package
{
import flash.display.MovieClip;
public class Seconda extends MovieClip
{
private var antico:Number=10;
private const nuovo:Number=30;
public function Seconda()
{
trace(" la classe Seconda è stata istanziata correttamente ");
antico+=10;
trace( antico );
trace(nuovo);
trace(clip_mc);
clip_mc.x=stage.stageWidth/2;
clip_mc.y=stage.stageHeight/2;
}
}
}
ho assegnato dei valori alle proprietà x e y di clip_mc:
clip_mc.x=stage.stageWidth/2;
clip_mc.y=stage.stageHeight/2;
Per approfondire a fondo l' iterattività fra la Timeline e la Document Class, vi consiglio di leggere questo articolo:
Comunicazione tra la Timeline e la Document Class
Allego i files: