S� es posible implementar un Decorador con la sintaxis de AS2.

Pongamos como ejemplo un sistema de highlight donde se marca en un campo
de texto una determinada palabra.

Contamos con una clase abstracta "AbsHighlight" que utiliza la interfaz
dada por "HighlightIF":

--- AbsHighlight ---

class AbsHighlight implements HighlightIF {

        private var wrap:HighlightIF

        function AbsHighlight(w:HighlightIF) {
                var wrap:HighlightIF = w;
        }

        public function marcar(s:String) {
                wrap.marcar(s);
        }
        public function desmarcar() {
                wrap.desmarcar();
        }
}

--- HighlightIF ---

interface HighlightIF {
        function marcar(s:String):Void;
        function desmarcar():Void;
}

---

Ahora, si queremos que suene un sonido a lo Broadway (por ejemplo)
cuando hace la acci�n de marcar el texto, lo ideal es contar con un
Decorador para no afectar a la clase abstracta y permitir el reuso con
otras melod�as o decos diferentes.

Creamos entonces una subclase de AbsHighlight llamada HighlightDeco con
la respectiva interfaz para el Decorador:

--- HighlightDeco ---

class HighlightDeco extends AbsHighlight {

        private var deco:DecoradorIF;
       
        // @param wrap objeto Highlight al que delegamos el marcado
        // @param deco Decorador (usando la interfaz DecoradorIF)

        function Highlight1(wrap:HighlightIF,deco:DecoradorIF) {
                super(wrap);
                deco = deco;
        }

        public function marcar(s:String) {
                deco.decorar();
                super.marcar(s);
        }
}
--- DecoradorIF ---

interface DecoradorIF {
    function decorar():Void;
}

---

De esta forma conseguimos tambien "reglar" la creaci�n de los posibles
Decoradores, limit�ndolos a los m�todos de la interface.

HTH :)

M.




>-----Mensaje original-----
>De: [EMAIL PROTECTED]
>[mailto:[EMAIL PROTECTED] En nombre de Joseba Alonso
>Enviado el: viernes, 12 de septiembre de 2003 14:19
>Para: [EMAIL PROTECTED]
>Asunto: Re: [ASNativos] componentes y UIEventDispatcher
>
>
>Como te digo, tampoco estoy muy puesto con los componentes,
>estoy en ello :). Pero UIObject no utiliza en ningun momento
>UIObjectExtensions. Este ultimo parece mas un "decorador" para
>hacer que los MovieClips y los TextField actuen como
>componentes. El que este entre los assets no significa que lo
>use. Solo asegura que si tu tienes una instancia de UIObject
>en la biblioteca tambi�n se lleve el UIObjectExtensions y el
>Defaults. Pero jamas se instancia. Por lo menos no desde la
>linea de tiempo, y por lo que hemos visto, tampoco desde el
>codigo de UIObject. M�s bien tiene pinta de estar ahi para
>algunos componententes que usen campos de texto y movieclips.
>Esos componentes utilizarian UIObjectExtensions para hacer que
>un MovieClip o un TextField se comporten como un componente V2.
>
>Ahora, puedo estar equivocado...
>
>En cuanto a porque utilizan los prototypes, eso ya lo tengo
>mas claro. Supongo que es porque el patron "decorador" no se
>podria utilizar con la sintaxis de AS2. Ya que no puedes
>definir miembros de una clase fuera de la definicion de la
>propia clase. Asi que la unica manera que quedaria de hacerlo
>es modificando el prototype.
>
>Actionscript sigue siendo un lenguaje basado en prototypes,
>sin duda, pero ahora utiliza sintaxis mas familiar al estilo
>de los lenguajes basados en clases. Pero es solo sintaxis,
>internamente parece funcionar igual que antes.
>
>un saludo
>
>Joseba Alonso
>www.sidedev.net
>----- Original Message -----
>From: "Sergi" <[EMAIL PROTECTED]>
>To: <[EMAIL PROTECTED]>
>Sent: Thursday, September 11, 2003 2:09 PM
>Subject: Re: [ASNativos] componentes y UIEventDispatcher
>
>
>> Joseba : No encontrar�s referencia alguna a UIObjectExtensions en
>UIOBject.
>> Para ver su relaci�n tienes que abrir algun .fla de componentes, por
>ejemplo
>> el StandarComponents.fla. En su librer�a, abres la carpeta 'base
>> classes', ah� te metes dentro del timeline de UIObject, y ver�s que
>> tiene una instancia
>de
>> UIObjectExtensions
>> entre sus 'assets'. Al instanciarse UIObjectExtensions, la instancia
>> hace que el UIEventDispatcher inicialice el prototype de UIObject.
>>
>>
>> ----- Original Message -----
>> From: "Joseba Alonso" <[EMAIL PROTECTED]>
>> To: <[EMAIL PROTECTED]>
>> Sent: Wednesday, September 10, 2003 11:04 PM
>> Subject: Re: [ASNativos] componentes y UIEventDispatcher
>>
>>
>> > Bueno, yo no me he peleado mucho con los componentes por
>ahora pero
>> > por
>lo
>> > que he leido UIEventDispatcher no solo sustituye
>ASBroadcaster sino
>> > que
>lo
>> > mejora. Yo tambi�n me pierdo bastante todavia con el tema, hay que
>meterle
>> > horas. De todas maneras mirando UIObject no he visto ninguna
>> > referencia
>a
>> > UIObjectExtensions, �Donde la has visto? .
>> >
>> > En cuanto al tema del prototype si que lo tengo mas claro, yo he
>> > estado
>> mas
>> > tiempo dandole al AS2. Habia una frase... "Nada nuevo bajo el sol"
>> > pues describe exactamente lo que he sentido yo al estar
>probandolo.
>> > AS2 *no* introduce nuevos bytecodes. Esto es, es simplemente otra
>> > forma de
>> describir
>> > objetos, pero una clase creada con AS2 sigue siendo un [type
>> > function] o sea, tiene su prototype y todo. Las clases son
>"falsas".
>> > Hombre, te dan
>> una
>> > serie de ventajas en cuanto a legibilidad, fiabilidad y
>> > reutilizacion
>del
>> > codigo. Pero la proteccion de tipos, y los "strong types"
>no son una
>> > cualidad del flash player sino mas bien del compilador. Haciendo
>> > viejas "peripecias" te las puedes saltar. Ya sabeis, el runtime
>> > nunca se queja
>> por
>> > nada :)
>> >
>> > un saludo
>> >
>> > Joseba Alonso
>> > www.sidedev.net
>> >
>> > ----- Original Message -----
>> > From: "Sergi" <[EMAIL PROTECTED]>
>> > To: <[EMAIL PROTECTED]>
>> > Sent: Wednesday, September 10, 2003 12:47 PM
>> > Subject: [ASNativos] componentes y UIEventDispatcher
>> >
>> >
>> > > Weno llevo una hora trasteando con los componentes. Y casi me
>> > > pierdo especialmente cuando he tratado de averiguar c�mo reciben
>> > > soporte para transmitir eventos al ser inicializados por
>> > > UIEventDispatcher.
>*Supongo*
>> > que
>> > > UIEventDispatcher reemplazar� a las distintas
>implementaciones de
>> > > ASBroadcaster en nuestros desarrollos.
>> > >
>> > > En fin, a ver si Joseba me confirma lo siguiente en cuanto al
>> > > soporte
>de
>> > > listeners en los componentes
>> > >
>> > > UIObject <-- Superclase de los componentes
>> > >     |
>> > >     | utiliza--> UIObjectExtensions
>> > >                                     static function Extensions()
>> > >
>> > > []
>> > > UIObjectExtensions.Extensions() llama a
>UIEventDispatcher.initialize();
>> > que
>> > > 'inicializa' UIObject.prototype * como transmisor de eventos.
>> > >
>> > > *no tengo muy claro xq a�aden propiedades directamente al
>> > > prototype
>> cuando
>> > > todo el framework es basado en AS2, pero supongo que tendr�n sus
>motivos
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > > <!-------------------------------
>> > > Lista ASNativos:
>> > > subscripciones/desubscripciones http://www.sidedev.net/asnativos
>> > > -------------------------------->
>> >
>> > <!-------------------------------
>> > Lista ASNativos:
>> > subscripciones/desubscripciones http://www.sidedev.net/asnativos
>> > -------------------------------->
>>
>> <!-------------------------------
>> Lista ASNativos:
>> subscripciones/desubscripciones http://www.sidedev.net/asnativos
>> -------------------------------->
>
><!-------------------------------
>Lista ASNativos:
>subscripciones/desubscripciones http://www.sidedev.net/asnativos
>-------------------------------->
>

<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->

Responder a