<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>electroduendes.com &#187; Metodología, arquitectura</title>
	<atom:link href="http://www.electroduendes.com/blog/category/metodologia/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.electroduendes.com/blog</link>
	<description>bitácora de un desarrollador interactivo</description>
	<lastBuildDate>Sun, 27 Jun 2010 21:07:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>AS3: Composición, paso de parámetros por valor y por referencia</title>
		<link>http://www.electroduendes.com/blog/as3-composicion-paso-de-parametros-por-valor-y-por-referencia/</link>
		<comments>http://www.electroduendes.com/blog/as3-composicion-paso-de-parametros-por-valor-y-por-referencia/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 16:53:10 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[Tutos]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=269</guid>
		<description><![CDATA[En este post hablaré sobre algo muy básico aunque imprescindible sobre teoría de clases y composición aplicados a as3. Con él podemos entender la manera en que es tratada la composición de clases (una clase contiene otra clase como atributo) y los conceptos de paso de variables a métodos por valor y por referencia.
El paso [...]]]></description>
			<content:encoded><![CDATA[<p>En este post hablaré sobre algo muy básico aunque imprescindible sobre teoría de clases y composición aplicados a as3. Con él podemos entender la manera en que es tratada la composición de clases (una clase contiene otra clase como atributo) y los conceptos de paso de variables a métodos por <strong>valor </strong>y por <strong>referencia</strong>.</p>
<p><strong>El paso de parámetros por valor</strong>, se utiliza en programación para realizar una copia del valor del objeto cuando es pasado a través de la invocación de un método. Es decir, al llamar a un método de una clase que requiere un objeto, realizo una copia de dicho objeto. Si dentro de la clase, modifico ese objeto, los cambios no son propagados fuera de la clase.</p>
<p><strong>El paso de parámetros por referencia</strong>, pasa &#8220;un puntero del objeto&#8221;, es decir, de alguna manera estamos pasando el objeto, y si dicho objeto es modificado dentro de la propia clase, sus cambios serán propagados fuera de la misma.</p>
<p>Hay lenguajes que permiten definir el método de paso de variables (referencia o valor), como es el caso de C++. En Actionscript, de momento no podemos pasar por valor de manera nativa, aunque nuestro método siempre puede hacer una copia internamente del argumento recibido para no modificar el original. En Actionscript 3, el paso de parámetros, siempre se realiza de la misma manera: </p>
<ul>
<li>Las instancias de clases son pasadas por referencia</li>
<li>Los tipos primitivos se pasan por valor</li>
</ul>
<p>Si estás aprendiendo Actionscript 3 y has llegado hasta aquí, te recomiendo que analices a fondo este código, puesto que puede resultarte muy esclarecedor para entender este concepto tan básico como fundamental sobre la orientación a objetos.</p>
<p>Primero, definimos dos Clases, <em>ClaseA </em>y <em>ClaseB</em>. <em>ClaseB </em>está compuesta por un atributo, <em>atributoB </em>que es de tipo Number.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ClaseB
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> atributoB<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span>;	
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ClaseB<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><em>ClaseA </em>tiene otro atributo de tipo <em>ClaseB</em>. Estamos hablando por tanto, de una relación de composición entre las dos clases.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ClaseA
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> atributoA<span style="color: #000000; font-weight: bold;">:</span>ClaseB;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ClaseA<span style="color: #000000;">&#40;</span>atributo<span style="color: #000000; font-weight: bold;">:</span>ClaseB<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span>
			atributoA = atributo;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Ahora nuestra clase principal. Nótese cómo <em>atributoB </em>devuelve el mismo valor independientemente del lugar desde donde es modificado (es el mismo objeto) y cómo esto no sucede con tipos primitivos. En este caso paso un parámetro al constructor  de la clase <em>ClaseA </em> (nuestro objeto de tipo ClaseB), para posteriormente modificarlo desde diferentes ámbitos y trazar los resultados.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ReferenciaValorTest extends <span style="color: #004993;">Sprite</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #3f5fbf;">/**
		 * @autor Alejandro Sánchez
		 * http://www.electroduendes.com/blog/
		 * */</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ReferenciaValorTest<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">b</span><span style="color: #000000; font-weight: bold;">:</span>ClaseB = <span style="color: #0033ff; font-weight: bold;">new</span> ClaseB<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">b</span>.atributoB = <span style="color: #000000; font-weight:bold;">10</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> a<span style="color: #000000; font-weight: bold;">:</span>ClaseA = <span style="color: #0033ff; font-weight: bold;">new</span> ClaseA<span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
&nbsp;
			a.atributoA.atributoB = <span style="color: #000000; font-weight:bold;">5</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 5</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 5</span>
&nbsp;
			<span style="color: #004993;">b</span>.atributoB = <span style="color: #000000; font-weight:bold;">10</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">c</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">20</span>;
			a.atributoA.atributoB = <span style="color: #004993;">c</span>			
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">c</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT 20</span>
&nbsp;
			<span style="color: #004993;">c</span> = <span style="color: #000000; font-weight:bold;">30</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">c</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT 30</span>
&nbsp;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/as3-composicion-paso-de-parametros-por-valor-y-por-referencia/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tendremos vídeo para rato</title>
		<link>http://www.electroduendes.com/blog/tendremos-video-para-rato-2/</link>
		<comments>http://www.electroduendes.com/blog/tendremos-video-para-rato-2/#comments</comments>
		<pubDate>Sun, 10 May 2009 02:58:33 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Enlaces]]></category>
		<category><![CDATA[Librerías, recursos]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[librería]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[pyro]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=103</guid>
		<description><![CDATA[


Los desarrolladores Flash llevamos desde el 2002, la asidua tarea de trabajar con estos formatos. Por eso, en la parte cliente, se hace necesario el uso de un conjunto de clases que manejen esta labor, y que nos permita tener vídeo para rato sin morir en el intento cada vez que hay que aplicarlo a [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>
<p style="text-align: center;"><img class="aligncenter" src="http://www.electroduendes.com/blog/wp-content/video.jpg" alt="" /></p>
<p>Los desarrolladores Flash llevamos desde el 2002, la asidua tarea de trabajar con estos formatos. Por eso, en la parte cliente, se hace necesario el uso de un conjunto de clases que manejen esta labor, y que nos permita tener vídeo para rato sin morir en el intento cada vez que hay que aplicarlo a un proyecto.</p>
<p>Gracias a todos, ( y espero participar en ello pronto) cada día tenemos más proyectos hacia este área en la comunidad de desarrollo libre o de pago, y ya existen soluciones para la creación de players. Incluso existen players de licencia libre que cubren varias funcionalidades, de hecho hay un sano mercado en torno a los players, copado actualmente por <a href="http://www.longtailvideo.com/players/jw-flv-player/">JW FLV Media Player</a>, un player bastante completo.</p>
<p>Pero si estamos empeñados en añadir las clases a nuestro repositorio reutilizables para todos los proyectos de tu empresa,  la tarea de crear un player crece en dos sentidos: el primero crear los componentes de interacción, que si bien algunos ya puedes tenerlos creados o reusarlos, y segundo, conocer las diferentes particularidades de la api de gestión de vídeo en flash para aplicar la funcionalidad a los controles visuales, que dependerá del tipo de vídeo y el total de los que vamos a meter.</p>
<p>En realidad, se trata de un trabajo de semanas partiendo desde cero. Son por sí mismo un subproyecto, o al menos un buen sprint en un desarrollo. A nivel de interacción, los players se deben tratar con cariño, puesto que demandan funcionalidades avanzadas de los usuarios acostumbrados a players de gran consumo, como youtube. Se debe trabajar bien con el seeker para dotarle del mayor número de funcionalidades posible, puesto que cuanto más bueno o largo es el vídeo, más vamos a utilizar este componente.</p>
<p>Para empezar, no está mal echar un vistazo a <a href="http://www.blogtechguy.com/video_ebook/online_video_comparison.html">otros players</a> famosos en Internet.  Debemos poner interés en añadir funcionalidades tales como añadir alias de teclado como la pausa para el espacio. También es interesante el retroceso del vídeo por click de la barra,  o avance en caso de que dispongamos de servidor rtmp o tecnología que lo permita. La visualización del vídeo mientras se arrastra la barra será motivo de otro post, y no deberíamos olvidar.</p>
<p>Este desarrollo es buena práctica para aprender la creación y despachado de eventos personalizados porque realmente te puedes hinchar a usar y crear eventos. Recomiendo separar para ello el código en una clase Player que se encargue de manipular el stream de red y enviar los eventos de usuario necesarios, y un conjunto de clases para el manejo de la interfaz, tales como sliders, buttons, loaders y seekers. Un patrón <a href="http://www.moock.org/lectures/mvc/">MVC </a>también es interesante para montar toda la interacción entre clases y por si piden cambiar el skin para adaptar a otros proyectos e incluso en el mismo proyecto.</p>
<p>La parte más aburrida de esta tarea, la podemos simplificar con el uso de la clase<a href="http://agit8.turbulent.ca/bwp/2009/01/21/pyro-a-video-player-api-for-flash/"> Pyro Player</a> que ha creado Turbulent.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> pyroInstance<span style="color: #000000; font-weight: bold;">:</span>Pyro = <span style="color: #0033ff; font-weight: bold;">new</span> Pyro<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">320</span>, <span style="color: #000000; font-weight:bold;">240</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>pyroInstance<span style="color: #000000;">&#41;</span>;
pyroInstance.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://myvideosite.com/videos/gratton.flv&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Tras un uso en varios proyectos, puedo afirmar que simplifica bastante la tarea, aunque el diálogo entre esta clase y los controles no te lo quita nadie en ningún proyecto a menos que obligues a tus diseñadores  a que usen los mismos controles en todos los players, o inviertas más tiempo todavía en parametrizar esta opción en tu triada.</p>
<p>Tengo que dar gracias a mi colega <a href="http://www.xinterface.net">Diego </a>por descubrirme esta clase. Como agradecimiento hacia este intercambio de conocimiento tan saludable, os recomiendo a todos también <a href="http://code.google.com/p/mysimplemp3/">MySimpleMp3,</a> una clase similar para reproducir mp3´s.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">audio.<span style="color: #004993;">url</span> = <span style="color: #990000;">&quot;http://mydomain.com/music.mp3&quot;</span>;
audio.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
audio.<span style="color: #004993;">pause</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
audio.<span style="color: #004993;">stop</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
audio.<span style="color: #004993;">volume</span> = 0..1;
audio.panning = <span style="color: #000000; font-weight: bold;">-</span>1..1;</pre></div></div>

</p>
<p>Los que habéis llegado hasta aquí y os interese este post desde la perspectiva de la publicidad, os remito a <a href="http://www.alexsanchez.info/tendremos-video-para-rato/">esta entrada</a> en mi otro blog.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/tendremos-video-para-rato-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gdispatcher, la navaja suiza de los eventos</title>
		<link>http://www.electroduendes.com/blog/gdispatcher-la-navaja-suiza-de-los-eventos/</link>
		<comments>http://www.electroduendes.com/blog/gdispatcher-la-navaja-suiza-de-los-eventos/#comments</comments>
		<pubDate>Sun, 05 Feb 2006 19:44:25 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Librerías, recursos]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[GDispatcher]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=40</guid>
		<description><![CDATA[Actualización: Este post puede ser útil si codificas en AS2. La clase sigue siendo fundamental para esta versión del lenguaje, pero para AS3 ya no es aplicable.
He visto gente que codifica muy bien, pero que todavía tiene que tocar su código genérico para adaptarlo a sus proyectos. Sobre todo, el problema suele estar en los [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong></strong><strong>Actualización</strong>: Este post puede ser útil si codificas en AS2. La clase sigue siendo fundamental para esta versión del lenguaje, pero para AS3 ya no es aplicable.</em></p>
<p>He visto gente que codifica muy bien, pero que todavía tiene que tocar su código genérico para adaptarlo a sus proyectos. Sobre todo, el problema suele estar en los eventos. Cuando hay que notificar a alguna funcion que un conjunto de cargas está completa, que un formulario está chequeado, o que un combo está seleccionado, ya empiezan los problemas. Para ellos, este post puede ser interesante. Sobre todo si no han trabajado nunca con EventDispatcher. Y para los que han trabajado y piensen que EventDispatcher, a veces se queda corta, puede que también.</p>
<p>Gskinner sacó (gracias <a href="http://www.merlinfactory.com">Carlos</a> ) hace tiempo una utilidad que mejoraba notablemente la clase EventDispatcher. Por si alguien no sabe de que hablo, EventDispatcher, y su mejora, GDispatcher es la navaja suiza que te permite descorchar la botella del vino con la que celebrarás o celebraste tu completo dominio de la  <a href="http://es.wikipedia.org/wiki/Encapsulaci%C3%B3n_en_programaci%C3%B3n_orientada_a_objetos">encapsulación </a> de tus clases, sobre todo las que llevan eventos. Esa manera tan estupenda de trabajar con listeners, que es tan &#8220;clara&#8221; en los UI Components y en la clase MovieClipLoader, se puede utilizar como un patrón de diseño para los mensajes que se envían tus clases (eventos).  </p>
<p>¡Por fin podrás decir a tu jefe, <em>- eh! estoy reutilizando! -</em> y el te dirá&#8230;  <em>-  eh, estupendo, en vez de para mañana, lo quiero para hoy!  -</em> </p>
<p><a href="http://www.gskinner.com/blog/archives/000027.html">GDispatcher</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/gdispatcher-la-navaja-suiza-de-los-eventos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delegate en actionscript: ámbitos y referencias</title>
		<link>http://www.electroduendes.com/blog/delegate-en-actionscript-ambitos-y-referencias/</link>
		<comments>http://www.electroduendes.com/blog/delegate-en-actionscript-ambitos-y-referencias/#comments</comments>
		<pubDate>Thu, 22 Dec 2005 22:40:25 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[as2]]></category>
		<category><![CDATA[Delegate]]></category>
		<category><![CDATA[referencias]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=36</guid>
		<description><![CDATA[Actualización:  Este post es para AS2. Si trabajas con AS3 ya no hace falta delegate porque la API implementa un modelo que permite que las funciones que manejan los eventos tengan la referencia de la clase por defecto. Más información
Cuando desarrollé mi primer gran proyecto en Actionscript 2.0 con clases, la mayor parte de [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong>Actualización: </strong> Este post es para AS2. Si trabajas con AS3 ya no hace falta delegate porque la API implementa un modelo que permite que las funciones que manejan los eventos tengan la referencia de la clase por defecto.<a href="http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html"> Más información</a></em></p>
<p>Cuando desarrollé mi primer gran proyecto en Actionscript 2.0 con clases, la mayor parte de ellas contenían atributos estáticos &#8220;referencia&#8221; , o pasaba referencias como propiedad. Parecía que todo en Flash perdía la referencia: asignaba funciones a los onLoad de los parsers, y perdía la referencia,  en los onClick de los botones perdía la referencia, los setInterval, venga a pasar referencias&#8230; parecía todos los eventos se habían aliado contra mí, <img src='http://www.electroduendes.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  y eso que ya tenía callo con problemas de referencias.</p>
<p>Pero con Flash 7.2, apareció la clase Delegate.</p>
<p>Éste es un ejemplo de mis frustraciones: un típico parser que simplemente visualiza un XML en un TextField en el que las referencias son todo problemas.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
 * @author Alejanadro Sánchez Marcos
 * @usage tutorial de uso de delegate en los parsers.
 * la clase emula un parser básico y su uso común.
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> ParserTradicional <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">xml</span>:<span style="color: #0066CC;">XML</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> textoResultado:<span style="color: #0066CC;">TextField</span>;
	<span style="color: #808080; font-style: italic;">// ouch!</span>
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> ruta:ParserTradicional;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ParserTradicional<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">URL</span>:<span style="color: #0066CC;">String</span>, textoResultado:<span style="color: #0066CC;">TextField</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">xml</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// off!</span>
		ruta = <span style="color: #0066CC;">this</span>;
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">textoResultado</span> = textoResultado;
		<span style="color: #0066CC;">xml</span>.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">URL</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// empiezan los problemas...</span>
		<span style="color: #808080; font-style: italic;">// xml.ruta = this; // ay!           </span>
		<span style="color: #0066CC;">xml</span>.<span style="color: #0066CC;">onLoad</span> = parse;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> parse<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// no tengo ruta.. mmm meto un atributo estático con la ruta</span>
		<span style="color: #808080; font-style: italic;">// buff!</span>
		<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>ruta.<span style="color: #0066CC;">xml</span><span style="color: #66cc66;">&#41;</span>;
		ruta.<span style="color: #006600;">mostrarXML</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> mostrarXML<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		textoResultado.<span style="color: #0066CC;">text</span> = <span style="color: #0066CC;">xml</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>y exactamente la misma clase, pero usando delegate.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Delegate</span>;
<span style="color: #808080; font-style: italic;">/**
* @author Alex Sanchez
* @usage tutorial de uso de delegate en los parsers.
* la clase emula un parser básico y su uso común.
*/</span>
<span style="color: #000000; font-weight: bold;">class</span> ParserDelegate <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">xml</span>:<span style="color: #0066CC;">XML</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> textoResultado:<span style="color: #0066CC;">TextField</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ParserDelegate<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">URL</span>:<span style="color: #0066CC;">String</span>, textoResultado:<span style="color: #0066CC;">TextField</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">textoResultado</span> = textoResultado;
		<span style="color: #0066CC;">xml</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #0066CC;">xml</span>.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">URL</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// yeeeha!</span>
		<span style="color: #0066CC;">xml</span>.<span style="color: #0066CC;">onLoad</span> = Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, parse<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> parse<span style="color: #66cc66;">&#40;</span>success:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>success<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			mostrarXML<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> mostrarXML<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		textoResultado.<span style="color: #0066CC;">text</span> = <span style="color: #0066CC;">xml</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/delegate-en-actionscript-ambitos-y-referencias/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Eventos en actionscript 2.0 (2): callback y apply</title>
		<link>http://www.electroduendes.com/blog/eventos-en-actionscript-2o-callback-y-appli/</link>
		<comments>http://www.electroduendes.com/blog/eventos-en-actionscript-2o-callback-y-appli/#comments</comments>
		<pubDate>Mon, 05 Dec 2005 17:39:21 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[as2]]></category>
		<category><![CDATA[callback]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=32</guid>
		<description><![CDATA[Aquí os dejo la segunda entrega de mis periplo aprendiendo eventos. 100% recomendable para los que todavía no conocéis palabras como EventDispatcher, Delegate, Function.apply() o callback.
En la documentación de la clase, tenéis la explicación del ejemplo.

/**
*
* com.electroduendes.ejercicios.callback.Perro
* @author      Alejandro Sáncez Marcos
* @version		0.1
* @usage       Tutorial-ejemplo [...]]]></description>
			<content:encoded><![CDATA[<p>Aquí os dejo la segunda entrega de mis periplo aprendiendo eventos. 100% recomendable para los que todavía no conocéis palabras como EventDispatcher, Delegate, Function.apply() o callback.<br />
En la documentación de la clase, tenéis la explicación del ejemplo.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
*
* com.electroduendes.ejercicios.callback.Perro
* @author      Alejandro Sáncez Marcos
* @version		0.1
* @usage       Tutorial-ejemplo de uso de un callback
* 
* 
* Es muy útil el uso de callbacks como manera de brindar a tu función de compor-
* tamientos diferentes en base a parámetros o otras funciones. 
* 
* En este ejemplo, veremos cómo nuestra clase &quot;perro&quot; despierta al amo 
* por un ladrido. 
* La base estriba en el tipo de dato Function, podremos pasar una función y 
* ejecutarla cuando queramos posteriormente con &quot;apply&quot;. 
* 
* 
* Para aquellos que optan por la Orientación a Objetos en su código existen 
* maneras más óptimas, como el paquete EventDispatcher, disponible a partir de 
* la versión 7.2. del Flash Player. Si todavía no dominas al máximo tu orientación a objetos, o
* necesitas dotar de comportamiento simple basado en eventos tus clases,
* este es tu ejemplo.
* 
* Implementación:
* 
* import com.electroduendes.ejercicios.callback.Perro;
* 
* var mastin:Perro = new Perro();
* var miCallback:Object = {func:despertar, ambito:this, parms:[]};
* function despertar() {
*	trace(&quot;el amo se despierta&quot;);
* }
* mastin.setOnEndLadrido(miCallback);
* mastin.ladrar();
* 
*/</span>
<span style="color: #000000; font-weight: bold;">class</span> com.<span style="color: #006600;">electroduendes</span>.<span style="color: #006600;">ejercicios</span>.<span style="color: #006600;">callback</span>.<span style="color: #006600;">Perro</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">//un objeto con tres atributos de tipo Function, ambito, Array</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> callback : <span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">null</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	* @usage		ladra
	*/</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ladrar <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">trace</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;guau&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>callback <span style="color: #66cc66;">!</span>= <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> 
			<span style="color: #808080; font-style: italic;">//  despachamos la función mediante apply</span>
			callback.<span style="color: #006600;">func</span>.<span style="color: #0066CC;">apply</span> <span style="color: #66cc66;">&#40;</span>callback.<span style="color: #006600;">ambito</span>, callback.<span style="color: #006600;">parms</span><span style="color: #66cc66;">&#41;</span>;		
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	*
	* @usage		setter del callback: le enviamos una función para que 
	* 				la ejecute al fin del ladrido
	* @param		callback que contiene una funcion
	*/</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setOnEndLadrido <span style="color: #66cc66;">&#40;</span>callback : <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">callback</span> = callback;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/eventos-en-actionscript-2o-callback-y-appli/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eventos en  actionscript (1): EventDispatcher y delegate en Actionscript 3.0</title>
		<link>http://www.electroduendes.com/blog/eventos-en-actionscript-1-eventdispatcher-y-delegate-en-actionscript-30/</link>
		<comments>http://www.electroduendes.com/blog/eventos-en-actionscript-1-eventdispatcher-y-delegate-en-actionscript-30/#comments</comments>
		<pubDate>Mon, 05 Dec 2005 17:02:58 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[EventDispatch]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=28</guid>
		<description><![CDATA[No llevo más de un año aprendiendo con eventos en mis clases y no me hizo falta ni un mes para darme cuenta de los problemas comunes que surten todos los foros. Pues bueno, parece que el nuevo Actionscript 3.0 va a ayudarnos un poco más.
#  Delegates are now built into the language, making [...]]]></description>
			<content:encoded><![CDATA[<p>No llevo más de un año <a href="http://www.subflash.com/foro/viewtopic.php?t=5758&#038;sid=c9f7667ce6f36b39f1d91ad8d6891905">aprendiendo</a> con eventos en mis clases y no me hizo falta ni un mes para darme cuenta de los problemas comunes que surten todos los foros. Pues bueno, parece que el nuevo Actionscript 3.0 va a ayudarnos un poco más.</p>
<blockquote><p>#  Delegates are now built into the language, making event dispatching easier.<br />
In ActionScript 2.0, routing an event to a method required use of the mx.utils.Delegate class or other workarounds:</p>
<p>import mx.utils.Delegate;<br />
myButton.addEventListener(“click”, Delegate.create(this, onClick));</p>
<p>In ActionScript 3.0, a reference to a method automatically remembers the object instance it was extracted from; in essence, it is an automatic delegate. So, the code can simply be written as:</p>
<p>myButton.addEventListener(“click”, onClick); </p></blockquote>
<p>Si no trabajas todavía con sistemas basados en eventos&#8230; no sufras más, <img src='http://www.electroduendes.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Y el mejor argumento para persuadirte es: ¿a que se trabaja bien con los listeners de los componentes? Pues bien, a lo sumo 10 líneas más en vuestras clases pueden aumentar al máximo vuestro código reutilizable.</p>
<p>A lo largo de estos días iré colocando código útil en base a mi periplo con los mismos para todos aquellos que empecéis de 0 con ellos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/eventos-en-actionscript-1-eventdispatcher-y-delegate-en-actionscript-30/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Notación húngara y strict data typing</title>
		<link>http://www.electroduendes.com/blog/notacion-hungara-y-strict-data-typing/</link>
		<comments>http://www.electroduendes.com/blog/notacion-hungara-y-strict-data-typing/#comments</comments>
		<pubDate>Fri, 02 Sep 2005 11:33:26 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[notación húngara]]></category>
		<category><![CDATA[tipado]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=8</guid>
		<description><![CDATA[Llevo una hora intentando resolver un bug de un código bastante pobre  que me ha tocado arreglar.
Me ha costado tanto sacarlo que posteriormente he escrito este comentario:

&#160;
//var mapa = _root.obj.contenidos.lista[i].elemento[j].mapa;
// Bug: ya había un mc que se llama mapa!
&#160;
var sMapa:String = _root.obj.contenidos.lista&#91;i&#93;.elemento&#91;j&#93;.mapa;
&#160;
/* 
Alejandro Sánchez:
la notación húngara y el strict data typing sirven para depurar [...]]]></description>
			<content:encoded><![CDATA[<p>Llevo una hora intentando resolver un bug de un código bastante pobre  que me ha tocado arreglar.<br />
Me ha costado tanto sacarlo que posteriormente he escrito este comentario:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">&nbsp;
<span style="color: #808080; font-style: italic;">//var mapa = _root.obj.contenidos.lista[i].elemento[j].mapa;</span>
<span style="color: #808080; font-style: italic;">// Bug: ya había un mc que se llama mapa!</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> sMapa:<span style="color: #0066CC;">String</span> = <span style="color: #0066CC;">_root</span>.<span style="color: #006600;">obj</span>.<span style="color: #006600;">contenidos</span>.<span style="color: #006600;">lista</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">elemento</span><span style="color: #66cc66;">&#91;</span>j<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">mapa</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">/* 
Alejandro Sánchez:
la notación húngara y el strict data typing sirven para depurar 
errores como este.
ejemplo:
comentario:String = &quot;llevo una hora intentando resolver este bug&quot;
*/</span></pre></div></div>

<p>El problema era que ya había otro objeto que se llamaba mapa, y no se trataba de una cadena de texto. Al no estar tipado, me costó bastante depurar el error.<br />
Para el que no conozca la notación húngara y se pregunte para qué sirve el strict data typing, el código que me he encontrado, son un gran ejemplo de que los tipados de datos proporcionan ventajas a la hora de depurar, ya que en tiempo real las asignaciones que no son alojadas en los tipos de datos adecuados, lanzan un error. </p>
<ul>
<li><a href="http://es.wikipedia.org/wiki/Notaci%C3%B3n_h%C3%BAngara">Enlace sobre la notación húngara en Wikipedia</a></li>
<li><a href="http://livedocs.macromedia.com/flash/mx2004/main_7_2/00000780.html">Enlace sobre Strict Data Typing en la documentación de Macromedia</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/notacion-hungara-y-strict-data-typing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
