[flashmaestro] [MX] OOP: herencia
Totalmente de acuerdo con todo lo que has dicho. Solo decir que use la
palabra sobreescribir porque no se como se llama exactamente eso en
castellano. En Ingles el termino es override (algo asi como anular). Pero
esta claro que el metodo sigue en el prototype de la superclase. Pero si lo
encuentra en su prototype no seguira buscando en el prototype de clases
superiores, para eso precisamente esta super.
un saludo
Joseba Alonso
www.sidedev.net
- Original Message -
From: "nosleep" <[EMAIL PROTECTED]>
To: "flashmaestro List Member" <[EMAIL PROTECTED]>
Sent: Friday, September 20, 2002 10:45 PM
Subject: [flashmaestro] [MX] OOP: herencia
> Ajam...
> Si, tienes razón sobre lo de llamar desde un método cualquiera de una
> subclase con "super" no tiene mucho sentido ya que se puede llegar a el
> a través de "this" (no se en que estaba pensando), pero hay ciertas
> cosas que no entiendo de tu esplicación.
> El caso es que cuando tenemos un método "ladra" definido en una
> superclase y otro método "ladra" definido en una de sus subclases, no
> podemos usar la palabra "this" para implementar el método "ladra" de
> superclase porque estaríamos llamando al mismo método donde estamos con
> recursividad. Para eso usamos super, para decir que flash mira en el
> método
> de la clase superior. Hasta aquí de guti.
> Pero no estamos sobrescribiendo en ningún momento el método "ladra" de
> superclase, los dos métodos existen pero al instanciar con:
>
> p = new snoopy();
> p.ladra();
>
> Flash mira primero en la clase snoopy si tiene un método "ladra" y si lo
> tiene lo ejecuta, si no mirará pasando por la cadena de herencia hasta
> que no encuentre el método en las clases superiores.
>
> Perro = function() {}
> Perro.prototype = new Animal();
> Perro.prototype.ladra = function()
> {
> trace("metodo ladra desde Perro")
>
> }
>
> Snoopy = function() {}
> Snoopy.prototype = new Perro();
> Snoopy.prototype.noladra= function()
> {
> trace("metodo ladra desde snoopy");
>
> }
> a = new Snoopy();
> a.ladra();//metodo ladra desde Perro
>
> De hecho, yo puedo definir tres clases que heredan una de otra todas con
> el mismo método "ladra" pero cual de los métodos se va ejecutar depende
> de que clase instanciamos:
>
> Ser = function() {}
>
> Animal = function() {}
> Animal.prototype = new Ser();
> Animal.prototype.ladra = function()
> {
> trace("metodo ladra desde Animal")
> }
>
> Perro = function() {}
> Perro.prototype = new Animal();
> Perro.prototype.ladra = function()
> {
> trace("metodo ladra desde Perro")
> }
>
> Snoopy = function() {}
> Snoopy.prototype = new Perro();
> Snoopy.prototype.ladra= function()
> {
> trace("metodo ladra desde snoopy");
> }
> a = new Snoopy();
> a.ladra();
> b = new Perro();
> b.ladra();
> c = new Animal();
> c.ladra();
>
> Por lo menos yo lo entiendo así, no se si me estoy equivocando?¿?¿
>
> Otro ejemplo de pasar los parámetros a superclase
> está claro con el ejemplo que has puesto.
>
> salu2++
> +kenike.dot.org+
>
>
> ---
> El correo comprobado con
> Norton AntiVirus Corporate Edition
>
>
> -Mensaje original-
> De: Joseba Alonso [mailto:[EMAIL PROTECTED]]
> Enviado el: viernes, 20 de septiembre de 2002 15:40
> Para: flashmaestro List Member
> Asunto: [flashmaestro] [MX] OOP: herencia
>
>
> >
> > Tambien otra cosa interesante de MX es el comando "super" porque con
> el
> > podemos llamar a los métodos de las clases superiores a la nuestra sin
> > importar como se llaman. En el mismo ejemplo de a!e:
> >
> > snoopy.prototype = new perro();
> > snoopy.prototype.firmaAutografo = function(){
> > trace("¿A quien se lo dedico?");
> > super.ladra();
> > super.respira();
> > }
>
> Ahí no esta correctamente utilizado ya que al crear la herencia asi:
>
> snoopy.prototype = new perro();
>
> los metodos de perro son automaticamente copiados en la clase snoopy.
>
> Demostracion. Tu ejemplo funcionaria perfectamente sin usar super, solo
> con
> this.
>
> snoopy.prototype = new perro();
> snoopy.prototype.firmaAutografo = function(){
> trace("¿A quien se lo dedico?");
> this.ladra();
> this.respira();
> }
>
> El comando super es mas para la reutilizacion. Siguiendo el mismo
> ejemplo la
> utilizacion correcta de super seria al sobreescribir el metodo y querer
> usar
> el metodo de la clase superior.
>
&g
[flashmaestro] [MX] OOP: herencia
Muy buena explicación, me gustaría añadir para que quede
más claro que no es necesario registrar las clases con los símbolos a,
b,
de hecho no necesitamos los símbolos a y b porque se supone que la clase
animal y perro son unas cosas abstractas que no van a tener sus
representantes físicos en el escenario. Por eso no es necesario:
Object.registerClass("a",animal);
Object.registerClass("b",perro);
para que funcione la herencia ya que la herencia se define en:
snoopy.prototype = new perro();
que a su vez hereda de:
perro.prototype = new animal();
y con registrar a snoopy ya se ha creado la cadena entre las clases
automaticamente.
+++
Tambien otra cosa interesante de MX es el comando "super" porque con el
podemos llamar a los métodos de las clases superiores a la nuestra sin
importar como se llaman. En el mismo ejemplo de a!e:
snoopy.prototype = new perro();
snoopy.prototype.firmaAutografo = function(){
trace("¿A quien se lo dedico?");
super.ladra();
super.respira();
}
salu2++
+kenike.dot.org+
---
El correo comprobado con
Norton AntiVirus Corporate Edition
-Mensaje original-
De: a!e muñoz [mailto:[EMAIL PROTECTED]]
Enviado el: jueves, 12 de septiembre de 2002 11:36
Para: flashmaestro List Member
Asunto: [flashmaestro] [MX] OOP: herencia
un ejemplo tonto de herencia en OOP para Flash MX,
por si a alguien le interesa (me gustaria documentarlo
como dios manda, pero el trabajo me sepulta...)
en la libreria hay 3 simbolos (MovieClips "a", "b" y "c"),
con identificadores para exportarlos para ActionScript
(mismo nombre)
lo del Object.registerClass se merece un libro para él
solito... si alguien tiene mucho interes podria buscar
tiempo para explicarlo...
[EMAIL PROTECTED] | bomber-studios.com | see less, think more
//INHERITANCE v2.0
//[EMAIL PROTECTED]
animal = function(){
//
}
animal.prototype = new MovieClip();
animal.prototype.respira = function(){
trace("Respirando");
}
Object.registerClass("a",animal);
perro = function(){
//
}
perro.prototype = new animal();
perro.prototype.ladra = function(){
trace("Woof, woof!");
}
Object.registerClass("b",perro);
snoopy = function(){
//
}
snoopy.prototype = new perro();
snoopy.prototype.firmaAutografo = function(){
trace("¿A quien se lo dedico?");
}
Object.registerClass("c",snoopy);
_root.attachMovie("c","miSnoopy",1);
_root.miSnoopy.respira(); // Respirando
_root.miSnoopy.ladra(); // Woof, woof!
_root.miSnoopy.firmaAutografo(); // ¿A quien se lo dedico?
[flashmaestro] [MX] OOP: herencia
Yo tengo una question que no es exactamente esto pero que va con el tema :)
ahi va
El RegisterClass es cojonudo, hace que cualquier mc de la libreria, al
instanciarlo, herede los metodos de una clase. Perfecto. Pero y si el clip
esta en el escenario? Me gustaria poder darle a una instancia todos los
miembros de una clase aplicandolo dinamicamente o sea que la instancia x
tenga los metodos/propiedades de una clase y que en un momento dado los
tenga de otra. Como el RegisterClass pero para instancias. Se me ocurre el
metodo bestia de aplicarselos con un for loop algo asi como:
for (miembro in clase){
instancia[miembro] = clase[miembro];
}
Este sistema tiene un pequeño problema y es que si lo hago por segunda vez
con otra clase la instancia tendria miembros de las dos clases y eso no
interesa. Tendria que hacer un delete() por medio y las cosas ya se
complicarian mas
hay alguna otra manera de hacerlo mas elegantemente?
un saludo
Joseba Alonso
www.sidedev.net
- Original Message -
From: "a!e muñoz" <[EMAIL PROTECTED]>
To: "flashmaestro List Member" <[EMAIL PROTECTED]>
Sent: Thursday, September 12, 2002 11:36 AM
Subject: [flashmaestro] [MX] OOP: herencia
> un ejemplo tonto de herencia en OOP para Flash MX,
> por si a alguien le interesa (me gustaria documentarlo
> como dios manda, pero el trabajo me sepulta...)
>
> en la libreria hay 3 simbolos (MovieClips "a", "b" y "c"),
> con identificadores para exportarlos para ActionScript
> (mismo nombre)
>
> lo del Object.registerClass se merece un libro para él
> solito... si alguien tiene mucho interes podria buscar
> tiempo para explicarlo...
>
>
> [EMAIL PROTECTED] | bomber-studios.com | see less, think more
>
>
>
>
> //INHERITANCE v2.0
>
>
> //[EMAIL PROTECTED]
>
>
>
> animal = function(){
> //
> }
> animal.prototype = new MovieClip();
> animal.prototype.respira = function(){
> trace("Respirando");
> }
> Object.registerClass("a",animal);
>
> perro = function(){
> //
> }
> perro.prototype = new animal();
> perro.prototype.ladra = function(){
> trace("Woof, woof!");
> }
> Object.registerClass("b",perro);
>
> snoopy = function(){
> //
> }
> snoopy.prototype = new perro();
> snoopy.prototype.firmaAutografo = function(){
> trace("¿A quien se lo dedico?");
> }
> Object.registerClass("c",snoopy);
>
>
> _root.attachMovie("c","miSnoopy",1);
>
> _root.miSnoopy.respira(); // Respirando
> _root.miSnoopy.ladra(); // Woof, woof!
> _root.miSnoopy.firmaAutografo(); // ¿A quien se lo dedico?
>
