Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Incapsulamento e metodi Getter & Setter

This is a discussion on Incapsulamento e metodi Getter & Setter within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Citando Actionscript 3.0 e quindi la Programmazione Orientata agli Oggetti, non posso e non voglio 'bypassare' l'incapsulamento ed ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  2 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 19-09-07, 14:07
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Incapsulamento e metodi Getter & Setter

Citando Actionscript 3.0 e quindi la Programmazione Orientata agli Oggetti, non posso e non voglio 'bypassare' l'incapsulamento ed i metodi Getter & Setter. L'incapsulamento è una tecnica per proteggere/nascondere le proprietà della nostra Classe. Questo perchè, potremmo trovarci nella situazione di dover creare una Classe per poi consegnarla ad un cliente o un designer ma non vogliamo che abbiano accesso diretto alle proprietà della nostra classe. Per chi si affaccia ora alla programmazione potrebbe apparire complesso, ma vedremo di smentire questa sensazione. Mi spiego meglio,
abbiamo visto come definire delle proprietà nelle nostre classi:
Code:
package
{	import flash.display.MovieClip;

	public class Filippo extends MovieClip	
	{		
		private var mano:MovieClip;		
		private var misura:Number;		
		
		public function Filippo()		
		{
			
		}	
	}
}
Nella classe Filippo, mani e misura sono 2 proprietà. Fino ad ora abbiamo accesso alle proprietà nel modo più comune, vale a dire direttamente:
Code:
package
{	
	import flash.display.MovieClip;	
	import flash.display.Shape;		
	
	public class Filippo extends MovieClip	
	{		
		private var mano:Shape;		
		private var misura:Number=100;	
		
		public function Filippo()		
		{                       
			misura=400;			
			mano=new Shape();			
			mano.graphics.beginFill(0xFFCC00);			
			mano.graphics.drawRect(0,0,misura,misura);			
			mano.graphics.endFill();			
			addChild(mano);		
		}	
	}
}

Se noi istanziassimo la classe dalla Timeline in questo modo:
var filo:Filippo=new Filippo();
per poter dare accesso alla proprietà mano, dovremmo cambiarne la sua definizione da private a public e non è buona norma.
Se volessimo che chi usa la classe acceda alle proprietà ma non direttamente (in quanto private) dobbiamo definire dei metodi che restituiscono quelle proprietà. Eccoci al punto, abbiamo 2 modi:
Code:
package
{	
	import flash.display.MovieClip;	
	import flash.display.Shape;		
	
	public class Filippo extends MovieClip	
	{		
		private var mano:Shape;		
		private var misura:Number=100;	
		
		public function Filippo()		
		{			
			mano=new Shape();			
			mano.graphics.beginFill(0xFFCC00);			
			mano.graphics.drawRect(0,0,misura,misura);			
			mano.graphics.endFill();			
			addChild(mano);		
		}				
		
		public function dammiLaMisura():Number		
		{			
			return misura;		
		}		
		
		public function tieniLaMisura(n:Number):void		
		{			
			misura=n;		
		}	
	}
}
in questo caso accederemmo alla proprietà misura dalla Timeline in questo modo:
var filippo:Filippo=new Filippo();
filippo.tieniLaMisura(400);
trace(filippo.dammiLaMisura());

oppure i Setter & Getter:
Code:
package
{
	import flash.display.MovieClip;
	import flash.display.Shape;
	
	public class Filippo extends MovieClip
	{
		private var mano:Shape;
		private var _misura:Number=100;
		
		public function Filippo()
		{
			mano=new Shape();
			mano.graphics.beginFill(0xFFCC00);
			mano.graphics.drawRect(0,0,misura,misura);
			mano.graphics.endFill();
			addChild(mano);
		}
		
		public function set misura(n:Number):void
		{
			_misura=n;
		}
		public function get misura():Number
		{
			return _misura;
		}
	}
}

in questo caso accederemmo alla proprietà misura in questo modo:
var filippo:Filippo=new Filippo();
filippo.misura=400;
trace(filippo.misura);

In entrambi i casi abbiamo implementato dei metodi pubblici per assegnare o ricevere un valore delle proprietà private.
Alcuni programmatori ( tra cui il sottoscritto :P )considerano il primo esempio troppo scomodo, in quanto è più semplice :
filo.misura=400; (getter&setter)
invece di
filo.tieniLaMisura(400);

Stay tuned !
__________________

 


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

  #2 (permalink)  
Old 13-11-07, 16:06
Junior Member
 
Join Date: Nov 2007
Posts: 20
Rep Power: 0
foriddo is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

Ciao Flep....non posso che farti i complimenti per questa splendida guida che permette anche a me che non sono un grande programmatore di seguire le lezioni con abbastanza facilità.

Per la lezione in questione "Incapsulamento e metodi Getter & Setter" ho fatto tutto alla lettera ma mi da errore nel file swf. L'errore è questo:

Error: Error #2136: Il file SWF file:///G|/lavori/corso%5Fas3/sesta.swf contiene dati non validi.
at Sesta/::frame15()

Il codice che ho inserito nel frame 15 è questo:
var sesta:Sesta=new Sesta();
sesta.misura=150;
trace(sesta.misura);


Cosa sbaglio?
Grazie
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 13-11-07, 16:40
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

E' strano quell' errore...
per caso muovi la timeline principale ?
Mi faresti vedere l' intera classe ?
__________________

 


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 14-11-07, 09:07
Junior Member
 
Join Date: Nov 2007
Posts: 20
Rep Power: 0
foriddo is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

Quote:
Originally Posted by Flep View Post
E' strano quell' errore...
per caso muovi la timeline principale ?
Mi faresti vedere l' intera classe ?
La mia classe è la seguente:
package
{
import flash.display.MovieClip;
import flash.display.Shape;

public class Sesta extends MovieClip
{
private var mano:Shape;
private var _misura:Number=300;

public function Sesta()
{
mano=new Shape();
mano.graphics.beginFill(0xFFCC00);
mano.graphics.drawRect(0,0,misura,misura);
mano.graphics.endFill();
addChild(mano);


}
public function set misura(n:Number):void
{
_misura=n;
}
public function get misura():Number
{
return _misura;
}
}
}

Nel primo frame del sesta.fla:
var sesta:Sesta=new Sesta();
sesta.misura=150;
trace(sesta.misura);
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 14-11-07, 09:21
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

Il codice è tutto corretto.
Hai detto che istanzi la classe Sesta dal frame1, ma la timeline si muove ? Nel senso c'è uo stop nel frame 1 oppure no ?
__________________

 


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

Flash Multi Gallery
  #6 (permalink)  
Old 14-11-07, 10:56
Junior Member
 
Join Date: Nov 2007
Posts: 20
Rep Power: 0
foriddo is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

Mi da lo stesso errore sia che metto lo stop(); sia che non lo metto nel frame 1...
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #7 (permalink)  
Old 14-11-07, 10:57
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

Aspetta, ho notato adesso.
Togli extends MovieClip.
__________________

 


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

  #8 (permalink)  
Old 14-11-07, 11:09
Junior Member
 
Join Date: Nov 2007
Posts: 20
Rep Power: 0
foriddo is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

ho tolto extends MovieClip

ora mi tira fuori i seguenti errori:
1180: Chiamata al metodo non definito addFrameScript.
1180: Chiamata al metodo non definito addChild.
5000: La classe 'Sesta' deve essere una sottoclasse di 'flash.display.MovieClip' perché è collegata a un simbolo di libreria di quel tipo.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #9 (permalink)  
Old 14-11-07, 11:15
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

Se è collegata ad un simbolo in libreria allora deve estendere per forza MovieClip.
Quindi rimettilo e facciamo un passo indietro.
Non ho ancora provato a utilizzare getter&setter in una classe linkata ad una MovieClip in libreria.

Non so se è possibile.
Prova a dichiarare la classe così:
public dynamic class Sesta extends MovieClip
__________________

 


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

  #10 (permalink)  
Old 14-11-07, 11:35
Junior Member
 
Join Date: Nov 2007
Posts: 20
Rep Power: 0
foriddo is on a distinguished road
Re: Incapsulamento e metodi Getter & Setter

sempre lo stesso errore...
se c'è un modo ti invio il .fla e il .as non voglio farti perdere ulteriore tempo
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 6 - Getter & Setter Flep Programmazione Orientata agli Oggetti - tutorials 1 14-06-08 18:36
Encapsulation, Getter and Setter methods Flep Tutorials 6 08-02-08 12:34
metodi set e get x sprite obj boxbuilder Actionscript 3.0 base 6 21-01-08 10:43
Domande sui metodi del game gallina Marco756 Actionscript 3.0 base 2 04-01-08 10:54
Tutorial 6 - Getter & Setter Flep Object Oriented Programming - tutorials 0 23-10-07 07:00


All times are GMT. The time now is 11: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