[AS3] Cambiar el tipo de una variable heredada

17 views
Skip to first unread message

Zárate

unread,
Aug 11, 2008, 5:15:05 AM8/11/08
to asna...@googlegroups.com
Buenas, a ver que me explique.

Mi clase principal tengo:

protected var view:View;

En la clase que hereda de ella quiero hacer:

override var view:WadusView; // WadusView extiende de View

Esto era posible en AS2 pero no encuentro la forma de hacerlo en AS3.
Sé que para heredar métodos el nuevo tiene que ser exactamente igual
que el original (nombre, parámetros y tipo devuelto), pero ¿es igual
para variables? He probado todo lo que se me ocurre incluyendo
getters/setters, pero no doy con ello.

Y para quien quiera saber para qué necesito esto, lojplico:

ZCode está basado en MVC. El modelo y la vista genéricos tienen una
instancia del otro. Ahora, las aplicaciones ZCode deberían tener un
modelo y vista específicos, con referencias al modelo/vista
específicos, no a los genéricos. Como suena muy confuso, aquí va un
ejemplo real en AS2:

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

Esto es lo que no puedo hacer ahora :|

Gracias!

--
Juan Delgado - Zárate
http://zarate.tv
http://dandolachapa.com
http://loqueyosede.com

Zárate

unread,
Aug 11, 2008, 5:34:18 AM8/11/08
to asna...@googlegroups.com
Leyendo esto:

http://www.zeuslabs.us/2006/05/10/actionscript-3-handling-inheritance/

Me parece que voy a necesitar alguna interface de por medio... Aunque
sólo sea para que se calle el compilador, no veo claro que vaya a
aportar algo "de sustancia".

Seguiremos reportando.

2008/8/11 Zárate <zzza...@gmail.com>:

Fede Rivas

unread,
Aug 11, 2008, 5:43:23 AM8/11/08
to asna...@googlegroups.com
Buenas tio !!!
Pues la ñapa rapida que se me ocurria es que hicieras lo mismo que en
el ejemplo, y le hicieras un casting a la variable.

No se pueden sobreescribir variables de una SuperClase ... :S

Zárate

unread,
Aug 11, 2008, 5:58:38 AM8/11/08
to asna...@googlegroups.com
Pues tiene esa pinta, sí :(

En las clases genéricas utilizaría

protected var _view:View;

Y en las específicas:

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

private function set view(val:WadusView):void{
_view = val;
}

Lo que pasa es que apesta un poco, porque las clases específicas van a
tener 2 variables, _view y view, cada una de un tipo... Eso sin contar
con la penalización de rendimiento por usar getters/setters.

El problema de usar interfaces es que deberías saber de antemano todo
lo que las clases específicas van a hacer, y no es el caso. Una
interface está genial para *forzar* una serie de métodos públicos,
pero aquí lo que quiero precisamente es lal libertad de que cada vista
tenga los métodos que le apetezca.

Me gustaría saber si se puede aplicar algún patrón molón para esconder
esta ponzoñilla... por ahora voy a tirar de getter + casting a ver si
me gusta.

Salud!

2008/8/11 Fede Rivas <in...@pixerama.com>:

ardleon

unread,
Aug 12, 2008, 4:52:43 AM8/12/08
to ASNativos - Lista de Actionscript
las variables marcadas como protedted si pueden ser sobreescritas por
sus instancias, no????



On 11 ago, 11:58, "Zárate" <zzzar...@gmail.com> wrote:
> Pues tiene esa pinta, sí :(
>
> En las clases genéricas utilizaría
>
> protected var _view:View;
>
> Y en las específicas:
>
> private function get view():WadusView{
> return _view as WadusView;
> }
>
> private function set view(val:WadusView):void{
> _view = val;
> }
>
> Lo que pasa es que apesta un poco, porque las clases específicas van a
> tener 2 variables, _view y view, cada una de un tipo... Eso sin contar
> con la penalización de rendimiento por usar getters/setters.
>
> El problema de usar interfaces es que deberías saber de antemano todo
> lo que las clases específicas van a hacer, y no es el caso. Una
> interface está genial para *forzar* una serie de métodos públicos,
> pero aquí lo que quiero precisamente es lal libertad de que cada vista
> tenga los métodos que le apetezca.
>
> Me gustaría saber si se puede aplicar algún patrón molón para esconder
> esta ponzoñilla... por ahora voy a tirar de getter + casting a ver si
> me gusta.
>
> Salud!
>
> 2008/8/11 Fede Rivas <i...@pixerama.com>:
>
>
>
>
>
> > Buenas tio !!!
> > Pues la ñapa rapida que se me ocurria es que hicieras lo mismo que en
> > el ejemplo, y le hicieras un casting a la variable.
>
> > No se pueden sobreescribir variables de una SuperClase ... :S
>
> > El 11/08/2008, a las 11:34, Zárate escribió:
>
> >> Leyendo esto:
>
> >>http://www.zeuslabs.us/2006/05/10/actionscript-3-handling-inheritance/
>
> >> Me parece que voy a necesitar alguna interface de por medio... Aunque
> >> sólo sea para que se calle el compilador, no veo claro que vaya a
> >> aportar algo "de sustancia".
>
> >> Seguiremos reportando.
>
> >> 2008/8/11 Zárate <zzzar...@gmail.com>:
> >>> Buenas, a ver que me explique.
>
> >>> Mi clase principal tengo:
>
> >>> protected var view:View;
>
> >>> En la clase que hereda de ella quiero hacer:
>
> >>> override var view:WadusView; // WadusView extiende de View
>
> >>> Esto era posible en AS2 pero no encuentro la forma de hacerlo en AS3.
> >>> Sé que para heredar métodos el nuevo tiene que ser exactamente igual
> >>> que el original (nombre, parámetros y tipo devuelto), pero ¿es igual
> >>> para variables? He probado todo lo que se me ocurre incluyendo
> >>> getters/setters, pero no doy con ello.
>
> >>> Y para quien quiera saber para qué necesito esto, lojplico:
>
> >>> ZCode está basado en MVC. El modelo y la vista genéricos tienen una
> >>> instancia del otro. Ahora, las aplicaciones ZCode deberían tener un
> >>> modelo y vista específicos, con referencias al modelo/vista
> >>> específicos, no a los genéricos. Como suena muy confuso, aquí va un
> >>> ejemplo real en AS2:
>
> >>> Modelo/vista general:
>
> >>>http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/appl...
> >>>http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/appl...
>
> >>> Modelo/vista específico:
>
> >>>http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/proj...
> >>>http://code.google.com/p/zcode/source/browse/trunk/as2/tv/zarate/proj...

Zárate

unread,
Aug 12, 2008, 4:54:18 AM8/12/08
to asna...@googlegroups.com
Sí, pero no puedes cambiarle el tipo. Ni aunque el nuevo tipo herede
del original (por lo visto!).

2008/8/12 ardleon <ard...@gmail.com>:

Cay

unread,
Aug 12, 2008, 5:08:41 AM8/12/08
to asna...@googlegroups.com
Quizas es muy obvio y ñapa, pero si usas:
protected var view:*;
no necesitas casting creo.... o es demasiado chapu? ^^

Zárate escribió:
Reply all
Reply to author
Forward
0 new messages