Comunidad de diseño web y desarrollo en internet online

Que hace exactamente private?

Citar            
MensajeEscrito el 22 Jun 2007 04:02 pm
Buenas, pues eso, que hace exactamente private? Según he leido en la ayuda de flash para que una variable o función no se pueda modificar ni llamar desde fuera de la clase o clases que heredan a la clase de la variable privada. También dice que no garantiza que se pueda acceder a ella en tiempo de ejecución. Pero entonces, ¿para que diablos sirve?

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 22 Jun 2007 04:42 pm
Private sirve para definir una funcion o variable que solo va a ser accesive dentro de la propia clase, y no va a ser accesible desde fuera de ella. Simplemente para mantener una buena estructura del código y evitar posibles errores de programación. Si la variable si que debe de ser accesible desde fuera de la clase la defines como public.
No es necesario pero si recomendable

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 22 Jun 2007 05:43 pm
Pero entonces como es que si yo hago

Código :

class prueba{
private var variable:Number = new Number (3)
}
i desde un fla lo llamo con un trace

Código :

var my:prueba = new prueba()
trace (prueba.variable)
me devuelve la variable correctamente?

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 22 Jun 2007 08:11 pm
Ese código no te puede devolver correctamente el valor de la variable...
por lo menos tal cual lo has posteado, marca este error:

**Error** Escena=Escena 1, capa=Capa 1, fotograma=1:Línea 2: La propiedad a la que se hace referencia no cuenta con el atributo estático.
trace(prueba.variable);

Total de errores de ActionScript: 1 Errores comunicados: 1

1. porque tal como has definido la variable es una variable estática:

Código :

private static var variable:Number = new Number(3);

2. solucionado lo de static, te dará error de privado:
**Error** Escena=Escena 1, capa=Capa 1, fotograma=1:Línea 2: El miembro de clase es privado y no permite el acceso.
trace(prueba.variable);

Total de errores de ActionScript: 1 Errores comunicados: 1

para poder acceder has de colocar esto:

Código :

public static var variable:Number = new Number(3);

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 22 Jun 2007 08:15 pm
Perdón, quería decir:

Código :

class prueba{
private var variable:Number = new Number (3)
}

i desde un fla lo llamo con un trace

Código :


var my:prueba = new prueba()
trace (my.variable)

me devuelve la variable correctamente i la he definido como private

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 22 Jun 2007 10:23 pm
¿Seguro que estas colocando ese mismo código? porque a mi me da error:

Código :

**Error** Escena=Escena 1, capa=Capa 1, fotograma=1:Línea 2: El miembro de clase es privado y no permite el acceso.
     trace(my.variable);

Total de errores de ActionScript: 1     Errores comunicados: 1

otra cosa es que en tu código no estés definiendo el tipo de clase:

Código :

var my = new prueba();

En ese caso la estás definiendo de tipo object. y las variables de tipo object por defecto son dinámicas con lo que todas las variables de la clase pasan a ser dinámicas y publicas (aunque las hayas escrito como privadas).

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 23 Jun 2007 09:01 am
Vaya, pues al final era eso del tipo de clase...Muchas gracias ;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 28 Jun 2007 12:56 pm
osea que si la variable no es estatica no se podra acceder?

Lo digo, porque si en la clase prueba definieramos una funcion por ejemplo:

Código :

  public function prueba1(){
     trace("prueba1");
}


Y intentaramos acceder a esta funcion des de el otro codigo, no nos dejaria, dice que no encuentra la funcion i tendriamos que poner:

Código :

static function prueba1(){
  trace("prueba1");
}


en este caso si que accederiamos a la funtion, el problema radica en que si en esta clase intento acceder a un elemento que esta en el escenario no lo encuentra.

Habria alguna manera que des de un .as externo pudieramos acceder a la funcion sin necessidad que esta fuera estatica?

Por oi the crew

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Jun 2007 04:06 pm
Nooooo. Mira, una función estatica seria esta:

Código :

Math.min(2,3)
Que la podemos ejecutar tanto desde una instancia de la clase o desde la misma clase sin hacer ninguna instancia.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 29 Jun 2007 08:22 pm
vah, pero Math es una en un millón, es decir puedes usar la clase Math sin instanciarla pero hasta donde yo se no se puede hacer lo mismo con muchas otras clases....

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 29 Jun 2007 11:17 pm

oi the crew escribió:



en este caso si que accederiamos a la funtion, el problema radica en que si en esta clase intento acceder a un elemento que esta en el escenario no lo encuentra.

eso no es problema de atributos sino de ámbitos!!
Define tu problema con mas precision!!!

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

opera
Citar            
MensajeEscrito el 30 Jun 2007 11:20 am

buzu escribió:

vah, pero Math es una en un millón, es decir puedes usar la clase Math sin instanciarla pero hasta donde yo se no se puede hacer lo mismo con muchas otras clases....

A ver, Math sólo era un ejemplo. Y claro que con algunas clases no se puede, depende de como estén construidas, de si tienen definidas variables o funciones estáticas :roll:

En resumen:
private - Para que solo se pueda acceder a la variable o función en questió desde la propia clase o las clases que la heredan. Eso quiere decir que desde el escenario no se puede.
public - por defecto aunque no pongas ni public ni private. Se puede acceder desde donde sea.

static-Para que solo se cree una por clase: si la modificas de una instancia, se modifica en todas...


Saludos

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 30 Jun 2007 03:46 pm
Claro, es mas como (ojo que dije como) definir una constante imagino yo. solo mencione lo de Math para que no se pensara que se puede hacer lo mismo con todas las clases.

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 01 Jul 2007 09:06 am
Pero no tiene porue ser constante, tu puedes cambiarle el valor tanto cómo tu quieras, pero eso afecta a todas las instancias que tu tengas de esa clase y a las nuevas que crees.;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 01 Jul 2007 03:19 pm
Claro que no es constante, por eso dije como... a lo que me referia es a que no puedes cambiar el valor desde fuera de la clase, por ejemplo con un script, llamas a la clase y le cambias el valor, no se puede ya que no puedes acceder a la variable desde afuera de la clase.

De cualquier modo no importa mucho eso, lo importante es que se entienda el uso de private.
lo cual creo que ya se ha entendido.

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.