|
Veo que hay ideas sobre lo que es un prototipo,
pero por si alguien
todavia no se aclara, aqui va una explicacion m�s
simple:
INTRODUCCION A OOP
=====================================================
(hablaremos de OOP, prototipaje, herencia,
funciones, variables,
m�todos y propiedades, por si alguien quiere
saltarse este mail :-)
ActionScript es un lenguaje orientado a objetos
(OO).
La forma ideal de programar en un lenguaje OO es
(curiosamente)
"Programaci�n Orientada a Objetos" (en ingles,
OOP)
Un objeto es, en un lenguaje OO, algo que se
asimila bastante
a lo que es un objeto en la vida
real.
En OOP, un objeto tiene
Por ejemplo, consideremos el objeto
"cafetera".
En el mundo real, el objeto cafetera
tiene caracteristicas (tama�o,
peso, color, precio...) que son unicas para cada
objeto.
En el mundo real, hay una serie de cosas que
puedes hacer con
una cafetera (hacer caf�, limpiarla, guardarla en
un armario...)
En OOP, las caracteristicas de cada objeto se
llaman propiedades,
y las cosas que puedes hacer con el se llaman
m�todos.
Os habreis dado cuenta de que una
propiedad es una variable,
y un m�todo es una
funci�n.
Volvamos al caso de la cafetera.
Imaginemos que tenemos una cafetera roja, de 4
tazas de capacidad,
que nos cost� 2000 pts.
En OOP, usando la "dot syntax", estas propiedades
se especificarian asi:
cafetera.color = "rojo"
cafetera.capacidad = "4"
cafetera.precio = "2000"
y los m�todos se especifican asi:
cafetera.hacerCafe();
cafetera.limpiar();
cafetera.guardar();
Vamos a centrarnos solo en ActionScript y en los
objetos que incorpora por
defecto...
En AS tenemos un objeto generico llamado
MovieClip. Cada nuevo MovieClip
que creamos es una "copia" de este objeto
gen�rico (llamado clase)
y hereda las propiedades y
m�todos de la clase gen�rica.
La "copia" de un objeto gen�rico o clase se
denomina instancia.
Esta particularidad (la
herencia) es uno de los puntos fuertes de AS, y lo
situa
al nivel de lenguajes de alto nivel como Java y
C++.
Ejemplo (no garantizo que funcione, lo estoy
escribiendo de memoria):
// creamos una instancia de la
clase MovieClip
miMovieClip = new
MovieClip;
// asignamos valores a las
propiedades del MovieClip
miMovieClip._x =
100;
miMovieClip._y =
100;
// probamos a llamar a un
m�todo de la clase
miMovieClip.gotoAndStop(2);
Vale, hasta ahora es facil. Todos los objetos que
creamos a partir de
una clase heredan todos sus m�todos y propiedades
(con valores nulos).
Pero... �qu� pasa cuando a�ado propiedades a mi
instancia?
Es decir...
// creamos otra instancia de
la clase MovieClip
miOtroMovieClip = new
MovieClip;
// a�adimos propiedades a la
nueva instancia
miOtroMovieClip.mipropiedad =
"mivalor";
La pregunta es... �como afecta esto a la otra
instancia?
La respuesta es... de ninguna
manera.
Si ahora hicieramos un
trace(miMovieClip.mipropiedad);
no obtendriamos ningun resultado.
Sin embargo, si hacemos
trace(miOtroMovieClip.mipropiedad);
obtendriamos "mivalor"
Lo cual en cierto modo es deseable, ya que no
queremos que las propiedades
de MovieClips distintos se modifiquen por
accidente al cambiar uno de ellos.
Pero...
�y si queremos a�adir una propiedad a todos los
objetos de la misma clase?
La respuesta se llama prototipo.
Podemos pensar en el prototipo como la
clase de la que proviene una clase.
Cada vez que creamos una instancia, Flash la crea
a partir de la clase de
el objeto. Las propiedades y m�todos de la clase
se almacenan en el prototipo
de dicha clase.
Por ejemplo, si quisieramos a�adir a todos los
MovieClip la propiedad "mipropiedad",
hariamos algo como:
MovieClip.prototype.mipropiedad = mivalor;
y todos los MovieClip que creemos tendran esa
propiedad con ese valor.
No solo eso, sino que todos los MovieClip
que ya teniamos en la pelicula
adoptan la nueva
propiedad.
Con los m�todos el mecanismo es
igual:
MovieClip.prototype.miMetodo =
function miFuncion(parametros){
// aqui va
la funcion que usaremos como m�todo
}
Empezamos a ver que la potencia y las
posibilidades de la herencia y el
prototipaje parecen no tener
l�mites.
Sin embargo, debido a que en la implementaci�n
del plugin de Flash se han
sacrificado varias funcionalidades, el uso mas
interesante de los prototipos
de hecho no funciona...
Os invito a que intenteis crear un m�todo en el
prototipo de MovieClip
que sea fadeIn() y otro que sea fadeOut(), que
modifiquen el _alpha
del MovieClip usando un bucle, y probeis
a llamarlas desde un boton:
en el primer frame:
MovieClip.prototype.fadeIn =
function miFadeIn(){
while
(this._alpha <= 100){
this._alpha += 1;
}
}
MovieClip.prototype.fadeOut =
function miFadeOut(){
while
(this._alpha >= 0){
this._alpha -= 1;
}
} y en el boton:
on(rollOver){
miMovieClip.fadeIn();
}
on(rollOut){
miMovieClip.fadeOut();
}
y que descubrais que no funciona :-)
(De hecho si funciona, pero no como
esperamos)
En fin, me estoy liando y ya he explicado lo que
pretendia explicar.
Nos metemos en terreno
pantanoso, si alguien quiere leer algo
interesante
sobre OOP y prototipos, que se baje este PDF, que en mi opinion debe aclarar
todas las dudas sobre el tema. (Es el primer apendice del libro "Flash 5
Dynamic
Content Studio" de Friends Of Ed, que fue el que me hizo decidirme a
comprar
el libro :-)
Una vez mas, sorry por la paliza de mail... cada
dia me salen mas largos... :-)
a!e
/going.back.to.work
|
- Re: [flashmaestro] Mas sobre prototipos a!e mu�oz
- Re: [flashmaestro] Mas sobre prototipos Fernando Egido Ega�a
- RE: [flashmaestro] Mas sobre prototipos kadazuro
- RE: [flashmaestro] Mas sobre prototipos Daniel Feierstein
- Re: [flashmaestro] Mas sobre prototipos Antonio Olias
- RE: [flashmaestro] Mas sobre prototipos kadazuro
- Re: [flashmaestro] Mas sobre prototipos Jes�s
- RE: [flashmaestro] Mas sobre prototipos kadazuro
- Re: [flashmaestro] Mas sobre prototipos Antonio Olias
