Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Object Oriented Programming - lezione 6 - Getter & Setter

This is a discussion on Object Oriented Programming - lezione 6 - Getter & Setter within the Programmazione Orientata agli Oggetti - tutorials forums, part of the Articoli e tutorials category; La volta scorsa ( lezione 5 ) abbiamo visto come utilizzare gli attributi con i metodi di una classe Actionscript 3.0 . ...


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:21
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Object Oriented Programming - lezione 6 - Getter & Setter

La volta scorsa ( lezione 5 ) abbiamo visto come utilizzare gli attributi con i metodi di una classe Actionscript 3.0 .

Abbiamo inoltre visto come ' incapsulare ' una proprietà utilizzando un metodo che una volta chiamato restituisce il valore di tale proprietà.



Un' altro modo per poter incapsulare una proprietà con Actionscript 3.0 sono i cosìdetti metodi setter & getter.

Avevo già accennato a loro in un articolo: getter & setter ed ora andiamo ad approfondire il discorso.



Seguitemi...



Creo il solito FLA che salvo con nome ' sesta.as '.

Gli associo la seguente Document Class ( Sesta.as ) :
Code:
package
{
    import flash.display.MovieClip;
    
    public class Sesta extends MovieClip
    {
        public function Sesta()
        {
            
        }
    }
}
Ora creo un' altra classe ( Miles.as ) :
Code:
package
{
    public class Miles
    {
        public function Miles()
        {
            
        }
    }
}
e gli assegno una proprietà di tipo Number che si chiama _prova e gli assegno un valore pari a 100 :
Code:
package
{
    public class Miles
    {
        private var _prova:Number=100;
        
        public function Miles()
        {
            trace('la classe Miles è stata istanziata correttamente');
        }
    }
}
utilizzo l' underscore prima del nome perchè è buona norma utilizzarlo in una proprietà che è incapsulata da metodi getter & setter ( che stiamo per vedere ).

Istanzio la classe Miles da Sesta:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Sesta extends MovieClip
    {
        private var miles:Miles;
        
        public function Sesta()
        {
            miles=new Miles();
        }
    }
}
chiaramente ottengo questo output: la classe Miles è stata istanziata correttamente

Fino a quì niente di nuovo.

Abbiamo visto nella lezione 5 come creare un metodo che restituisca il valore della variabile _prova senza dover rendere pubblica la stessa variabile.

Con i metodi getter & setter, posso fare in questo modo:
Code:
package
{
    public class Miles
    {
        private var _prova:Number=100;
        
        public function Miles()
        {
            trace('la classe Miles è stata istanziata correttamente');
        }
        
        public function get prova():Number
        {
            return _prova;
        }
    }
}
public function definisco il metodo pubblico

get serve per dire a Flash di accedere al valore delle proprietà _prova

prova è il nome del metodo ( potrebbe anche avere nome pinco o pallino ma è sembre buono assegnare al get un nome uguale alla proprietà che incapsuliamo senza l' underscore )

:Number sigifica che resituisce un numero ( appunto perchè _prova è di tipo Number )



Chiamo prova da Sesta.as :
Code:
package
{
    import flash.display.MovieClip;
    
    public class Sesta extends MovieClip
    {
        private var miles:Miles;
        
        public function Sesta()
        {
            miles=new Miles();
            trace(miles.prova);
        }
    }
}
DA NOTARE: miles.prova

Non ho chiamato miles.prova() come fosse una chiamata normalissima ad un metodo, ma la chiamata è miles.prova. Sembra che Miles.as abbia una proprietà che si chiama prova ma non è vero. E' il get che fa tutto questo.

Adesso la proprietà _prova di Miles è incapsulata ed è solo leggibile, infatti se provassi a cambiare il suo valore:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Sesta extends MovieClip
    {
        private var miles:Miles;
        
        public function Sesta()
        {
            miles=new Miles();
            trace(miles.prova);
            miles.prova=200;
        }
    }
}
Flash mi avviserebbe con il seguente errore:

1059: Property is read-only.

La proprietà è solo leggibile.

Se volessimo permettere di accedere anche in fase di scrittura alla proprietà _prova di Miles, dovremmo aggiungere un setter in questo modo:
Code:
package
{
    public class Miles
    {
        private var _prova:Number=100;
        
        public function Miles()
        {
            trace('la classe Miles è stata istanziata correttamente');
        }
        
        public function get prova():Number
        {
            return _prova;
        }
        
        public function set prova(n:Number):void
        {
            _prova=n;
        }
    }
}
public function definisco il metodo pubblico

set serve per far capire a Flash che deve cambiare un valore di una proprietà

prova è il nome del metodo ( deve essere uguale al nome del setter )

(n:Number) il metodo vuole un paramero di tipo Number ( chiaramente stesso tipo della variabile che incapsuliamo )

:void che non resituisce alcun valore

e cambiamo il valore di _prova nel seguente modo:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Sesta extends MovieClip
    {
        private var miles:Miles;
        
        public function Sesta()
        {
            miles=new Miles();
            trace(miles.prova);
            miles.prova=200;
            trace(miles.prova);
        }
    }
}
miles.prova=200; anche in questo caso ( come nel setter ) viene chiamato il metodo set prova come fosse una proprietà ed otteniamo questo output:

la classe Miles è stata istanziata correttamente

100

200

Allego i files:
Attached Files
File Type: zip lezione_6.zip (6.6 KB, 33 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 12:00..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 14-06-08, 18:36
tia tia is offline
Junior Member
 
Join Date: Jan 1970
Posts: 21
Rep Power: 0
tia is on a distinguished road
Talking Re: Object Oriented Programming - lezione 6 - Getter & Setter

Ciao Flep...grazie ancora per tutte queste risorse che rendi disponibili...
Ti volevo chiedere:
Qual'è l'utilita di usare questi Getter o Setter?
Perche nel caso li usi tutti e due tanto valeva rendere la variabile pubblica no?

Inoltre se si volesse usare solo il getter non risulta un po' antipatica la cosa di dover creare una funizione per ogni variabile che si voglia leggere?
Io ad esempio leggendo la lezione 5 di OOP pensavo che la funzione:
Code:
 public function prendiNome():String
        {
            return nome;
        }
Poteva essere resa più flessibile in questo modo:
Code:
 public function prendiVariabile(variabile:String):String
        {
            return eval(variabile);
        }
Così hai una sola funzione per tutte le variabili, anche perchè cmq non è una funzione che fa danni, ti fa leggere solo il contenuto della varibile..
Dimmi se mi sbaglio o non tengo in considerazione fattori importanti...

Complimenti ancora per tutto...
Ciaoooooo
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

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 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 5 - attributi dei metodi Flep Programmazione Orientata agli Oggetti - tutorials 4 18-04-08 17:45
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:44.


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