¿Extender MovieClip? No, gracias
Cual Tomate versión friki, hoy va a haber polémica: ¿Extender MovieClip? No, gracias:
- Si extiendes de MovieClip no puedes extender de nada más, en Flash no hay herencia múltiple (o casi).
- MovieClip es una clase dinámica, por lo que te cargas toda la validación de variables al compilar. Es decir, si tienes una clase con una propiedad que se llama “wadus” y luego intentas acceder a ella con algo como “wauds”, el compilador NO canta. Esos errores me han hecho perder *muchas* horas absurdamente.. Actualizado, ver Extender de MovieClip. Su envainamiento, gracias.
- Instanciar clases que extienden de MovieClip es raro ya que no puedes hacer un new, tienes que crear las instancias con attachMovie.
Así que lo que hago normalmente es crear un MovieClip y pasárselo a las clases para que “trabajen” sobre el, incluso para las clases de objetos gráficos (como ComboBox o TextArea). Eso se llama formalmente composición.
Lo que también es cierto es que esta es una pelea que siempre que sale levanta bastante polémica entre frikis gafotas que al final acaban mentando a la biblia y sus apóstoles. Para mi es algo bastante más pragmático, la verdad. Para más puntos de vista y debate, podéis echarle un ojo a este hilo de ASNativos.
Y ya que estoy, aprovecho para meter la puntilla del IDE de Flash. No descubro nada si digo que su compilador es digamos… umm.. ¿malo? Pero ya sé querido diseñador y/o flojeras que no quieres venir al lado oscuro, que tu amas a tu IDE por encima de todas las cosas. Ok, no problemo. Pero échale un ojo a FLASC (FlashIDE + MTASC). Te vas a ahorrar muchos problemas.
Ánimo con el lunes
January 15th, 2007 at 10:39 am
Cuando has dicho “(…)entre frikis gafotas que al final acaban mentando a la biblia y sus apóstoles.” lo he relacionado con la Ley de Brayan la cual se comenta en Cristalab aquí:
http://www.cristalab.com/blog/33541/la-ley-de-brayan
Sería gracioso ver como en mitad de una discusión “herencia vs composición” apareciesen comentarios del tipo:
“Jesus hereda claramente de Dios su amor y misericordia”
“El que Eva se crease a partir de una costilla es un mensaje claro de Nuestro Señor a favor de la composición, al igual que lo es la Santisima Trinidad”
elSuricatoApostata
January 17th, 2007 at 6:30 am
¡Alabado!
Se ha cumplido de nuevo.
January 19th, 2007 at 7:38 pm
Siento decirte que el punto 2 no es correcto, que MovieClip sea una clase dinamica no implica que sus subclases lo sean. Es decir el “dynamic” no afecta a subclases. x)
No es por joder, es que uso bastante la herencia de MovieClip xD
January 21st, 2007 at 3:12 pm
Buenas,
interesante post….por mi experiencia puedo decir que en mi metodologia de trabajo nunca extiendo de MovieClip, siempre me creo una clase exclusiva para él y le paso en su constructor el mc…
Me es mucho más cómodo así.
saludos
March 13th, 2008 at 9:11 am
Respecto al primer punto, siempre puedes usar interfaces (que también hay que manejarlos con delicadeza). No es herencia múltiple, pero ayuda.
El tercer punto tampoco es cierto. Se pueden hacer “new” en AS3 y en AS2(ver http://www.somms.net/articulos/de-actionscript-20-y-la-herencia-del-movieclip/)
Yo uso mucho la herencia. Cierto es que si no se tiene experiencia con ella, mejor usar la composición.
Un saludo.
March 13th, 2008 at 9:51 am
Buenas Julio,
A mi personalmente no me gusta usar Object.registerClass, lo veo como un hack. Quicir, una vez me costó bastante explicarle a uno de Java por qué no podía crear una instancia de una clase con un simple new, algo sencillo, claro y obvio en cualquier lenguaje.
Además como bien comentas en tu artículo (”me queda el mal sabor de boca de no poder pasar parámetros al constructor”, “al compilar con Flash MX 2004 se produce un Warning”) usar Object.registerClass tiene “efectos secundarios”, personalmente prefiero usar composición porque queda todo más “limpio”.
Por supuesto todo esto es AS2, AS3 sí que tiene su método oficial y limpio de extender de Sprite o MovieClip.
Salud!