<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>amarzal</title>
	<atom:link href="http://amarzal.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://amarzal.wordpress.com</link>
	<description>de momento, cosas de c#</description>
	<lastBuildDate>Sun, 18 Apr 2010 17:29:49 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='amarzal.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>amarzal</title>
		<link>http://amarzal.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://amarzal.wordpress.com/osd.xml" title="amarzal" />
	<atom:link rel='hub' href='http://amarzal.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Moon (2009)</title>
		<link>http://amarzal.wordpress.com/2010/04/18/moon-2009/</link>
		<comments>http://amarzal.wordpress.com/2010/04/18/moon-2009/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 17:28:21 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Cine]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/?p=57</guid>
		<description><![CDATA[Por fin una peli reciente de ciencia ficción que me llega. Peli de bajo presupuesto, dirigida por Duncan Jones (sí, el hijo de David Robert Hayward-Jones ) y con Sam Rockwell como protagonista absoluto y casi único actor. El planteamiento de la historia: la humanidad se abastece de energía con fusión nuclear y obtiene el [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=57&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Por fin una peli reciente de ciencia ficción que me llega. Peli de bajo presupuesto, dirigida por Duncan Jones (sí, el hijo de David Robert Hayward-Jones <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) y con Sam Rockwell como protagonista absoluto y casi único actor.</p>
<p>El planteamiento de la historia: la humanidad se abastece de energía con fusión nuclear y obtiene el necesario Helio-3 de la superficie lunar (ya que en la Tierra es un elemento extraño). En la Luna hay una base operada por una sola persona, Sam, que está a punto de finalizar un contrato de tres años y así poder volver a casa. Su trabajo es resolver problemas puntuales con las &#8220;cosechadoras&#8221; de Helio-3 y cargar las bombonas del producto para enviarlas a la Tierra en una lanzadera. En los tres años sólo se ha comunicado en tiempo real con un robot no antropomórfico, GERTY, ya que las comunicaciones con la Tierra se hacen a través de un remoto satélite y la demora en la señal es tanta que se limita a enviar y recibir mensajes grabados en vídeo. Sam tiene una hija muy pequeña, que no llegó a ver nacer, y una esposa que le echa de menos.  La soledad hace estragos en Sam: empieza a tener visiones. Tras una salida con un vehículo lunar en la que experimenta alucinaciones, sufre un accidente y el vehículo queda inmovilizado. Cuando despierta en la base lunar se le informa de que puede haber sufrido lesiones cerebrales y debe seguir un proceso de rehabilitación. Sam cree haber oído a GERTY hablando en tiempo real con la Tierra sobre un accidente en la superficie lunar, así que decide saltarse la prohibición y salir para ver qué ha ocurrido. Y hasta aquí podemos contar sin empezar con los <em>spoilers</em>.</p>
<p>La ambientación, fantástica: deudora de pelis como &#8220;2001: Una odisea en el espacio&#8221;, &#8220;Naves silenciosas&#8221; o &#8220;Atmósfera Cero&#8221;. El tema de fondo, los problemas típicos de algunos cuentos de Stanislaw Lem o, especialmente, de Philip K. Dick: el problema de la identidad. ¿Qué es ser uno mismo? ¿Hasta qué punto podemos traicionarnos a nosotros mismos? Cuando llevaba un cuarto de peli pensaba que el argumento tiraría por Solaris (buenas pelis, tanto en la versión de Tarkovsky (1972) como en la de Soderbergh (2002)) o Esfera (mala peli de Barry Levinson (1998)). Pero no, la historia consigue tirar por un derrotero original.</p>
<p>La peli se toma en serio a sí misma. Nada de posmodernismo, nada de guiños al espectador, nada de &#8220;te cuento esto, pero tú y yo sabemos que es mentira&#8221;. Ya tenía ganas. Y para ser una peli del género &#8220;¡qué malas son las grandes empresas!&#8221;, no está nada mal. Quiero decir que muchas pelis de ese género se pierden al recrearse en ese tema para ganarse la complicidad del espectador, lo que resulta aburrido e insustancial. Esta emplea el asunto como parte de paisaje, pero sabe bien que la historia que interesa es otra. La empresa malvada propicia las condiciones para que surja un planteamiento ético interesante, pero que no se centra en la maldad de esa empresa, sino en asuntos muchos más jugosos.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=57&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/04/18/moon-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Repo Men (2010)</title>
		<link>http://amarzal.wordpress.com/2010/04/04/repo-men-2010/</link>
		<comments>http://amarzal.wordpress.com/2010/04/04/repo-men-2010/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 08:34:06 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Cine]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/?p=55</guid>
		<description><![CDATA[He visto Repo Men, peli dirigida por Miguel Sapochnik con Jude Law, Forest Whitaker y Liev Schrieber en el reparto. Sobre el papel: una buena idea para el género &#8220;¡qué malas son las grandes empresas!&#8221; Repo Men va de un futuro próximo en el que una empresa vende órganos artificiales a un precio desorbitado, pero [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=55&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>He visto Repo Men, peli dirigida por Miguel Sapochnik con Jude Law, Forest Whitaker y Liev Schrieber en el reparto. Sobre el papel: una buena idea para el género &#8220;¡qué malas son las grandes empresas!&#8221; Repo Men va de un futuro próximo en el que una empresa vende órganos artificiales a un precio desorbitado, pero con un fantástico plan financiero detrás: intereses de usura y reposición obligada del órgano si hay retrasos en el pago. El prota es Remy (Jude Law), un &#8220;repo man&#8221;, es decir, uno de los encargados de ir a por los órganos impagados. El procedimiento de recuperación es expeditivo: un empleado entra en casa del moroso, lo deja inconsciente y le extrae el órgano a pelo mientras una ambulancia va a por lo que queda del sujeto. Ya digo, sobre el papel, perfecto. Si a eso unimos una ambientación que toma cosas de Blade Runner y Minority Report, mejor que mejor. Entonces, ¿cómo carajo han hecho una peli tan mala con ese material?</p>
<p>Lo de las operaciones in situ por parte del &#8220;repo man&#8221;, pase, pero el tono entre farsa y peli de acción barata nunca acaba de encontrar un punto de equilibrio con lo que se quiere contar. Pero no es eso lo que más me disgustó: me pareció peor el descarado plagio de Minority Report. Veámos (cuidado, que hay spoilers): Tipo trabaja para un sistema moralmente impresentable, pero acepta lo que hay y tira adelante; tipo pasa de verdugo a víctima y es perseguido por sus antiguos compañeros; tipo llega a momento en el que ocurre algo malo y, a partir de entonces, todo sale a pedir de boca; tipo se sale con la suya milagrosamente y desmonta &#8220;el sistema&#8221; malvado. Hasta aquí, el paralelismo con  Minority Report es evidente. Pero la copia va más allá (ojo, que ahora sí que va un spoiler del copón). Desde el momento en que ocurre algo malo, todo sucede en la cabeza del protagonista. Lo que en Minority Report apenas se apunta, en Repo Men se subraya tanto que se pierde cualquier efecto sorpresa. Lo que en Minority Report se deja a la reflexión del espectador, en Repo Men se explicita hasta la nausea. Sí, también en Minority Report ocurre que cuando a Anderton (Tom Cruise) lo atrapan, entra en un mundo de sueños en el que es feliz. Lo dice Gideon, el guarda de la prisión, cuando mete a Anderton en el &#8220;ataúd&#8221;: &#8220;<em>It&#8217;s actually kind of a rush. They say you have visions&#8230; that your life flashes before your eyes&#8230; that all your dreams come true</em>.&#8221; El resto de la peli ocurre en la cabeza de Anderton, de ahí que todo se resuelva con situaciones inverosímiles y muy felizmente. Spielberg lo deja apuntado y no subraya que el final es un falso final. El espectador puede irse a casa con el falso final feliz como final real de la peli. Pero el espectador que cae en la cuenta, se lleva el final pesimista. No está mal. En Repo Men el final se anuncia desde la mitad del metraje (o un poco antes): tan pronto aparece un anuncio del producto &#8220;M.5 Neural Net&#8221; uno sabe exactamente qué va a pasar. Y pasa eso que se espera, claro. El metraje se hace entonces insufrible: ya sabes cómo acaba todo y sólo queda ver una sucesión de escenas violentas y gore sin demasiado interés (con su &#8220;homenaje&#8221; a la escena del martillo de Old Boy, de Chan-wook Park, incluido). Un rollo.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=55&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/04/04/repo-men-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Java: C#, 5. Evita la creación de objetos innecesarios</title>
		<link>http://amarzal.wordpress.com/2010/03/15/effective-java-c-5-evita-la-creacion-de-objetos-innecesarios/</link>
		<comments>http://amarzal.wordpress.com/2010/03/15/effective-java-c-5-evita-la-creacion-de-objetos-innecesarios/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 21:10:02 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Effective Java: C#]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/?p=47</guid>
		<description><![CDATA[En este punto no hay demasiada diferencia entre Java y C#. Lo que vale para uno, vale para otro. Los objetos inmutables tienen una ventaja: dos o más instancias con el mismo valor pueden compartir memoria. El ahorro no sólo es de memoria: también lo es de tiempo. La creación (y posterior destrucción) de los [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=47&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En este punto no hay demasiada diferencia entre Java y C#. Lo que vale para uno, vale para otro.</p>
<p>Los objetos inmutables tienen una ventaja: dos o más instancias con el mismo valor pueden compartir memoria. El ahorro no sólo es de memoria: también lo es de tiempo. La creación (y posterior destrucción) de los objetos cuesta tiempo. Las cadenas, por ejemplo, son objetos inmutables. Los literales de cadena que aparecen en nuestro programa reciben un tratamiento especial por el que se garantiza que dos cadenas idénticas se almacenen en memoria una sola vez. Las variables a las que asignamos ese literal de cadena son, pues, referencias a la misma zona de memoria. Es decir, este fragmento de código muestra el valor true por pantalla:</p>
<p><pre class="brush: csharp;">
string a = &quot;una cadena&quot;;
string b = &quot;una cadena&quot;;
Console.WriteLine(object.ReferenceEquals(a, b));
System.Console.Read();
</pre></p>
<p>Bloch advierte contra el uso de bucles como éste:</p>
<p><pre class="brush: csharp;">
for (int i = 0; i &lt; 100; i++)
{
     String a = new String(&quot;una cadena&quot;);
}
</pre></p>
<p>En Java, el bucle crearía 100 instancias diferentes de &#8220;una cadena&#8221;. En C# no se puede cometer ese error porque el constructor String no está sobrecargado para aceptar una cadena como argumento.</p>
<p>C# ofrece una posibilidad que no encontramos en Java: la definición de structs. Un struct es un tipo valor y la memoria que consumen las variables de tipo valor es de pila, no del heap manejado (salvo cuando el tipo valor está &#8220;boxed&#8221;, claro está). Un nuevo tipo valor se define como una clase: con campos, propiedades, métodos, etc, pero tiene algunas restricciones y se ha de ir con cuidado con algún cambio semántico en operaciones como la asignación. Una restricción es que no se puede especializar la clase (no hay herencia). Y la asignación de un valor struct almacenado en una variable a otra variable hace una copia de memoria (y no es una simple copia de referencia). Lo mismo ocurre con el paso de tipos valor a funciones como argumento. Esto hace que resulte conveniente limitar los tipos valor a datos con menos de, digamos, una treintena de bytes. Un consejo es que, si se puede, los tipos valor se limiten a codificar valores inmutables. Eso simplifica la semántica de las operaciones. Si los struct se usan para representar objetos inmutables y su tamaño es poco, resultan muy eficientes: no se pide memoria manejada, lo que ahorra el consumo de memoria extra de las referencias que requieren los objetos convencionales, y reducen el tiempo necesario para la gestión de la memoria consumida. Al programa en Java echo de menos la posibilidad de usar tipos valor, especialmente en combinación con genéricos cuando implemento colecciones. Me duele ver el consumo de memoria que supone gestionar una lista de enteros, que en los genéricos de Java pasa por hacer boxing de cada dato. En C# se puede usar una lista de enteros &#8220;primitivos&#8221; (en la jerga de C# no son primitivos, sino tipos valor). Y se puede, también, definir un tipo valor propio que suministrar como tipo al instanciar una colección genérica. Pero me estoy alejando del tema central. Sigamos.</p>
<p>El resto de la entrada de Bloch se dedica a sugerir que los objetos de tamaño grande o construcción costosa que son de naturaleza &#8220;constante&#8221; y se crean cada vez que se llama a un método, se creen una sola vez como campos estáticos. La construcción e inicialización de esos objetos se podría hacer en un bloque de código marcado con static. C# permite hacer algo similar, pero con un constructor estático para la clase. Los constructores estáticos no tienen parámetros y se invocan con total garantía antes de que se instancia cualquier elemento de la clase.</p>
<p>Finalmente, Bloch sugiere evitar la construcción de esos objetos si no son absolutamente necesarios. Es decir, podría darse el caso de que construyésemos esos objetos para evitar que las llamadas a un método lo creen una y otra vez, pero que el método en cuestión no se llamara nunca al ejecutar un programa. La construcción del objeto estático hubiese resultado en una pérdida absurda de memoria y tiempo. C# nos auxiliaría aquí con el tipo de datos Lazy&lt;T&gt;.</p>
<p>Finalmente, el autor de Effective Java advierte del peligro que supone el <em>autoboxing</em> inadvertido de tipos primitivos. Puede tener un grave impacto en la eficiencia. El mismo peligro se tiene en C#. En cualquier caso, el peligro es algo menor en C# porque los tipos valor se pueden usar sin &#8220;boxing&#8221; en estructuras de datos genéricas. No ocurre lo mismo en Java.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=47&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/03/15/effective-java-c-5-evita-la-creacion-de-objetos-innecesarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Java: C#, 4: Refuerza la no instanciabilidad con un constructor privado</title>
		<link>http://amarzal.wordpress.com/2010/03/14/effective-java-c-4-refuerza-la-no-instanciabilidad-con-un-constructor-privado/</link>
		<comments>http://amarzal.wordpress.com/2010/03/14/effective-java-c-4-refuerza-la-no-instanciabilidad-con-un-constructor-privado/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 13:39:11 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Effective Java: C#]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/?p=43</guid>
		<description><![CDATA[Bloch recomienda que se declare un constructor privado en aquellas clases Java diseñadas como contenedores de métodos estáticos. El objetivo es impedir que se pueda instanciar la clase: si el único constructor no tiene parámetros y es privado, no se puede definir una subclase. El constructor privado no está pensado para ser llamado; de hecho, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=43&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bloch recomienda que se declare un constructor privado en aquellas clases Java diseñadas como contenedores de métodos estáticos. El objetivo es impedir que se pueda instanciar la clase: si el único constructor no tiene parámetros y es privado, no se puede definir una subclase. El constructor privado no está pensado para ser llamado; de hecho, su cuerpo tiene una única sentencia que lanza una excepción.</p>
<p>Nuevamente C# ofrece una solución más elegante. Se declara la clase como estática y en paz: &#8220;public static class { &#8230;&#8221;. No hace falta declarar un constructor privado y se es explícito en la intención: la clase es estática, por lo que no es instanciable y sólo contiene métodos o datos estáticos.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=43&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/03/14/effective-java-c-4-refuerza-la-no-instanciabilidad-con-un-constructor-privado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Java: C#, 3: Refuerza la propiedad singleton con un constructor privado o un tipo enumerado</title>
		<link>http://amarzal.wordpress.com/2010/03/13/effective-java-c-3-refuerza-la-propiedad-singleton-con-un-constructor-privado-o-un-tipo-enumerado/</link>
		<comments>http://amarzal.wordpress.com/2010/03/13/effective-java-c-3-refuerza-la-propiedad-singleton-con-un-constructor-privado-o-un-tipo-enumerado/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 10:26:50 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Effective Java: C#]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/2010/03/13/effective-java-c-3-refuerza-la-propiedad-singleton-con-un-constructor-privado-o-un-tipo-enumerado/</guid>
		<description><![CDATA[No traduzco el término singleton, que significa conjunto con un solo elemento y que se usa para referirse a una clase de la que sólo hay una instancia. El singleton es uno de los patrones de diseño más utilizados. Si estamos haciendo logging, por ejemplo, es probable que sólo queramos una instancia del logger a la que podamos acceder desde [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=38&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No traduzco el término singleton, que significa conjunto con un solo elemento y que se usa para referirse a una clase de la que sólo hay una instancia. El singleton es uno de los patrones de diseño más utilizados. Si estamos haciendo logging, por ejemplo, es probable que sólo queramos una instancia del logger a la que podamos acceder desde cualquier punto del programa. Elsingleton es una solución comúnmente adoptada para no crear más de una instancia del objeto y hacerlo accesible.</p>
<p>Bloch propone en su libro el abandono de una práctica Java en favor de otra que sólo se ha hecho posible desde la aparición de Java 1.5.  El nuevo método pasa por usar tipos enumerados. Este es un campo en el que Java ofrece un modelo sustancialmente diferente del de C#. En C# los tipos enumerados son conjuntos de constantes de algún tipo entero (excepto char). En Java, el tipo enumerado define una clase nueva de la que las constantes son instancias de sólo lectura. Esa nueva clase puede contener campos y métodos, como cualquier otra clase. Implementar el singleton resulta sencillo: se define un tipo enumerado con un único valor, que será la instancia única. Bloch comenta que esa aproximación ofrece ventajas, como la adición gratuita de maquinaria de serialización y resistencia a ataques por reflexión. Pero hay algo que no me gusta si se sigue la propuesta al pie de la letra: la clase debe implementarse pensando en que sólo será usada como singleton. Se puede dar un rodeo y montar como tipo enumerado una clase con un campo de sólo lectura que sea, precisamente, de la clase que ofrece el verdadero servicio y que se diseñó sin seguir el patrón en cuestión. Pero la sintaxis se complicará al acceder a la instancia que nos interesa, ya que ahora será un campo de la instancia de tipo enumerado que ofrece el punto de entrada. Y un último problema, que a mi juicio no es menor: no tenemos control del proceso de instanciación. La instancia se inicializará cuando Java lo considere oportuno, y sospecho (no estoy seguro) de que esto ocurrirá al inicio del programa. Si el objeto único tiene un proceso de construcción pesado, puede que no deseemos que se construya hasta que se use efectivamente. De ese modo aligeramos el tiempo de arranque del programa y, si nadie hiciese un acceso al singleton, evitaríamos completamente su construcción.</p>
<p>C# 4.0 ofrece un nuevo tipo de datos genérico que parece apropiado para implementar los singleton: Lazy&lt;T&gt;. Si deseamos una instancia de tipo T, Lazy&lt;T&gt; se asegura de que sólo se instancie cuando se accede a ella por primera vez.</p>
<p><pre class="brush: csharp;">

public class SingletonClass
{
    static Lazy&lt;SingletonClass&gt; Instance = new Lazy&lt;SingletonClass&gt;();

    public readonly int n = 1;
}

public class Clase
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine(SingletonClass.Instance.Value.n);
        System.Console.Read();
    }
}

</pre></p>
<p>Si no gusta tener que acceder a través de Value, se puede dar un rodeo:</p>
<p><pre class="brush: csharp;">

public class SingletonClass
{
    static Lazy&lt;SingletonClass&gt; instance = new Lazy&lt;SingletoClass&gt;();
    public static SingletonClass Instance { get { return instance.Value; } }

    public readonly int n = 1;
}

public class Clase
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine(SingletonClass.Instance.n);
        System.Console.Read();
    }
}

</pre></p>
<p>No parece un gran avance: podíamos hacer algo parecido fijandoel tipo de instance a T e inicializándolo a null. La propiedad Instance, antes de devolver el valor de instance, miraría si instance es null y, de ser el caso, inicializaría instance.  Pero hay una ventaja adicional en el uso de Lazy&lt;T&gt;: si nuestro programa tiene hebras, Lazy&lt;T&gt; se asegura de que la instancia no se cree dos veces. Controlar esto a mano es pesado. Finalmente, con ciertas sobrecargas del constructor podemos controlar con qué método (una función anónima, por ejemplo) se construye la instancia, lo que permite, por ejemplo, recurrir a factorías en la inicialización del singleton o pasar al constructor parámetros.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=38&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/03/13/effective-java-c-3-refuerza-la-propiedad-singleton-con-un-constructor-privado-o-un-tipo-enumerado/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Java: C#, 2. Considera un &#8220;builder&#8221; cuando te enfrentes a muchos parámetros en el constructor</title>
		<link>http://amarzal.wordpress.com/2010/03/12/effective-java-c-2-considera-un-builder-cuando-te-enfrentes-a-muchos-parametros-en-el-constructor/</link>
		<comments>http://amarzal.wordpress.com/2010/03/12/effective-java-c-2-considera-un-builder-cuando-te-enfrentes-a-muchos-parametros-en-el-constructor/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 16:06:14 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Effective Java: C#]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/?p=19</guid>
		<description><![CDATA[(He mantenido el término inglés &#8220;builder&#8221; porque constructor, en español, ya se usa para traducir el término inglés &#8220;consructor&#8221;.) Como apunta el libro de Bloch, los constructores con un elevado número de parámetros son problemáticos. Muchos de sus parámetros suelen tener valores por defecto. Cuando es el caso, resulta tedioso para el programador tener que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=19&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>(He mantenido el término inglés &#8220;builder&#8221; porque constructor, en español, ya se usa para traducir el término inglés &#8220;consructor&#8221;.)</p>
<p>Como apunta <a href="http://java.sun.com/docs/books/effective/">el libro de Bloch</a>, los constructores con un elevado número de parámetros son problemáticos. Muchos de sus parámetros suelen tener valores por defecto. Cuando es el caso, resulta tedioso para el programador tener que suministrar explícitamente estos valores por defecto, así que el diseñador de la clase suele sobrecargar el constructor de la clase. Un ejemplo:</p>
<p><pre class="brush: java;">
public class Clase
{
    public Clase(int par1, int par2)
    {
        ...
    }

    public Clase(int par1)
    {
        this(par1, 0);
    }
}
</pre></p>
<p>Todo un problema: el perfil de cada constructor debe ser diferente, y eso no siempre es posible. Pongamos por caso este constructor:</p>
<p><pre class="brush: java;">
public class Clase
{
    public Clase(int par1, int par2, int par3)
    {
    }
}
</pre></p>
<p>Supongamos que par2 puede tomar 0 como valor por defecto  y que par3 puede tomar 1 como valor defecto. Podemos definir estos constructores:</p>
<p><pre class="brush: java;">
public class Clase
{
    public Clase(int par1, int par2, int par3)
    {
        ...
    }

    public Clase(int par1, int par2)
    {
        this(par1, par2, 1);
    }

    public Clase(int par1)
    {
        this(par1, 0);
    }
}
</pre></p>
<p>El usuario puede omitir el valor de par3 u omitir el valor de par2 y par3, pero no puede omitir sólo el valor de par2. Y hay una pega adicional: el valor por defecto se ha codificado en cuerpo del constructor, lo que dificulta la legibilidad.</p>
<p>C# 4.0 soluciona el problema con el uso de parámetros con valor por defecto y parámetros con nombre. En C# 4.0 codificaríamos un único constructor:</p>
<p><pre class="brush: csharp;">
public class Clase
{
    public Clase(int par1, int par2=0, int par3=1)
    {
        ...
    }
</pre></p>
<p>Todas estas instanciaciones de objetos de la clase Clase son ahora legítimas:</p>
<p><pre class="brush: csharp;">
var o1 = new Clase(1, 10, 20);
var o2 = new Clase(1, 10); //par 3 vale 1
var o3 = new Clase(1); // par2 vale 0 y par3 vale 1
var o4 = new Clase(1, par2: 2); // par2 vale 2 y par3 vale 1
var o5 = new Clase(1, par2: 2, par3: 4); // par2 vale 2 y par3 vale 4
var o6 = new Clase(1, par3: 4); // par2 vale 0 y par3 vale 4
var o7 = new Clase(1, par3: 4, par2: 10); // par2 vale 10 y par3 vale 4
</pre></p>
<p>Los parámetros con nombre no sólo son útiles para ahorrarnos sobrecargas de constructores. En cualquier método con más de, digamos, tres parámetros, poder dar nombre a los argumentos cuando se hace una invocación aumenta la legibilidad del código.</p>
<p>Los builder siguen resultando útiles en ciertos contextos, pero en muchos otros dejan de ser necesarios con esta característica de C# 4.0.</p>
<p>¡Ah! Una restricción: los valores por defecto deben ser evaluables en tiempo de compilación. Eso obliga a dar algún que otro rodeo cuando se quiere suministrar un valor por defecto calculado en tiempo de ejecución.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=19&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/03/12/effective-java-c-2-considera-un-builder-cuando-te-enfrentes-a-muchos-parametros-en-el-constructor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Java: C#, 1. Considera usar métodos factoría estáticos en lugar de constructores</title>
		<link>http://amarzal.wordpress.com/2010/03/11/1-considera-usar-metodos-factoria-estaticos-en-lugar-de-constructores/</link>
		<comments>http://amarzal.wordpress.com/2010/03/11/1-considera-usar-metodos-factoria-estaticos-en-lugar-de-constructores/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 21:35:32 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Effective Java: C#]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/?p=12</guid>
		<description><![CDATA[Efectivamente, los métodos factoría estáticos presentan ventajas claras frente a los constructores, tanto en Java como en C#. Google Collections, por ejemplo, usa intensivamente los métodos factoría estáticos. Entre sus ventajas: Puede usarse un nombre que indique el modo en que actúa la factoría, o partir de qué (tipos de) datos opera. Pueden reciclar memoria [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=12&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Efectivamente, los métodos factoría estáticos presentan ventajas claras frente a los constructores, tanto en Java como en C#. Google Collections, por ejemplo, usa intensivamente los métodos factoría estáticos. Entre sus ventajas:</p>
<ol>
<li>Puede usarse un nombre que indique el modo en que actúa la factoría, o partir de qué (tipos de) datos opera.</li>
<li>Pueden reciclar memoria (usar algún tipo de cache), ya que no están obligados a devolver una instancia nueva.</li>
<li>Pueden devolver instancias de subclasses de aquella de la que el método factoría estático forma parte.</li>
<li>Eliminan la verbosidad cuando se usan tipos genéricos. (En todo caso, esa reducción de verbosidad se beneficia del borrado –erasure- de tipos en que se apoya el sistema de genéricos de Java, y parece un poco chapucero (o, cuando menos, poco elegante).</li>
</ol>
<p>Y entre las limitaciones tenemos:</p>
<ol>
<li>Las clases sin constructores protegidos o públicos no pueden “subclasarse”, y a fin de cuentas la directriz propone suprimir estos tipos de constructor para promover los métodos factoría estáticos.</li>
<li>No destacan en la documentación suficientemente, es decir, son indistinguibles de otros métodos estáticos.</li>
</ol>
<p>Las ventajas 1, 2 y 3 de Java también lo son de C#. Nada que objetar. Pero la cuarta ventaja es irrelevante en C#. La verbosidad suele reducirse gracias al mecanismo de inferencia de tipos accesible con la palabra reservada “var”.</p>
<p>C#, con su uso de las clausuras (funciones anónimas) lleva más lejos la idea del uso de métodos factoría. Gracias a ellas, no es necesario definirlas como métodos estáticos: podemos definirlas al vuelo allí donde sean necesarias. Si es menester pasar a un método una factoría que devuelve una cola circular a partir de su capacidad, podríamos usar como argumento una lambda función ad hoc:<br />
<pre class="brush: csharp;">
void NecesitoConstruirUnaColaCircular(Func creaColaCircular)
{
    var colaCircular = creaColaCircular(100);
...
}
...
NecesitoConstruirUnaColaCircular(n =&gt; ColaCircular(n));
</pre></p>
<p>En el momento de invocar el método, definimos la factoría y la suministramos como argumento. El sistema permite reciclar una ColaCircular que ya tengamos:</p>
<p><pre class="brush: csharp;">
var miCola = new ColaCircular(100);
// Llamada 1
NecesitoConstruirUnaColaCircular(n =&gt; miCola);
//Llamada 2
NecesitoConstruirUnaColaCircular(n =&gt; miCola);
</pre></p>
<p>Nótese que las dos llamadas usan la misma cola circular. Esto permite reducir las peticiones de memoria manejada.</p>
<p>El ejemplo que he puesto puede extenderse a funciones anónimas que devuelvan cualquier clase que implemente una interfaz, naturalmente, con lo que la factoría estática no tiene por qué depender de una clase. En Java no podemos hacer eso: el método estático deberá definirse en el cuerpos de una clase, nunca en el de una interfaz.</p>
<p>Esperemos que Java incorpore clausuras en la versión 7. Hoy no se entiende un lenguaje de programación que no las ofrezca.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=12&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/03/11/1-considera-usar-metodos-factoria-estaticos-en-lugar-de-constructores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Effective Java: C#</title>
		<link>http://amarzal.wordpress.com/2010/03/11/7/</link>
		<comments>http://amarzal.wordpress.com/2010/03/11/7/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 20:47:25 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Effective Java: C#]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/?p=7</guid>
		<description><![CDATA[En la UJI hemos decidido usar Java (sin abandonar Python) como lenguaje de programación vehicular para los nuevos grados. Ya hice mis pinitos con Java y recientemente monté algún programa complejo (que no grande) para un asunto de investigación. Quizá Java no me parecería malo si no anduviera comparándolo constantemente con C#. Y es que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=7&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En la UJI hemos decidido usar Java (sin abandonar Python) como lenguaje de programación vehicular para los nuevos grados. Ya hice mis pinitos con Java y recientemente monté algún programa complejo (que no grande) para un asunto de investigación. Quizá Java no me parecería malo si no anduviera comparándolo constantemente con C#. Y es que C# es mucho C#.<br />
Los genéricos de Java, por ejemplo, son un completo desastre. Esa idea de implementarlos con borrado (erasure) de tipos&#8230; increíble. Tuve que pasarme rápidamente a la colecciones de Google para poder escribir código medianamente usable. Ya me extenderé sobre esta cuestión.<br />
El caso es que, como en algunos foros se recomendaba el Effective Java (segunda edición) de Joshua Bloch, estoy leyéndolo ahora mismo. Es un libro excelente. En lo que llevo leído cuenta cómo superar ciertos problemas de Java y como explotar ventajosamente algunos patrones de diseño. Desde luego, no es un libro para principiantes. El caso es que he devorado así como un 40% del texto y en la mayor parte de los capítulos me asaltaba recurrentemente la idea de que casi todos los problemas estaban superados por C# (especialmente en su última versión: C# 4.0). Un libro como el de Effective Java para C# quedaría en más bien poca cosa. Pese a todo, contiene bastante material trasladable a C# o interpretable de algún modo en el contexto de C#.<br />
Un plan de ataque es ir metiendo entradas en el blog donde examine los diferentes capítulos del libro y plantee mis reflexiones sobre su posible aplicación a C#. Podría estar bien para quien quisiera aprender algunas cosas de C# conociendo Java. Ya se sabe, evangelismo y esas cosas.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=7&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/03/11/7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
		<item>
		<title>Estreno Blog&#8230;</title>
		<link>http://amarzal.wordpress.com/2010/03/11/estreno-blog/</link>
		<comments>http://amarzal.wordpress.com/2010/03/11/estreno-blog/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 20:26:25 +0000</pubDate>
		<dc:creator>amarzal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://amarzal.wordpress.com/2010/03/11/estreno-blog/</guid>
		<description><![CDATA[&#8230; y, como todo el mundo, prometo mantener un ritmo frenético de publicación. Y, como todo el mundo, sé que no será así. Lo que me interesa es mantener apuntes sobre .NET y C#, aunque ya veremos cómo va evolucionando (o muriendo de inanición) esto.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=3&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#8230; y, como todo el mundo, prometo mantener un ritmo frenético de publicación. Y, como todo el mundo, sé que no será así.</p>
<p>Lo que me interesa es mantener apuntes sobre .NET y C#, aunque ya veremos cómo va evolucionando (o muriendo de inanición) esto.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/amarzal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/amarzal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/amarzal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/amarzal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/amarzal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/amarzal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/amarzal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/amarzal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/amarzal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/amarzal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/amarzal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/amarzal.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/amarzal.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/amarzal.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=amarzal.wordpress.com&amp;blog=12558946&amp;post=3&amp;subd=amarzal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://amarzal.wordpress.com/2010/03/11/estreno-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f1fe41f32c5e9ab776151e320ee5d175?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">amarzal</media:title>
		</media:content>
	</item>
	</channel>
</rss>
