<?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>CODIGO.actionscript &#187; POO</title>
	<atom:link href="http://www.codigoactionscript.org/category/POO/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codigoactionscript.org</link>
	<description>Blog de programación en ActionScript. Tips, tutoriales, ejemplos de Adobe Flash, Flex y AIR</description>
	<lastBuildDate>Thu, 02 Sep 2010 22:59:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Programación orientada a objetos: Herencia de clases.</title>
		<link>http://www.codigoactionscript.org/programacion-orientada-a-objetos-herencia-de-clases/</link>
		<comments>http://www.codigoactionscript.org/programacion-orientada-a-objetos-herencia-de-clases/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 00:49:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[patrones]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.codigoactionscript.org/?p=325</guid>
		<description><![CDATA[<p>La herencia de clases es uno de los conceptos básicos de la programación orientada a objetos. Decir que una clase hereda de otra quiere decir que esa clase obtiene los mismos métodos y propiedades de la otra clase. Permitiendo de esta forma añadir a las características heredadas las suyas propias.</p>
<p>Supongamos que tenemos una clase "Persona" con los métodos y propiedades básicas de una objeto persona como podrian ser "caminar" o "hablar", podríamos tener otras clases como "Guillermo" o "Elder" que comparten todas las características de una "Persona" pero que añaden [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/comunicacion-entre-clases-actionscript-3-con-eventdispatcher/' rel='bookmark' title='Permanent Link: Comunicación entre clases Actionscript 3 con EventDispatcher'>Comunicación entre clases Actionscript 3 con EventDispatcher</a></li>
<li><a href='http://www.codigoactionscript.org/poo-dependencia-de-clases-y-polimorfismo/' rel='bookmark' title='Permanent Link: POO: Dependencia de clases y Polimorfismo'>POO: Dependencia de clases y Polimorfismo</a></li>
<li><a href='http://www.codigoactionscript.org/articulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3/' rel='bookmark' title='Permanent Link: Articulo sobre la programación orientada a objetos en Actionscript 3'>Articulo sobre la programación orientada a objetos en Actionscript 3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>La <strong>herencia de clases</strong> es uno de los conceptos básicos de la <strong>programación orientada a objetos</strong>. Decir que una clase hereda de otra quiere decir que esa clase obtiene los mismos métodos y propiedades de la otra clase. Permitiendo de esta forma añadir a las características heredadas las suyas propias.</p>
<p>Supongamos que tenemos una clase "Persona" con los métodos y propiedades básicas de una objeto persona como podrian ser "caminar" o "hablar", podríamos tener otras clases como "Guillermo" o "Elder" que comparten todas las características de una "Persona" pero que añaden características propias. Por lo que "Guillermo" y "Elder" pueden realizar las </p>
<p>mismas funciones que puede realizar una "Persona" y además cada una puede realizar las suyas propias, por ejemplo, "Guillermo" sabe nadar pero "Elder" no, y "Elder" sabe bailar reggeton pero "Guillermo" no.</p>
<p>En terminos de programación estaríamos diciendo que "Guillermo" y "Elder" son dos clases especializadas que heredan o extienden de la superclase "Persona".</p>
<h2>Tipos de herencia de clases</h2>
<p>Existen <strong>dos tipos</strong> de herencia:</p>
<ul>
<li>Herencia por <strong>especialización</strong></li>
<li>Herencia por <strong>generalización</strong></li>
</ul>
<p>En realidad <strong>la herencia es la misma</strong>, esta es una diferenciación puramente conceptual sobre la forma en que se a llegado a ella. </p>
<p>Una <strong>herencia por especialización</strong> es la que se realiza cuando necesitamos crear una clase nueva que disponga de las mismas características que otra pero que le añada funcionalidades. Por ejemplo si tenemos una clase que genera un botón simple, y necesitamos crear un botón que sea igual que el anterior pero que además añada un efecto al ser clicado.</p>
<p>La <strong>herencia por generalización</strong> es la que realizamos cuando tenemos muchas clases que comparten unas mismas funcionalidades y por homogeneizar las partes comunes se decide crear una clase que implemente toda esa parte común y se dejan solo las partes especificas en cada clase. Por ejemplo si tenemos clases para dibujar formas geométricas todas ellas </p>
<p>disponen de las mismas propiedades (un color de fondo, color de linea, etc..), todas estas características pueden estar en una clase general de la que hereden todas las clases concretas, evitando tener que escribir todo ese código común en todas ellas.</p>
<h1>Herencia de clases en Actionscript</h1>
<p>En Actionscript definimos que una clase hereda de otra con la sentencia "<strong>extends</strong>".</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-23">
<div class="actionscript"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Guillermo <span style="color: #0066CC;">extends</span> Persona</div>
</div>
</div>
</div>
<p></p>
<h2>Public, private o protected</h2>
<p>Una consideración a tener en cuenta de la herencia es que una clase <strong>no hereda</strong> la propiedades o métodos <strong>privados</strong>, con lo que no tendrán acceso a ellas. Si necesitamos heredar propiedades o métodos que no queremos que sean accesibles desde fuera de las clases las definiremos como <strong>protected</strong>.</p>
<h2>Sobreescritura de métodos</h2>
<p>Una característica muy importante que permite la herencia es que podemos hacer que una clase implemente <strong>de manera diferente</strong> un método heredado. Haciendo que dos clases que heredan de la misma clase y heredan los mismos métodos se comporten de maneras diferentes.</p>
<p>Por ejemplo, unas clases de dibujo de figuras geométricas pueden heredar de una clase general la función "dibujar". Todas las clases dispondrán de esa función, pero cada clase la implementará de diferente manera y por lo tanto dibujará una figura diferente.</p>
<p>Para sobrescribir un método de la superclase utilizaremos la sentencia <strong>override</strong> en la definición del método.</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-24">
<div class="actionscript"><span style="color: #808080; font-style: italic;">//función de la superclase</span><br />
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> traza<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"superclase"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-25">
<div class="actionscript"><span style="color: #808080; font-style: italic;">//función de la subclase</span><br />
override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> traza<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"subclase"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<p>De esta manera al ejecutar la función "traza()" desde una subclase obtendremos el texto "subclase" sobrescribiendo las acciones del método de la subclase (no obtendríamos el texto "superclase").</p>
<p>En el caso de no querer sobrescribir por completo toda la implementación del método de la superclase, si no que lo que queremos es ampliarlo, podemos acceder a la implementación de la superclase con el operador "super". </p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-26">
<div class="actionscript"><span style="color: #808080; font-style: italic;">//función de la subclase</span><br />
override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> traza<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">super</span>.<span style="color: #006600;">traza</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"subclase"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<p>En este caso, se ejecutaría la implementación del método en la superclase (obtendriamos el texto "superclase") y luego el de la subclase (obtendríamos también el texto "subclase").</p>
<p>Esto también lo podemos realizar en el constructor de la clase. Es bastante probable que una clase esté definiendo valores dentro de su constructor, de manera que al ser extendida nos interese que esas definiciones se continúen realizando. En este caso deberemos realizar una llamada al constructor de la superclase a través del operador "super".</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-27">
<div class="actionscript">package<br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> A<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">variable</span>:uint;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> A<span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">variable</span> = n;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-28">
<div class="actionscript">package <br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> A;</p>
<p>&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> B <span style="color: #0066CC;">extends</span> A<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> B<span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span>n<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">//ejecuta el contructor de la clase A, enviandole el parámetro</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<p>En el caso de que queramos asegurarnos de que una propiedad o método no pueda ser sobrescrita por otra clase la definiremos como <strong>final</strong>.</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-29">
<div class="actionscript"><span style="color: #808080; font-style: italic;">//función de la subclase que no permitirá ser sobreescrita</span><br />
<span style="color: #0066CC;">public</span> final <span style="color: #000000; font-weight: bold;">function</span> traza<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"subclase"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<h1>Ejemplo del uso de herencia de clases:</h1>
<p>Veamos un sencillo ejemplo práctico: <strong>Crearemos un par de clases muy simples para dibujar un cuadrado o un círculo</strong>.</p>
<p>Lógicamente el primer paso es pensar que <strong>características compartirán</strong> tanto los cuadrados y los círculos.</p>
<ul>
<li>Ambos son elementos gráficos que tienen propiedades que definen su tamaño (size), si disponen de relleno o solo de línea (fill), el color de relleno (bgColor), el grosor de linea (borderSize) y el color de la linea (borderColor).</li>
<li>Tambien ambás dispondrán de una función que permitirá actualizar el gráfico en caso de modificar sus propiedades.</li>
<li>Por último amb´s dispondran de la método que dibujará el gráfico. Lógicamente esta será la función que cada clase implementará de forma diferente.</li>
</ul>
<p>Así que lo que haremos es crear una superclase "Grafico" que disponga de todas las propiedades mencionadas anteriormente, y dejaremos la implementación del método "dibuja()" a las subclases "Cuadrado" y "Circulo".</p>
<p>Empecemos escribiendo la interface de métodos públicos que deberán disponer todos los objetos que extiendan de "Grafico". En este caso serán todos los <em>setters </em>y <em>getters </em>para las propiedades, y el método para actualizar el gráfico.</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-30">
<div class="actionscript">package org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">interface</span> IGrafico<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> <span style="color: #0066CC;">size</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">size</span><span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> fill<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Boolean</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> fill<span style="color: #66cc66;">&#40;</span>n:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> bgColor<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> bgColor<span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> borderSize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> borderSize<span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> <span style="color: #0066CC;">borderColor</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">borderColor</span><span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<p>Escribiremos la superclase "Grafico" que implementará la interface "IGrafico" y definirá todos los setters y getters de las propiedades.</p>
<p>Las propiedades las definiremos como "portected" para que sean privadas pero heredables.</p>
<p>El constructor de la clase recibirá todos los parámetros necesarios para definir las propiedades (les asignaremos valores por defecto por si se crea una instancia sin pasarle parámetros). Y realizará una llamada a la función "dibuja()" que es la que creará el gráfico.</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-31">
<div class="actionscript">package org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Shape</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">IGrafico</span>;<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Grafico <span style="color: #0066CC;">extends</span> Sprite <span style="color: #0066CC;">implements</span> IGrafico<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color: #000000; font-weight: bold;">var</span> _size:uint;<br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color: #000000; font-weight: bold;">var</span> _fill:<span style="color: #0066CC;">Boolean</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color: #000000; font-weight: bold;">var</span> _bgColor:uint;<br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color: #000000; font-weight: bold;">var</span> _borderSize:uint;<br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color: #000000; font-weight: bold;">var</span> _borderColor:uint;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Grafico<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">size</span>:uint = <span style="color: #cc66cc;">10</span>, fill:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">true</span>, bgColor:uint = 0x000000, borderSize:uint = <span style="color: #cc66cc;">0</span>, <span style="color: #0066CC;">borderColor</span>:uint = 0x000000<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _size = <span style="color: #0066CC;">size</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fill = fill;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _bgColor = bgColor;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _borderSize = borderSize;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _borderColor = <span style="color: #0066CC;">borderColor</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dibuja<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> <span style="color: #0066CC;">size</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> _size;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">size</span><span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _size = n;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> fill<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Boolean</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> _fill;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> fill<span style="color: #66cc66;">&#40;</span>n:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fill = n;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> bgColor<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> _size;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> bgColor<span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _bgColor = n;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> borderSize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> _borderSize;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> borderSize<span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _borderSize = n;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> <span style="color: #0066CC;">borderColor</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:uint<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> _borderColor;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">borderColor</span><span style="color: #66cc66;">&#40;</span>n:uint<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _borderColor = n;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">clear</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dibuja<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color: #000000; font-weight: bold;">function</span> dibuja<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">Throw</span>.<span style="color: #006600;">newError</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"clase abstracta"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<p>Como hemos dicho, la clase "Grafico" no implementa el método "dibuja()" ya que eso depende de cada subclase, con lo que si intentamos crear una instancia de "Grafico" nos lanzará un error. Lo único que hacemos es definir que todas las subclases hereden el método y cada una lo implenete a su manera.</p>
<p>Escribamos ahora la clase "Cuadrado".</p>
<p>Esta clase extendrá de la clase "Grafico" e implementará la interface "IGrafico". Por lo tanto heredará todas las propiedades y métodos de la superclase marcados como public o protected, con lo que no necesitaremos definir las protiedades ni los setter y getters, pero dispondrá de ellos.</p>
<p>El constructor de esta clase recibirá como parámetros los valores del objeto a crear, y deberemos pasarselos al constructor de la superclase para que asigne los valores y ejecute la función de dibujar. Como hemos mencionado esto lo haremos utilizando la sentencia super();</p>
<p>Ahora solo nos quedará sobreescribir el método "dibuja()" para que se dibuje lo que nos interese en función de la clase actual, en este caso queremo sdibujar un cuadrado. Utilizaremos un override para sobrescribir el método.</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-32">
<div class="actionscript">package org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">IGrafico</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">Grafico</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Shape</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Cuadrado <span style="color: #0066CC;">extends</span> Grafico <span style="color: #0066CC;">implements</span> IGrafico<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Cuadrado<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">size</span>:uint = <span style="color: #cc66cc;">10</span>, fill:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">true</span>, bgColor:uint = 0x000000, borderSize:uint = <span style="color: #cc66cc;">0</span>, <span style="color: #0066CC;">borderColor</span>:uint = 0x000000<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">size</span>, fill, bgColor, borderSize, <span style="color: #0066CC;">borderColor</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; override protected <span style="color: #000000; font-weight: bold;">function</span> dibuja<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_fill == <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">beginFill</span><span style="color: #66cc66;">&#40;</span>_bgColor<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_borderSize != <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">lineStyle</span><span style="color: #66cc66;">&#40;</span>_borderSize, _borderColor<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">drawRect</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, _size, _size<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_fill == <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">endFill</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<p>Haremos lo mismo para la clase "Circulo". Únicamente deberemos implementar de diferente manera el método "dibuja".</p>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-33">
<div class="actionscript">package org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">IGrafico</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">cristalab</span>.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">Grafico</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Shape</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Circulo <span style="color: #0066CC;">extends</span> Grafico <span style="color: #0066CC;">implements</span> IGrafico<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Circulo<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">size</span>:uint = <span style="color: #cc66cc;">10</span>, fill:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">true</span>, bgColor:uint = 0x000000, borderSize:uint = <span style="color: #cc66cc;">0</span>, bordeColor:uint = 0x000000<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">size</span>, fill, bgColor, borderSize, <span style="color: #0066CC;">borderColor</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; override protected <span style="color: #000000; font-weight: bold;">function</span> dibuja<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_fill == <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">beginFill</span><span style="color: #66cc66;">&#40;</span>_bgColor<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_borderSize != <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">lineStyle</span><span style="color: #66cc66;">&#40;</span>_borderSize, _borderColor<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> radio:uint = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">round</span><span style="color: #66cc66;">&#40;</span>_size / <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">drawCircle</span><span style="color: #66cc66;">&#40;</span>radio, radio, radio<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>_fill == <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">endFill</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------------------------------------</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></p>
<p>A partir de aquí iremos creando tantas clases como gráficos diferentes nos interese dibujar, incluso podemos extender estas subclases en otras subclases, por ejemplo para crear objetos más complejos pero que su base sea un cuadrado o un circulo.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Programaci%C3%B3n%20orientada%20a%20objetos%3A%20Herencia%20de%20clases.%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F&amp;t=Programaci%C3%B3n%20orientada%20a%20objetos%3A%20Herencia%20de%20clases." title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F&amp;title=Programaci%C3%B3n%20orientada%20a%20objetos%3A%20Herencia%20de%20clases.&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=La%20herencia%20de%20clases%20es%20uno%20de%20los%20conceptos%20b%C3%A1sicos%20de%20la%20programaci%C3%B3n%20orientada%20a%20objetos.%20Decir%20que%20una%20clase%20hereda%20de%20otra%20quiere%20decir%20que%20esa%20clase%20obtiene%20los%20mismos%20m%C3%A9todos%20y%20propiedades%20de%20la%20otra%20clase.%20Permitiendo%20de%20esta%20forma%20a%C3%B1adi" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F&amp;title=Programaci%C3%B3n%20orientada%20a%20objetos%3A%20Herencia%20de%20clases.&amp;annotation=La%20herencia%20de%20clases%20es%20uno%20de%20los%20conceptos%20b%C3%A1sicos%20de%20la%20programaci%C3%B3n%20orientada%20a%20objetos.%20Decir%20que%20una%20clase%20hereda%20de%20otra%20quiere%20decir%20que%20esa%20clase%20obtiene%20los%20mismos%20m%C3%A9todos%20y%20propiedades%20de%20la%20otra%20clase.%20Permitiendo%20de%20esta%20forma%20a%C3%B1adi" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F&amp;title=Programaci%C3%B3n%20orientada%20a%20objetos%3A%20Herencia%20de%20clases.&amp;notes=La%20herencia%20de%20clases%20es%20uno%20de%20los%20conceptos%20b%C3%A1sicos%20de%20la%20programaci%C3%B3n%20orientada%20a%20objetos.%20Decir%20que%20una%20clase%20hereda%20de%20otra%20quiere%20decir%20que%20esa%20clase%20obtiene%20los%20mismos%20m%C3%A9todos%20y%20propiedades%20de%20la%20otra%20clase.%20Permitiendo%20de%20esta%20forma%20a%C3%B1adi" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Programaci%C3%B3n%20orientada%20a%20objetos%3A%20Herencia%20de%20clases.&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fprogramacion-orientada-a-objetos-herencia-de-clases%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/comunicacion-entre-clases-actionscript-3-con-eventdispatcher/' rel='bookmark' title='Permanent Link: Comunicación entre clases Actionscript 3 con EventDispatcher'>Comunicación entre clases Actionscript 3 con EventDispatcher</a></li>
<li><a href='http://www.codigoactionscript.org/poo-dependencia-de-clases-y-polimorfismo/' rel='bookmark' title='Permanent Link: POO: Dependencia de clases y Polimorfismo'>POO: Dependencia de clases y Polimorfismo</a></li>
<li><a href='http://www.codigoactionscript.org/articulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3/' rel='bookmark' title='Permanent Link: Articulo sobre la programación orientada a objetos en Actionscript 3'>Articulo sobre la programación orientada a objetos en Actionscript 3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/programacion-orientada-a-objetos-herencia-de-clases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El uso correcto de Actionscript 2.0</title>
		<link>http://www.codigoactionscript.org/el-uso-correcto-de-actionscript-20/</link>
		<comments>http://www.codigoactionscript.org/el-uso-correcto-de-actionscript-20/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 00:31:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS2]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[POO]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=100</guid>
		<description><![CDATA[<p>Desde que salió Flash CS y ActionScript 3.0 que han habido numerosas quejas de gente que opina que Actionscript 3 es muy diferente a Actionscript 2  y que no entiende por que Adobe ha realizado  este cambio tan brusco que se está dejando fuera (según ellos) a mucha gente.</p>
<p>Se han oido muchas opiniones de gente que dice que continuará trabajando en Actionscript 2 por que ven muy complejo Actionscript 3. Freddie hace poco escribió un articulo sobre esta cuestión. Sobre que Actionscript 2 aún tiene mercado y que [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/anadir-funciones-al-teclado-con-actionscript-3/' rel='bookmark' title='Permanent Link: Añadir funciones al teclado con Actionscript 3'>Añadir funciones al teclado con Actionscript 3</a></li>
<li><a href='http://www.codigoactionscript.org/botones-con-parametros-en-actionscript-3/' rel='bookmark' title='Permanent Link: Botones con parámetros en Actionscript 3'>Botones con parámetros en Actionscript 3</a></li>
<li><a href='http://www.codigoactionscript.org/clase-de-actionscript-3-para-anadir-sombras-a-movieclips/' rel='bookmark' title='Permanent Link: Clase de ActionScript 3 para añadir sombras a MovieClips'>Clase de ActionScript 3 para añadir sombras a MovieClips</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Desde que salió <a href="http://www.cristalab.com/blog/37592/top-10-de-novedades-de-flash-cs3">Flash CS</a> y <a href="http://www.cristalab.com/tips/tags/actionscript">ActionScript 3.0</a> que han habido numerosas quejas de gente que opina que Actionscript 3 es muy diferente a Actionscript 2  y que no entiende por que <a href="http://www.cristalab.com/blog/tags/adobe">Adobe</a> ha realizado  este cambio tan brusco que se está dejando fuera (según ellos) a mucha gente.</p>
<p>Se han oido muchas opiniones de gente que dice que continuará trabajando en Actionscript 2 por que ven muy complejo Actionscript 3. <a href="http://www.cristalab.com/foros/profile.php?modeviewprofile&#038;u2">Freddie</a> hace poco escribió un <a href="http://www.cristalab.com/blog/47913/la-importancia-de-actionscript-2.0">articulo</a> sobre esta cuestión. Sobre que Actionscript 2 aún tiene mercado y que no es necesario el cambio a Actionscript 3. Es cierto que aun hay tiempo para hacer esta transición pero la pregunta es: </p>
<strong>Â¿Realmente la transición se está haciendo de Actionscript 2 a Actionscript 3? o en realidad se está pretendiendo hacer de Actionscript 1 a Actionscript 3</strong>.</p>
<p>El problema es que NO se sabe programar correctamente Actionscript 2. Mucha gente <strong>cree saber programar en Actionscript 2</strong> únicamente por utilizar MovieClipLoader o cualquier otra clase introducida para FlashPlayer 7, o simplemente por utilizar Flash 8 y seleccionar "Publicar para Actionscript 2.0" al crear la película. Pero en realidad siguen <strong>programando al estilo Actionscript_1</strong>.</p>
<p>Actionscript 2.0 lo introdujo Flash Mx 2004 hace más de tres años. Freddie escribió un <a href="http://www.cristalab.com/tutoriales/21/tutorial-de-actionscript-2.0-en-flash">tutorial</a> mostrando las novedades que traía. Si nos fijamos en la última veremos que dice que Actionscript 2.0 introduce la <strong>programación orientada a objetos</strong>, y ese es el punto clave.</p>
<p>Flash Mx 2004 y Flash 8 permitieron combinar código de Actionscript 1 junto a código de Actionscript 2 haciendo que fuese más leve el paso de un lenguaje a otro. Permitiendo que gente que no quisiese aprender a programar orientado a objetos pudiese seguir programar como antes aprovechando las funciones que traía la versión 2. Pero esto a llevado al error de mucha gente que cree saber programar en Actionscript 2 cuando no es cierto, o por lo menos no saben hacerlo correctamente.</p>
<p>Hace unos días <a href="http://www.cristalab.com/foros/profile.php?modeviewprofile&#038;u30870">penHolder</a> escribió un <a href="http://www.cristalab.com/tips">Tip</a> y me pidió mi opinión. Le dije de debía escribirlo con <strong>programación orientada a objetos</strong>.</p>
<p>Antes de seguir he de decir que <strong>NO</strong> estoy criticando a penHoder ni diciendo que sea mal programador, su código es correcto y funciona perfectamente, pero es el último tip de AS2 y es un ejemplo que muestra claramente a lo que me refiero (sorry penHolder)</p>
<p>El ejemplo al que me refiero es <a href="http://www.cristalab.com/foros/t48192.html">este</a>, y el código que utiliza es este:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-42">
<div class="actionscript"><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"botonera"</span>, <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">var</span> labels:<span style="color: #0066CC;">Array</span> = <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"home"</span>, <span style="color: #ff0000;">"about"</span>, <span style="color: #ff0000;">"services"</span>, <span style="color: #ff0000;">"contact"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #0066CC;">with</span> <span style="color: #66cc66;">&#40;</span>botonera<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_x</span> = <span style="color: #cc66cc;">50</span>;<br />
&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span>i = <span style="color: #cc66cc;">1</span>; i &lt;= labels.<span style="color: #0066CC;">length</span>; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> modelButton:<span style="color: #0066CC;">MovieClip</span> = <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">attachMovie</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"boton"</span>, <span style="color: #ff0000;">"boton"</span> + i, <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">_x</span> = <span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">_y</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>i * <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_height</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;modelButton.<span style="color: #006600;">t</span>.<span style="color: #0066CC;">text</span> = labels<span style="color: #66cc66;">&#91;</span>i - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">onEnterFrame</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_alpha</span> += <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #006600;">a</span> - <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_alpha</span><span style="color: #66cc66;">&#41;</span> / <span style="color: #0066CC;">this</span>.<span style="color: #006600;">v</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">hitTest</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_xmouse</span>, <span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_ymouse</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">a</span> = <span style="color: #cc66cc;">50</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">v</span> = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">a</span> = <span style="color: #cc66cc;">100</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">v</span> = <span style="color: #cc66cc;">10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">onMouseDown</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">hitTest</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_xmouse</span>, <span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_ymouse</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton1"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"welcome home"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton2"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"about us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton3"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"our services"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton4"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"contact us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Creado en Flash 8 y publicado para Actionscript 2, siendo este el resultado:<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="115" height="145"><param name="movie" value="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera1.swf" /><param name="quality" value="high" /><embed src="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera1.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"  width="115" height="145"></embed></object><br />
<em>Ejemplo publicado para AS2</em></p>
<p>El ejemplo funciona perfectamente, Pero <strong>Â¿Realmente esto es un ejemplo de código creado para Actionscript 2?</strong>
<strong>Hagamos una prueba:</strong><br />
Eliminemos del código la asignación de tipo de las variables. Osea donde pone <strong>var labels:Array</strong> dejaremos <strong>var labels</strong> y donde pone <strong>var modelButton:MovieClip</strong> dejaremos <strong>var modelButton</strong>, quedando así el código:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-43">
<div class="actionscript"><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"botonera"</span>, <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">var</span> labels = <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"home"</span>, <span style="color: #ff0000;">"about"</span>, <span style="color: #ff0000;">"services"</span>, <span style="color: #ff0000;">"contact"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #0066CC;">with</span> <span style="color: #66cc66;">&#40;</span>botonera<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_x</span> = <span style="color: #cc66cc;">50</span>;<br />
&nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span>i = <span style="color: #cc66cc;">1</span>; i &lt;= labels.<span style="color: #0066CC;">length</span>; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> modelButton = <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">attachMovie</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"boton"</span>, <span style="color: #ff0000;">"boton"</span> + i, <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">_x</span> = <span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">_y</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>i * <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_height</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #006600;">t</span>.<span style="color: #0066CC;">text</span> = labels<span style="color: #66cc66;">&#91;</span>i - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">onEnterFrame</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_alpha</span> += <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #006600;">a</span> - <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_alpha</span><span style="color: #66cc66;">&#41;</span> / <span style="color: #0066CC;">this</span>.<span style="color: #006600;">v</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">hitTest</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_xmouse</span>, <span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_ymouse</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">a</span> = <span style="color: #cc66cc;">50</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">v</span> = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">a</span> = <span style="color: #cc66cc;">100</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">v</span> = <span style="color: #cc66cc;">10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; modelButton.<span style="color: #0066CC;">onMouseDown</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">hitTest</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_xmouse</span>, <span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">_ymouse</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton1"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"welcome home"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton2"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"about us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton3"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"our services"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_name</span> == <span style="color: #ff0000;">"boton4"</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"contact us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>En opciones de publicación seleccionemos <strong>FlashPlayer 7</strong> y <strong>Actionscrip 1</strong>.</p>
<p><img src="http://www.cristalab.com/images/tips/actionscript/as2-correcto/as1.jpg" alt="" /></p>
<p>Comprobemos el resultado:<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="115" height="145"><param name="movie" value="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera2.swf" /><param name="quality" value="high" /><embed src="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera2.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"  width="115" height="145"></embed></object><br />
<em>Ejemplo publicado para AS1</em></p>
<p>Vayamos más lejos. Eliminemos el método getNextHighestDepth() y dejemos un valor fijo, por ejemplo 1. Ahora publiquemos la pelicula para <strong>FlashPlayer 6</strong>:<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="115" height="145"><param name="movie" value="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera3.swf" /><param name="quality" value="high" /><embed src="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera3.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"  width="115" height="145"></embed></object><br />
<em>Ejemplo publicado para AS1 y FlashPlayer 6 desde Flash MX</em></p>
<p><strong>Nota:</strong> Para esta última publicación he utilizado Macromedia Flash MX. Versión de Flash que salió al mercado a principios del 2002, más de un año y medio antes de que apareciese Actionscript 2...</p>
<p>Cómo vemos el resultado es el mismo. Es decir, este ejemplo es <strong>99.8% código Actionscript 1</strong>.</p>
<p>Entonces... Â¿Podemos considerar el código como Actionscript 2 únicamente por añadir el tipo de datos a dos Arrays? <strong>Evidentemente NO</strong>. Podremos utilizar una o varias funciones propias de Actionscript 2 pero seguiremos programando en Actionscript 1.</p>
<p>Cómo he dicho antes Actionscript 2 introduce la <strong>programación orientada a objetos</strong> y esa es la única manera de programar correctamente Actionscript 2.</p>
<p><strong>Veamos el ejemplo escrito con programación orientada a objetos</strong><br />
Tampoco me voy a extender mucho en explicar este código, solo diré que utilizaremos dos objetos, uno que será la botonera que a su vez creará los objetos de los botones necesarios. Así que tendremos dos clases:<br />
<strong>Botonera.as</strong>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-44">
<div class="actionscript"><span style="color: #000000; font-weight: bold;">class</span> Botonera<br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _ruta:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _clip:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _vinculo:<span style="color: #0066CC;">String</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _botones:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _labels:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _acciones:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">_x</span>:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">_y</span>:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _distanciaY:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Botonera<span style="color: #66cc66;">&#40;</span>ruta:<span style="color: #0066CC;">MovieClip</span>, vinculo:<span style="color: #0066CC;">String</span>, labels:<span style="color: #0066CC;">Array</span>, acciones:<span style="color: #000000; font-weight: bold;">Function</span>, x:<span style="color: #0066CC;">Number</span>, y:<span style="color: #0066CC;">Number</span>, distanciaY:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">_x</span> = x;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">_y</span> = y;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _distanciaY = distanciaY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _ruta = ruta;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _vinculo = vinculo;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _labels = labels;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _acciones = acciones;<br />
&nbsp; &nbsp; &nbsp; &nbsp; creaBotonera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> creaBotonera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip = _ruta.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"botonera"</span>, _ruta.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #0066CC;">_x</span> = <span style="color: #0066CC;">_x</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #0066CC;">_y</span> = <span style="color: #0066CC;">_y</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> total = _labels.<span style="color: #0066CC;">length</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1</span>; i &lt;= total; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; creaBoton<span style="color: #66cc66;">&#40;</span>_labels<span style="color: #66cc66;">&#91;</span>i - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>,i<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> creaBoton<span style="color: #66cc66;">&#40;</span>label:<span style="color: #0066CC;">String</span>, id:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> boton:Boton = <span style="color: #000000; font-weight: bold;">new</span> Boton<span style="color: #66cc66;">&#40;</span>_clip, _vinculo, label, _acciones, _distanciaY, id<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _botones.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>boton<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<strong>Boton.as</strong>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-45">
<div class="actionscript"><span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">transitions</span>.<span style="color: #006600;">Tween</span>;<br />
<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">transitions</span>.<span style="color: #006600;">easing</span>.*;<br />
<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Delegate</span>;<br />
<span style="color: #808080; font-style: italic;">//</span><br />
<span style="color: #000000; font-weight: bold;">class</span> Boton<br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _ruta:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _clip:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _vinculo:<span style="color: #0066CC;">String</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _label:<span style="color: #0066CC;">String</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _accion:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _distanciaY:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _id:<span style="color: #0066CC;">Number</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Boton<span style="color: #66cc66;">&#40;</span>ruta:<span style="color: #0066CC;">MovieClip</span>, vinculo:<span style="color: #0066CC;">String</span>, label:<span style="color: #0066CC;">String</span>, accion:<span style="color: #000000; font-weight: bold;">Function</span>, distanciaY:<span style="color: #0066CC;">Number</span>, id:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _ruta = ruta;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _vinculo = vinculo;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _label = label;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _accion = accion;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _distanciaY = distanciaY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _id = id;<br />
&nbsp; &nbsp; &nbsp; &nbsp; creaBoton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> creaBoton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip = _ruta.<span style="color: #0066CC;">attachMovie</span><span style="color: #66cc66;">&#40;</span>_vinculo, _vinculo + _id, _ruta.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #006600;">t</span>.<span style="color: #0066CC;">text</span> = _label;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #0066CC;">_x</span> = <span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #0066CC;">_y</span> = <span style="color: #66cc66;">&#40;</span>_id - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> * <span style="color: #66cc66;">&#40;</span>_clip.<span style="color: #0066CC;">_height</span> + _distanciaY<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #006600;">boton</span> = _id;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #006600;">accion</span> = _accion;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #0066CC;">onRelease</span> = Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, mouse_down<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #0066CC;">onRollOver</span> = Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, mouse_over<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #0066CC;">onRollOut</span> = Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, mouse_out<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> mouse_down<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _accion<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>._id<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> mouse_over<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> alfa:Tween = <span style="color: #000000; font-weight: bold;">new</span> Tween<span style="color: #66cc66;">&#40;</span>_clip, <span style="color: #ff0000;">"_alpha"</span>, Regular.<span style="color: #006600;">easeIn</span>, <span style="color: #cc66cc;">100</span>, <span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">5</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> mouse_out<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> alfa:Tween = <span style="color: #000000; font-weight: bold;">new</span> Tween<span style="color: #66cc66;">&#40;</span>_clip, <span style="color: #ff0000;">"_alpha"</span>, Regular.<span style="color: #006600;">easeIn</span>, <span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">100</span>, <span style="color: #cc66cc;">5</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Y en el .fla tendremos esto:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-46">
<div class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> labels:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"home"</span>, <span style="color: #ff0000;">"about"</span>, <span style="color: #ff0000;">"services"</span>, <span style="color: #ff0000;">"contact"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">var</span> botonera:Botonera = <span style="color: #000000; font-weight: bold;">new</span> Botonera<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #ff0000;">"Boton"</span>, labels, acciones, <span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">20</span>, <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span>;</p>
<p><span style="color: #000000; font-weight: bold;">function</span> acciones<span style="color: #66cc66;">&#40;</span>boton<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"welcome home"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"about us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"our services"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"contact us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Resultado:<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="115" height="145"><param name="movie" value="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera4.swf" /><param name="quality" value="high" /><embed src="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera4.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"  width="115" height="145"></embed></object><br />
<em>AS2 con POO</em></p>
<p>Evidentemente este código ahora es imposible publicarlo desde Actionscript 1, es un código orientado a objetos con lo que es un código <strong>100% Actionscript 2</strong>.</p>
<strong>Ahora pasemos el ejemplo a Actionscript 3</strong><br />
Seguiremos teniendo dos objetos, botonera y botón.</p>
<p><strong>Botonera.as</strong>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-47">
<div class="actionscript">package <br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">getDefinitionByName</span>;<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Botonera <span style="color: #0066CC;">extends</span> Sprite<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _ruta:Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _clip:Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _vinculo:<span style="color: #0066CC;">String</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _botones:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _labels:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _acciones:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">_x</span>:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">_y</span>:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _distanciaY:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Botonera<span style="color: #66cc66;">&#40;</span>ruta:Sprite, vinculo:<span style="color: #0066CC;">String</span>, labels:<span style="color: #0066CC;">Array</span>, acciones:<span style="color: #000000; font-weight: bold;">Function</span>, x:<span style="color: #0066CC;">Number</span>, y:<span style="color: #0066CC;">Number</span>, distanciaY:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">_x</span> = x;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">_y</span> = y;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _distanciaY = distanciaY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _ruta = ruta;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _vinculo = vinculo;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _labels = labels;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _acciones = acciones;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; creaBotonera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> creaBotonera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _clip = <span style="color: #000000; font-weight: bold;">new</span> Sprite<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #006600;">x</span> = <span style="color: #0066CC;">_x</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #006600;">y</span> = <span style="color: #0066CC;">_y</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> total:uint = _labels.<span style="color: #0066CC;">length</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:uint = <span style="color: #cc66cc;">1</span>; i &lt;= total; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; creaBoton<span style="color: #66cc66;">&#40;</span>_labels<span style="color: #66cc66;">&#91;</span>i - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>,i<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addChild<span style="color: #66cc66;">&#40;</span>_clip<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> creaBoton<span style="color: #66cc66;">&#40;</span>label:<span style="color: #0066CC;">String</span>, id:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> ClassReference:<span style="color: #000000; font-weight: bold;">Class</span> = getDefinitionByName<span style="color: #66cc66;">&#40;</span>_vinculo<span style="color: #66cc66;">&#41;</span> as <span style="color: #000000; font-weight: bold;">Class</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> boton:Sprite = <span style="color: #000000; font-weight: bold;">new</span> ClassReference<span style="color: #66cc66;">&#40;</span>_clip, label, _acciones, _distanciaY, id<span style="color: #66cc66;">&#41;</span> as Sprite<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _clip.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>boton<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<strong>Boton.as</strong>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-48">
<div class="actionscript">package <br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">text</span>.<span style="color: #0066CC;">TextField</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> fl.<span style="color: #006600;">transitions</span>.*;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">import</span> fl.<span style="color: #006600;">transitions</span>.<span style="color: #006600;">easing</span>.*;<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Boton <span style="color: #0066CC;">extends</span> Sprite<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _ruta:Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _clip:Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _label:<span style="color: #0066CC;">String</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _accion:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _distanciaY:uint;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _id:uint;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Boton<span style="color: #66cc66;">&#40;</span>ruta:Sprite, label:<span style="color: #0066CC;">String</span>, accion:<span style="color: #000000; font-weight: bold;">Function</span>, distanciaY:uint, id:uint<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _ruta = ruta;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _label = label;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _accion = accion;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _distanciaY = distanciaY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _id = id;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; creaBoton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> creaBoton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> texto = getChildByName<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"t"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; texto.<span style="color: #0066CC;">text</span> = _label;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x = <span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y = <span style="color: #66cc66;">&#40;</span>_id - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> * <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">height</span> + _distanciaY<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addEventListener<span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouse_down<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addEventListener<span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">ROLL_OVER</span>, mouse_over<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addEventListener<span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">ROLL_OUT</span>, mouse_out<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> mouse_down<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _accion<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>._id<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> mouse_over<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> alfa:Tween = <span style="color: #000000; font-weight: bold;">new</span> Tween<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #ff0000;">"alpha"</span>, Regular.<span style="color: #006600;">easeIn</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span>.<span style="color: #cc66cc;">5</span>, <span style="color: #cc66cc;">5</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> mouse_out<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> alfa:Tween = <span style="color: #000000; font-weight: bold;">new</span> Tween<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #ff0000;">"alpha"</span>, Regular.<span style="color: #006600;">easeIn</span>, <span style="color: #cc66cc;">0</span>.<span style="color: #cc66cc;">5</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">5</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Y en el .fla:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-49">
<div class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> labels:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"home"</span>, <span style="color: #ff0000;">"about"</span>, <span style="color: #ff0000;">"services"</span>, <span style="color: #ff0000;">"contact"</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">var</span> botonera:Botonera = <span style="color: #000000; font-weight: bold;">new</span> Botonera<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, <span style="color: #ff0000;">"Boton"</span>, labels, acciones, <span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">20</span>, <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span>;<br />
addChild<span style="color: #66cc66;">&#40;</span>botonera<span style="color: #66cc66;">&#41;</span>;</p>
<p><span style="color: #000000; font-weight: bold;">function</span> acciones<span style="color: #66cc66;">&#40;</span>boton<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"welcome home"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"about us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"our services"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>boton == <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"contact us"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="115" height="145"><param name="movie" value="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera5.swf" /><param name="quality" value="high" /><embed src="http://www.cristalab.com/images/tips/actionscript/as2-correcto/botonera5.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"  width="115" height="145"></embed></object><br />
<em>Ejemplo en Actionscript 3</em></p>
<p>Evidentemente Actionscript 3 introduce cambios respecto a Actionscript 2, elimina funciones e introduce otras. No utilizaremos attachMovie utilizaremos addChild, no utilizaremos métodos en clip, utilizaremos listeners. etc... Pero los cambios son MÃNIMOS. La base sigue siendo la misma, una programación orientada a objetos.</p>
<p><strong>Conclusión:</strong><br />
Ãšnicamente comparen los códigos... Â¿Realmente creemos que ha cambiado tanto Actionscript_3 respecto a Actionscript 2? o es que en realidad no sabemos programar bien Actionscript_2 y aun estamos con Actionscript_1...</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=El%20uso%20correcto%20de%20Actionscript%202.0%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F&amp;t=El%20uso%20correcto%20de%20Actionscript%202.0" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F&amp;title=El%20uso%20correcto%20de%20Actionscript%202.0&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Desde%20que%20sali%C3%B3%20%20y%20%20que%20han%20habido%20numerosas%20quejas%20de%20gente%20que%20opina%20que%20Actionscript%203%20es%20muy%20diferente%20a%20Actionscript%202%20%20y%20que%20no%20entiende%20por%20que%20%20ha%20realizado%20%20este%20cambio%20tan%20brusco%20que%20se%20est%C3%A1%20dejando%20fuera%20%28seg%C3%BAn%20ellos%29%20a%20mucha%20gente.%0D%0A%0D%0A" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F&amp;title=El%20uso%20correcto%20de%20Actionscript%202.0&amp;annotation=Desde%20que%20sali%C3%B3%20%20y%20%20que%20han%20habido%20numerosas%20quejas%20de%20gente%20que%20opina%20que%20Actionscript%203%20es%20muy%20diferente%20a%20Actionscript%202%20%20y%20que%20no%20entiende%20por%20que%20%20ha%20realizado%20%20este%20cambio%20tan%20brusco%20que%20se%20est%C3%A1%20dejando%20fuera%20%28seg%C3%BAn%20ellos%29%20a%20mucha%20gente.%0D%0A%0D%0A" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F&amp;title=El%20uso%20correcto%20de%20Actionscript%202.0&amp;notes=Desde%20que%20sali%C3%B3%20%20y%20%20que%20han%20habido%20numerosas%20quejas%20de%20gente%20que%20opina%20que%20Actionscript%203%20es%20muy%20diferente%20a%20Actionscript%202%20%20y%20que%20no%20entiende%20por%20que%20%20ha%20realizado%20%20este%20cambio%20tan%20brusco%20que%20se%20est%C3%A1%20dejando%20fuera%20%28seg%C3%BAn%20ellos%29%20a%20mucha%20gente.%0D%0A%0D%0A" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=El%20uso%20correcto%20de%20Actionscript%202.0&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fel-uso-correcto-de-actionscript-20%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/anadir-funciones-al-teclado-con-actionscript-3/' rel='bookmark' title='Permanent Link: Añadir funciones al teclado con Actionscript 3'>Añadir funciones al teclado con Actionscript 3</a></li>
<li><a href='http://www.codigoactionscript.org/botones-con-parametros-en-actionscript-3/' rel='bookmark' title='Permanent Link: Botones con parámetros en Actionscript 3'>Botones con parámetros en Actionscript 3</a></li>
<li><a href='http://www.codigoactionscript.org/clase-de-actionscript-3-para-anadir-sombras-a-movieclips/' rel='bookmark' title='Permanent Link: Clase de ActionScript 3 para añadir sombras a MovieClips'>Clase de ActionScript 3 para añadir sombras a MovieClips</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/el-uso-correcto-de-actionscript-20/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Clase de ActionScript 3 para añadir sombras a MovieClips</title>
		<link>http://www.codigoactionscript.org/clase-de-actionscript-3-para-anadir-sombras-a-movieclips/</link>
		<comments>http://www.codigoactionscript.org/clase-de-actionscript-3-para-anadir-sombras-a-movieclips/#comments</comments>
		<pubDate>Tue, 14 Aug 2007 15:08:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[POO]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=90</guid>
		<description><![CDATA[<p>Esta es una sencilla clase de ActionScript 3 que he escrito para añadir y modificar fácilmente sombras a MovieClips.</p>
<p>Lo que hago simplemente es implementar la clase DropShadowFilter para añadirle un filtro de sombra al clip.</p>
<p>La clase se compone básicamente de dos funciones iniSombra() y update(). En la primera añado los valores por defecto que tendrá el filtro de sombra y en la segunda es la funciónque añadirá el filtro al MovieClip con dichos parámetros. Estas dos funciones son llamadas desde el constructor de la clase.</p>




private function iniSombra&#40;&#41;:void
&#123;
&#160; &#160;_color = 0x000000;
&#160; [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/clase-para-cargar-contenido-externo-en-actionscript-3/' rel='bookmark' title='Permanent Link: Clase para cargar contenido externo en Actionscript 3'>Clase para cargar contenido externo en Actionscript 3</a></li>
<li><a href='http://www.codigoactionscript.org/clase-de-actionscript-3-para-arrays-multidimensionales/' rel='bookmark' title='Permanent Link: Clase de Actionscript 3 para arrays multidimensionales'>Clase de Actionscript 3 para arrays multidimensionales</a></li>
<li><a href='http://www.codigoactionscript.org/clase-para-dibujar-lineas-de-puntos-en-actionscript-3/' rel='bookmark' title='Permanent Link: Clase para dibujar líneas de puntos en ActionScript 3'>Clase para dibujar líneas de puntos en ActionScript 3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Esta es una sencilla clase de ActionScript 3 que he escrito para <strong>añadir y modificar fácilmente sombras a MovieClips</strong>.</p>
<p>Lo que hago simplemente es implementar la clase <a href="http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/flash/filters/DropShadowFilter.html">DropShadowFilter</a> para añadirle un filtro de sombra al clip.</p>
<p>La clase se compone básicamente de dos funciones <strong>iniSombra()</strong> y <strong>update()</strong>. En la primera añado los valores por defecto que tendrá el filtro de sombra y en la segunda es la funciónque añadirá el filtro al MovieClip con dichos parámetros. Estas dos funciones son llamadas desde el constructor de la clase.</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-58">
<div class="actionscript"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> iniSombra<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;_color = 0x000000;<br />
&nbsp; &nbsp;_angulo = <span style="color: #cc66cc;">45</span>;<br />
&nbsp; &nbsp;_alfa = <span style="color: #cc66cc;">0</span>.<span style="color: #cc66cc;">7</span>;<br />
&nbsp; &nbsp;_blurX = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp;_blurY = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp;_distancia = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp;_strength = <span style="color: #cc66cc;">0</span>.<span style="color: #cc66cc;">65</span>;<br />
&nbsp; &nbsp;_inner = <span style="color: #000000; font-weight: bold;">false</span>;<br />
&nbsp; &nbsp;_knockout = <span style="color: #000000; font-weight: bold;">false</span>;<br />
&nbsp; &nbsp;_calidad = BitmapFilterQuality.<span style="color: #006600;">HIGH</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;_filtros = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;_sombra = <span style="color: #000000; font-weight: bold;">new</span> DropShadowFilter<span style="color: #66cc66;">&#40;</span>_distancia,_angulo,_color,_alfa,_blurX,_blurY,_strength,_calidad,_inner,_knockout<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;_filtros.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>_sombra<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;_clip.<span style="color: #006600;">filters</span> = _filtros;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Además la clase incorpora una serie de setters para modificar los parámetros del filtro. Estos setters realizan una llamada a la función <strong>update()</strong> para actualizar la sombra al cambiar cualquier parámetro.</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-59">
<div class="actionscript"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">color</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">color</span>:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;_color = <span style="color: #0066CC;">color</span>;<br />
&nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p><strong>Esta sería la clase completa:</strong></p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-60">
<div class="actionscript">package<br />
<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;<br />
&nbsp; &nbsp;<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">filters</span>.<span style="color: #006600;">BitmapFilter</span>;<br />
&nbsp; &nbsp;<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">filters</span>.<span style="color: #006600;">BitmapFilterQuality</span>;<br />
&nbsp; &nbsp;<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">filters</span>.<span style="color: #006600;">DropShadowFilter</span>;<br />
&nbsp; &nbsp;<span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp;<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Sombra <span style="color: #0066CC;">extends</span> Sprite<br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _ruta:Sprite;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _clip:<span style="color: #0066CC;">Object</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _filtros:<span style="color: #0066CC;">Array</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _sombra:BitmapFilter;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _color:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _angulo:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _alfa:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _blurX:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _blurY:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _distancia:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _strength:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _inner:<span style="color: #0066CC;">Boolean</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _knockout:<span style="color: #0066CC;">Boolean</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _calidad:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Sombra<span style="color: #66cc66;">&#40;</span>clip:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_ruta = clip.<span style="color: #006600;">parent</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_clip = clip;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iniSombra<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> iniSombra<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_color = 0x000000;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_angulo = <span style="color: #cc66cc;">45</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_alfa = <span style="color: #cc66cc;">0</span>.<span style="color: #cc66cc;">7</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_blurX = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_blurY = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_distancia = <span style="color: #cc66cc;">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_strength = <span style="color: #cc66cc;">0</span>.<span style="color: #cc66cc;">65</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_inner = <span style="color: #000000; font-weight: bold;">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_knockout = <span style="color: #000000; font-weight: bold;">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_calidad = BitmapFilterQuality.<span style="color: #006600;">HIGH</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_filtros = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_sombra = <span style="color: #000000; font-weight: bold;">new</span> DropShadowFilter<span style="color: #66cc66;">&#40;</span>_distancia,_angulo,_color,_alfa,_blurX,_blurY,_strength,_calidad,_inner,_knockout<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_filtros.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>_sombra<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_clip.<span style="color: #006600;">filters</span> = _filtros;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">color</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">color</span>:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_color = <span style="color: #0066CC;">color</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> angulo<span style="color: #66cc66;">&#40;</span>angulo:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_angulo = angulo;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> alfa<span style="color: #66cc66;">&#40;</span>alfa:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_alfa = alfa;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> blurX<span style="color: #66cc66;">&#40;</span>blurX:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_blurX = blurX;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> blurY<span style="color: #66cc66;">&#40;</span>blurY:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_blurY = blurY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> distancia<span style="color: #66cc66;">&#40;</span>distancia:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_distancia = distancia;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> strength<span style="color: #66cc66;">&#40;</span>strength:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_strength = strength;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> inner<span style="color: #66cc66;">&#40;</span>inner:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_inner = inner;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> knockout<span style="color: #66cc66;">&#40;</span>knockout:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_knockout = knockout;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> calidad<span style="color: #66cc66;">&#40;</span>calidad:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_calidad = calidad;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//------------------------------------------</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Un <strong>ejemplo</strong> de uso podría ser este (en nuestro .fla):</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-61">
<div class="actionscript"><span style="color: #0066CC;">import</span> Sombra;<br />
<span style="color: #000000; font-weight: bold;">var</span> sombra1:Sombra = <span style="color: #000000; font-weight: bold;">new</span> Sombra<span style="color: #66cc66;">&#40;</span>logo1<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">var</span> sombra2:Sombra = <span style="color: #000000; font-weight: bold;">new</span> Sombra<span style="color: #66cc66;">&#40;</span>logo2<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">var</span> sombra3:Sombra = <span style="color: #000000; font-weight: bold;">new</span> Sombra<span style="color: #66cc66;">&#40;</span>logo3<span style="color: #66cc66;">&#41;</span>;<br />
sombra2.<span style="color: #006600;">blurX</span> = <span style="color: #cc66cc;">15</span>;<br />
sombra2.<span style="color: #006600;">blurY</span> = <span style="color: #cc66cc;">15</span>;<br />
sombra2.<span style="color: #006600;">angulo</span> = <span style="color: #cc66cc;">90</span><br />
sombra2.<span style="color: #006600;">distancia</span> = <span style="color: #cc66cc;">20</span>;<br />
sombra3.<span style="color: #006600;">alfa</span> = <span style="color: #cc66cc;">1</span><br />
sombra3.<span style="color: #0066CC;">color</span> = 0x0066CC<br />
sombra3.<span style="color: #006600;">blurX</span> = <span style="color: #cc66cc;">15</span>;<br />
sombra3.<span style="color: #006600;">blurY</span> = <span style="color: #cc66cc;">15</span>;<br />
sombra3.<span style="color: #006600;">distancia</span> = <span style="color: #cc66cc;">0</span>;</div>
</div>
</div>
</div>
<p></div>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="500" height="190"><param name="movie" value="http://www.cristalab.com/images/tips/actionscript_3/sombras/sombra.swf" /><param name="quality" value="high" /><embed src="http://www.cristalab.com/images/tips/actionscript_3/sombras/sombra.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"  width="500" height="190"></embed></object></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Clase%20de%20ActionScript%203%20para%20a%C3%B1adir%20sombras%20a%20MovieClips%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F&amp;t=Clase%20de%20ActionScript%203%20para%20a%C3%B1adir%20sombras%20a%20MovieClips" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F&amp;title=Clase%20de%20ActionScript%203%20para%20a%C3%B1adir%20sombras%20a%20MovieClips&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Esta%20es%20una%20sencilla%20clase%20de%20ActionScript%203%20que%20he%20escrito%20para%20a%C3%B1adir%20y%20modificar%20f%C3%A1cilmente%20sombras%20a%20MovieClips.%0D%0A%0D%0ALo%20que%20hago%20simplemente%20es%20implementar%20la%20clase%20DropShadowFilter%20para%20a%C3%B1adirle%20un%20filtro%20de%20sombra%20al%20clip.%0D%0A%0D%0ALa%20clase%20se%20comp" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F&amp;title=Clase%20de%20ActionScript%203%20para%20a%C3%B1adir%20sombras%20a%20MovieClips&amp;annotation=Esta%20es%20una%20sencilla%20clase%20de%20ActionScript%203%20que%20he%20escrito%20para%20a%C3%B1adir%20y%20modificar%20f%C3%A1cilmente%20sombras%20a%20MovieClips.%0D%0A%0D%0ALo%20que%20hago%20simplemente%20es%20implementar%20la%20clase%20DropShadowFilter%20para%20a%C3%B1adirle%20un%20filtro%20de%20sombra%20al%20clip.%0D%0A%0D%0ALa%20clase%20se%20comp" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F&amp;title=Clase%20de%20ActionScript%203%20para%20a%C3%B1adir%20sombras%20a%20MovieClips&amp;notes=Esta%20es%20una%20sencilla%20clase%20de%20ActionScript%203%20que%20he%20escrito%20para%20a%C3%B1adir%20y%20modificar%20f%C3%A1cilmente%20sombras%20a%20MovieClips.%0D%0A%0D%0ALo%20que%20hago%20simplemente%20es%20implementar%20la%20clase%20DropShadowFilter%20para%20a%C3%B1adirle%20un%20filtro%20de%20sombra%20al%20clip.%0D%0A%0D%0ALa%20clase%20se%20comp" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Clase%20de%20ActionScript%203%20para%20a%C3%B1adir%20sombras%20a%20MovieClips&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fclase-de-actionscript-3-para-anadir-sombras-a-movieclips%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/clase-para-cargar-contenido-externo-en-actionscript-3/' rel='bookmark' title='Permanent Link: Clase para cargar contenido externo en Actionscript 3'>Clase para cargar contenido externo en Actionscript 3</a></li>
<li><a href='http://www.codigoactionscript.org/clase-de-actionscript-3-para-arrays-multidimensionales/' rel='bookmark' title='Permanent Link: Clase de Actionscript 3 para arrays multidimensionales'>Clase de Actionscript 3 para arrays multidimensionales</a></li>
<li><a href='http://www.codigoactionscript.org/clase-para-dibujar-lineas-de-puntos-en-actionscript-3/' rel='bookmark' title='Permanent Link: Clase para dibujar líneas de puntos en ActionScript 3'>Clase para dibujar líneas de puntos en ActionScript 3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/clase-de-actionscript-3-para-anadir-sombras-a-movieclips/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Articulo sobre la programación orientada a objetos en Actionscript 3</title>
		<link>http://www.codigoactionscript.org/articulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3/</link>
		<comments>http://www.codigoactionscript.org/articulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 15:05:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[POO]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=83</guid>
		<description><![CDATA[<p>Peter Elst acaba de publicar un articulo en el Adobe Developer Center sobre la programación orientada a objetos (POO) en Actionscript 3.</p>
<p>El artículo explica los fundamentos de la herencia, de la encapsulación y del polimorfismo, conceptos básicos para poder programar orientando a objetos.</p>
<p>Peter Elst es autor de libros sobre AS3 como "Object-Oriented ActionScript 3.0"</p>
<p>Enlace del articulo:</p>

Object-oriented programming with ActionScript 3.0




Comparte:


	
	
	
	
	
	
	
	
	




<p>Related posts:Programación orientada a objetos: Herencia de clases.
Flex Examples: Nuevo Blog sobre Flex
El uso correcto de Actionscript 2.0
</p>


Related posts:<ol><li><a href='http://www.codigoactionscript.org/programacion-orientada-a-objetos-herencia-de-clases/' rel='bookmark' title='Permanent Link: Programación orientada a objetos: Herencia de clases.'>Programación orientada a objetos: Herencia de clases.</a></li>
<li><a href='http://www.codigoactionscript.org/flex-examples-nuevo-blog-sobre-flex/' rel='bookmark' title='Permanent Link: Flex Examples: Nuevo Blog sobre Flex'>Flex Examples: Nuevo Blog sobre Flex</a></li>
<li><a href='http://www.codigoactionscript.org/el-uso-correcto-de-actionscript-20/' rel='bookmark' title='Permanent Link: El uso correcto de Actionscript 2.0'>El uso correcto de Actionscript 2.0</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.peterelst.com/blog/">Peter Elst</a> acaba de publicar un articulo en el <a href="http://www.adobe.com/devnet/actionscript/articles/oop_as3.html">Adobe Developer Center</a> sobre la programación orientada a objetos (POO) en Actionscript 3.</p>
<p>El artículo explica los fundamentos de la herencia, de la encapsulación y del polimorfismo, conceptos básicos para poder programar orientando a objetos.</p>
<p>Peter Elst es autor de libros sobre AS3 como "<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&#038;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F1590598458%3Fie%3DUTF8%26tag%3Dpeterelst-20%26linkCode%3Das2%26camp%3D1789%26creative%3D9325%26creativeASIN%3D1590598458&#038;tag=codact-20&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325">Object-Oriented ActionScript 3.0</a><img src="http://www.assoc-amazon.com/e/ir?t=codact-20&amp;l=ur2&amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />"</p>
<p>Enlace del articulo:</p>
<ul>
<li><a href="http://www.adobe.com/devnet/actionscript/articles/oop_as3.html">Object-oriented programming with ActionScript 3.0</a></li>
</ul>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Articulo%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20en%20Actionscript%203%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F&amp;t=Articulo%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20en%20Actionscript%203" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F&amp;title=Articulo%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20en%20Actionscript%203&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Peter%20Elst%20acaba%20de%20publicar%20un%20articulo%20en%20el%20Adobe%20Developer%20Center%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20%28POO%29%20en%20Actionscript%203.%0D%0A%0D%0AEl%20art%C3%ADculo%20explica%20los%20fundamentos%20de%20la%20herencia%2C%20de%20la%20encapsulaci%C3%B3n%20y%20del%20polimorfismo%2C%20conceptos%20b%C3%A1si" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F&amp;title=Articulo%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20en%20Actionscript%203&amp;annotation=Peter%20Elst%20acaba%20de%20publicar%20un%20articulo%20en%20el%20Adobe%20Developer%20Center%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20%28POO%29%20en%20Actionscript%203.%0D%0A%0D%0AEl%20art%C3%ADculo%20explica%20los%20fundamentos%20de%20la%20herencia%2C%20de%20la%20encapsulaci%C3%B3n%20y%20del%20polimorfismo%2C%20conceptos%20b%C3%A1si" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F&amp;title=Articulo%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20en%20Actionscript%203&amp;notes=Peter%20Elst%20acaba%20de%20publicar%20un%20articulo%20en%20el%20Adobe%20Developer%20Center%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20%28POO%29%20en%20Actionscript%203.%0D%0A%0D%0AEl%20art%C3%ADculo%20explica%20los%20fundamentos%20de%20la%20herencia%2C%20de%20la%20encapsulaci%C3%B3n%20y%20del%20polimorfismo%2C%20conceptos%20b%C3%A1si" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Articulo%20sobre%20la%20programaci%C3%B3n%20orientada%20a%20objetos%20en%20Actionscript%203&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Farticulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/programacion-orientada-a-objetos-herencia-de-clases/' rel='bookmark' title='Permanent Link: Programación orientada a objetos: Herencia de clases.'>Programación orientada a objetos: Herencia de clases.</a></li>
<li><a href='http://www.codigoactionscript.org/flex-examples-nuevo-blog-sobre-flex/' rel='bookmark' title='Permanent Link: Flex Examples: Nuevo Blog sobre Flex'>Flex Examples: Nuevo Blog sobre Flex</a></li>
<li><a href='http://www.codigoactionscript.org/el-uso-correcto-de-actionscript-20/' rel='bookmark' title='Permanent Link: El uso correcto de Actionscript 2.0'>El uso correcto de Actionscript 2.0</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/articulo-sobre-la-programacion-orientada-a-objetos-en-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lo que yo sé de AS2 #Enlaces, enlaces, millones de enlaces</title>
		<link>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces/</link>
		<comments>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 21:51:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS2]]></category>
		<category><![CDATA[Aportes]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Referencia]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=68</guid>
		<description><![CDATA[
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</p>
<p>*AUTOR: Juan Delgado Zárate
  zarate.tv &#124; dandolachapa.com &#124; loqueyosede.comFlashLa.com &#124; After-Hours.org</p>

Enlaces, enlaces, millones de enlaces
<p>>Indice de contenidos</p>
Software 

MTASC,&#160;compilador&#160;de&#160;AS2&#160;gratuito 
SWFMill,&#160;generador&#160;de&#160;swfs&#160;muy&#160;usado&#160;junto&#160;con&#160;MTASC 
FLASC&#160;(Flash&#160;IDE&#160;+&#160;MTASC) 
Herramientas&#160;de&#160;debug&#160;en&#160;OSFlash 
Zlog,&#160;sencilla&#160;consola&#160;de&#160;Log 

Tutoriales 

Flash&#160;Libre,&#160;fácil.&#160;Aprende&#160;a&#160;utilizar&#160;MTASC&#160;y&#160;SWFMill 
Delegando&#160;que&#160;es&#160;gerundio 

EventDispatcher 

GDispatcher.&#160;La&#160;versión&#160;que&#160;va&#160;en&#160;el&#160;zip&#160;con&#160;el&#160;código&#160;está&#160;modificada&#160;para&#160;meterla dentro&#160;de&#160;un&#160;classpath&#160;normal&#160;y&#160;para&#160;que&#160;compile&#160;con&#160;strict&#160;en&#160;MTASC 
Jorge&#160;Maestre,&#160;Comunicación&#160;basada&#160;en&#160;eventos&#160;para&#160;AS2 
Cómo&#160;crear&#160;instancias&#160;de&#160;clase&#160;dinámicamente 
http://www.zarate.tv/articulos/cargarclasesdinamicamente/ 
Using&#160;_exclude.xml,&#160;the&#160;Good,&#160;the&#160;Bad,&#160;and&#160;the&#160;Wishlist 
Cómo&#160;usar&#160;_exclude&#160;con&#160;MTASC 
Why&#160;does&#160;my&#160;initializer&#160;get&#160;shared&#160;across&#160;all&#160;instances&#160;like&#160;it's&#160;static? 

Patrones&#160;y&#160;OOP&#160;tips 

Singleton 
Observer 
Factory&#160;pattern 
The&#160;God&#160;Object 
http://en.wikipedia.org/wiki/Design_Patterns 
ModeloVistaControlador,&#160;por&#160;César&#160;Tardáguila 1
ModeloVistaControlador,&#160;por&#160;César&#160;Tardáguila 2
ModeloVistaControlador&#160;en&#160;Java
ObjectOriented&#160;Programming&#160;with&#160;ActionScript&#160;2.0&#160;(libro) 
Head&#160;First,&#160;Design&#160;Patterns&#160;(libro) 
Why&#160;getter&#160;and&#160;setter&#160;methods&#160;are&#160;evil 

Recursos 

Layer51.&#160;Protos&#160;en&#160;AS1&#160;para&#160;todo&#160;lo&#160;que&#160;puedas&#160;imaginar 
Extensión&#160;de&#160;Macromedia&#160;para&#160;limpiar&#160;la&#160;cache&#160;de&#160;clases&#160;(ASO)&#160;en&#160;el&#160;IDE 

Foros&#160;y&#160;listas&#160;de&#160;correo 

Domestika 
AfterHours 
5dms 
FlashLa 
Cristalab 

Revisores 

donDiegote 
Txuma&#160;Campos 
Toni&#160;López 
Cay 

[ anterior ]
<p></p>



Comparte:


	
	
	
	
	
	
	
	
	




<p>Related posts:Lo que yo sé de AS2 (*por Zárate)
Lo que yo sé de AS2 #Entorno de trabajo
Lo que yo sé [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-entorno-de-trabajo/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Entorno de trabajo'>Lo que yo sé de AS2 #Entorno de trabajo</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-introduccion/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #introducción'>Lo que yo sé de AS2 #introducción</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id=codigo><strong>
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</strong></p>
<p><img src="http://www.codigo.as/blog/images/botones/zarate.gif" alt="img" align="left"/><strong>*AUTOR</strong>: Juan Delgado Zárate<br />
  <a href="http://www.zarate.tv">zarate.tv</a> | <a href="http://www.dandolachapa.com">dandolachapa.com</a> | <a href="http://www.loqueyosede.com">loqueyosede.com</a><br /><a href="http://www.FlashLa.com">FlashLa.com</a> | <a href="http://www.After-Hours.org">After-Hours.org</a></p>
</div>
<h3>Enlaces, enlaces, millones de enlaces</h3>
<p><strong><a href="http://www.codigo.as/blog/?p=60">>Indice de contenidos</a></strong></p>
<h2>Software </h2>
<ul>
<li><a href="http://mtasc.org/%20">MTASC,&nbsp;compilador&nbsp;de&nbsp;AS2&nbsp;gratuito </a></li>
<li><a href="http://www.swfmill.org/%20">SWFMill,&nbsp;generador&nbsp;de&nbsp;swfs&nbsp;muy&nbsp;usado&nbsp;junto&nbsp;con&nbsp;MTASC </a></li>
<li><a href="http://osflash.org/flasc%20">FLASC&nbsp;(Flash&nbsp;IDE&nbsp;+&nbsp;MTASC) </a></li>
<li><a href="http://osflash.org/open_source_flash_projects#logging_tools%20">Herramientas&nbsp;de&nbsp;debug&nbsp;en&nbsp;OSFlash </a></li>
<li><a href="http://www.zarate.tv/proyectos/zlog/index.htm%20">Zlog,&nbsp;sencilla&nbsp;consola&nbsp;de&nbsp;Log </a></li>
</ul>
<h2>Tutoriales </h2>
<ul>
<li><a href="http://www.zarate.tv/articulos/flash_libre_facil/%20">Flash&nbsp;Libre,&nbsp;fácil.&nbsp;Aprende&nbsp;a&nbsp;utilizar&nbsp;MTASC&nbsp;y&nbsp;SWFMill </a></li>
<li><a href="http://www.zarate.tv/articulos/delegandoqueesgerundio/%20">Delegando&nbsp;que&nbsp;es&nbsp;gerundio </a></li>
</ul>
<h3>EventDispatcher </h3>
<ul>
<li><a href="http://www.gskinner.com/blog/archives/2003/09/code_gdispatche.html%20">GDispatcher</a>.&nbsp;La&nbsp;versión&nbsp;que&nbsp;va&nbsp;en&nbsp;el&nbsp;zip&nbsp;con&nbsp;el&nbsp;código&nbsp;está&nbsp;modificada&nbsp;para&nbsp;meterla dentro&nbsp;de&nbsp;un&nbsp;classpath&nbsp;normal&nbsp;y&nbsp;para&nbsp;que&nbsp;compile&nbsp;con&nbsp;strict&nbsp;en&nbsp;MTASC </li>
<li><a href="http://blog.jorgemaestre.com/2006/10/31/modelodecomunicacionbasadoeneventosparaas2/%20">Jorge&nbsp;Maestre,&nbsp;Comunicación&nbsp;basada&nbsp;en&nbsp;eventos&nbsp;para&nbsp;AS2 </a></li>
<li><a href="http://www.zarate.tv/articulos/instanciasdinamicamente/%20">Cómo&nbsp;crear&nbsp;instancias&nbsp;de&nbsp;clase&nbsp;dinámicamente </a></li>
<li><a href="Utilizaci&#243;n&#160;de&#160;archivos&#160;_exclude%20">http://www.zarate.tv/articulos/cargarclasesdinamicamente/ </a></li>
<li><a href="http://www.darronschall.com/weblog/archives/000145.cfm%20">Using&nbsp;_exclude.xml,&nbsp;the&nbsp;Good,&nbsp;the&nbsp;Bad,&nbsp;and&nbsp;the&nbsp;Wishlist </a></li>
<li><a href="http://mtasc.org/#usage%20">Cómo&nbsp;usar&nbsp;_exclude&nbsp;con&nbsp;MTASC </a></li>
<li><a href="http://osflash.org/flashcoders/as2%20">Why&nbsp;does&nbsp;my&nbsp;initializer&nbsp;get&nbsp;shared&nbsp;across&nbsp;all&nbsp;instances&nbsp;like&nbsp;it's&nbsp;static? </a></li>
</ul>
<h2>Patrones&nbsp;y&nbsp;OOP&nbsp;tips </h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Singleton_pattern%20">Singleton</a> </li>
<li><a href="http://en.wikipedia.org/wiki/Observer_pattern%20">Observer</a> </li>
<li><a href="http://en.wikipedia.org/wiki/Factory_pattern%20">Factory&nbsp;pattern </a></li>
<li><a href="http://en.wikipedia.org/wiki/God_object%20">The&nbsp;God&nbsp;Object </a></li>
<li><a href="http://en.wikipedia.org/wiki/Gang_of_Four_(software)%20">http://en.wikipedia.org/wiki/Design_Patterns </a></li>
<li><a href="http://www.designnation.net/en/archives/000154.php%20">ModeloVistaControlador,&nbsp;por&nbsp;César&nbsp;Tardáguila 1</a></li>
<li><a href="http://www.designnation.net/en/archives/000156.php%20">ModeloVistaControlador,&nbsp;por&nbsp;César&nbsp;Tardáguila 2</a></li>
<li><a href="http://java.sun.com/blueprints/patterns/MVCdetailed.html%20">ModeloVistaControlador&nbsp;en&nbsp;Java</a></li>
<li><a href="href=%22http://www.amazon.co.uk/ObjectOrientedProgrammingActionScriptJeffTapper/dp/0735713804/ref=sr_1_1/20202646594245418?ie=UTF8&#038;s=books&#038;qid=1173000321&#038;sr=11%20">ObjectOriented&nbsp;Programming&nbsp;with&nbsp;ActionScript&nbsp;2.0&nbsp;(libro) </a></li>
<li><a href="http://www.amazon.co.uk/HeadFirstDesignPatterns/dp/0596007124/sr=81/qid=1171813704/ref=sr_1_1/02664954158011636?ie=UTF8&#038;s=books%20">Head&nbsp;First,&nbsp;Design&nbsp;Patterns&nbsp;(libro) </a></li>
<li><a href="http://www.javaworld.com/javaworld/jw092003/jw0905toolbox.html%20">Why&nbsp;getter&nbsp;and&nbsp;setter&nbsp;methods&nbsp;are&nbsp;evil </a></li>
</ul>
<h2>Recursos </h2>
<ul>
<li><a href="http://proto.layer51.com/%20">Layer51.&nbsp;Protos&nbsp;en&nbsp;AS1&nbsp;para&nbsp;todo&nbsp;lo&nbsp;que&nbsp;puedas&nbsp;imaginar </a></li>
<li><a href="http://weblogs.macromedia.com/mesh/archives/2004/07/new_aso_cache_c.html%20">Extensión&nbsp;de&nbsp;Macromedia&nbsp;para&nbsp;limpiar&nbsp;la&nbsp;cache&nbsp;de&nbsp;clases&nbsp;(ASO)&nbsp;en&nbsp;el&nbsp;IDE </a></li>
</ul>
<h2>Foros&nbsp;y&nbsp;listas&nbsp;de&nbsp;correo </h2>
<ul>
<li><a href="http://domestika.org%20">Domestika</a> </li>
<li><a href="http://afterhours.org%20">AfterHours </a></li>
<li><a href="http:5dms.com%20">5dms</a> </li>
<li><a href="http://flashla.com%20">FlashLa</a> </li>
<li><a href="http://www.cristalab.com">Cristalab</a> </li>
</ul>
<h2>Revisores </h2>
<ul>
<li><a href="http://thelirios.com%20">donDiegote </a></li>
<li><a href="http://www.ctrlaltsupr.com/%20">Txuma&nbsp;Campos </a></li>
<li><a href="http://afterhours.org/">Toni&nbsp;López </a></li>
<li><a href="http://www.ventdaval.com/">Cay</a> </li>
</ul>
<h2><a href="http://www.codigo.as/blog/?p=67">[ anterior ]</a></h2>
<p><a href="http://creativecommons.org/licenses/by-nc-sa/2.5/es/"><img src="http://creativecommons.org/images/public/somerights20.png" alt="img" /></a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Enlaces%2C%20enlaces%2C%20millones%20de%20enlaces%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F&amp;t=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Enlaces%2C%20enlaces%2C%20millones%20de%20enlaces" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Enlaces%2C%20enlaces%2C%20millones%20de%20enlaces&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AEnlaces%2C%20enlaces%2C%20millones%20de%20enlaces%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0ASoftware%20%0D%0A%0D%0A%20%20MTASC%2C%26nbsp%3Bco" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Enlaces%2C%20enlaces%2C%20millones%20de%20enlaces&amp;annotation=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AEnlaces%2C%20enlaces%2C%20millones%20de%20enlaces%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0ASoftware%20%0D%0A%0D%0A%20%20MTASC%2C%26nbsp%3Bco" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Enlaces%2C%20enlaces%2C%20millones%20de%20enlaces&amp;notes=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AEnlaces%2C%20enlaces%2C%20millones%20de%20enlaces%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0ASoftware%20%0D%0A%0D%0A%20%20MTASC%2C%26nbsp%3Bco" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Enlaces%2C%20enlaces%2C%20millones%20de%20enlaces&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-entorno-de-trabajo/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Entorno de trabajo'>Lo que yo sé de AS2 #Entorno de trabajo</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-introduccion/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #introducción'>Lo que yo sé de AS2 #introducción</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lo que yo sé de AS2 #Unos apuntes</title>
		<link>http://www.codigoactionscript.org/que-yo-se-de-as2-unos-apuntes/</link>
		<comments>http://www.codigoactionscript.org/que-yo-se-de-as2-unos-apuntes/#comments</comments>
		<pubDate>Mon, 19 Mar 2007 23:09:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS2]]></category>
		<category><![CDATA[Aportes]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Referencia]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=67</guid>
		<description><![CDATA[
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</p>
<p>*AUTOR: Juan Delgado Zárate
  zarate.tv &#124; dandolachapa.com &#124; loqueyosede.comFlashLa.com &#124; After-Hours.org</p>

Unos apuntes
<p>>Indice de contenidos</p>
<p>Aquí van unos comentarios que no sé dónde encajar pero que me parecen útiles a la hora de pensar aplicaciones AS2. </p>
Â¿Extender o interface?
<p>Para tomar esta decisión hay varias cosas a tener en cuenta. Por ejemplo, en Flash no hay herencia múltiple (sólo se puede extender de una clase), pero se pueden implementar varias interfaces. </p>
<p>Sin embargo, para mi la clave viene dada por cuántas cosas en común [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-entorno-de-trabajo/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Entorno de trabajo'>Lo que yo sé de AS2 #Entorno de trabajo</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id=codigo><strong>
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</strong></p>
<p><img src="http://www.codigo.as/blog/images/botones/zarate.gif" alt="img" align="left"/><strong>*AUTOR</strong>: Juan Delgado Zárate<br />
  <a href="http://www.zarate.tv">zarate.tv</a> | <a href="http://www.dandolachapa.com">dandolachapa.com</a> | <a href="http://www.loqueyosede.com">loqueyosede.com</a><br /><a href="http://www.FlashLa.com">FlashLa.com</a> | <a href="http://www.After-Hours.org">After-Hours.org</a></p>
</div>
<h3>Unos apuntes</h3>
<p><strong><a href="http://www.codigo.as/blog/?p=60">>Indice de contenidos</a></strong></p>
<p>Aquí van unos comentarios que no sé dónde encajar pero que me parecen útiles a la hora de pensar aplicaciones AS2. </p>
<h2>Â¿Extender o interface?</h2>
<p>Para tomar esta decisión hay varias cosas a tener en cuenta. Por ejemplo, en Flash no hay herencia múltiple (sólo se puede extender de una clase), pero se pueden implementar varias interfaces. </p>
<p>Sin embargo, para mi la clave viene dada por cuántas cosas en común van a hacer las distintas implementaciones. Por ejemplo es normal que un grupo de vistas tengan un montón de código común: </p>
<ul>
<li>Tener un método setSize</li>
<li>Tener una instancia del modelo</li>
<li>Tener una variable base_mc, con una referencia al MovieClip base sobre el que trabajar.</li>
<li>Un método config() con parámetros comunes</li>
<li>...</li>
</ul>
<p>Parece que hay bastante código común, así que se podría guardar todo ese código común en una clase CommonView y luego hacer que las vistas específicas la extiendan y sobrescriban sólo los métodos necesarios. </p>
<p>Sin embargo, el ejemplo puesto en el apartado del patrón Factory en el que bajo la misma interface se implementaban 2 contenedores distintos que proporcionan acceso al sistema de archivos para la misma aplicación, el código común entre la clase de Screenweaver y la clase para lenguaje de servidor es mínimo, por lo que la interface es mejor. </p>
<h2>Â¿Extender de MovieClip? No, gracias</h2>
<p>Ã‰ste es un tema sobre el que hay bastante "polémica" en cualquier lista de correo de Flash. Así que volveré a dejar por escrito que ésta es _mi_ forma preferida de hacerlo. Sin embargo, no es un capricho, éstas son mis razones: </p>
<ul>
<li>En Flash no hay herencia múltiple, así que si extiendes de MovieClip no puedes extender de nada más.</li>
<li>Las clases que extienden de MovieClip no se instancian mediante new, sino mediante attachMovie, lo que es bastante raro desde el punto de vista de un programador. </li>
</ul>
<p>Cuando creo clases que tienen un componente gráfico (un menú, un TextArea, un player de vídeo) mi forma de trabajar es pasar a las clases un MovieClip base sobre el que "trabajan" (utilizar composición en lugar de herencia). Algo como: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-110">
<div class="actionscript">classvideoplayer<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevarbase_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; publicfunctionvideoplayer<span style="color: #66cc66;">&#40;</span>_base_mc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; base_mc=_base_mc;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>A la hora de instanciar la clase:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-111">
<div class="actionscript">varvp_mc:<span style="color: #0066CC;">MovieClip</span>=timeLine_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"vp_mc"</span>,<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;<br />
varvp:videoplayer=newvideoplayer<span style="color: #66cc66;">&#40;</span>vp_mc<span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
</div>
<p></div>
<p>Normalmente dejo a la clase que instancia el objeto videoplayer que decida cosas como la posición x,y del MovieClip. Esto lo hago así ya que considero que la única responsabilidad del videoplayer es poner un vídeo "donde le manden", no decidir cual es la posición dentro de la pantalla, por ejemplo. Aún así, esto es una regla general que muchas veces depende de la organización de clases y objetos que tenga una aplicación en concreto. </p>
<p>Hasta hace poco estaba en un error que Joseba Alonso (sidedev.net) me aclaró amablemente. Las clases que heredan de MovieClip NO heredan su dinamicidad. MovieClip es una clase dinámica (se le pueden crear propiedades y métodos en tiempo de ejecución), pero las clases que extienden de ella no tienen por qué serlo. </p>
<p>El problema (ventaja al mismo tiempo en algunas ocasiones) de las clases dinámicas es que se le pueden crear propiedades y métodos en tiempo de ejecución. El problema de eso es que si te equivocas escribiendo el nombre de una propiedad, el compilador no lanza error ya que sobreentiende que estás creando una propiedad nueva. Ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-112">
<div class="actionscript">dynamicclassmiClaseDinamica<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicvarvariable:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"Helloworld"</span>;<br />
&nbsp; &nbsp; publicfunctionmiClaseDinamica<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>A la hora de usarla:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-113">
<div class="actionscript">varinstancia:miClaseDinamica=newmiClaseDinamica<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
varvalor:<span style="color: #0066CC;">String</span>=instancia.<span style="color: #006600;">avriable</span>;<span style="color: #808080; font-style: italic;">//elcompiladorNOdaerror </span></div>
</div>
</div>
</div>
<p></div>
<p>A pesar del error (usar "avriable" en lugar de "variable"), el compilador asume que se está accediendo a una variable que se ha creado en tiempo de ejecución, cuando lo más normal es que queramos acceder a la propiedad "variable". </p>
<p>Pero esto al mismo tiempo es una ventaja. Â¿Cuántas veces habremos creado propiedades a un MovieClip en tiempo de ejecución? Algo como:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-114">
<div class="actionscript"><span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>varx:<span style="color: #0066CC;">Number</span>=<span style="color: #cc66cc;">0</span>;x&lt;<span style="color: #cc66cc;">10</span>;x++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; varboton:<span style="color: #0066CC;">MovieClip</span>=timeLine_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"boton_"</span>+x,<span style="color: #cc66cc;">100</span>+x<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; boton.<span style="color: #006600;">opcion</span>=x;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Aunque útil, muchas veces es mejor crear una pequeña clase para el manejo del botón. Esa clase podría tener una propiedad pública "opcion" sobre la que estableceríamos el valor. </p>
<h2>Objetos responsables</h2>
<p>Uno de los principios OOP es que cada objeto haga única y exclusivamente lo que tiene que hacer. Cuando una clase sabe demasiado o hace demasiado, se le conoce como la clase Dios o God Object (ver enlace al final). </p>
<p>Sin llegar a límites absurdos, casi siempre es mejor trabajar con muchas clases pequeñas, cortas y concisas que con clases de 1.000 líneas. Que cada una haga su pequeño trabajito y poco más. Esto claramente favorece la reutilización y la depuración de errores (el código a revisar por clase es menor). </p>
<p>Supongamos que tenemos una clase para pintar un player de vídeo. Aquí van 2 ejemplos de implementación: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-115">
<div class="actionscript">importVideoPlayer;<br />
classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; varvp:VideoPlayer=newVideoPlayer<span style="color: #66cc66;">&#40;</span>timeLine_mc<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-116">
<div class="actionscript">classVideoPlayer<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevarbase_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; publicfunctionVideoPlayer<span style="color: #66cc66;">&#40;</span>timeLine_mc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; base_mc=timeLine_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"base_mc"</span>,<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; base_mc.<span style="color: #0066CC;">_x</span>=<span style="color: #cc66cc;">10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; base_mc.<span style="color: #0066CC;">_y</span>=<span style="color: #cc66cc;">10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//ahoraempezaríamosapintarelpropioplayer</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>En el código anterior, la clase VideoPlayer se está encargando de crearse su propio clip sobre el que trabajar y de colocarlo en la posición deseada. Sin embargo la siguiente implementación es más flexible: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-117">
<div class="actionscript">importVideoPlayer;<br />
classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; video_mc=timeLine_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"video_mc"</span>,<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; video_mc.<span style="color: #0066CC;">_x</span>=<span style="color: #cc66cc;">10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; video_mc.<span style="color: #0066CC;">_y</span>=<span style="color: #cc66cc;">10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; varvp:VideoPlayer=newVideoPlayer<span style="color: #66cc66;">&#40;</span>video_mc<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-118">
<div class="actionscript">classVideoPlayer<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevarbase_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; publicfunctionVideoPlayer<span style="color: #66cc66;">&#40;</span>_base_mc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; base_mc=_base_mc;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//ahoraempezaríamosapintarelplayer</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>En la segunda versión la clase VideoPlayer no tiene la responsabilidad de crear su MovieClip de trabajo ni de colocarlo en la pantalla. Â¿Por qué debería hacerlo si no lo necesita? Que sea la clase que lo instancia quien tenga esa responsabilidad. Así cuando haya que reutilizar la clase de VideoPlayer, no hay que hacerle ninguna modificación. </p>
<p>Dicho esto, el astuto lector estará pensando que la clase VideoPlayer podría recibir como parámetros la posición x,y donde se tiene que pintar, el nombre del MovieClip y la profundidad a la que va.... sí, técnicamente es posible, pero para qué pasar un montón de parámetros cuando se puede no pasar ninguno : ) </p>
<h2>Mejor que no te acoples</h2>
<p>Una de las normas consideradas como correctas dentro de la programación orientada a objetos es que las clases entre sí deben estar poco "acopladas". Eso significa que cuanto menos sepa una clase de otra, mejor. Siempre que sea posible es más flexible que las clases trabajen sobre parámetros en lugar de hacerlo sobre otros objetos. Ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-119">
<div class="actionscript">importB;<br />
classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicvarvariable:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"Helloworld"</span>,<br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; vara:A=newA<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-120">
<div class="actionscript">importA;<br />
classB<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> B<span style="color: #66cc66;">&#40;</span>a:A<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>a.<span style="color: #0066CC;">variable</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Según la estructura de código de arriba, la clase B necesita importar la clase A para acceder a su propiedad pública cuando realmente no es necesario. Modificando el código como sigue, las clases no están acopladas: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-121">
<div class="actionscript">importB;<br />
classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevarvariable:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"Helloworld"</span>,<br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; vara:A=newA<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">variable</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-122">
<div class="actionscript">classB<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionB<span style="color: #66cc66;">&#40;</span>toTrace:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>toTrace<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>El resultado es el mismo, pero en el segundo caso la clase B no necesita a la clase A para nada. Si por necesidades del proyecto necesitamos que sea la clase C en lugar de la A la que inicie el proceso, a la clase B le va a dar igual porque lo único que necesita es una cadena en el constructor. </p>
<p>Como toda regla general, depende mucho del proyecto decidir si pasar una instancia de una clase o un montón de parámetros. </p>
<h2>Protos Nunca Mais</h2>
<p>Una de las preguntas más habituales para la gente que está dando el paso de AS1 a AS2 es cómo reaprovechar protos hechos en AS1 en AS2. Para mi la salida más natural a los protos son clases con un método estático para cada proto. </p>
<p>Ejemplo de proto sacado de Layer51 </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-123">
<div class="actionscript"><span style="color: #0066CC;">String</span>.<span style="color: #0066CC;">prototype</span>.<span style="color: #006600;">PALINDROME</span>=<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; returnthis+<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">split</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">""</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">reverse</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">join</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">""</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span>;</div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-124">
<div class="actionscript">classtv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Utils</span>.<span style="color: #006600;">StringUtils</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicstaticmethodpalindrome<span style="color: #66cc66;">&#40;</span>s:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; returns+s.<span style="color: #0066CC;">split</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">""</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">reverse</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">join</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">""</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>A partir de ese momento, las llamadas serían así:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-125">
<div class="actionscript">importtv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Utils</span>.<span style="color: #006600;">StringUtils</span>;<br />
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>StringUtils.<span style="color: #006600;">palindrome</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"wadus"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
</div>
<p></div>
<p>Es importante fijarse en que para utilizar el método estático no hace falta crear una instancia de la clase StringUtils; </p>
<p>Como en los métodos estáticos no se puede hacer la referencia a "this" que se hacía en el proto, se pasa como parámetro el objeto (en este caso una cadena) con el que el método tiene que "trabajar". Por supuesto si hubiera que trabajar con más parámetros, se pasarían a continuación. </p>
<h2>Â¿Cuándo se compila una clase?</h2>
<p>Algo que no está meridianamente claro es cuándo el compilador incluye una clase en un swf. La respuesta es cuando esa clase está referenciada *en el código*. Y resalto lo de "en el código" porque si la clase está importada pero no usada, no se compila. Ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-126">
<div class="actionscript">importclassB;<br />
classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//laclaseBnosecompila</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-127">
<div class="actionscript">importclassB;<br />
<span style="color: #000000; font-weight: bold;">class</span> A<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> A<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> b:B = <span style="color: #000000; font-weight: bold;">new</span> B<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//laclaseBsecompila</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-128">
<div class="actionscript">importclassB;<br />
classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevarb:B;<span style="color: #808080; font-style: italic;">//AQUITAMBIENSECOMPILA!</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Otra de las ventajas de utilizar MTASC es que por defecto avisa con un warning cuando se están importando clases que luego no son utilizadas dentro del código. </p>
<p>Â¿Y se puede evitar que una clase se compile incluso cuando se ha referenciado en el código? Claro que sí, aunque la forma de hacerlo no sea muy "amigable". Se trata de utilizar archivos *_exclude.xml, pero como el tema es un poco largo, en la sección de Enlaces dejo recursos sobre el tema. </p>
<h2>Importando packages</h2>
<p>Algo muy habitual es importar un package completo utilizando "*": </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-129">
<div class="actionscript">importcom.<span style="color: #006600;">xfactorstudio</span>.<span style="color: #0066CC;">xml</span>.<span style="color: #006600;">xpath</span>.*;</div>
</div>
</div>
</div>
<p></div>
<p>Â¡OJO! El compilador NO incluye todas las clases del package, ya que hace su trabajo de optimización y sólo compila las que están referenciadas en el código. </p>
<p>Â¿Entonces por qué no se importa siempre todo el package? Yo diría que es una cuestión didáctica. Prefiero importar explícitamente sólo las clases que voy a utilizar y así poder ver rápidamente de un vistazo las relaciones entre clases. </p>
<h2>Getters y setters implícitos y explícitos</h2>
<p>Se conocen por getters/setters a los métodos que permiten establecer y recuperar el valor de una variable. La idea es que la variable en si sea privada, y que para que acceder a ella haya que llamar a estos métodos.  Â¿Y por qué querría nadie obligar a usar un método para saber el valor de una variable? Pues porque hay veces que al cambiar el valor de una variable, otras variables<br />
relacionadas también cambian su valor. Por ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-130">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevarprice:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicfunctiongetPrice<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; returnprice;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicfunctionsetPrice<span style="color: #66cc66;">&#40;</span>p:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; price=p;<br />
&nbsp; &nbsp; &nbsp; &nbsp; updateBasketPrice<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//acciónrelacionada</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Estos son los getters/setters explícitos. Y son explícitos porque para saber el valor de la variable desde fuera de la clase, hay que llamar a un método. </p>
<p>Pero Flash permite hacerlos de forma implícita. Lo siguiente es perfectamente válido: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-131">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevar_price:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicfunctiongetprice<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; return_price;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicfunctionsetprice<span style="color: #66cc66;">&#40;</span>p:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _price=p;<br />
&nbsp; &nbsp; &nbsp; &nbsp; updateBasketPrice<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//accionrelacionada</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Â¿Ventajas de un método sobre otro? Técnicamente yo diría que no hay, pero hay programadores que prefieren hacer saber que se accede a un método. Otros dicen que no tiene por qué dar explicaciones. A gusto del consumidor. </p>
<p>Claro, que también hay gente que piensa directamente que los getters y setters deberían desaparecer de la faz de la tierra. En la sección de Enlaces hay más sobre ello para quien le interese. </p>
<h2>Strong data typing</h2>
<p>Strong data typing es de esos términos que casi mejor no traducir. Pero vamos, significa que le asignes un tipo a todas las propiedades, parámetros y tipos devueltos por los métodos. Aunque no es obligatorio, yo creo que es muy recomendable hacerlo. </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-132">
<div class="actionscript">varmyString:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">""</span>;<br />
varmyNumber:<span style="color: #0066CC;">Number</span>=<span style="color: #cc66cc;">0</span>;<br />
publicfunctionwadus<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #808080; font-style: italic;">//utiliza Void si tu método no devuelve nada </span></div>
</div>
</div>
</div>
<p></div>
<p>Hay una no muy buena costumbre a la hora de definir el tipo de las propiedades de las clases. Por ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-133">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> myNumber:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">5</span>; <span style="color: #808080; font-style: italic;">// bien</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> myArray:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// MAL!</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> mySecondArray:<span style="color: #0066CC;">Array</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> A<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// aquí o en cualquier otro método, bien</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; mySecondArray = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Cuando se definen las variables de una clase sólo se puede definir el valor por defecto para las variables de tipos primitivos: String, Boolean y Number. Nada que tenga que ver con un new. El player de Flash no maneja muy esas definiciones (buscar en la sección de Enlaces "Why does my initializer get shared across all instances like it's static?"). </p>
<h2><a href="http://www.codigo.as/blog/?p=66">[ anterior ]</a> <a href="http://www.codigo.as/blog/?p=68">[ siguiente ]</a></h2>
<p><a href="http://creativecommons.org/licenses/by-nc-sa/2.5/es/"><img src="http://creativecommons.org/images/public/somerights20.png" alt="img" /></a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Unos%20apuntes%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F&amp;t=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Unos%20apuntes" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Unos%20apuntes&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AUnos%20apuntes%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AAqu%C3%AD%20van%20unos%20comentarios%20que%20no%20s%C3%A9%20d%C3%B3nde%20encajar%20p" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Unos%20apuntes&amp;annotation=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AUnos%20apuntes%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AAqu%C3%AD%20van%20unos%20comentarios%20que%20no%20s%C3%A9%20d%C3%B3nde%20encajar%20p" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Unos%20apuntes&amp;notes=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AUnos%20apuntes%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AAqu%C3%AD%20van%20unos%20comentarios%20que%20no%20s%C3%A9%20d%C3%B3nde%20encajar%20p" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Unos%20apuntes&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Fque-yo-se-de-as2-unos-apuntes%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-entorno-de-trabajo/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Entorno de trabajo'>Lo que yo sé de AS2 #Entorno de trabajo</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/que-yo-se-de-as2-unos-apuntes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lo que yo sé de AS2 #Tus amigos los patrones</title>
		<link>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-tus-amigos-los-patrones/</link>
		<comments>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-tus-amigos-los-patrones/#comments</comments>
		<pubDate>Sun, 18 Mar 2007 23:37:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS2]]></category>
		<category><![CDATA[Aportes]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Referencia]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=66</guid>
		<description><![CDATA[
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</p>
<p>*AUTOR: Juan Delgado Zárate
  zarate.tv &#124; dandolachapa.com &#124; loqueyosede.comFlashLa.com &#124; After-Hours.org</p>

Tus amigos los patrones
<p>>Indice de contenidos</p>
<p>A mi me gusta pensar en los patrones como soluciones que gente muy friki y muy gafotas sabe para el problema que tienes entre las manos. Sólo son formas de organizar el código que te solucionan elegantemente un problema.</p>
<p>Ahora, como dijo  un día Xavi Beumala (code4net.com): â€œsi no sientes que necesitas un patrón, es que no lo necesitasâ€. Es decir, no se trata de que [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-comunicacion-entre-clases/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Comunicación entre clases'>Lo que yo sé de AS2 #Comunicación entre clases</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id=codigo><strong>
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</strong></p>
<p><img src="http://www.codigo.as/blog/images/botones/zarate.gif" alt="img" align="left"/><strong>*AUTOR</strong>: Juan Delgado Zárate<br />
  <a href="http://www.zarate.tv">zarate.tv</a> | <a href="http://www.dandolachapa.com">dandolachapa.com</a> | <a href="http://www.loqueyosede.com">loqueyosede.com</a><br /><a href="http://www.FlashLa.com">FlashLa.com</a> | <a href="http://www.After-Hours.org">After-Hours.org</a></p>
</div>
<h3>Tus amigos los patrones</h3>
<p><strong><a href="http://www.codigo.as/blog/?p=60">>Indice de contenidos</a></strong></p>
<p>A mi me gusta pensar en los patrones como soluciones que gente muy friki y muy gafotas sabe para el problema que tienes entre las manos. Sólo son formas de organizar el código que te solucionan elegantemente un problema.</p>
<p>Ahora, como dijo  un día Xavi Beumala (code4net.com): â€œsi no sientes que necesitas un patrón, es que no lo necesitasâ€. Es decir, no se trata de que busques problemas para aplicar un patrón, sino de que apliques patrones a situaciones y problemas reales. Lo más difícil de los patrones es saber reconocer cuándo son necesarios.</p>
<p><strong>NOTA IMPORTANTE</strong>: Las implementaciones de los patrones que voy a comentar a continuación son â€œlibresâ€. Es decir, no me importa tanto que desde un punto de vista formal cumplan el patrón al 100% sino que guarden su â€œesenciaâ€ de la forma más simple posible. Si realmente estás interesado en conocer a fondo los patrones te recomiendo el libro Head First Design Patterns o si eres un tío muy gafotas, la biblia que todo talibán de los patrones lee los domingos por la mañana para desayunar: Design Patterns (by the Gang of four). Enlaces al final.</p>
<h2>Singleton</h2>
<p>Â¿Cuándo? Cuando necesitas que en una aplicación haya una y sólo una instancia de una clase.</p>
<p>Â¿Ejemplo? Un controlador de Combos. Supongamos que estamos desarrollando nuestro propio componente ComboBox, normalmente no queremos que haya 2 abiertos al mismo tiempo. Podríamos controlarlo mediante variables globales, pero ya hemos visto que eso no es muy buena idea. Singleton al rescate. La idea es tener una clase Singleton que tenga una referencia a todos los combos creados y que se encargue de coordinarlos. </p>
<p>Aquí va la clase que coordina, el Singleton</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-160">
<div class="actionscript"><span style="color: #0066CC;">import</span> Combo;<br />
<span style="color: #000000; font-weight: bold;">class</span> ComboManager<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> _instance:ComboManager;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> combos:<span style="color: #0066CC;">Array</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> ComboManager<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; combos = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> getInstance<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:ComboManager<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>_instance == <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _instance = <span style="color: #000000; font-weight: bold;">new</span> ComboManager<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> _instance;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> addCombo<span style="color: #66cc66;">&#40;</span>combo:Combo<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span>&nbsp;&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; combos.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>combo<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Y aquí la clase combo que lo utilizaría;</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-161">
<div class="actionscript"><span style="color: #0066CC;">import</span> ComboManager;<br />
<span style="color: #000000; font-weight: bold;">class</span> Combo<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Combo<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> cm:ComboManager = ComboManager.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; cm.<span style="color: #006600;">addCombo</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p><strong>Comentarios</strong></p>
<p>Es muy importante darse cuenta de que el constructor del Singleton es privado, por lo que nadie puede crear una instancia a la forma tradicional (con new). La única forma de obtener una instancia del Singleton es utilizar el método público estático getInstance. Y es dentro de getInstance donde se controla que la instancia sólo se cree una vez, el resto de veces se devuelve la ya creada.</p>
<p><strong>Problemas</strong></p>
<p>Como con todos los patrones, no se debe abusar del Singleton. Especialmente NO tienen que ser un un sustituto de la variables globales. En la sección de Enlaces, al final del artículo de la Wikipedia hay enlaces sobre este problema.</p>
<h2>Factory Pattern e interfaces</h2>
<p>Antes de comentar el Factory, vamos a explicar qué es una interface. Una clase tiene que tener todos los métodos de la interface (o interfaces) que implemente. Ejemplo:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-162">
<div class="actionscript"><span style="color: #0066CC;">interface</span> Application<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> config<span style="color: #66cc66;">&#40;</span>appXML:<span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-163">
<div class="actionscript"><span style="color: #000000; font-weight: bold;">class</span> VideoPlayer <span style="color: #0066CC;">implements</span> Application<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> config<span style="color: #66cc66;">&#40;</span>appXML:<span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Si la clase VideoPlayer no tuviera los 2 métodos de la interface, el compilador protestaría. Así que las interfaces son una forma de â€œobligarâ€ a que las clases que la implementen tenga unos métodos públicos conocidos.</p>
<p>Lasintefaces sólo definen métodos públicos, no pueden definir ni propiedades, ni métodos privados o estáticos.</p>
<p>Ahora el Factory pattern. </p>
<p>Â¿Cuándo? Cuando necesitas resolver el mismo problema de distintas formas, y además hay que decidir en tiempo de ejecución cuál utilizar.</p>
<p>Â¿Ejemplo? Una aplicación para hacer un reloj que necesita 2 vistas distintas, una digital y otra analógica. Además necesitamos decidir en tiempo de ejecución cual utilizar.</p>
<p>Primero definimos una sencilla interface que ambas vistas van a implementar.</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-164">
<div class="actionscript"><span style="color: #0066CC;">interface</span> iView<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> config<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> draw<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Luego creamos las 2 vistas distintas y hacemos que implementen la interface.</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-165">
<div class="actionscript"><span style="color: #0066CC;">import</span> iView;<br />
<span style="color: #000000; font-weight: bold;">class</span> AnalogView <span style="color: #0066CC;">implements</span> iView<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AnalogView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> config<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: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> draw<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// la clase analógica pinta las manillas</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-166">
<div class="actionscript"><span style="color: #0066CC;">import</span> iView;<br />
<span style="color: #000000; font-weight: bold;">class</span> DigitalView <span style="color: #0066CC;">implements</span> iView<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> DigitalView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> config<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: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> draw<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// la clase digital pinta números</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Ahora creamos el modelo. Es importante fijarse en que el modelo no sabe con qué implementación de iView va a trabajar, ni siquiera importa las vistas. Es decir, no sabe si será analógico o digital. Lo único que sabe es que va a trabajar con una instancia de iView. Es ahí donde está la flexibilidad, es lo que se llama trabajar para la interface y no para implementaciones.   </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-167">
<div class="actionscript"><span style="color: #0066CC;">import</span> iView;<br />
<span style="color: #0066CC;">import</span> ViewFactory;<br />
<span style="color: #000000; font-weight: bold;">class</span> ClockModel<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> view:iView;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span>&nbsp; ClockModel<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// supongamos que viene de un xml, FlashVars o algo dinámico</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> viewType:<span style="color: #0066CC;">String</span> = â€œdigitalâ€;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// pedimos a la factoría una vista </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; view = ViewFactory.<span style="color: #006600;">getView</span><span style="color: #66cc66;">&#40;</span>viewType<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; view.<span style="color: #006600;">config</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; view.<span style="color: #006600;">draw</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Y finalmente la factoría:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-168">
<div class="actionscript"><span style="color: #0066CC;">import</span> iView;<br />
<span style="color: #0066CC;">import</span> AnalogView;<br />
<span style="color: #0066CC;">import</span> DigitalView;<br />
<span style="color: #000000; font-weight: bold;">class</span> ViewFactory<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> getView<span style="color: #66cc66;">&#40;</span>viewType:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:iView<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> v:iView;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>viewType == â€œanalogâ€<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v = <span style="color: #000000; font-weight: bold;">new</span> AnalogView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v = <span style="color: #000000; font-weight: bold;">new</span> DigitalView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> v;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Vista la estructura de la factoría (un if o switch gigante), es fácil darse cuenta de que si en el futuro queremos añadir más tipos de vistas, simplemente hay que aumentar el número de casos en el if. Lo bueno es que el modelo seguirá trabajando sin problemas mientras que las nuevas vistas implementen iView.</p>
<p>Esto mismo se podría conseguir en lugar de con una interface haciendo que ambas vistas extiendan de una clase común. Entonces el modelo trabajaría con esa vista común en lugar de con la interface, pero el resultado y objetivo es el mismo. Â¿Cuándo utilizar una interface y cuándo extender? Ver explicación en la sección de apuntes.</p>
<p><strong>Comentarios</strong></p>
<p>Situaciones en las que un factory es aplicable hay muchas. Todas ellas tienen es común distintas formas (implementaciones) de solucionar un mismo problema. Por ejemplo supongamos que tenemos una aplicación que necesita leer y escribir el sistema de archivos del usuario. Además queremos que la aplicación funcione on line y off line. Para conseguirlo on-line nos tendremos que basar en algún lenguaje de servidor, y para hacerlo on-line necesitaremos, Screenweaver, SWFStudio o algún otro wrapper o contenedor de swfs.</p>
<p>Veamos una posible interface:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-169">
<div class="actionscript"><span style="color: #0066CC;">interface</span> iWrapper<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// los callbacks son porque la mayoría de estas llamadas</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// serán asíncronas</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getDir<span style="color: #66cc66;">&#40;</span>path:<span style="color: #0066CC;">String</span>,callback:<span style="color: #000000; font-weight: bold;">Function</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> writeFile<span style="color: #66cc66;">&#40;</span>path:<span style="color: #0066CC;">String</span>,callback:<span style="color: #000000; font-weight: bold;">Function</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> readFile<span style="color: #66cc66;">&#40;</span>path:<span style="color: #0066CC;">String</span>,callback:<span style="color: #000000; font-weight: bold;">Function</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>La interface está definiendo qué queremos que el wrapper haga. Cómo lo haga es tarea de cada una de las implementaciones. En el caso de la implementación de servidor, seguramente sea con llamadas sendAndLoad del objeto XML, en el caso de la implementación local con Screenweaver será a través de las clases AS2 que vienen con la instalación. La parte buena es que si la aplicación trabaja con una instancia de iWrapper, cambiar la de on-line a off-line no sería problema.</p>
<p><strong>Problemas</strong></p>
<p>Uno de los efectos secundarios de la factoría es que TODAS las implementaciones se compilan en el swf final, aunque sólo vayamos a utilizar una. Â¿Y no hay forma de evitarlo? La hay. Como el tema es un poco más avanzado, quien quiera más información sobre el tema puede seguir 2 tutoriales de la sección de Enlaces que se titulan â€œCrear instancias dinámicamenteâ€ y â€œCargar clases dinámicamenteâ€.</p>
<h2>Modelo-VistaControlador</h2>
<p>Â¿Cuándo? Siempre. Bueno, casi siempre. Por poco grande que sea una aplicación siempre es útil separar lógica de presentación. Y eso es la parte fundamental del MVC, separar lógica de presentación.</p>
<p>A pesar de que ya lo he dicho un par de veces, la implementación que pongo a continuación NO es pura, es una adaptación libre y pragmática. Prefiero repetirlo para que:</p>
<ul>
<li>Nadie me salte al cuello con la implementación buena en la mano.</li>
<li>Tú, querido lector, te molestes en ir a buscar esa implementación buena y compares. En la sección de Enlaces podrás encontrar más información.</li>
</ul>
<p>Dicho esto, comentarios sobre problemas que pueda tener mi implementación son MUY bienvenidos. Mi implementación por ejemplo, asume que sólo hay una vista. eso permite al modelo hacer llamadas directas a la vista sin necesidar de que la vista sea listener del modelo. Además tambien junto en una misma clase la vista y el controlador. Veamos el ejemplo:</p>
<p>Empezamos con una clase que se encarga de crear la instancia del modelo:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-170">
<div class="actionscript"><span style="color: #0066CC;">import</span> tv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Projects</span>.<span style="color: #006600;">loqueyosede</span>.<span style="color: #006600;">Model</span>;<br />
<span style="color: #000000; font-weight: bold;">class</span> tv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Projects</span>.<span style="color: #006600;">loqueyosede</span>.<span style="color: #006600;">MVCApplication</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> main<span style="color: #66cc66;">&#40;</span>m:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> model:Model = <span style="color: #000000; font-weight: bold;">new</span> Model<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; model.<span style="color: #006600;">config</span><span style="color: #66cc66;">&#40;</span>m<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; model.<span style="color: #0066CC;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Luego, el modelo:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-171">
<div class="actionscript"><span style="color: #0066CC;">import</span> tv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Projects</span>.<span style="color: #006600;">loqueyosede</span>.<span style="color: #006600;">View</span>;<br />
<span style="color: #000000; font-weight: bold;">class</span> tv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Projects</span>.<span style="color: #006600;">loqueyosede</span>.<span style="color: #006600;">Model</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> view:View;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> timeLine_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> view_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> numberOfClicks:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Model<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> config<span style="color: #66cc66;">&#40;</span>m:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// el modelo se guarda una referencia a la linea de tiempo principal</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// basicamente para poder acceder a las FlashVars</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// cuando sea necesario</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; timeLine_mc = m;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// creamos un mc solo para la vista</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; view_mc = timeLine_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"view_mc"</span>,<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// creamos la instancia de la vista</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; view = <span style="color: #000000; font-weight: bold;">new</span> View<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// le pasamos la referencia al modelo y el </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// clip sobre el que va a trabajar</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; view.<span style="color: #006600;">config</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,view_mc<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// en este caso directamente llamamos al metodo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// start de la vista</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// en aplicaciones mas complejas, el modelo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// podria primero ir a buscar datos a un servidor</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// o leer un xml de configuracion</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; view.<span style="color: #006600;">displayValue</span><span style="color: #66cc66;">&#40;</span>numberOfClicks<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> updateClick<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// la vista llama a este metodo cada vez que el usuario hace click</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; numberOfClicks++;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// despues de actualizar </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// llamamos al metodo que nos interesa de la vista</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; view.<span style="color: #006600;">displayValue</span><span style="color: #66cc66;">&#40;</span>numberOfClicks<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Y por último la VistaControlador (abreviado, ver código adjunto para la versión completa):</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-172">
<div class="actionscript"><span style="color: #0066CC;">import</span> tv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Projects</span>.<span style="color: #006600;">loqueyosede</span>.<span style="color: #006600;">Model</span>;<br />
<span style="color: #000000; font-weight: bold;">class</span> tv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Projects</span>.<span style="color: #006600;">loqueyosede</span>.<span style="color: #006600;">View</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> model:Model;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> base_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> background_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> title_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> titleField:<span style="color: #0066CC;">TextField</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">width</span>:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">height</span>:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> OVER:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">"over"</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> OUT:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">"out"</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> PRESS:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">"press"</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> View<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> config<span style="color: #66cc66;">&#40;</span>_model:Model,_base_mc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// nos llega por composicion una instancia del modelo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// eso nos permitira acceder a sus metodos y propiedades publicas</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; model = _model;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// guardamos una referencia al clip con el que trabajara la vista</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; base_mc = _base_mc;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// creamos los elementos basicos</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; doInitialLayout<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">onResize</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> displayValue<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; titleField.<span style="color: #0066CC;">text</span> = <span style="color: #ff0000;">"Clicks&gt; "</span> + value;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> doInitialLayout<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> button_mc:<span style="color: #0066CC;">MovieClip</span> = base_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"button_mc"</span>,<span style="color: #cc66cc;">300</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// definimos los eventos y los delegamos al metodo manageButton</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">button</span>.<span style="color: #0066CC;">onPress</span> = Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,manageButton,<span style="color: #0066CC;">button</span>,PRESS<span style="color: #66cc66;">&#41;</span>;&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> layout<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: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onResize</span><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: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> manageButton<span style="color: #66cc66;">&#40;</span>mc:<span style="color: #0066CC;">MovieClip</span>,action:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">switch</span><span style="color: #66cc66;">&#40;</span>action<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span><span style="color: #66cc66;">&#40;</span>PRESS<span style="color: #66cc66;">&#41;</span>:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// llamamos a un metodo publico del modelo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// que actualiza el contador de clicks</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; model.<span style="color: #006600;">updateClick</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>&nbsp; &nbsp;&nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>&nbsp; &nbsp;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p><strong>Comentarios</strong></p>
<p>Utilizo la clase MVCApplication como â€œpunto de partidaâ€ (aunque también se podría integrar en la clase Model). Primero crea la instancia del modelo, luego lo configura mediante config, y luego llama al método start. Tanto â€œconfigâ€ como â€œstartâ€ son nombres completamente arbitrarios.</p>
<p>Ya en el modelo, en el método start se crea la instancia de la vista, se la configura pasando una referencia al modelo y un MovieClip de trabajo.</p>
<p>En este momento, tanto la vista como el modelo tienen una referencia mútua, con lo que pueden fácilmente acceder a sus propiedades y métodos públicos. Es importante darse cuenta de que en esta implementación sólo puede haber una vista. Â¿Y es eso importante? Pues seguro que depende de a  quien le preguntes. Desde luego es menos flexible (no puede haber 2 vistas al mismo tiempo), pero yo creo que es más sencillo a la hora de ser usado.</p>
<p>Después de configurar la vista, es el modelo quien decide qué hacer. En este caso tan simple tampoco tiene muchas opciones, por eso llama directamente al método displayValue al que le pasa el total de clicks hechos. En aplicaciones más complejas, lo más normal es que primero tenga que hacer algo de tarea sucia como leer un xml de configuración, extraer algún parámetro de las FlashVars, instanciar otras clases relativas al modelo, etc. etc.</p>
<p>En la vista mostramos el número de clicks y creamos un botón para aumentarlo. Es en este momento donde se supone que debería entrar en juego el controlador. Si tuvieramos un controlador como tal, la función manageButton seguramente debería encontrarse allí. Es decir, el controlador es el encargado de decidir qué hacer con las acciones del usuario.</p>
<p>Aún sin el controlador hemos conseguido separar la lógica  (el contado de los clicks), de la presentación (cómo la vista muestra la información). Al modelo le da exactamente igual cómo se muestre el número de clicks (si centrado en la pantalla, si en verde, rojo, grande, pequeño) y la vista tampoco le importa  mucho cómo se consigue esa información. Símplemente quiere que le digan qué tiene que pintar.</p>
<h2><a href="http://www.codigo.as/blog/?p=65">[ anterior ]</a> <a href="http://www.codigo.as/blog/?p=60">[ siguiente ]</a></h2>
<p><a href="http://creativecommons.org/licenses/by-nc-sa/2.5/es/"><img src="http://creativecommons.org/images/public/somerights20.png" alt="img" /></a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Tus%20amigos%20los%20patrones%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F&amp;t=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Tus%20amigos%20los%20patrones" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Tus%20amigos%20los%20patrones&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0ATus%20amigos%20los%20patrones%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AA%20mi%20me%20gusta%20pensar%20en%20los%20patrones%20como%20s" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Tus%20amigos%20los%20patrones&amp;annotation=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0ATus%20amigos%20los%20patrones%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AA%20mi%20me%20gusta%20pensar%20en%20los%20patrones%20como%20s" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Tus%20amigos%20los%20patrones&amp;notes=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0ATus%20amigos%20los%20patrones%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AA%20mi%20me%20gusta%20pensar%20en%20los%20patrones%20como%20s" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Tus%20amigos%20los%20patrones&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-tus-amigos-los-patrones%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-comunicacion-entre-clases/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Comunicación entre clases'>Lo que yo sé de AS2 #Comunicación entre clases</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-tus-amigos-los-patrones/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lo que yo sé de AS2 #Comunicación entre clases</title>
		<link>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-comunicacion-entre-clases/</link>
		<comments>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-comunicacion-entre-clases/#comments</comments>
		<pubDate>Sat, 17 Mar 2007 23:20:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS2]]></category>
		<category><![CDATA[Aportes]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Referencia]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=65</guid>
		<description><![CDATA[
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</p>
<p>*AUTOR: Juan Delgado Zárate
  zarate.tv &#124; dandolachapa.com &#124; loqueyosede.comFlashLa.com &#124; After-Hours.org</p>

Comunicación entre clases
<p>>Indice de contenidos</p>
<p>Una de las partes más importantes y que más confusión y problemas ha generado de AS2 es la comunicación entre clases. Foros y listas de correo están llenos de problemas y dudas sobre "ámbitos", "eventdispatchers" y "delegates". </p>
<p>Como regla general yo diría: </p>

Si necesitas comunicación dentro de la misma clase, siempre Delegate.
Si necesitas que más de una clase escuche lo que hace otra, siempre EventDispatcher.
Si la comunicación [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
<li><a href='http://www.codigoactionscript.org/comunicacion-entre-clases-actionscript-3-con-eventdispatcher/' rel='bookmark' title='Permanent Link: Comunicación entre clases Actionscript 3 con EventDispatcher'>Comunicación entre clases Actionscript 3 con EventDispatcher</a></li>
<li><a href='http://www.codigoactionscript.org/sistema-de-transiciones-entre-fotos/' rel='bookmark' title='Permanent Link: Sistema de transiciones entre fotos'>Sistema de transiciones entre fotos</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id=codigo><strong>
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</strong></p>
<p><img src="http://www.codigo.as/blog/images/botones/zarate.gif" alt="img" align="left"/><strong>*AUTOR</strong>: Juan Delgado Zárate<br />
  <a href="http://www.zarate.tv">zarate.tv</a> | <a href="http://www.dandolachapa.com">dandolachapa.com</a> | <a href="http://www.loqueyosede.com">loqueyosede.com</a><br /><a href="http://www.FlashLa.com">FlashLa.com</a> | <a href="http://www.After-Hours.org">After-Hours.org</a></p>
</div>
<h3>Comunicación entre clases</h3>
<p><strong><a href="http://www.codigo.as/blog/?p=60">>Indice de contenidos</a></strong></p>
<p>Una de las partes más importantes y que más confusión y problemas ha generado de AS2 es la comunicación entre clases. Foros y listas de correo están llenos de problemas y dudas sobre "ámbitos", "eventdispatchers" y "delegates". </p>
<p>Como regla general yo diría: </p>
<ul>
<li>Si necesitas comunicación dentro de la misma clase, siempre Delegate.</li>
<li>Si necesitas que más de una clase escuche lo que hace otra, siempre EventDispatcher.</li>
<li>Si la comunicación es 1:1, depende.</li>
</ul>
<p>Vamos a ver el funcionamiento de los 2 métodos. </p>
<h2>Delegate</h2>
<p>NOTA: Lo que voy a contar aquí es prácticamente un copy&#038;paste de un tuto que publiqué hace tiempo y que está enlazado al final. Si lo leíste en su día, te puedes saltar lo que sigue sin problemas. </p>
<p>Los foros de Flash están llenos de preguntas que tienen que ver con el "scope" o ámbito dentro de los famosos "callbacks" de objetos como XML, LoadVars, XMLSocket, etc. Flash necesita estas funciones porque las llamadas al servidor en Flash son asíncronas, es decir, el player no detiene la ejecución del código cuando se hace, por ejemplo, una petición de un fichero xml: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-199">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> oneVar:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"Helloworld"</span>;<br />
&nbsp; &nbsp; functionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; varmyXML:<span style="color: #0066CC;">XML</span> = newXML<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; myXML.<span style="color: #0066CC;">ignoreWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; myXML.<span style="color: #0066CC;">onLoad</span>=<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>oneVar<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">//undefined Â¬Â¬</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; myXML.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"myXML.xml"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Esto pasa porque el ámbito "dentro" del onLoad es el propio objeto myXML, NO la clase. Puedes hacer la prueba haciendo trace(this) dentro del onLoad. Una de las primeras soluciones que se utilizó para esto fue crear dentro de la función principal una </p>
<p>variable que hacía referencia a la propia clase. Algo como esto: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-200">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> oneVar:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"Helloworld"</span>;<br />
&nbsp; &nbsp; functionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> owner=<span style="color: #0066CC;">this</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> myXML:<span style="color: #0066CC;">XML</span> = newXML<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; myXML.<span style="color: #0066CC;">ignoreWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; myXML.<span style="color: #0066CC;">onLoad</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>owner.<span style="color: #006600;">oneVar</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">//yeah!</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; myXML.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"myXML.xml"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Y esto funciona. Este comportamiento "peculiar" de Flash (de los ECMAScript, vamos) se llama closure. </p>
<p>ámbito en las llamadas asíncronas. Pues a todo esto llegó la versión 7.2 del Flash IDE y el señor Mike Chambers introdujo la clase Delegate. Utilizando esa clase dejaríamos el código anterior en algo como esto: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-201">
<div class="actionscript">importmx.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Delegate</span>;<br />
classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> oneVar:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">"Hello world 2"</span>;<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> A<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> myXML:<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>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; myXML.<span style="color: #0066CC;">ignoreWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; myXML.<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>,xmlLoaded<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myXML.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"myXML.xml"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> xmlLoaded<span style="color: #66cc66;">&#40;</span>success:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>oneVar<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Estamos "delegando" el onLoad en la función xmlLoaded, pero, lo más importante, el ámbito de la función xmlLoaded es la clase original, por lo que "encontramos" la variable sin problemas. </p>
<p>Esto definitivamente NO es lo mismo que hacer: myXML.onLoad = xmlLoaded. Si lo probáis, estaréis con el mismo problema que antes, el ámbito de la función xmlLoaded será el objeto myXML, por lo que el trace volverá a ser undefined. </p>
<p>El mayor problema de la clase de Macromedia (aún era Macromedia) es que NO permite el paso de parámetros a la función delegada, pero pronto llegaron los frikis para solucionarlo haciendo sus propias clases para delegar. La que yo utilizo es una copia con alguna modificación de una que encontré en la lista de MTASC. Con estas nuevas clases se pueden pasar parámetros de la siguiente forma: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-202">
<div class="actionscript">myXML.<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>,xmlLoaded,<span style="color: #ff0000;">"val1"</span>,val2<span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
</div>
<p></div>
<p>OJO, nuestros parámetros llegarán después de los "oficiales", en este caso el típico success que llega a los onLoad del objeto XML. </p>
<h2>EvenDispatcher</h2>
<p>La misión básica de EvenDispatcher es permitir que varios objetos estén "escuchando" los eventos que lanza otro. EvenDispatcher siempre trata de comunicación entre clases, ya sea 1:1 (un emisor y un receptor) o 1:n (un emisor y varios receptores). </p>
<p>Técnicamente es una implementación del patrón Observer (ver enlaces al final) y fue introducida en su día por Macromedia. Pero como casi siempre apareció una versión libre, GDispatcher, en esta ocasión a cargo de Grant Skinner (gskinner.com). </p>
<p>Las clases que emiten eventos con EvenDispatcher son completamente independientes de quien esté escuchando, nunca saben si los escuchan 1 o 10, ellos sólo se limitan a emitir. Son como una radio o televisión con audiencia. </p>
<p>Sólo el objeto emisor necesita importar GDispatcher. Algo como lo siguiente: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-203">
<div class="actionscript">importcom.<span style="color: #006600;">gskinner</span>.<span style="color: #006600;">GDispatcher</span>;<br />
classbroadcaster<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> addEventListener:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> removeEventListener:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> dispatchEvent:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> broadcaster<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GDispatcher.<span style="color: #006600;">initialize</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> ev:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; ev.<span style="color: #0066CC;">type</span> = <span style="color: #ff0000;">"myEvent"</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; ev.<span style="color: #0066CC;">variable</span> = <span style="color: #ff0000;">"wadus"</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; dispatchEvent<span style="color: #66cc66;">&#40;</span>ev<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-204">
<div class="actionscript"><span style="color: #0066CC;">import</span> broadcaster;<br />
<span style="color: #000000; font-weight: bold;">class</span> receiver<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> receiver<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; varbr:broadcaster = newbroadcaster<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; br.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"myEvent"</span>,<span style="color: #0066CC;">this</span>,<span style="color: #ff0000;">"callback"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> callback<span style="color: #66cc66;">&#40;</span>ev:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>ev.<span style="color: #0066CC;">type</span>+<span style="color: #ff0000;">""</span>+<br />
&nbsp; &nbsp; &nbsp; &nbsp; ev.<span style="color: #0066CC;">variable</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Lo primero que llama la atención es que hayamos definido en la clase emisora unas variables del tipo Function. Si alguien se molesta en abrir GDispatcher puede ver que lo que hace en el método initialize es crear en tiempo de ejecución funciones a la clase que se le pasa como parámetro. Así que tenemos que definir esas mismas funciones como propiedades de nuestra clase para que el compilador no se queje de que el método al que el receptor trata de acceder (addEventListener) no existe. </p>
<p>La clase receptora es bastante simple. Simplemente importa a la emisora y se añade como listener para un evento concreto. Para hacerlo utiliza el método addEventListener pasando como parámetros el evento que quiere escuchar, el objeto que está escuchando (la propia clase (this) en este caso, pero se puede hacer que escuche otra) y la función que va a recibir la llamada. OJO que la función está pasada como cadena. </p>
<p>La implementación que hemos visto es perfectamente válida y funcional pero se puede mejorar. El primer problema es que el literal del nombre del evento ("myEvent") lo estamos repitiendo dos veces, una en el emisor y otra en el receptor. Malo. Otra es que el tipo del parámetro que llega a la función receptora es del tipo genérico Object, lo que no nos permite ninguna validación de tipos al compilar. Malo también. Bueno, pues las 2 cosas las vamos a solucionar en la misma jugada. Vamos a crear un objeto específico para el evento y será ese objeto "conocido" el que se envíe. </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-205">
<div class="actionscript">classmyEvent<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> EVENT_LITERAL:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">"eventOne"</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">type</span>:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">""</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">variable</span>:<span style="color: #0066CC;">Number</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> myEvent<span style="color: #66cc66;">&#40;</span>_variable:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">type</span> = EVENT_LITERAL;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">variable</span> = _variable;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-206">
<div class="actionscript">importcom.<span style="color: #006600;">gskinner</span>.<span style="color: #006600;">GDispatcher</span>;<br />
<span style="color: #0066CC;">import</span> myEvent;<br />
<span style="color: #000000; font-weight: bold;">class</span> broadcaster<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> addEventListener:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> removeEventListener:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> dispatchEvent:<span style="color: #000000; font-weight: bold;">Function</span>;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> broadcaster<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GDispatcher.<span style="color: #006600;">initialize</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> ev:myEvent = <span style="color: #000000; font-weight: bold;">new</span> myEvent<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; dispatchEvent<span style="color: #66cc66;">&#40;</span>ev<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-207">
<div class="actionscript"><span style="color: #0066CC;">import</span> broadcaster;<br />
<span style="color: #0066CC;">import</span> myEvent;<br />
<span style="color: #000000; font-weight: bold;">class</span> receiver<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> receiver<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> br:broadcaster = <span style="color: #000000; font-weight: bold;">new</span> broadcaster<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; br.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>preventivamente_LITERAL,<span style="color: #0066CC;">this</span>, <span style="color: #ff0000;">"callback"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> callback<span style="color: #66cc66;">&#40;</span>ev:myEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>ev.<span style="color: #0066CC;">type</span> + <span style="color: #ff0000;">" "</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; + ev.<span style="color: #0066CC;">variable</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Mucho mejor. El literal con el nombre del evento sólo se define una vez en la clase myEvent. Se define como variable estática para que la clase receptora pueda utilizarlo sin tener que crear una instancia. La propiedad type se define para ser compatibles con EventDispatcher y GDispatcher. </p>
<p>Además con la nueva implementación el tipo del evento que llega al receptor es myEvent y no Object, por lo que tendremos validación de tipos al compilar. </p>
<p>Si sustituyes myEvent, por videoStarted, applicationReady, menuButtonPressed y similares, es cuando se empieza a ver la utilidad de EvenDispatcher (vamos, de un patrón Observer). </p>
<h2>EvenDispatcher Â¿vs? Delegate</h2>
<p>Una vez vistos EventDispatcher y Delegate, Â¿hay situaciones en las que se pueda elegir entre usar una opción o la otra? Ya hemos visto que la comunicación dentro de la misma clase siempre es con Delegate, así la decisión viene cuando hay que comunicar 2 clases. Vamos a ver cómo. </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-208">
<div class="actionscript">importBroadcaster;<br />
importtv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Delegate</span>;<br />
<span style="color: #000000; font-weight: bold;">class</span> Receiver<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Receiver<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> buttonCallback:<span style="color: #000000; font-weight: bold;">Function</span> = Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, buttonPressed<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> broadcaster:Broadcaster = newBroadcaster<span style="color: #66cc66;">&#40;</span>buttonCallback<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> buttonPressed<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//este método se ejecuta cuando se presione el botón</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//en la clase emisora</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-209">
<div class="actionscript"><span style="color: #000000; font-weight: bold;">class</span> Broadcaster<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Broadcaster<span style="color: #66cc66;">&#40;</span>buttonPressedCallback:<span style="color: #000000; font-weight: bold;">Function</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">button</span>:<span style="color: #0066CC;">MovieClip</span> = base_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"button"</span>, <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">button</span>.<span style="color: #0066CC;">onPress</span> = buttonPressedCallback;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Atención a la jugada. La clase receptora crea una función delegada y la pasa como parámetro a la emisora que simplemente se lo asigna al evento onPress de su botón. Así que cuando el botón es presionado, la clase emisora recibe sin problemas el evento. </p>
<p>Ahora, Â¿qué hacemos si hay que pasar parámetros en la llamada? Esto es algo que NO podríamos hacer: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-210">
<div class="actionscript"><span style="color: #0066CC;">button</span>.<span style="color: #0066CC;">onPress</span> = buttonPressedCallback<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"parametro"</span><span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
</div>
<p></div>
<p>Ya que al añadir "()" estaríamos ejecutando la función. Si necesitamos pasar parámetros con este método, habría que pasar por una función intermedia. Repito sólo la clase emisora: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-211">
<div class="actionscript">importtv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Delegate</span>;<br />
<span style="color: #000000; font-weight: bold;">class</span> Broadcaster<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Broadcaster<span style="color: #66cc66;">&#40;</span>externalCallback:<span style="color: #000000; font-weight: bold;">Function</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">button</span>:<span style="color: #0066CC;">MovieClip</span> = base_mc.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"button"</span>, <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">button</span>.<span style="color: #0066CC;">onPress</span> = Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, butPressed, externalCallback<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> butPressed<span style="color: #66cc66;">&#40;</span>externalCallback:<span style="color: #000000; font-weight: bold;">Function</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; externalCallback<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"parametro"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Al utilizar la clase emisora internamente una función para recibir el evento onPress del botón, ya puede pasar los parámetros que quiera al callback externo. </p>
<h2><a href="http://www.codigo.as/blog/?p=64">[ anterior ]</a> <a href="http://www.codigo.as/blog/?p=66">[ siguiente ]</a></h2>
<p><a href="http://creativecommons.org/licenses/by-nc-sa/2.5/es/"><img src="http://creativecommons.org/images/public/somerights20.png" alt="img" /></a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Comunicaci%C3%B3n%20entre%20clases%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F&amp;t=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Comunicaci%C3%B3n%20entre%20clases" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Comunicaci%C3%B3n%20entre%20clases&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AComunicaci%C3%B3n%20entre%20clases%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AUna%20de%20las%20partes%20m%C3%A1s%20importantes%20y%20que" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Comunicaci%C3%B3n%20entre%20clases&amp;annotation=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AComunicaci%C3%B3n%20entre%20clases%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AUna%20de%20las%20partes%20m%C3%A1s%20importantes%20y%20que" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Comunicaci%C3%B3n%20entre%20clases&amp;notes=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AComunicaci%C3%B3n%20entre%20clases%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0AUna%20de%20las%20partes%20m%C3%A1s%20importantes%20y%20que" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Comunicaci%C3%B3n%20entre%20clases&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-comunicacion-entre-clases%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
<li><a href='http://www.codigoactionscript.org/comunicacion-entre-clases-actionscript-3-con-eventdispatcher/' rel='bookmark' title='Permanent Link: Comunicación entre clases Actionscript 3 con EventDispatcher'>Comunicación entre clases Actionscript 3 con EventDispatcher</a></li>
<li><a href='http://www.codigoactionscript.org/sistema-de-transiciones-entre-fotos/' rel='bookmark' title='Permanent Link: Sistema de transiciones entre fotos'>Sistema de transiciones entre fotos</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-comunicacion-entre-clases/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lo que yo sé de AS2 #Clases, instancias, propiedades</title>
		<link>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/</link>
		<comments>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/#comments</comments>
		<pubDate>Sat, 17 Mar 2007 11:34:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS2]]></category>
		<category><![CDATA[Aportes]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Referencia]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=64</guid>
		<description><![CDATA[
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</p>
<p>*AUTOR: Juan Delgado Zárate
  zarate.tv &#124; dandolachapa.com &#124; loqueyosede.comFlashLa.com &#124; After-Hours.org</p>

Clases, instancias, propiedades
<p>>Indice de contenidos</p>
<p>Cualquier elemento de una película Flash puede ser una clase. Un botón, un menú, un componente ScrollArea... lo que sea. Pero no sólo los elementos gráficos pueden ser clases. La "lógica" de tu aplicación también lo puede ser: cuando hago click aquí, sumo 2 y muevo el menú. También puedes crear clases para mandar y recibir datos del servidor, etc. </p>
<p>Decidir qué convertimos en clase y qué [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-comunicacion-entre-clases/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Comunicación entre clases'>Lo que yo sé de AS2 #Comunicación entre clases</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/programacion-orientada-a-objetos-herencia-de-clases/' rel='bookmark' title='Permanent Link: Programación orientada a objetos: Herencia de clases.'>Programación orientada a objetos: Herencia de clases.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id=codigo><strong>
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</strong></p>
<p><img src="http://www.codigo.as/blog/images/botones/zarate.gif" alt="img" align="left"/><strong>*AUTOR</strong>: Juan Delgado Zárate<br />
  <a href="http://www.zarate.tv">zarate.tv</a> | <a href="http://www.dandolachapa.com">dandolachapa.com</a> | <a href="http://www.loqueyosede.com">loqueyosede.com</a><br /><a href="http://www.FlashLa.com">FlashLa.com</a> | <a href="http://www.After-Hours.org">After-Hours.org</a></p>
</div>
<h3>Clases, instancias, propiedades</h3>
<p><strong><a href="http://www.codigo.as/blog/?p=60">>Indice de contenidos</a></strong></p>
<p>Cualquier elemento de una película Flash puede ser una clase. Un botón, un menú, un componente ScrollArea... lo que sea. Pero no sólo los elementos gráficos pueden ser clases. La "lógica" de tu aplicación también lo puede ser: cuando hago click aquí, sumo 2 y muevo el menú. También puedes crear clases para mandar y recibir datos del servidor, etc. </p>
<p>Decidir qué convertimos en clase y qué dejamos como código "normal" es algo que siempre depende del programador y del proyecto. Supón que quieres hacer una aplicación que lee datos de un xml, los muestra en un campo de texto  y que tiene un botón para mandar el texto de nuevo al servidor. El conjunto de clases podría variar desde una clase para hacerlo todo, a una clase para la aplicación, otra para la lectura y envio de datos, otra para el campo de texto y otra para el botón. </p>
<p>Meter todo en la misma clase no parece una idea muy feliz. Podrías fácilmente llegar a 1.000 líneas de código y estarías mezclando lógica con presentación, no podrías reusar nada de lo que hayas hecho... Por el contrario hacer una clase para todos y cada uno de los elementos de una aplicación te puede llevar a una pesadilla de montones de clases que no hacen prácticamente nada. Como siempre, es cuestión de práctica. Asume que para mejorar te tienes que equivocar, así que cuanto más practiques menos errores cometerás. </p>
<p>Como regla general yo diría que siempre es bueno conjuntos de clases para: </p>
<ul>
<li>Manter el estado y la lógica de la aplicación. Lo que luego llamaremos modelo.</li>
<li>Una o varias clases para el pintado. Lo que luego llamaremos vista.</li>
<li>Una o varias clases para el acceso y escritura de los datos. Suponiendo una aplicación que maneja usuarios (alta, baja, edición), en lugar de poner todos esos procesos (lectura de xml, envio de nuevos datos al servidor) en el modelo, yo prefiero que el modelo haga esas peticiones a una clase específica. De esa forma el modelo (y la aplicación) es independiente de dónde vienen los datos.</li>
<li>Clases para componentes gráficos. Típico TextArea, RadioButton, CheckBox, etc. etc.</li>
<li>Tener clases comunes para tareas no específicas de un proyecto. Es muy común que necesitemos una clase para pintar un cuadrado o un círculo. En ese caso se puede crear una clase llamada rawUtils con métodos estáticos para círculo, cuadrado, triángulo... Lo mismo para sustituir los protos y añadir funcionalidades extra a String o Array.</li>
</ul>
<h2>Partes de una clase</h2>
<p>Cuando se crea una clase, hay que utilizar su classpath completo mas su nombre para definirla. Por ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-242">
<div class="actionscript">classtv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">Utils</span>.<span style="color: #0066CC;">Trace</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//codigo</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>El nombre de la clase es "Trace" (y ese tiene que ser el nombre del archivo .as), y se encuentra dentro de las carpetas tv > zarate > Utils. A la hora de importarla también hay que utilizar toda la definción de la clase: </p>
<p>importtv.zarate.Utils.Trace;</p>
<p>Dentro de una clase tenemos propiedades (que contienen los datos o información de una clase) y métodos (normalmente para realizar operaciones con la información de las propiedades). </p>
<p>Todos los métodos de una clase pueden acceder a sus propiedades, pero además puede definir variables locales. Las variables locales a una función se eliminan cuando la ejecución de una función se termina. </p>
<p>En AS2 todo lo que tiene representación gráfica se hace sobre objetos MovieClips. Es decir, no se puede "pintar" sobre nada que no sea un MovieClip. Esto NO quiere decir que tus clases tengan que extender de MovieClip, pero de eso hablaremos luego. </p>
<p>Diferencias entre clases/métodos estáticos e instancias de clases </p>
<p>Una clase "normal" es aquella de la que se crean instancias utilizando la palabra clave "new". Algo como lo siguiente: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-243">
<div class="actionscript">varinstance:MyClass=newMyClass<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-244">
<div class="actionscript">classMyClass<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicvarvariableAccesible:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"Aquí puede acceder todo el mundo"</span>;<br />
&nbsp; &nbsp; privatevarvariableNoAccesible:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"Aquí, teóricamente, no"</span>;<br />
&nbsp; &nbsp; publicfunctionMyClass<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//estemétodoeselconstructor</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//yseejecutasiemprequesecrea</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//unanuevainstancia</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Las clases estáticas son aquellas que se pueden utilizar sin crear una instancia. Por ejemplo la clase Math: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-245">
<div class="actionscript">varpi:<span style="color: #0066CC;">Number</span>=<span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">PI</span>;</div>
</div>
</div>
</div>
<p></div>
<p>Â¡OJO! Las clases normales pueden tener variables estáticas. De hecho, son muy útiles para algunos casos. Por ejemplo. Supongamos que tenemos una clase que representa un juego. </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-246">
<div class="actionscript">classMyGame<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicstaticvarRIGHT:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"right"</span>;<br />
&nbsp; &nbsp; publicstaticvarWRONG:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"wrong"</span>;<br />
&nbsp; &nbsp; privatevarstate:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">""</span>;<br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Eso nos permite hacer algo como:</p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-247">
<div class="actionscript">vargame:MyGame=newMyGame<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
game.<span style="color: #006600;">state</span>=MyGame.<span style="color: #0066CC;">RIGHT</span>;</div>
</div>
</div>
</div>
<p></div>
<p>De esa forma sólo definimos la cadena "right" en un sitio y a partir de ahí utilizaríamos el valor de la variable estática. De esa forma nos ahorraremos errores tipográficos y, si por ejemplo hubiera que cambiar la cadena "right" por "correcto", no habría ningún problema ya que estaríamos accediendo a una variable. </p>
<h2>Público vs privado</h2>
<p>Los métodos y las propiedades de una clase pueden ser públicos o privados. Aunque sea bastante obvio, las propiedades y métodos públicos son accesibles por la propia clase y clases externas. Todo lo que sea privado sólo puede ser usado (en teoría) por la propia clase y las que extiendan de ella. Por ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-248">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicfunctiondoSomethingPublic<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; privatefunctiondoSomethingPrivate<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-249">
<div class="actionscript">importclassA;<br />
vara:A = newA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<br />
a.<span style="color: #006600;">doSomethingPublic</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">//bien</span><br />
a.<span style="color: #006600;">doSomethingPrivate</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">//ERRORalcompilar </span></div>
</div>
</div>
</div>
<p></div>
<p>Las propiedades y métodos públicos componen la API (Application Programming Interface) de nuestra clase para otras clases. Es decir, suponen el conjunto de "cosas" que se pueden hacer con ella. </p>
<p>Como regla general, haz privado todo lo que puedas. Si no hay una buena razón para que un método sea público, mejor que sea privado. La razón es sencilla. Supongamos que pasado un tiempo nos damos cuenta de que hay que pasar un método de privado a público. Como ninguna clase externa </p>
<p>puede estar utilizando ese método (es privado), no romperemos la compatibilidad hacia atrás, no habrá problemas al compilar. </p>
<p>Sin embargo el caso contrario no es tan sencillo. Si pasamos un método (o propiedad) de público a privado, nos podemos encontrar con que otras clases externas lo pueden estar utilizando. Al intentar recompilar, podríamos tener errores. </p>
<p>Recordar también que en AS2 si no se define public/private, tanto las propiedades como los métodos son públicos por defecto. </p>
<p>Acceder a los métodos y propiedades de una clase desde la propia clase </p>
<p>Para acceder a las propiedades y métodos de una clase desde la propia clase NO es necesario utilizar this. Dicho esto, hay gente que lo considera best practice ya que ayuda a ver dentro de un método si se está usando una propiedad de la clase, una variable local, o un parámetro. </p>
<h2>Composición y herencia</h2>
<p><strong>Herencia</strong></p>
<p>Una clase hereda de otra utilizando la palabra clave extends. Y cuando una clase hereda de otra automáticamente añade a su código el código de la clase padre, todos sus métodos y propiedades.<br />
Lo bueno es que la clase hija puede decidir si quiere modificar el comportamiento de la clase padre o simplemente añadirle nuevas funcionalidades. Ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-250">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicvargreeting:<span style="color: #0066CC;">String</span>=<span style="color: #ff0000;">"helloworld"</span>;<br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicfunctionmyFirstTrace<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>greeting+<span style="color: #ff0000;">"IÂ´mclassA!"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicfunctionmySecondTrace<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"ClassAsecondtrace"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-251">
<div class="actionscript">importA;<br />
classBextendsA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> B<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; greeting = <span style="color: #ff0000;">"Hello people"</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> myFirstTrace<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">super</span>.<span style="color: #006600;">myTrace</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>greeting + <span style="color: #ff0000;">" IÂ´m class B!"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> mySecondTrace<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"ClassBsecondtrace"</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Fijaos como la clase B no necesita definir como propiedad "greeting", ya que la hereda de A. Luego, si llamamos al método myFirstTrace de la clase B tendremos 2 traces, el de A y el de B. Esto<br />
es así porque la clase B está llamando al método de la clase padre con la palabra clave super. Importante notar que la traza que obtendremos de la clase A no es la esperada, ya que la variable<br />
"greeting" ha sido predefinida en la clase B. </p>
<p>Sin embargo, si llamamos al método mySecondTrace de la clase B sólo obtendremos una traza, ya que la clase B no llama al método de la clase padre. </p>
<p>Predefinir completamente los métodos o propiedades de la clase padre o llamarlos mediante super y luego ejecutar más acciones específicas depende por completo de la situación y de lo que queramos<br />
conseguir. </p>
<p><strong>Composición</strong></p>
<p>Utilizamos composición entre 2 clases cuando una clase recibe como parámetro una instancia de la otra. Por ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-252">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-253">
<div class="actionscript">importA;<br />
<span style="color: #000000; font-weight: bold;">class</span> B<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> a:A;<br />
&nbsp; &nbsp; <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> B<span style="color: #66cc66;">&#40;</span>_a:A<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; a = _a;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-254">
<div class="actionscript">importA;<br />
importB;<br />
classC<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionC<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; vara:A=newA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; varb:B=newB<span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//BrecibecomoparámetrounainstanciadeA</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<h2>Que empiece la fiesta</h2>
<p>Después de probar varios métodos creo que la forma más sencilla de iniciar una aplicación completamente AS2 y OOP es utilizar el método estático "main".  Para empezar en tu clase<br />
necesitarías tener algo como: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-255">
<div class="actionscript">classcom.<span style="color: #006600;">myweb</span>.<span style="color: #006600;">MyClass</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; privatevartimeLine_mc:<span style="color: #0066CC;">MovieClip</span>;<br />
&nbsp; &nbsp; publicfunctionMyClass<span style="color: #66cc66;">&#40;</span>m:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; timeLine_mc=m;<span style="color: #808080; font-style: italic;">//guardamosreferenciaalMCdetrabajo//todotuyoapartirdeaquí:)</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; publicstaticfunctionmain<span style="color: #66cc66;">&#40;</span>m:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//aquínosllegacomoparámetroelMovieClipsobre//elque&quot;trabajar&quot;</span><br />
&nbsp; &nbsp; varinstance:MyClass=newMyClass<span style="color: #66cc66;">&#40;</span>m<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Luego, en línea de tiempo principal de tu fla, el siguiente código (que es lo que hace MTASC cuando compilamos con main): </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-256">
<div class="actionscript">importcom.<span style="color: #006600;">myweb</span>.<span style="color: #006600;">MyClass</span>;<br />
MyClass.<span style="color: #006600;">main</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
</div>
<p></div>
<p>Lo que estamos haciendo es llamar al método estático main y pasarle una referencia al MovieClip sobre el que queremos que trabaje la aplicación. </p>
<p>Lo bueno de utilizar este método o algo parecido es que no estamos haciendo nunca referencia explícita a "_root", por lo que si por la razón que sea, el swf en el que tenemos compilada la aplicación es cargado dinámicamente por otra película, no tendría ningún problema de referencias. En lugar de trabajar sobre la línea de tiempo principal, lo haría sobre la del MovieClip que haya sido cargada.</p>
<h2><a href="http://www.codigo.as/blog/?p=63">[ anterior ]</a> <a href="http://www.codigo.as/blog/?p=60">[ siguiente ]</a></h2>
<p><a href="http://creativecommons.org/licenses/by-nc-sa/2.5/es/"><img src="http://creativecommons.org/images/public/somerights20.png" alt="img" /></a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Clases%2C%20instancias%2C%20propiedades%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F&amp;t=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Clases%2C%20instancias%2C%20propiedades" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Clases%2C%20instancias%2C%20propiedades&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AClases%2C%20instancias%2C%20propiedades%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0A%0D%0ACualquier%20elemento%20de%20una%20pel%C3%ADcu" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Clases%2C%20instancias%2C%20propiedades&amp;annotation=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AClases%2C%20instancias%2C%20propiedades%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0A%0D%0ACualquier%20elemento%20de%20una%20pel%C3%ADcu" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Clases%2C%20instancias%2C%20propiedades&amp;notes=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AClases%2C%20instancias%2C%20propiedades%0D%0A%3EIndice%20de%20contenidos%0D%0A%0D%0A%0D%0ACualquier%20elemento%20de%20una%20pel%C3%ADcu" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Clases%2C%20instancias%2C%20propiedades&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-clases-instancias-propiedades%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-comunicacion-entre-clases/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Comunicación entre clases'>Lo que yo sé de AS2 #Comunicación entre clases</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/programacion-orientada-a-objetos-herencia-de-clases/' rel='bookmark' title='Permanent Link: Programación orientada a objetos: Herencia de clases.'>Programación orientada a objetos: Herencia de clases.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lo que yo sé de AS2 #Entorno de trabajo</title>
		<link>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-entorno-de-trabajo/</link>
		<comments>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-entorno-de-trabajo/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 02:29:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AS2]]></category>
		<category><![CDATA[Aportes]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Referencia]]></category>

		<guid isPermaLink="false">http://www.codigo.as/blog/?p=63</guid>
		<description><![CDATA[
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</p>
<p>*AUTOR: Juan Delgado Zárate
  zarate.tv &#124; dandolachapa.com &#124; loqueyosede.comFlashLa.com &#124; After-Hours.org</p>

Entorno de trabajo
<p>>Indice de contenidos</p>
Terminología básica
<p>Antes de empezar a programar con AS2 hay estar familiarizado con algunos conceptos: </p>
<p>Classpath </p>
<p>Los classpath (puede haber varios) son necesarios para indicarle al compilador dónde está el código que quremos compilar. </p>
<p>Un classpath es una ruta que apunta a nuestras clases en el disco duro. La mejor opción es que guardes todas tus clases (y las de terceros) en el mismo sitio. Si no estás [...]


Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Enlaces, enlaces, millones de enlaces'>Lo que yo sé de AS2 #Enlaces, enlaces, millones de enlaces</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id=codigo><strong>
<p>Lo que yo sé de AS2 (condensado y pasteurizado)</strong></p>
<p><img src="http://www.codigo.as/blog/images/botones/zarate.gif" alt="img" align="left"/><strong>*AUTOR</strong>: Juan Delgado Zárate<br />
  <a href="http://www.zarate.tv">zarate.tv</a> | <a href="http://www.dandolachapa.com">dandolachapa.com</a> | <a href="http://www.loqueyosede.com">loqueyosede.com</a><br /><a href="http://www.FlashLa.com">FlashLa.com</a> | <a href="http://www.After-Hours.org">After-Hours.org</a></p>
</div>
<h3>Entorno de trabajo</h3>
<p><strong><a href="http://www.codigo.as/blog/?p=60">>Indice de contenidos</a></strong></p>
<h2>Terminología básica</h2>
<p>Antes de empezar a programar con AS2 hay estar familiarizado con algunos conceptos: </p>
<p><strong>Classpath</strong> </p>
<p>Los classpath (puede haber varios) son necesarios para indicarle al compilador dónde está el código que quremos compilar. </p>
<p>Un classpath es una ruta que apunta a nuestras clases en el disco duro. La mejor opción es que guardes todas tus clases (y las de terceros) en el mismo sitio. Si no estás muy inspirado, algo como â€œC:\proyectos\as2\clasesâ€ puede valer (por pura precaución no pondría ni espacios ni caracteres raros). No es obligatorio tener todas las clases en el mismo sitio, pero yo diría que ayuda bastante a reutilizar código entre proyectos. </p>
<p><strong>Namespace o espacio de nombres </strong></p>
<p>Como es muy normal que distintos programadores llamen de la misma forma a una clase (â€œConfigâ€, â€œApplicationâ€, â€œWadusâ€) es necesario â€œalgoâ€ que permita esa coincidencia de nombres. Ese algo es un namespace. </p>
<p>Un namespace es un espacio reservado en el cual se guardan clases. â€œFísicamenteâ€ se traduce en una estructura de carpetas dentro del classpath. Por ejemplo, todas mis clases están en mi namespace que es tv.zarate.*. Es decir, dentro del classpath, hay una carpeta â€œtvâ€ y dentro de esa carpeta hay otra â€œzarateâ€. Dentro de â€œzarateâ€ es donde guardo todas mis clases. </p>
<p>Una vez ahí, hay total libertad para organizar la estructura de packages. Un package no es más que el conjunto de clases dentro de una carpeta. Es bastante normal tener un package para proyectos, otro para clases comunes, otro para efectos.... pero depende totalmente de cada programador. </p>
<p>A pesar de que no es imprescindible, sí que es muy recomendable tener un namespace â€œpropioâ€. Â¿Y cómo sabemos que es propio? Porque se suele utilizar un domino. Alquilen podría meter sus clases en la misma estructura, pero no es muy probable. </p>
<p><strong>Import </strong></p>
<p>Para utilizar una clase dentro de otra normalmente hay que importarla primero. Y para importarla hay que utilizar la palabra clave import seguida de el namespace completo de la clase que se quiere importar. Por ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-261">
<div class="actionscript">importtv.<span style="color: #006600;">zarate</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Delegate</span>;<span style="color: #808080; font-style: italic;">//importamoslaclaseDelegateclassA{</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">//para utilizarla, ya no tenemos que utilizar su ruta completa var callback:Function = Delegate.create (this, otherCallback)</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p>Ahora, también es posible utilizar una clase sin namespace si está a la misma altura que el archivo .fla que se compila. Yo diría que es una mala opción, ya que si quisiéramos reutilizar la clase en otro proyecto habría que copiarla y pegarla a la altura del nuevo fla, con lo que reutilizar código se complica bastante. </p>
<p>Para más información sobre cuándo el compilador incluye una clase en un swf, ver en la sección de apuntes â€œÂ¿Cuándo se compila una clase?â€. </p>
<p><strong>Constructor </strong></p>
<p>El constructor de una clase es un método especial que es llamado automáticamente cuando se crea una instancia de la misma. En AS2 el constructor tiene que tener el mismo nombre que la clase. Sin embargo, NO es obligatorio tener constructor en la clase. Además, en el constructor no se puede definir el tipo devuelto. Ejemplo: </p>
<div id=codigo>
<div id="codigo">
<div class="syntax_hilite">
<div id="actionscript-262">
<div class="actionscript">classA<span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; publicfunctionA<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:A<span style="color: #66cc66;">&#123;</span><span style="color: #808080; font-style: italic;">//erroralcompilar}</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
</div>
<p></div>
<p><strong>Compilador </strong></p>
<p>Es un programa que se encargar de pasar nuestro código (en este caso, ActionScript) a un archivo .swf. Compiladores de AS2 hay varios, los más utilizados son el propio IDE de Flash y MTASC, del que hablaremos más luego. </p>
<h2>El IDE de Flash</h2>
<p>Para empezar a trabajar con el IDE, lo primero que tenemos que hacer es definir el classpath para nuestros proyectos. Se puede establecer el classpath para un fla determinado, pero yo creo que es una muy mala opción, especialmente si ese fla se va a compartir entre varias personas. Así que nos vamos a Editar > Preferencias > ActionScript > preferencias Action Script 2.0, seleccionamos agregar (el puntito de mira) y buscamos con el explorador el lugar en el que hemos puesto o vamos a poner todas las clases que vayamos a usar, tanto nuestras como propias. </p>
<p>El astuto lector habrá observado que por defecto hay 2 rutas creadas. Una es el directorio de la instalación de Flash que es donde se encuentran todas las clases de Macromedia. El otro simplemente es â€œ.â€, por eso a la hora de compilar el IDE siempre busca clases en la carpeta en la que se encuentra el fla. </p>
<p><strong>AQUÃ VA UN MENSAJE PARA LOS INCAUTOS</strong> </p>
<p>El IDE de Flash da MUCHOS, MUCHOS problemas cuando se trabaja con un número elevado de clases, especialmente si están en un equipo que no es el nuestro (por ejemplo un servidor central). Esto es debido que para darle velocidad a la compilación el IDE cachea las clases que estamos utilizando. Eso que en teoría es una buena idea, está muy mal implementada. Y es más que normal que el compilador de errores raros que las 100 primeras veces piensas que es tu culpa y te vuelve loco. Conocedores del problema, desde Macromedia sacaron una extensión para limpiar la caché de clases antes de compilar (ver sección de enlaces). </p>
<p>Mi recomendación inicial es que directamente te pases a MTASC. Si no quieres o no puedes por lo menos échale un ojo a FLASC (Flash IDE + MTASC), seguro que te salva unas cuantas horas. </p>
<h2>MTASC</h2>
<p>Para quien no lo sepa, MTASC (MotionTween, ActionScript Compiler) es un compilador gratuito y abierto de AS2 desarrollado por Nicolas Cannasse. MTASC sólo compila AS2, así que no es posible utilizar #include o protos. </p>
<p>Para trabajar con MTASC no hay que hacer nada especial, simplemente pasarle como parámetro tu classpath con la opción cp. Sería algo así más o menos: </p>
<p><em>mtasc swf salida.swf header 200:200:0xff0000 cp â€œc:\ruta\a\tu\classpathâ€ main ClaseInicio.as</em></p>
<p>En la sección de Enlaces hay un pequeño tutorial de uso de MTASC y SWFMill para quien esté interesado.</p>
<h2><a href="http://www.codigo.as/blog/?p=62">[ anterior ]</a> <a href="http://www.codigo.as/blog/?p=60">[ siguiente ]</a></h2>
<p><a href="http://creativecommons.org/licenses/by-nc-sa/2.5/es/"><img src="http://creativecommons.org/images/public/somerights20.png" alt="img" /></a></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Comparte:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F" title="Meneame"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Entorno%20de%20trabajo%20-%20http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F" title="Twitter"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F&amp;t=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Entorno%20de%20trabajo" title="Facebook"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Entorno%20de%20trabajo&amp;source=CODIGO.actionscript+Blog+de+programaci%C3%B3n+en+ActionScript.+Tips%2C+tutoriales%2C+ejemplos+de+Adobe+Flash%2C+Flex+y+AIR&amp;summary=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AEntorno%20de%20trabajo%0D%0A%3EIndice%20de%20contenidos%0D%0ATerminolog%C3%ADa%20b%C3%A1sica%0D%0A%0D%0AAntes%20de%20empezar%20a%20progra" title="LinkedIn"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Entorno%20de%20trabajo&amp;annotation=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AEntorno%20de%20trabajo%0D%0A%3EIndice%20de%20contenidos%0D%0ATerminolog%C3%ADa%20b%C3%A1sica%0D%0A%0D%0AAntes%20de%20empezar%20a%20progra" title="Google Bookmarks"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F&amp;title=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Entorno%20de%20trabajo&amp;notes=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%28condensado%20y%20pasteurizado%29%2AAUTOR%3A%20Juan%20Delgado%20Z%C3%A1rate%0D%0A%20%20zarate.tv%20%7C%20dandolachapa.com%20%7C%20loqueyosede.comFlashLa.com%20%7C%20After-Hours.org%0D%0AEntorno%20de%20trabajo%0D%0A%3EIndice%20de%20contenidos%0D%0ATerminolog%C3%ADa%20b%C3%A1sica%0D%0A%0D%0AAntes%20de%20empezar%20a%20progra" title="del.icio.us"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F" title="Technorati"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Lo%20que%20yo%20s%C3%A9%20de%20AS2%20%23Entorno%20de%20trabajo&amp;body=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F" title="email"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.codigoactionscript.org%2Flo-que-yo-se-de-as2-entorno-de-trabajo%2F&amp;partner=sociable" title="Print"><img src="http://www.codigoactionscript.org/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
</ul>
</div>


<p>Related posts:<ol><li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-enlaces-enlaces-millones-de-enlaces/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Enlaces, enlaces, millones de enlaces'>Lo que yo sé de AS2 #Enlaces, enlaces, millones de enlaces</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-por-zarate/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 (*por Zárate)'>Lo que yo sé de AS2 (*por Zárate)</a></li>
<li><a href='http://www.codigoactionscript.org/lo-que-yo-se-de-as2-clases-instancias-propiedades/' rel='bookmark' title='Permanent Link: Lo que yo sé de AS2 #Clases, instancias, propiedades'>Lo que yo sé de AS2 #Clases, instancias, propiedades</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.codigoactionscript.org/lo-que-yo-se-de-as2-entorno-de-trabajo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
