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

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

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

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

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

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

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

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

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/as3-composicion-paso-de-parametros-por-valor-y-por-referencia/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
