Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Object Oriented Programming - lezione 5 - attributi dei metodi

This is a discussion on Object Oriented Programming - lezione 5 - attributi dei metodi within the Programmazione Orientata agli Oggetti - tutorials forums, part of the Articoli e tutorials category; Attributi dei metodi di una classe Actionscript 3.0 Abbiamo visto nella lezione 4 di OOP con Flash CS3 i ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials > Programmazione Orientata agli Oggetti - tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 21-09-07, 17:17
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Object Oriented Programming - lezione 5 - attributi dei metodi

Attributi dei metodi di una classe Actionscript 3.0


Abbiamo visto nella lezione 4 di OOP con Flash CS3
i tipi di attributi che possiamo associare ad una proprietà, come dichiararli e le differenze tra uno e l' altro.

Per quanto riguarda i metodi ed i loro attributi, sono identici a quelli delle proprietà ed hanno le stesse caratteristiche.

Una cosa molto importante è la seguente:

supponiamo di avere una classe che ha una proprietà che si chiama nome.

Se la classe deve svolgere un determinato compito e perchè funzioni necessitiamo che la sua proprietà nome non venga alterata ( altrimenti cambierebbe l' esito ) allora sappiamo che rendendo quella proprietà private abbiamo la certezza che chiunque utilizzi la nostra classe non possa accedere a quella proprietà da una sua istanza.

Ma rendendola private, non è accessibile neanche per la lettura e forse la logica dell' applicazione che stiamo sviluppando oppure chi sta utilizzando la nostra classe necessita di recuperare almeno il valore di quella proprietà.

Per renderla accessibile senza cambiare il suo attributo private possiamo creare un metodo public ( es: prendiNome ) che una volta chiamato restituisce il valore della proprietà nome. Come ? Dato che il metodo si trova all' interno della classe ( è appunto un metodo della stessa classe ) ha accesso alla proprietà nome.

Vediamo bene di cosa si tratta con degli esempi concreti...

Creo un FLA che chiamo ' quinta.fla '.

La Document Class che chiamo ' Quinta.as ' :
Code:
package
{
    import flash.display.MovieClip;
    
    public class Quinta extends MovieClip
    {
        private var elenco:Elenco;
        
        public function Quinta()
        {
            
        }
    }
}
La Document Class ha una proprietà di tipo Elenco, cioè una variabile di tipo Elenco o una istanza di Elenco ( chiamatela come vi pare ).

Elenco.as è la seguente classe:
Code:
package
{
    public class Elenco
    {
        private var nome:String='Miles';
        
        public function Elenco()
        {
            
        }
    }
}
ha una proprietà private che si chiama nome e che contiene un valore stringa.

Adesso istanziamo la classe Elenco:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Quinta extends MovieClip
    {
        private var elenco:Elenco;
        
        public function Quinta()
        {
            elenco=new Elenco();
        }
    }
}
ora se provassi a recuperare il valore di nome di Elenco in questo modo:

trace(elenco.nome);

Flash mi punirebbe giustamente con questo errore:

1178: Attempted access of inaccessible property nome through a reference with static type Elenco.

Fin quì niente di nuovo, tutte cose che abbiamo già visto nella lezione 4.

Ma se avessi un effetivo bisogno di recuperare quel valore, dovrei per forza rendere public la proprietà nome di Elenco ?

La risposta è no, potrei implementare un metodo nella classe Elenco, in questo modo:
Code:
package
{
    public class Elenco
    {
        private var nome:String='Miles';
        
        public function Elenco()
        {
            
        }
        
        public function prendiNome():String
        {
            return nome;
        }
    }
}
chiamando il metodo prendiNome, posso recuperare il valore di nome. Il metodo è public e la proprietà e private, per cui è il metodo che recupera il valore:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Quinta extends MovieClip
    {
        private var elenco:Elenco;
        
        public function Quinta()
        {
            elenco=new Elenco();
            trace(elenco.prendiNome());
        }
    }
}
infatti ottengo il seguente output:

Miles

In questo caso, nome di Elenco non è accessibile e quindi non modificabile ma è leggibile appunto tramite chiamata del metodo prendiNome.

Sostanzialmente abbiamo incapsulato la proprietà nome di Elenco.

Esiste un altro modo e sono i metodi getter & setter che vedremo nella prossima lezione.



Metodi statici

Come le proprietà, anche i metodi possono avere attributo static e sia l' uso che il funzionamento è identico a quello delle proprietà.

Vediamo un esempio:
Code:
package
{
    public class Elenco
    {
        private var nome:String='Miles';
        
        public function Elenco()
        {
            
        }
        
        public function prendiNome():String
        {
            return nome;
        }
        
        public static function provaStatico():void
        {
            trace('il metodo statico ProvaStatico è stato chiamato correttamente');
        }
    }
}
ho aggiunto un metodo statico e pubblico alla classe Elenco.

Adesso chiamo il metodo dalla Document Class:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Quinta extends MovieClip
    {
        private var elenco:Elenco;
        
        public function Quinta()
        {
            elenco=new Elenco();
            trace(elenco.prendiNome());
            Elenco.provaStatico();
        }
    }
}
chiaramente non lo chiamo dalla istanza elenco, ma lo chiamo direttamente ( come abbiamo già visto con le proprietà ) :

Elenco.provaStatico();

e ottengo questo output:

Miles

il metodo statico ProvaStatico è stato chiamato correttamente



Accessibilità a proprietà non statiche da metodi statici o viceversa

Se adesso volessi accedere a nome di Elenco dal metodo statico provaStatico ?

Proviamo:
Code:
package
{
    public class Elenco
    {
        private var nome:String='Miles';
        
        public function Elenco()
        {
            
        }
        
        public function prendiNome():String
        {
            return nome;
        }
        
        public static function provaStatico():void
        {
            trace('il metodo statico ProvaStatico è stato chiamato correttamente');
            trace(nome);
        }
    }
}
Mantenendo sempre la chiamata dalla Document Class Elenco.provaStatico(); Flash mi restituisce questo errore:

1120: Access of undefined property nome.

Questo significa che metodi statici non possono accedere a proprietà non statiche. Addirittura Flash dice che la proprietà nome non è stata definita.

Vediamo il contrario, un metodo non statico che prova ad accedere una proprietà statica.

La classe Elenco diventa così:
Code:
package
{
    public class Elenco
    {
        private static var nome:String='Miles';
        
        public function Elenco()
        {
            
        }
        
        public function provaNonStatico():void
        {
            trace('il metodo statico ProvaStatico è stato chiamato correttamente');
            trace(nome);
        }
    }
}
ho reso statica la proprietà nome e non statico il metodo provaNonStatico.

Eseguo la chiamata dalla Document Class:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Quinta extends MovieClip
    {
        private var elenco:Elenco;
        
        public function Quinta()
        {
            elenco=new Elenco();
            elenco.provaNonStatico();
        }
    }
}
elenco.provaNonStatico(); è una chiamata appunto dell' evento provaNonStatico dall' istanza della classe Elenco ( elenco ) che è nella Document Class ( anche questo già visto con la lezione sulle proprietà ):

Ottengo il seguente output:

il metodo statico ProvaStatico è stato chiamato correttamente

Miles

Quindi, ricapitolando:

- un metodo statico non può accedere ad una proprietà non statica

- un metodo non statico può accedere ad una proprietà statica

Allego i files:
Attached Files
File Type: zip lezione_5.zip (6.7 KB, 36 views)

__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !

Last edited by Flep; 05-06-08 at 11:59..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 28-03-08, 16:10
lionwar's Avatar
Junior Member
 
Join Date: Mar 2008
Posts: 18
Rep Power: 0
lionwar is on a distinguished road
Smile Riferimento: Object Oriented Programming - lezione 5 - attributi dei metodi

ciao a tutti...
premettendo che sto studiando i tutorial come un folle
e la cosa che mi stupisce e che li sto capendo

e a questo proposito vorrei fare una domanda a chi ne sa più di me.

io ho provato ad istanziare un metoto pubblico dalla document class principale per arrivare a "leggere" una proprietà privata di un'altra classe ( la stessa del metodo istanziato ) cosi come il tutorial qui sopra.

perfetto...tutto riuscito.

ma poi ho pensato...

e se invece di scrivere


public function prendinome( ):String
{
return nome;
}

e scrivessi.............

public function prendinome():void;
{
trace ( nome );
}


non ottengo la stessa cosa???
a me da lo stesso risultato...
questo vuol dire che ho fatto la stessa cosa ma usando un'altra strada????
se si ...allora vuol dire che sto capendo come funzionano le basi di actionscript???

risp vi prego grazie mille a tutti
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 01-04-08, 09:28
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Object Oriented Programming - lezione 5 - attributi dei metodi

Ciao

Non confondere un output del trace con un output col valore di una variabile.
Il trace lo usi per fare del 'debugging' e dei tests in fase di sviluppo.

Nel tuo caso ti serve il return perchè devi fisicamente restituire il valore della variabile nome.
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #4 (permalink)  
Old 01-04-08, 19:39
lionwar's Avatar
Junior Member
 
Join Date: Mar 2008
Posts: 18
Rep Power: 0
lionwar is on a distinguished road
Riferimento: Object Oriented Programming - lezione 5 - attributi dei metodi

Veroooo....non ci avevo pensato.
Io mi fermavo solo a pensare all'output....
ti ringrazio per la dritta...
ancora complimentoni
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 18-04-08, 17:45
Zolmandacuba's Avatar
Member
 
Join Date: Apr 2008
Posts: 60
Rep Power: 1
Zolmandacuba is on a distinguished road
Send a message via Skype™ to Zolmandacuba
Re: Object Oriented Programming - lezione 5 - attributi dei metodi

eh si, col "trace" puoi anche scrivere " bravo sei il guru di as3"!

lui te lo dice, ma tu lo sei?


ps: bei tutorials
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Flash Multi Gallery
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Object Oriented Programming - lezione 4 - attributi delle proprietà Flep Programmazione Orientata agli Oggetti - tutorials 1 31-10-08 21:22
Object Oriented Programming - lezione 7 - packages Flep Programmazione Orientata agli Oggetti - tutorials 2 28-10-08 14:12
Object Oriented Programming - lezione 9 - l' Ereditarietà Flep Programmazione Orientata agli Oggetti - tutorials 16 10-10-08 16:36
Object Oriented Programming - lezione 3 - i metodi Flep Programmazione Orientata agli Oggetti - tutorials 1 26-06-08 16:49
Object Oriented Programming - lezione 8 - le costanti Flep Programmazione Orientata agli Oggetti - tutorials 0 21-09-07 17:52


All times are GMT. The time now is 04:42.


Powered by vBulletin versione 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap


FlepStudio
by Filippo Lughi
P.IVA 03605860406