Archive for the ‘as3’ Category

Modificar el tipo de una variable heredada

Wednesday, August 20th, 2008

Hace unos días preguntaba en ASNativos si en AS3 se podía cambiar el tipo de una variable heredada. En concreto cambiar el tipo a una clase que hereda de la original. Pues parece que no es posible.

Es decir, tengo clase B que hereda de A. Clase A tiene una propiedad tipo X y yo quiero que la clase B modifique el tipo de X a un hijo de X (sí, este párrafo se entiende peor que el anterior).

¿Y para qué? Pues para ZCode. En mi MVC base tanto el modelo como la vista tienen una instancia del otro. Ahora, la aplicación Pepito tienen las clases PepitoModel y PepitoView por lo que la instancia de la vista de PepitoModel debe ser tipo PepitoView, no View. Es precisamente por eso que NO me vale una interface ya que no sé a priori qué métodos va a necesitar PepitoView. Me vale lo que hacía en AS2, modificar el tipo de una variable al heredar, como aquí:

Modelo/vista general:

http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/application/Model.as
http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/application/View.as

Modelo/vista específico:

http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/projects/webv3/WebModel.as
http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/projects/webv3/WebView.as

Pues parece que no es posible en AS3. Lo mejor que me he encontrado es hacer algo como esto:

private function get view():PepitoView{
return _view as PepitoView;
}

Pero claro, entonces PepitoView tiene 2 variables _view y view, lo cual es una mala ñapa. Como dice Cay la otra sería utilizar view:*, no sé qué es menos malo.

¿Otra ideas felices? ¿Algún superpatrón al rescate?

NO significa NO

Sunday, August 10th, 2008

O mejor piénsatelo antes de declarar en AS3 un método privado. Cuando lo haces nada ni nadie puede sobreescribirlo, ni siquiera las clases que extiendan la tuya. Si crees (aunque sea remotamente) que vas a necesitar sobreescribir esos métodos o propiedades, mejor cúbrete las espaldas declarándolos “protected”. Un rápido resumen de cómo se comportan los modificadores de acceso en AS3 se puede ver aquí.

De hecho, en una de las últimas charlas del LFPUG Tink comentaba que uno de los problemas con los que se encontraban con los componentes oficiales (creo que los de Flex) era que muchas veces intentaban heredar de ellos para hacer algunas modificaciones hasta que se encontraban con un método privado y entonces estaban en un callejón sin salida.

Pero bueno, por fin estoy metiendo el cuezo con AS3 y la verdad es que mola bastante. Entiendo que a alguna gente le parezca un poco coñazo (temas como tener que importar muchas más clases explícitamente) pero da la sensación de mucho más robusto y deja bastante claro que AS2 no fue más que una mala manera de parchear la AVM1 para darle un poco de consistencia al lenguaje.

El sistema de eventos tiene buena pinta, E4X es un lujo porque tienes XPath de serie y mucho más conciso, utilizar URLLoader y URLRequest parece mucho más largo pero unifica el método de carga de todos los elementos externos (XML, imágenes, sonidos, etc)… No sé, estoy en el medio de portar ZCode a AS3 y por ahora va bien, ya iré contando como va todo y lo que me gusta y lo que no.

Descarga y descomprime zips dentro de Flash

Wednesday, December 13th, 2006

¡AS3 se está poniendo muy serio!

Acaba de ser anunciado en OSFlash FZip, una librería escrita en AS3 que permite cargar un zip y descomprimirlo dentro de Flash para obtener su contenido.

Es una primera versión que no está completa, pero promete.

¡Yeah!