Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Object Oriented Programming - lezione 3 - i metodi

This is a discussion on Object Oriented Programming - lezione 3 - i metodi within the Programmazione Orientata agli Oggetti - tutorials forums, part of the Articoli e tutorials category; Dopo aver visto le proprietà di una classe Actionscript 3.0 , come si usano e come si creano, è giunta l' ...


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, 16:52
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Object Oriented Programming - lezione 3 - i metodi

Dopo aver visto le proprietà di una classe Actionscript 3.0 , come si usano e come si creano, è giunta l' ora di passare a introdurre i metodi o funzioni.
Un metodo di una classe Actionscript 3.0 non è altro che una funzione che può implementare degli argomenti ( quindi ricevere dei parametri ), restituire un valore, entrambe le cose oppure nessuna delle due e quindi rimanere una semplice funzione.

Inoltre un metodo può avere attributo public o private può essere statico ( attributo static ) ma lo vedremo più avanti.

Queste funzioni, all' interno di una classe vengono chiamate metodi.

Un classico esempio di un metodo potrebbe essere il gotoAndPlay(10) della classe MovieClip. Naturalmente nessuno conosce la logica di quel metodo, a parte ingegneri e architetti di Adobe, ma sappiamo che chiamando quel metodo, la nostra timeline si sposta al keyframe n°10 ( appunto per il parametro che gli passiamo ) e da lì incomincerà a riprodurre il filmato Flash.



Detto questo, ecco alcuni esempi importanti su come creare i nostri metodi di una nostra classe...

Come definire un metodo


La sintassi corretta è la seguente: attributo nomeMetodo=function()

Creo Terza.as e la associo come Document Class di terza.fla:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Terza extends MovieClip
    {
        public function Terza()
        {
            
        }
        
        private function mioMetodo():void
        {
            
        }
    }
}
da notare nel metodo ( funzione ) mioMetodo :

private a differenza della funzione costruttrice che come abbiamo detto nella lezione 1 deve sempre essere public, non permette di chiamare questo metodo dall' esterno della classe o dalle sue istanze. PS: non preoccupiamoci ora degli attributi in quanto li vedremo a fondo nelle prossime lezioni.

function fa capire a Flash che si tratta di una funzione, quindi di un metodo.

mioMetodo è il nome che associamo al metodo in modo da poterlo richiamare

:void indica che questo metodo non restituisce nessun valore

Come chiamare un metodo


La sintassi corretta per il metodo che abbiamo appena visto è mioMetodo();

quindi
Code:
package
{
    import flash.display.MovieClip;
    
    public class Terza extends MovieClip
    {
        public function Terza()
        {
            mioMetodo();
        }
        
        private function mioMetodo():void
        {
            trace(' il metodo mioMetodo è stato chiamato');
        }
    }
}
in questo caso la funzione costruttrice chiama il metodo mioMetodo in vui è inserito del codice. Chiaramente, alla chiamata di un metodo, Flash esegue il codice esistente tra le sue parentesi graffe per cui avremo il trace.

Invece di eseguire un trace, possiamo assegnare un valore ad una proprietà chiamando un metodo, in questo modo:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Terza extends MovieClip
    {
        private var nome:String;
        
        public function Terza()
        {
            mioMetodo();
        }
        
        private function mioMetodo():void
        {
            trace(' il metodo mioMetodo è stato chiamato');
            nome='Filippo';
            trace(nome);
        }
    }
}
ho creato una proprietà di tipo String che si chiama ' nome '.

Chiamando mioMetodo(), vado ad assegnare un valore a quella proprietà e infatti eseguo subito dopo un trace della proprietà e Flash mi traccia questo output:

il metodo mioMetodo è stato chiamato

Filippo


Metodo con argomenti


Passiamo ora a vedere come definire un metodo che implementa degli argomenti, quindi che necessita un passaggio di variabili per essere chiamato.
Code:
package
{
    import flash.display.MovieClip;
    
    public class Terza extends MovieClip
    {
        private var nome:String;
        
        public function Terza()
        {
            mioMetodo();
            cambiaNome('Ulisse');
        }
        
        private function mioMetodo():void
        {
            trace(' il metodo mioMetodo è stato chiamato');
            nome='Filippo';
            trace(nome);
        }
        
        private function cambiaNome(s:String):void
        {
            nome=s;
            trace(nome);
        }
    }
}
in questo caso, dopo la chiamata al metodo mioMetodo, chiamo un nuovo metodo chiamato cambiaNome:

(s:String):void significa che questo metodo vuole un valore di tipo stringa quando viene chiamato e qusto valore prenderà il nome di ' s ' . Infatti, all' interno del metodo assegno il valore di s alla proprietà nome e l' outout del trace di Flash sarà

il metodo mioMetodo è stato chiamato

Filippo

Ulisse


per cui, la chiamata al metodo cambiaNome deve avvenire in questo modo: cambiaNome('Ulisse'); se non si passa una stringa al metodo Flash ci avviserà con questo errore:

1136: Incorrect number of arguments. Expected 1.

Flash ci sta dicendo che stiamo inviando un numero sbagliato di argomenti, dato che cambiaNome ne vuole uno.

Non c'è un numero massimo di argomenti che possiamo passare ad metodo, purchè tali argomenti abbiano nomi unici.

Nel seguente esempio, ho aggiunto una nuova proprietà di tipo int ( numero intero ) che si chiama ' anni '.

Chiamo il metodo cambiaNome e al suo interno assegno s alla proprietà nome come abbiamo già visto e n alla proprietà anni : cambiaNome('Ulisse',35);
Code:
package
{
    import flash.display.MovieClip;
    
    public class Terza extends MovieClip
    {
        private var nome:String;
        
        private var anni:int;
        
        public function Terza()
        {
            mioMetodo();
            cambiaNome('Ulisse',35);
        }
        
        private function mioMetodo():void
        {
            trace(' il metodo mioMetodo è stato chiamato');
            nome='Filippo';
            trace(nome);
        }
        
        private function cambiaNome(s:String,n:int):void
        {
            nome=s;
            anni=n;
            trace(nome);
            trace(anni);
        }
    }
}
output:

il metodo mioMetodo è stato chiamato

Filippo

Ulisse

35


Restituire un valore tramite un metodo


Un metodo di una classe può anche restituire un valore.

Ad esempio:
Code:
package
{
    import flash.display.MovieClip;
    
    public class Terza extends MovieClip
    {
        private var nome:String;
        
        private var anni:int;
        
        public function Terza()
        {
            mioMetodo();
            cambiaNome('Ulisse',35);
        }
        
        private function mioMetodo():void
        {
            trace(' il metodo mioMetodo è stato chiamato');
            nome='Filippo';
            trace(nome);
        }
        
        private function cambiaNome(s:String,n:int):void
        {
            nome=s;
            anni=n;
            trace(nome);
            trace(anni);
            nome=cambiaTutto(30);
            trace(nome);
            trace(anni);
        }
        
        private function cambiaTutto(n:int):String
        {
            anni=n;
            var nuovoNome:String='Arianna';
            return nuovoNome;
        }
    }
}
ho creato un nuovo metodo con nome cambiaTutto che vuole come parametro un numero ( int ) e restituisce una stringa:

imposto alla proprietà anni il valore di n ( valore che viene passato dalla chiamata al metodo )

anni=n;

creo una variabile locale ( cioè una variabile all' interno di un metodo viene definita locale in quanto Flash, finito di eseguire il metodo, ne libera memoria e non è più presente ) di tipo stringa alla quale assegno il valore ' Arianna '

var nuovoNome:String='Arianna';

restituisco la variabile nuovoNome

return nuovoNome;

La chiamata al metodo cambiaTutto avviene dal metodo cambiaNome e avviene in questo modo:

nome=cambiaTutto(30);

praticamente assegno direttamente alla proprietà nome il valore restituito dal metodo cambiaTutto, passandogli un numero che intanto lo stesso metodo cambiaTutto utilizzerà per assegnarlo alla proprietà anni.

Inoltre, si nota che l' ultimo trace viene eseguito dall' interno del metodo cambiaNome subito dopo la chiamata a cambiaTutto in quanto se l' avessi inserito come ultimo comando nel metodo cambiaTutto non sarebbe stato eseguito perchè Flash dopo un comando return non esegue la riga successiva.

Output:

il metodo mioMetodo è stato chiamato

Filippo

Ulisse

35

Arianna

30


Un metodo può restituire un solo valore.

Non assegnare un nome che inizia con un numero ad alcun metodo .

In una classe ogni metodo deve avere un nome unico.

Allego i files:
Attached Files
File Type: zip lezione_3.zip (5.5 KB, 49 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:57..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 26-06-08, 16:49
Junior Member
 
Join Date: Jun 2008
Posts: 3
Rep Power: 0
dRyW is on a distinguished road
Re: Object Oriented Programming - lezione 3 - i metodi

Ciao sono nuovo e so meno di zero.

Probabilmente la domanda trova risposta nelle precedenti lezioni,
ad ogni modo nel:

Metodo con argomenti


Passiamo ora a vedere come definire un metodo che implementa degli argomenti, quindi che necessita un passaggio di variabili per essere chiamato.
Code:
package
{
    import flash.display.MovieClip;
    
    public class Terza extends MovieClip
    {
        private var nome:String;
        
        public function Terza()
        {
            mioMetodo();
            cambiaNome('Ulisse');
        }
        
        private function mioMetodo():void
        {
            trace(' il metodo mioMetodo è stato chiamato');
            nome='Filippo';
            trace(nome);
        }
        
        private function cambiaNome(s:String):void
        {
            nome=s;
            trace(nome);
        }
    }
}
a quanto ho capito scrivendo mioMetodo() si sta eseguendo la funzione mioMetodo, ma questa funzione [scrivendo soltanto mioMetodo()] non verrebbe eseguita da flash perchè bisogna crearla[con private function mioMetodo():void]. Se questo ragionamento è giusto io mi chiedo perchè scrivere private function mioMetodo():void dopo aver eseguito la fonzione mioMetodo()?
Sinceramente ho già pensato ad una risposta plausibile ossia che flash reputa tutti queste istruzioni sullo stesso piano gerarchico ma non ne sono sicuro.
Comunque grazie in anticipo per la risposta.
ciao.
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 6 - Getter & Setter Flep Programmazione Orientata agli Oggetti - tutorials 1 14-06-08 18:36
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 05:01.


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