<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feeds.feedburner.com/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nuevos Programadores</title>
	
	<link>http://nuevosprogramadores.com</link>
	<description>Aprender programación con ejemplos</description>
	<pubDate>Wed, 19 Nov 2008 05:16:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NuevosProgramadores" type="application/rss+xml" /><item>
		<title>Patrón Decorador - Definición, diagramas e implementación</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/458002028/</link>
		<comments>http://nuevosprogramadores.com/2008/11/patron-decorador-definicion-diagramas-e-implementacion/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 05:16:57 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[Decorador]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Patrones]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=46</guid>
		<description><![CDATA[El patrón decorador, (decorator pattern), añade nuevas responsabilidades a un objeto dinamicamente, ofreciendo una alternativa flexible a la herencia.
En otras palabras, es una forma de agregar funcionalidades a una clase, extendiéndola pero sin recurrir a la herencia. ¿Por qué no heredar? Bueno, tal vez no desees dar acceso a toda la clase primaria y entonces [...]]]></description>
			<content:encoded><![CDATA[<p>El <strong>patrón decorador</strong>, <em>(decorator pattern)</em>, añade nuevas responsabilidades a un objeto dinamicamente, ofreciendo una alternativa flexible a la herencia.</p>
<p>En otras palabras, es una forma de agregar funcionalidades a una clase, extendiéndola pero sin recurrir a la herencia. ¿Por qué no heredar? Bueno, tal vez no desees dar acceso a toda la clase primaria y entonces sólo se daría acceso a lo necesario.</p>
<p>Veamos un ejemplo simple, tenemos las siguientes clases:</p>
<ul>
<li>Persona  (ID, Nombre, Apellido y Fecha de Nacimiento)</li>
<li>Usuario (ID, Nombre, Apellido, Usuario, Passwd)</li>
<li>Cliente (ID, Nombre, Apellido, Teléfono, Email)</li>
<li>Cliente VIP (ID, Nombre, Apellido, Teléfono, Email, Nro de Cuenta, Límite de Crédito)</li>
</ul>
<p>Cómo vemos todos tienen campos comunes a Persona, pero no tienen todos los campos de la clase Persona, por eso no podemos heredar, así es que podremos implementar decoradores para la clase Persona, tendremos los decoradores Usuario, Cliente y Cliente VIP. (Ver figura 1).</p>
<p>Pero si analizamos lo que hemos diseñado hasta el momento podremos observar que Cliente VIP podría llegar a convertirse en un decorador de Cliente, que como recordamos es un decorador de Persona, de esa manera no tendremos que reescribir la lógica detrás de los atributos Teléfono e Email. (Ver figura 2).</p><div class="ngg-galleryoverview" id="ngg-gallery-3"><div id="ngg-image-5" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb5" href="http://nuevosprogramadores.com/wp-content/gallery/diagramas-decorator-java/diagrama-decorator-java_2.png" title="" class="thickbox" rel="diagramas-decorator-java" ><img title="diagrama-decorator-java_2.png" alt="diagrama-decorator-java_2.png" src="http://nuevosprogramadores.com/wp-content/gallery/diagramas-decorator-java/thumbs/thumbs_diagrama-decorator-java_2.png" style="width:100px; height:100px;" /></a>
</div>
</div>
<div id="ngg-image-6" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb6" href="http://nuevosprogramadores.com/wp-content/gallery/diagramas-decorator-java/diagrama-decorator-java_1.png" title="" class="thickbox" rel="diagramas-decorator-java" ><img title="diagrama-decorator-java_1.png" alt="diagrama-decorator-java_1.png" src="http://nuevosprogramadores.com/wp-content/gallery/diagramas-decorator-java/thumbs/thumbs_diagrama-decorator-java_1.png" style="width:100px; height:100px;" /></a>
</div>
</div>
</div>
<div class='ngg-clear'></div>
<p>La pregunta es cómo decorar una clase, pues a grandes rasgos podríamos decir que se trata de tener una variable privada de la clase a decorar, escribir los métodos o atributos que se deseen publicar de la clase a decorar y luego agregar las decoraciones en nuestra nueva clase, entendiendo por decoraciones los nuevos métodos y/o atributos.</p>
<p>Por último veamos el código correspondiente a nuestras clases.</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="java java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Persona
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> ID;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> Nombre;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> Apellido;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Date</span> FechaNac;
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getID<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> ID;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNombre<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> Nombre;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getApellido<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> Apellido;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Date</span> getFechaNac<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> FechaNac;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Usuario
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Persona mPersona;
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> Usuario;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> Passwd;
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getID<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mPersona.<span style="color: #006633;">getID</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNombre<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mPersona.<span style="color: #006633;">getNombre</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getApellido<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mPersona.<span style="color: #006633;">getApellido</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getUsuario<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> Usuario;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getPasswd<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> Passwd;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Cliente
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Persona mPersona;
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> Telefono;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> Email;
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getID<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mPersona.<span style="color: #006633;">getID</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNombre<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mPersona.<span style="color: #006633;">getNombre</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getApellido<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mPersona.<span style="color: #006633;">getApellido</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getTelefono<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> Telefono;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getEmail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> Email;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Cliente_VIP
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Cliente mCliente;
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> NroCuenta;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Double</span> LimiteCredito;
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getID<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mCliente.<span style="color: #006633;">getID</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNombre<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mCliente.<span style="color: #006633;">getNombre</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getApellido<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mCliente.<span style="color: #006633;">getApellido</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getTelefono<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mCliente.<span style="color: #006633;">getTelefono</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getEmail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> mCliente.<span style="color: #006633;">getEmail</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNroCuenta<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> NroCuenta;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Double</span> getLimiteCredito<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> LimiteCredito;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></code></p>
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/10/head-first-design-patterns-aprendiendo-patrones-de-diseno/" title="Head First Design Patterns - Aprendiendo Patrones de Diseño">Head First Design Patterns - Aprendiendo Patrones de Diseño</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/convertir-un-entero-base-10-a-binario-en-java-recursivo/" title="Convertir un entero base 10 a binario en Java (Recursivo)">Convertir un entero base 10 a binario en Java (Recursivo)</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/patron-estrategia-definicion-y-ejemplo-en-java/" title="Patrón Estrategia: Definición y ejemplo en Java">Patrón Estrategia: Definición y ejemplo en Java</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/implementacion-de-singleton-en-c/" title="Implementación del patrón Singleton en C#">Implementación del patrón Singleton en C#</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=dZ4wn"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=dZ4wn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=ekzuN"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=ekzuN" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/458002028" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/11/patron-decorador-definicion-diagramas-e-implementacion/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/11/patron-decorador-definicion-diagramas-e-implementacion/</feedburner:origLink></item>
		<item>
		<title>Python: Funciones que devuelven más de un valor</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/449014717/</link>
		<comments>http://nuevosprogramadores.com/2008/11/python-funciones-que-devuelven-mas-de-un-valor/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 01:41:19 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[Funciones]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=45</guid>
		<description><![CDATA[Muchas veces nos encontramos con situaciones en las que nos vendría muy bien poder devolver más de un valor en una función&#8230; generalmente podemos recurrir a arrays, colecciones, diccionarios, hastables, etc. Pero en Python podemos devolver múltiples valores en una misma función y lo mejor de todo es que esos valores de retorno pueden ser [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces nos encontramos con situaciones en las que nos vendría muy bien poder <strong>devolver más de un valor en una función</strong>&#8230; generalmente podemos recurrir a arrays, colecciones, diccionarios, hastables, etc. Pero en <strong>Python</strong> podemos <strong>devolver múltiples valores en una misma función</strong> y lo mejor de todo es que esos valores de retorno pueden ser de diferente tipo.</p>
<p>Dejo un par de ejemplos, escribo la función y luego la ejecuto para probar.</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> masUnoMasDos<span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span>:
     <span style="color: #ff7700;font-weight:bold;">return</span> x+<span style="color: #ff4500;">1</span>, x+<span style="color: #ff4500;">2</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&quot;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;masUnoMasDos()&quot;</span>
&nbsp;
a,b = masUnoMasDos<span style="color: black;">&#40;</span><span style="color: #ff4500;">7</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;x+1 = &quot;</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;x+2 = &quot;</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>b<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;---------&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> rojo<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
     <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">255</span>, 0, 0
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&quot;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;rojo()&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> rojo<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;---------&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> rojoHexa<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
     <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;ff&quot;</span>, <span style="color: #483d8b;">&quot;00&quot;</span>, <span style="color: #483d8b;">&quot;00&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&quot;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;rojoHexa()&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> rojoHexa<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p></code></p>
<p>Obtendremos la siguiente salida:</p>
<p><code>masUnoMasDos()<br />
x+1 = 8<br />
x+2 = 9<br />
---------</p>
<p>rojo()<br />
(255, 0, 0)<br />
---------</p>
<p>rojoHexa()<br />
('ff', '00', '00')<br />
</code></p>
<p>Para probar este código rápidamente, en caso de no tener <strong>Python</strong> instalado pueden utilizar <a href="http://codepad.org">http://codepad.org</a> que es una excelente herramienta online, la misma permite compilar y ejecutar código en varios lenguajes, incluyendo: <strong>C/C++</strong>, <strong>D</strong>, <strong>Haskel</strong>, <strong>PHP</strong>, <strong>Pearl</strong>, <strong>Python</strong> y <strong>Ruby</strong>, entre otros.<br />
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/08/nace-pyuy-grupo-de-usuarios-python-del-uruguay/" title="Nace PyUy - Grupo de Usuarios Python del Uruguay">Nace PyUy - Grupo de Usuarios Python del Uruguay</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/metodo-de-ordenacion-de-la-burbuja-bubble-sort-en-python/" title="Método de ordenación de la burbuja (bubble sort) en Python">Método de ordenación de la burbuja (bubble sort) en Python</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=qkN9n"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=qkN9n" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=QkhHN"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=QkhHN" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/449014717" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/11/python-funciones-que-devuelven-mas-de-un-valor/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/11/python-funciones-que-devuelven-mas-de-un-valor/</feedburner:origLink></item>
		<item>
		<title>ObsoleteAttribute - Para refactorear y mantener compatibilidad</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/441593930/</link>
		<comments>http://nuevosprogramadores.com/2008/11/obsoleteattribute-para-refactorear-y-mantener-compatibilidad/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 01:48:39 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[Mini Tips]]></category>

		<category><![CDATA[VB.Net]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=44</guid>
		<description><![CDATA[Algo muy común a la hora de refactorear es que se elimine algún método o alguna clase, pero si estamos trabajando en un grupo de soluciones con referencias entre ellas, eliminar un método puede causar bastantes problemas&#8230; y molestias en quienes estén trabajando con nuestro código.
.Net ofrece una ayuda, es un atributo que se puede [...]]]></description>
			<content:encoded><![CDATA[<p>Algo muy común a la hora de refactorear es que se elimine algún método o alguna clase, pero si estamos trabajando en un grupo de soluciones con referencias entre ellas, eliminar un método puede causar bastantes problemas&#8230; y molestias en quienes estén trabajando con nuestro código.</p>
<p>.Net ofrece una ayuda, es un atributo que se puede aplicar a clases, métodos, propiedades, variables y constantes y que sirve de alternativa para no romper compatibilidad, el attributo Obsolete() nos permite marcar como obsoleta una porción del código sin eliminarlo y nos brinda la posibilidad de mostrar un mensaje y generar una advertencia o bien un error a la hora de compilar.</p>
<p>Veamos un pequeño ejemplo en VB.Net y luego en C#</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="vbnet vbnet" style="font-family:monospace;"><span style="color: #FF8000;">Public</span> <span style="color: #0600FF;">Class</span> MiClase
&nbsp;
	&lt;Obsolete<span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;Este constructor fue reemplazado por New(String, Boolean)&quot;</span>, <span style="color: #0600FF;">True</span><span style="color: #000000;">&#41;</span>&gt; _
	<span style="color: #FF8000;">Public</span> <span style="color: #0600FF;">Sub</span> <span style="color: #FF8000;">New</span><span style="color: #000000;">&#40;</span>Arg1 <span style="color: #FF8000;">as</span> <span style="color: #FF8000;">String</span>, Arg2 <span style="color: #FF8000;">as</span> <span style="color: #FF8000;">String</span><span style="color: #000000;">&#41;</span>
		<span style="color: #008080; font-style: italic;">' Código del ctor obsoleto</span>
		<span style="color: #008080; font-style: italic;">' Ahora genera un error al compilar</span>
	<span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span>
&nbsp;
	<span style="color: #FF8000;">Public</span> <span style="color: #0600FF;">Sub</span> <span style="color: #FF8000;">New</span><span style="color: #000000;">&#40;</span>Arg1 <span style="color: #FF8000;">as</span> <span style="color: #FF8000;">String</span>, Arg2 <span style="color: #FF8000;">as</span> <span style="color: #FF0000;">Boolean</span><span style="color: #000000;">&#41;</span>
		<span style="color: #008080; font-style: italic;">'Código del nuevo ctor</span>
	<span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span>
&nbsp;
	&lt;Obsolete<span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;Esta propiedad está obsolete. Por favor eliminar toda referencia a la misma antes del release 2.0&quot;</span><span style="color: #000000;">&#41;</span>&gt; _
	<span style="color: #FF8000;">Public</span> <span style="color: #0600FF;">ReadOnly</span> <span style="color: #FF8000;">Property</span> IsObsolete<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #FF8000;">As</span> <span style="color: #FF0000;">Boolean</span>
		<span style="color: #FF8000;">Get</span>
			<span style="color: #FF8000;">Return</span> <span style="color: #0600FF;">True</span>
		<span style="color: #0600FF;">End</span> <span style="color: #FF8000;">Get</span>
	<span style="color: #0600FF;">End</span> <span style="color: #FF8000;">Property</span>
&nbsp;
<span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Class</span></pre></div></div>

<p></code></p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> Ejemplo
<span style="color: #000000;">&#123;</span>
    <span style="color: #000000;">&#91;</span>Obsolete<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">string</span> MI_CONSTANTE <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;NuevosProgramadores.com&quot;</span>;
&nbsp;
    <span style="color: #000000;">&#91;</span>Obsolete<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;No usar esta variable. Utilizar la variable FechaHoraActual en su lugar.&quot;</span>, <span style="color: #0600FF;">false</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
    DateTime Fecha <span style="color: #008000;">=</span> DateTime.<span style="color: #0000FF;">Now</span>;
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p></code></p>
<p>A simple vista se puede ver que la única diferencia entre su uso en VB.net y C# es que los atributos se aplican de manera diferente.</p>
<p>Por último veamos las 3 firmas de este atributo:</p>
<ul>
<li>Obsolete() - Genera una advertencia (warning) sin descripción alguna.</li>
<li>Obsolete(String) - Genera una advertencia con con la descripción indicada en el parámetro.</li>
<li>Obsolete(String, Boolean) - Utiliza el parámetro String como descripción y el Boolean indica si genera una advertencia (false) o un error (true).</li>
</ul>
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/10/patron-observador-ejemplo-en-csharp/" title="Patrón Observador - Ejemplo en C#">Patrón Observador - Ejemplo en C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/corte-de-control-algoritmo-y-ejemplo-en-c/" title="Corte de Control - Algoritmo y Ejemplo en C#">Corte de Control - Algoritmo y Ejemplo en C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/como-filtrar-las-filas-de-un-datatable-usando-un-rowfilter-vbnet/" title="Como filtrar las filas de un DataTable usando un RowFilter (VB.Net)">Como filtrar las filas de un DataTable usando un RowFilter (VB.Net)</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/metodos-de-extension-en-vbnet-extension-methods/" title="Métodos de extensión en VB.NET (Extension Methods)">Métodos de extensión en VB.NET (Extension Methods)</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/como-filtrar-una-lista-de-objetos-con-linq-y-ver-las-propiedades-por-reflection-vbnet/" title="Como filtrar una lista de objetos con LINQ y ver las propiedades por Reflection (VB.Net)">Como filtrar una lista de objetos con LINQ y ver las propiedades por Reflection (VB.Net)</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=ZFten"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=ZFten" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=IrCZN"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=IrCZN" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/441593930" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/11/obsoleteattribute-para-refactorear-y-mantener-compatibilidad/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/11/obsoleteattribute-para-refactorear-y-mantener-compatibilidad/</feedburner:origLink></item>
		<item>
		<title>Patrón Observador - Ejemplo en C#</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/436528238/</link>
		<comments>http://nuevosprogramadores.com/2008/10/patron-observador-ejemplo-en-csharp/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 04:10:47 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[Observador]]></category>

		<category><![CDATA[Patrón]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=42</guid>
		<description><![CDATA[El patrón observador define una relación de uno a muchos, en la que un objeto único, al que llamaremos observable deberá notificar cada vez que cambie de estado a muchos objetos, que llamaremos observadores.
El funcionamiento de este patrón de diseño puede compararse con el de una suscripción a una revista, ya que los observadores se [...]]]></description>
			<content:encoded><![CDATA[<p>El <strong>patrón observador</strong> define una relación de uno a muchos, en la que un objeto único, al que llamaremos observable deberá notificar cada vez que cambie de estado a muchos objetos, que llamaremos observadores.</p>
<p>El funcionamiento de este <strong>patrón de diseño</strong> puede compararse con el de una suscripción a una revista, ya que los observadores se suscriben y cada vez que la revista, (observable), se actualiza, la misma se envía a los observadores suscriptos.</p>
<p>La <strong>definición del patrón observador</strong> es la siguiente: define una dependencia entre objetos de uno a muchos, de manera tal que cuando un objeto cambia su estado, todos sus dependientes son notificados y actualizados automaticamente.</p>
<p>Para demostrar el uso de este patrón, se ha creado un ejemplo en el que tenemos un form principal que tiene 2 botones, uno para abrir múltiples instancias de observadores, que en nuestro caso serán forms que mostrarán un listado desde una fuente de datos, un archivo XML más concretamente; y otro botón para abrir nuestro simulador de edición, que no es más que un form que nos permitirá editar la fuente de datos y nos permitirá observar que cada vez que alteramos los datos nuestros observadores serán notificados y actualizados automáticamente.</p>
<p>Es importante destacar que para una correcta implementación del patrón se utilizan interfaces que definen el <strong>rol de una clase</strong> como <strong>Observable</strong> u <strong>Observador</strong>, con lo cual nos olvidamos, por ejemplo de cómo se comporta cada clase cuando es notificada de un cambio de estado.</p>
<p>Veamos el diagrama de clases y a continuación el enlace para descargar nuestra mini-aplicación que implementa el <strong>patrón observador en C#</strong>.</p><div class="ngg-galleryoverview" id="ngg-gallery-2"><div id="ngg-image-4" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb4" href="http://nuevosprogramadores.com/wp-content/gallery/diagrama-observer-csharp/diagrama-patron-observer-csharp.png" title="" class="thickbox" rel="diagrama-observer-csharp" ><img title="diagrama-patron-observer-csharp.png" alt="diagrama-patron-observer-csharp.png" src="http://nuevosprogramadores.com/wp-content/gallery/diagrama-observer-csharp/thumbs/thumbs_diagrama-patron-observer-csharp.png" style="width:100px; height:100px;" /></a>
</div>
</div>
</div>
<div class='ngg-clear'></div>
<p><a href="http://nuevosprogramadores.com/wp-content/plugins/download-monitor/download.php?id=1" title="Version 1.0 downloaded 110 times" >Ejemplo de Patrón Observador en C# (155.92 KB)</a><br />
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/11/obsoleteattribute-para-refactorear-y-mantener-compatibilidad/" title="ObsoleteAttribute - Para refactorear y mantener compatibilidad">ObsoleteAttribute - Para refactorear y mantener compatibilidad</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/patron-estrategia-definicion-y-ejemplo-en-java/" title="Patrón Estrategia: Definición y ejemplo en Java">Patrón Estrategia: Definición y ejemplo en Java</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/corte-de-control-algoritmo-y-ejemplo-en-c/" title="Corte de Control - Algoritmo y Ejemplo en C#">Corte de Control - Algoritmo y Ejemplo en C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/obtener-informacion-de-la-pantalla-con-c/" title="Obtener información de la pantalla con C#">Obtener información de la pantalla con C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/manejo-de-hilos-en-c-shar-parte-1/" title="Manejo de hilos en C# (parte 1) + delegates + invoke">Manejo de hilos en C# (parte 1) + delegates + invoke</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=tI4Am"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=tI4Am" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=1mlgM"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=1mlgM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/436528238" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/10/patron-observador-ejemplo-en-csharp/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/10/patron-observador-ejemplo-en-csharp/</feedburner:origLink></item>
		<item>
		<title>Mover todos los archivos encontrados a un directorio en la consola de Linux</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/420012636/</link>
		<comments>http://nuevosprogramadores.com/2008/10/mover-todos-los-archivos-encontrados-a-un-directorio-en-la-consola-de-linux/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 00:18:17 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[Bash]]></category>

		<category><![CDATA[Mini Tips]]></category>

		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=41</guid>
		<description><![CDATA[En este ejemplo se aprenden 2 cosas, una es a <strong>encontrar ficheros en un directorio</strong> y sus subdirectorios, y la otra, seguramente más útil, a <strong>utilizar la salida de un comando</strong> como entrada de otro.]]></description>
			<content:encoded><![CDATA[<p>Hoy alguien me preguntaba como mover todos los archivos encontrados en uno o más directorios usando el comando <a title="Página MAN del comando find" href="http://www.ss64.com/bash/find.html" target="_blank">find</a> y tenía una idea de como hacerlo, pero no tenía una máquina con <strong>Linux</strong> para probarla, en realidad es algo muy simple, en este caso moveremos todas las fotos encontradas en <em>/home/nuevosprogramadores</em> y todos sus subdirectorios a una nueva ubicación en <em>/home/nuevosprogramadores/fotos</em> y lo haremos con una sola línea.<br />
<code></p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>nuevosprogramadores <span style="color: #660033;">-iname</span> <span style="color: #000000; font-weight: bold;">*</span>.jpg <span style="color: #000000; font-weight: bold;">`</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>nuevosprogramadores<span style="color: #000000; font-weight: bold;">/</span>fotos</pre></div></div>

<p></code></p>
<p>Ahora vamos a identificar las partes de ésta línea, primero el comando mv que se encarga de mover ficheros:<br />
<code></p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mv</span> origen destino</pre></div></div>

<p></code><br />
ahora el comando find, tal cual lo usamos:<br />
<code></p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">find</span> directorio-origen <span style="color: #660033;">-iname</span> nombre-archivo</pre></div></div>

<p></code><br />
Lo que hicimos fue concatenar ambos comandos, utilizando la salida del comando find como entrada del comando mv, para lo cual encerramos al comando find con las comillas simples: &#8220; resumiendo, nuestro comando sería:</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> directorio-origen <span style="color: #660033;">-iname</span> nombre-archivo<span style="color: #000000; font-weight: bold;">`</span> destino</pre></div></div>

<p></code></p>
<p>Una aclaración más, el parámetro <em>iname</em> se utiliza para buscar por nombre ignorando mayúsculas y minúsculas.<br />
<h3>Posts aleatorios</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/07/obtener-informacion-de-la-pantalla-con-c/" title="Obtener información de la pantalla con C#">Obtener información de la pantalla con C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/metodo-de-ordenacion-de-la-burbuja-bubble-sort-en-python/" title="Método de ordenación de la burbuja (bubble sort) en Python">Método de ordenación de la burbuja (bubble sort) en Python</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/plugin-para-wordpress-category2post-v01/" title="Plugin para Wordpress - Category2Post - v0.1">Plugin para Wordpress - Category2Post - v0.1</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/como-obtener-el-directorio-de-ejecucion-con-vbnet/" title="Como obtener el directorio de ejecución con VB.Net">Como obtener el directorio de ejecución con VB.Net</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/manejo-de-hilos-en-c-shar-parte-1/" title="Manejo de hilos en C# (parte 1) + delegates + invoke">Manejo de hilos en C# (parte 1) + delegates + invoke</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=Zx2Ym"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=Zx2Ym" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=HAAwM"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=HAAwM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/420012636" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/10/mover-todos-los-archivos-encontrados-a-un-directorio-en-la-consola-de-linux/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/10/mover-todos-los-archivos-encontrados-a-un-directorio-en-la-consola-de-linux/</feedburner:origLink></item>
		<item>
		<title>Head First Design Patterns - Aprendiendo Patrones de Diseño</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/409920587/</link>
		<comments>http://nuevosprogramadores.com/2008/10/head-first-design-patterns-aprendiendo-patrones-de-diseno/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 04:30:47 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[Libros]]></category>

		<category><![CDATA[Patrones]]></category>

		<category><![CDATA[Head First]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=39</guid>
		<description><![CDATA[Me acaba de llegar el libro Head First Design Patterns, el segundo de la serie Head First de O&#8217;Reilly que tengo en mi poder, (el primero es Head First C#).
Vi este libro hace un tiempo y lo empecé a leer, después de leer el patrón estrategia, decidí que tenía que comprar este libro, por lo [...]]]></description>
			<content:encoded><![CDATA[<p>Me acaba de llegar el libro <a title="O'Reilly Catalog" href="http://oreilly.com/catalog/9780596007126/" target="_blank">Head First Design Patterns</a>, el segundo de la serie <strong>Head First</strong> de O&#8217;Reilly que tengo en mi poder, (el primero es <strong>Head First C#</strong>).</p>
<p>Vi este libro hace un tiempo y lo empecé a leer, después de leer el <a title="Patrón Estrategia - Definición y ejemplo en Java" href="http://nuevosprogramadores.com/2008/09/patron-estrategia-definicion-y-ejemplo-en-java/" target="_self">patrón estrategia</a>, decidí que tenía que comprar este libro, por lo que de ahora en adelante postearé los conocimientos que vaya obteniendo acerca de <a title="Patrones de Diseño en NuevosProgramadores.com" href="http://nuevosprogramadores.com/category/patrones/">Patrones de Diseño</a>.</p>
<p>El libro trae ejemplos en <a title="Post de NuevosProgramadores.com relacionados con Java" href="http://nuevosprogramadores.com/category/lenguajes/java/">Java</a>, pero yo voy a intentar crear mis propios ejemplos y en más de un lenguaje!</p>
<p><img class="alignnone size-full wp-image-40" title="Head First Design Patterns - O\'Reilly" src="http://nuevosprogramadores.com/wp-content/uploads/2008/10/head-first-design-patterns.jpg" alt="Head First Design Patterns - O\'Reilly" width="140" height="162" /><br />
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/11/patron-decorador-definicion-diagramas-e-implementacion/" title="Patrón Decorador - Definición, diagramas e implementación">Patrón Decorador - Definición, diagramas e implementación</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/implementacion-de-singleton-en-c/" title="Implementación del patrón Singleton en C#">Implementación del patrón Singleton en C#</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=kRLtm"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=kRLtm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=j3CiM"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=j3CiM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/409920587" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/10/head-first-design-patterns-aprendiendo-patrones-de-diseno/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/10/head-first-design-patterns-aprendiendo-patrones-de-diseno/</feedburner:origLink></item>
		<item>
		<title>Convertir un entero base 10 a binario en Java (Recursivo)</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/402499031/</link>
		<comments>http://nuevosprogramadores.com/2008/09/convertir-un-entero-base-10-a-binario-en-java-recursivo/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 05:41:35 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[Algoritmos]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Binario]]></category>

		<category><![CDATA[Recursividad]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=37</guid>
		<description><![CDATA[En este ejemplo tenemos una aplicación simple que pide un número y lo convierte a binario utilizando un algoritmo recursivo con una variable externa. 
Lo primero que tenemos que saber es cómo convertir un número de base 10 a binario, (base 2). Para ello, se divide el número deseado entre 2 y cada resultado de [...]]]></description>
			<content:encoded><![CDATA[<p>En este ejemplo tenemos una aplicación simple que pide un número y lo convierte a binario utilizando un algoritmo recursivo con una variable externa. </p>
<p>Lo primero que tenemos que saber es cómo convertir un número de base 10 a binario, (base 2). Para ello, se divide el número deseado entre 2 y cada resultado de la división tantas veces como sea necesario hasta obtener el número indivisible, el 1. Luego se toman el último resultado, 1 y todos los restos de las divisiones, viendo la imagen va a quedar mucho más claro el concepto.<br />
<img src="http://nuevosprogramadores.com/wp-content/uploads/2008/09/convertir-a-binario.png" alt="Divisiones necesarias para convertir un número a binario" title="Convertir un número a binario" width="122" height="216" class="aligncenter size-full wp-image-38" style="float: none; margin: 10px auto;" /></p>
<p>A continuación veremos el código en Java necesario para pedir el número en base 10 y devolverlo en binario, por supuesto que se pueden agregar validaciones, de hecho hay que agregar validaciones para asegurarnos que el usuario ingrese un número, pero ese no es el objetivo de este post.</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="java java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.BufferedReader</span>;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.InputStreamReader</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> binario
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">InputStreamReader</span> isr <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">InputStreamReader</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">in</span><span style="color: #009900;">&#41;</span>;
		<span style="color: #003399;">BufferedReader</span> rdr <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedReader</span><span style="color: #009900;">&#40;</span>isr<span style="color: #009900;">&#41;</span>;
		<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Ingrese un número entero: &quot;</span><span style="color: #009900;">&#41;</span>;
		<span style="color: #003399;">String</span> buffer <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;0&quot;</span>;
		<span style="color: #000000; font-weight: bold;">try</span>
		<span style="color: #009900;">&#123;</span>
			buffer <span style="color: #339933;">=</span> rdr.<span style="color: #006633;">readLine</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">io</span>.<span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// Es obligatorio manejar la IOException, si se omite no compila</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span>;
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">int</span> dec <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span>;
		<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;El valor binario correspondiente es: &quot;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>dec <span style="color: #339933;">==</span> 0<span style="color: #009900;">&#41;</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>dec<span style="color: #009900;">&#41;</span>; <span style="color: #666666; font-style: italic;">// Cero en cualquier base es cero</span>
		<span style="color: #000000; font-weight: bold;">else</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>obtenerBinario<span style="color: #009900;">&#40;</span>dec<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>; <span style="color: #666666; font-style: italic;">// llamamos a la func. recursiva</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> aux <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span>; <span style="color: #666666; font-style: italic;">// variable auxiliar utilizada para almacenar el resto de cada división</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> obtenerBinario<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> decimal<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>decimal <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// Límite de la recursividad</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>decimal<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> aux; <span style="color: #666666; font-style: italic;">// Devolvemos 1 y los restos anteriores</span>
		<span style="color: #000000; font-weight: bold;">else</span>
		<span style="color: #009900;">&#123;</span>
			aux <span style="color: #339933;">=</span> aux <span style="color: #339933;">+</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>decimal <span style="color: #339933;">%</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>; <span style="color: #666666; font-style: italic;">//guardamos el resto en la variable auxiliar</span>
			<span style="color: #000000; font-weight: bold;">return</span> obtenerBinario<span style="color: #009900;">&#40;</span>decimal <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>; <span style="color: #666666; font-style: italic;">// hacemos el llamado recursivo con el resultado de la división</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></code></p>
<p>Además del algoritmo para convertir los números, vale la pena ver la forma en que se lee la entrada estándar, utilizando un BufferedReader, pero eso lo veremos con mayor profundidad en otro post.<br />
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/08/factorial-en-c-funcion-recursiva-vs-funcion-iterativa/" title="Factorial en C++ - Función recursiva vs. función iterativa">Factorial en C++ - Función recursiva vs. función iterativa</a></li>
<li><a href="http://nuevosprogramadores.com/2008/11/patron-decorador-definicion-diagramas-e-implementacion/" title="Patrón Decorador - Definición, diagramas e implementación">Patrón Decorador - Definición, diagramas e implementación</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/patron-estrategia-definicion-y-ejemplo-en-java/" title="Patrón Estrategia: Definición y ejemplo en Java">Patrón Estrategia: Definición y ejemplo en Java</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/corte-de-control-algoritmo-y-ejemplo-en-c/" title="Corte de Control - Algoritmo y Ejemplo en C#">Corte de Control - Algoritmo y Ejemplo en C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/metodos-de-extension-en-vbnet-extension-methods/" title="Métodos de extensión en VB.NET (Extension Methods)">Métodos de extensión en VB.NET (Extension Methods)</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=jAuBl"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=jAuBl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=tSXqL"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=tSXqL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/402499031" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/09/convertir-un-entero-base-10-a-binario-en-java-recursivo/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/09/convertir-un-entero-base-10-a-binario-en-java-recursivo/</feedburner:origLink></item>
		<item>
		<title>Patrón Estrategia: Definición y ejemplo en Java</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/395942176/</link>
		<comments>http://nuevosprogramadores.com/2008/09/patron-estrategia-definicion-y-ejemplo-en-java/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 06:34:26 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[Estrategia]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Patrones]]></category>

		<category><![CDATA[Patrón]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=33</guid>
		<description><![CDATA[El patrón Estrategia (Strategy) define una familia de algoritmos, los encapsula y hace intercambiables. Permitiendo a cada algoritmo variar independientemente de los clientes que lo utilizan.
Se utiliza para encapsular aquellas partes del código que varían, haciendo que éstas variaciones no afecten al resto del código, evitando así consecuencias inesperadas y brindando a nuestro código una [...]]]></description>
			<content:encoded><![CDATA[<p>El <strong>patrón Estrategia (Strategy)</strong> define una familia de algoritmos, los encapsula y hace intercambiables. Permitiendo a cada algoritmo variar independientemente de los clientes que lo utilizan.</p>
<p>Se utiliza para encapsular aquellas partes del código que varían, haciendo que éstas variaciones no afecten al resto del código, evitando así consecuencias inesperadas y brindando a nuestro código una mayor flexibilidad.</p>
<p>Para ilustrarnos con un ejemplo, supongamos que tenemos un grupo de terminales las cuales tienen su propio método de entrada y salida de datos, por ej. teclado, monitor, mouse, etc.<br />
Supongamos que en éste momento sólo tenemos 3 métodos de entrada y 2 de salida, pero sabemos que en el futuro se van a agregar más, por ello recurriremos al <strong>Patrón Estrategia</strong> para encapsular los métodos de entrada y salida, permitiéndonos en el futuro implementar las nuevas terminales con gran facilidad y sin afectar a las ya existentes.</p>
<p>Para encapsular los métodos de entrada recurriremos al uso de <strong>interfaces</strong>, crearemos una interface Entrada y una Salida, las cuales serán implementadas por cada método de entrada/salida de datos. A su vez, necesitamos tener varias terminales y poder agregar los nuevos tipos, para ello utilizaremos herencia, todas nuestras terminales heredarán de la superclase Terminal.</p>
<p>La clase Terminal tendrá una variable de instancia del tipo Entrada (interface) y una del tipo Salida (interface).<br />
Además crearemos una clase por cáda método de entrada y salida las cuales implementarán la interface correspondiente. También podremos definir una clase, por ejemplo Monitor_TouchScreen que implemente ambas interfaces, por lo que podremos utilizarlo como método de entrada y salida.</p>
<p>En los diagramas vemos las interfaces Entrada y Salida con las clases que la implementan, y la superclase Terminal con sus subclases.</p>
<p>Ahora podemos ir un paso más allá y  crear una Terminal Mutable, <em>(qué nombre, no?)</em>, por ese nombre me refiero a una Terminal que pueda cambiar sus método de entrada y/o salida en tiempo de ejecución, lo cual suena mucho más complejo de lo que realmente es, ya que la única diferencia con las terminales que hemos creado hasta el momento es que en esta tendremos que definirnos un setter para el método de entrada y uno para el método de salida, mientras que el resto no varía.</p><div class="ngg-galleryoverview" id="ngg-gallery-1"><div id="ngg-image-1" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb1" href="http://nuevosprogramadores.com/wp-content/gallery/diagramas-strategy-java/patron-estrategia-diag1.png" title="" class="thickbox" rel="diagramas-strategy-java" ><img title="patron-estrategia-diag1.png" alt="patron-estrategia-diag1.png" src="http://nuevosprogramadores.com/wp-content/gallery/diagramas-strategy-java/thumbs/thumbs_patron-estrategia-diag1.png" style="width:100px; height:100px;" /></a>
</div>
</div>
<div id="ngg-image-2" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb2" href="http://nuevosprogramadores.com/wp-content/gallery/diagramas-strategy-java/patron-estrategia-diag2.png" title="" class="thickbox" rel="diagramas-strategy-java" ><img title="patron-estrategia-diag2.png" alt="patron-estrategia-diag2.png" src="http://nuevosprogramadores.com/wp-content/gallery/diagramas-strategy-java/thumbs/thumbs_patron-estrategia-diag2.png" style="width:100px; height:100px;" /></a>
</div>
</div>
<div id="ngg-image-3" class="ngg-gallery-thumbnail-box ">
	<div class="ngg-gallery-thumbnail"  >
	<a id="thumb3" href="http://nuevosprogramadores.com/wp-content/gallery/diagramas-strategy-java/patron-estrategia-diag3.png" title="" class="thickbox" rel="diagramas-strategy-java" ><img title="patron-estrategia-diag3.png" alt="patron-estrategia-diag3.png" src="http://nuevosprogramadores.com/wp-content/gallery/diagramas-strategy-java/thumbs/thumbs_patron-estrategia-diag3.png" style="width:100px; height:100px;" /></a>
</div>
</div>
</div>
<div class='ngg-clear'></div>
<p>Luego de descargar esta implementación en <strong>Java</strong><em> hay que ir al directorio bin/ y ejecutar <code>java TestTerminales</code></em></p>
<p><a href="http://nuevosprogramadores.com/wp-content/plugins/download-monitor/download.php?id=2" title="Version 1.0 downloaded 70 times" >Ejemplo de Patrón Estrategia en Java (7.72 KB)</a><br />
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/11/patron-decorador-definicion-diagramas-e-implementacion/" title="Patrón Decorador - Definición, diagramas e implementación">Patrón Decorador - Definición, diagramas e implementación</a></li>
<li><a href="http://nuevosprogramadores.com/2008/10/patron-observador-ejemplo-en-csharp/" title="Patrón Observador - Ejemplo en C#">Patrón Observador - Ejemplo en C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/convertir-un-entero-base-10-a-binario-en-java-recursivo/" title="Convertir un entero base 10 a binario en Java (Recursivo)">Convertir un entero base 10 a binario en Java (Recursivo)</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=MbSxl"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=MbSxl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=UpEnL"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=UpEnL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/395942176" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/09/patron-estrategia-definicion-y-ejemplo-en-java/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/09/patron-estrategia-definicion-y-ejemplo-en-java/</feedburner:origLink></item>
		<item>
		<title>Corte de Control - Algoritmo y Ejemplo en C#</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/394733391/</link>
		<comments>http://nuevosprogramadores.com/2008/09/corte-de-control-algoritmo-y-ejemplo-en-c/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 01:39:06 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[Algoritmos]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Corte de Control]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=32</guid>
		<description><![CDATA[Un Corte de Control es un algoritmo muy usado a la hora de listar datos. Actualmente es más factible obtener los datos con una consulta SQL, pero el Corte de Control aún es una técnica válida.
Un Corte de Control se compone de 3 partes básicas: principio, cuerpo y fin, en pseudo código sería así:


while(i &#60; [...]]]></description>
			<content:encoded><![CDATA[<p>Un <strong>Corte de Control</strong> es un <strong>algoritmo</strong> muy usado a la hora de listar datos. Actualmente es más factible obtener los datos con una consulta SQL, pero el <strong>Corte de Control</strong> aún es una técnica válida.</p>
<p>Un <strong>Corte de Control</strong> se compone de 3 partes básicas: principio, cuerpo y fin, en <strong>pseudo código</strong> sería así:</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="pseudo" style="font-family:monospace;">while(i &lt; cantidadElementos)
{
     principio; // inicializar variables y condiciones, obtener datos, etc.
&nbsp;
     cuerpo; // recorrer los datos respetando la condición.
&nbsp;
     fin; // mostrar los datos.
}</pre></div></div>

<p></code></p>
<p>En nuestro ejemplo tendremos datos de alumnos y cursos, la estructura es como si fuese una base de datos, entonces nuestras tablas tendrían la siguiente estructura:</p>
<table style="border: 1px solid #ccc; margin-right:20px; width: 350px;">
<tr>
<td colspan="2" style="text-align:center;">Alumnos</td>
<td colspan="2" style="text-align:center;">Cursos</td>
</tr>
<tr>
<td>ID</td>
<td>int</td>
<td>ID</td>
<td>int</td>
</tr>
<tr>
<td>IDCurso</td>
<td>int</td>
<td>Descripción</td>
<td>string</td>
</tr>
<tr>
<td>Nombre</td>
<td>string</td>
<td></td>
<td></td>
</tr>
</table>
<p>Y nosotros necesitamos hacer un <strong>Corte de Control</strong> por ID de Cursos <em>(criterio del corte)</em> para listar los alumnos agrupados por curso, entonces el <strong>algoritmo</strong> se vería de la siguiente manera:</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> corteDeControl<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// -- principio del corte</span>
            <span style="color: #FF0000;">int</span> i<span style="color: #008000;">=</span> 0; <span style="color: #008080; font-style: italic;">// variable utilizada para iterar en la lista de cursos</span>
            <span style="color: #FF0000;">int</span> IDCursoAnterior <span style="color: #008000;">=</span> 0; <span style="color: #008080; font-style: italic;">// variable con la condición del corte</span>
            Dictionary<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">int</span>, List<span style="color: #008000;">&lt;</span>alumno<span style="color: #008000;">&gt;&gt;</span> resultado <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">int</span>, List<span style="color: #008000;">&lt;</span>alumno<span style="color: #008000;">&gt;&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>; <span style="color: #008080; font-style: italic;">// resultado del corte</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\n</span>Listado de alumnos por curso<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #000000;">&#41;</span>; <span style="color: #008080; font-style: italic;">// imprimir encabezado</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// -- cuerpo del corte</span>
            <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>i <span style="color: #008000;">&lt;</span> DS.<span style="color: #0000FF;">Cursos</span>.<span style="color: #0000FF;">Count</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                IDCursoAnterior <span style="color: #008000;">=</span> DS.<span style="color: #0000FF;">Cursos</span><span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">ID</span>; <span style="color: #008080; font-style: italic;">// condición del corte</span>
&nbsp;
                <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>i <span style="color: #008000;">&lt;</span> DS.<span style="color: #0000FF;">Cursos</span>.<span style="color: #0000FF;">Count</span> <span style="color: #008000;">&amp;&amp;</span> DS.<span style="color: #0000FF;">Cursos</span><span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">ID</span> <span style="color: #008000;">==</span> IDCursoAnterior<span style="color: #000000;">&#41;</span> <span style="color: #008080; font-style: italic;">// mientras se cumpla la condición del corte</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>alumno a <span style="color: #0600FF;">in</span> DS.<span style="color: #0000FF;">Alumnos</span><span style="color: #000000;">&#41;</span> <span style="color: #008080; font-style: italic;">// buscar los alumnos que pertenezcan a ese curso</span>
                    <span style="color: #000000;">&#123;</span>
                        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>a.<span style="color: #0000FF;">IDCurso</span> <span style="color: #008000;">==</span> IDCursoAnterior<span style="color: #000000;">&#41;</span>
                        <span style="color: #000000;">&#123;</span>
                            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>resultado.<span style="color: #0000FF;">ContainsKey</span><span style="color: #000000;">&#40;</span>IDCursoAnterior<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
                            <span style="color: #000000;">&#123;</span>
                                resultado<span style="color: #000000;">&#91;</span>IDCursoAnterior<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>a<span style="color: #000000;">&#41;</span>;
                            <span style="color: #000000;">&#125;</span>
                            <span style="color: #0600FF;">else</span>
                            <span style="color: #000000;">&#123;</span>
                                List<span style="color: #008000;">&lt;</span>alumno<span style="color: #008000;">&gt;</span> lista <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>alumno<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
                                lista.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>a<span style="color: #000000;">&#41;</span>;
                                resultado.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>IDCursoAnterior, lista<span style="color: #000000;">&#41;</span>;
                            <span style="color: #000000;">&#125;</span>
                        <span style="color: #000000;">&#125;</span>
                    <span style="color: #000000;">&#125;</span>
                i++; <span style="color: #008080; font-style: italic;">// siguiente iteración</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">//fin del corte</span>
            imprimir<span style="color: #000000;">&#40;</span>resultado<span style="color: #000000;">&#41;</span>; <span style="color: #008080; font-style: italic;">// mostrar el listado</span>
        <span style="color: #000000;">&#125;</span></pre></div></div>

<p></code></p>
<p>Resumiendo, en <strong>pseudo código</strong>, el cuerpo del <strong>corte de control</strong> se vería más o menos así:</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="pseudo" style="font-family:monospace;">while(i &lt; cantidadElementos)
{
     IDAnterior = items[i]; // condición del corte
     while(i &lt; cantidadElementos &amp;&amp; IDActual = IDAnterior)
     {
          // proceso datos
     }
     i++;
}</pre></div></div>

<p></code></p>
<p>Puedes descargar una <a href="http://nuevosprogramadores.com/wp-content/plugins/download-monitor/download.php?id=3" title="Version 1.0 downloaded 37 times" >solución de Visual Studio 2005 con el ejemplo (25.93 KB)</a>.<br />
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/11/obsoleteattribute-para-refactorear-y-mantener-compatibilidad/" title="ObsoleteAttribute - Para refactorear y mantener compatibilidad">ObsoleteAttribute - Para refactorear y mantener compatibilidad</a></li>
<li><a href="http://nuevosprogramadores.com/2008/10/patron-observador-ejemplo-en-csharp/" title="Patrón Observador - Ejemplo en C#">Patrón Observador - Ejemplo en C#</a></li>
<li><a href="http://nuevosprogramadores.com/2008/09/convertir-un-entero-base-10-a-binario-en-java-recursivo/" title="Convertir un entero base 10 a binario en Java (Recursivo)">Convertir un entero base 10 a binario en Java (Recursivo)</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/factorial-en-c-funcion-recursiva-vs-funcion-iterativa/" title="Factorial en C++ - Función recursiva vs. función iterativa">Factorial en C++ - Función recursiva vs. función iterativa</a></li>
<li><a href="http://nuevosprogramadores.com/2008/08/metodo-de-ordenacion-de-la-burbuja-bubble-sort-en-python/" title="Método de ordenación de la burbuja (bubble sort) en Python">Método de ordenación de la burbuja (bubble sort) en Python</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=uiSdl"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=uiSdl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=RNPNL"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=RNPNL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/394733391" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/09/corte-de-control-algoritmo-y-ejemplo-en-c/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/09/corte-de-control-algoritmo-y-ejemplo-en-c/</feedburner:origLink></item>
		<item>
		<title>Aprendamos a usar Expresiones Regulares (parte 1)</title>
		<link>http://feeds.feedburner.com/~r/NuevosProgramadores/~3/388262591/</link>
		<comments>http://nuevosprogramadores.com/2008/09/aprendamos-a-usar-expresiones-regulares/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 03:16:52 +0000</pubDate>
		<dc:creator>Pablo</dc:creator>
		
		<category><![CDATA[RegEx]]></category>

		<guid isPermaLink="false">http://nuevosprogramadores.com/?p=31</guid>
		<description><![CDATA[Una expresión regular es un conjunto de caracteres y símbolos que definen una cadena según un patrón y no por sus elementos; por ejemplo, si queremos representar una cadena de caracteres que sólo puede estar formada por las letras a, b, c y los números del 1 al 3, utilizaremos el siguiente patrón: ^([a,b,c,1,2,3]+)$.
Ahora veamos [...]]]></description>
			<content:encoded><![CDATA[<p>Una <strong>expresión regular</strong> es un conjunto de caracteres y símbolos que definen una cadena según un patrón y no por sus elementos; por ejemplo, si queremos representar una cadena de caracteres que sólo puede estar formada por las letras a, b, c y los números del 1 al 3, utilizaremos el siguiente patrón: <code>^([a,b,c,1,2,3]+)$</code>.</p>
<p>Ahora veamos los <strong>signos básicos</strong> en las <strong>expresiones regulares</strong> y su significado:</p>
<table summary="signos de las regex" style="border: 1px solid #ccc;">
<tr>
<td>^</td>
<td>Inicio de la cadena</td</tr>
<tr>
<td>$</td>
<td>Fin de la cadena</td</tr>
<tr>
<td>[]</td>
<td>Cualquier caracter del conjunto, por ejemplo <code>[xyz]</code> representa el conjunto formado por las letras x,y,z y encontrará cualquiera de esos caracteres.</td</tr>
<tr>
<td>[^]</td>
<td>Cualquier caracter no incluido en el conjunto, por ejemplo<code>[^xyz]</code> representa cualquier caracter no incluido en el conjunto formado por las letras x,y,z</td</tr>
<tr>
<td>?</td>
<td>Cero o una ocurrencia de lo que precede al símbolo, por ejemplo para encontrar cero o una ocurrencia de www. utilizaremos el patrón <code>(www\.)?</code></td</tr>
<tr>
<td>+</td>
<td>El caracter que le precede debe aparecer al menos una vez, por ejemplo Google, Gooogle, Gooooooogle se representa con la siguiente expresión regular: <code>Goo+gle</code></td</tr>
<tr>
<td>*</td>
<td>El caracter que le precede debe aparecer cero, una o más veces, utilizando el ejemplo anterior, <code>Gooo*gle</code> representa Google, Goooogle, Goooooogle.</td</tr>
<tr>
<td>{x}</td>
<td>x ocurrencias del caracter que lo precede, por ejemplo www. podría ser representado con el patrón<code> w{3}\.</code></td</tr>
<tr>
<td>{x,z}</td>
<td>Entre x y z ocurrencias del caracter que lo precede, con el ejemplo de Google, si quisiéramos que hubieran mínimo 2 letras o y máximo 5, utilizaríamos el patrón <code>Go{2,5}gle</code></td>
</tr>
<tr>
<td>{x,}</td>
<td>x o más ocurrencias de lo que lo precede, con el ejemplo de Google, para tener 2 o más letras o usaríamos la expresión regular <code>Go{2,}gle</code></td>
</tr>
</table>
<p>Esos son los <strong>signos básicos de las expresiones regulares</strong>, también tenemos la barra invertida, que se utiliza como caracter de escape en ciertos casos, cuando se desea incuir un caracter especial como ., * o ?, y para definir tipos de caracteres en otros, vemos algunos casos.</p>
<table summary="barra inversa en las regex" style="border: 1px solid #ccc;">
<tr>
<td>\.</td>
<td>Un punto dentro del patrón, como definimos en uno de los ejemplos anteriores, la expresión <code>w{3}\.</code> define la cadena www.</td>
</tr>
<tr>
<td>\s</td>
<td>Representa un espacio en blanco</td>
</tr>
<tr>
<td>\d</td>
<td>Un dígito numérico</td>
</tr>
<tr>
<td>\w</td>
<td>Un caracter alfanumérico</td>
</tr>
<tr>
<td>\n</td>
<td>Un salto de línea</td>
</tr>
<tr>
<td>\r</td>
<td>Representa el caracter de retorno de carro</td>
</tr>
<tr>
<td>\t</td>
<td>Tabulador</td>
</tr>
<tr>
<td>\S</td>
<td>Cualquier caracter excepto un espacio en blanco</td>
</tr>
<tr>
<td>\D</td>
<td>Cualquier caracter excepto un dígito numérico</td>
</tr>
<tr>
<td>\W</td>
<td>Representa cualquier caracter no alfanumérico</td>
</tr>
</table>
<p>Esta es una introducción muy básica al uso de expresiones regulares, simplemente hemos visto algunos de los signos más básicos, en la próxima parte de este artículos veremos como crear algunas expresiones un poco más complejas. Mientras tanto pueden ir probando algunas expresiones en <a href="http://regexpal.com" title="RegExPal - RegEx Tester">regexpal.com</a>, un <strong>intérprete online de expresiones regulares</strong>.<br />
<h3>También te puede interesar:</h3>
<ul class="related_post">
<li><a href="http://nuevosprogramadores.com/2008/08/validar-formularios-web-con-javascript-y-expresiones-regulares/" title="Validar formularios web con JavaScript y Expresiones Regulares">Validar formularios web con JavaScript y Expresiones Regulares</a></li>
<li><a href="http://nuevosprogramadores.com/2008/07/como-reemplazar-texto-de-un-documento-usando-javascript-y-expresiones-regulares/" title="Como reemplazar texto de un documento usando JavaScript y expresiones regulares">Como reemplazar texto de un documento usando JavaScript y expresiones regulares</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=uIUEl"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=uIUEl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/NuevosProgramadores?a=JukDL"><img src="http://feeds.feedburner.com/~f/NuevosProgramadores?i=JukDL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/NuevosProgramadores/~4/388262591" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nuevosprogramadores.com/2008/09/aprendamos-a-usar-expresiones-regulares/feed/</wfw:commentRss>
		<feedburner:origLink>http://nuevosprogramadores.com/2008/09/aprendamos-a-usar-expresiones-regulares/</feedburner:origLink></item>
	</channel>
</rss>
