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

<channel>
	<title>Juanma Santoyo &#187; programación</title>
	<atom:link href="http://www.juanmasantoyo.es/index.php/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juanmasantoyo.es</link>
	<description>En ocasiones me llaman friki</description>
	<lastBuildDate>Wed, 07 Jul 2010 04:57:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Olor de código</title>
		<link>http://www.juanmasantoyo.es/index.php/2008/12/05/olor-de-codigo/</link>
		<comments>http://www.juanmasantoyo.es/index.php/2008/12/05/olor-de-codigo/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 00:02:30 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[olor de codigo]]></category>

		<guid isPermaLink="false">http://www.juanmasantoyo.es/index.php/2008/12/05/olor-de-codigo/</guid>
		<description><![CDATA[Los programadores solemos cometer dos errores:

El primero, pensar que con echar un simple vistazo a un código podemos determinar si es o no es un buen código.

El segundo, pensar que lo anterior es un error.

En realidad, la primera impresión de un código es bastante válida. Cuando un código no nos convence a primera vista, es por que despide un "olor" poco convincente. Lo que vengo a decir, es que esto del olor de código existe y <a href="http://en.wikipedia.org/wiki/Code_smell">está mas o menos documentado</a>. Sin embargo, no he encontrado nada en español sobre el tema, así que vamos allá.]]></description>
			<content:encoded><![CDATA[<p>Los programadores solemos cometer dos errores:</p>
<p>El primero, pensar que con echar un simple vistazo a un código podemos determinar si es o no es un buen código.</p>
<p>El segundo, pensar que lo anterior es un error.</p>
<p>En realidad, la primera impresión de un código es bastante válida. Cuando un código no nos convence a primera vista, es por que despide un &#8220;olor&#8221; poco convincente. Lo que vengo a decir, es que esto del olor de código existe y <a href="http://en.wikipedia.org/wiki/Code_smell">está mas o menos documentado</a>. Sin embargo, no he encontrado nada en español sobre el tema, así que vamos allá:<br />
<span id="more-81"></span><br />
¿Qué cosas provocan mal olor en nuestro código y como solucionarlas?</p>
<ul>
<li><strong>Código duplicado.</strong> A primera vista ya podemos ver trozos de código demasiado parecidos. Probablemente deberíamos encontrar una forma de compartir ese código para no repetirlo por todo nuestro programa.</li>
<li><strong>Métodos demasiado largos.</strong> Cuando un método es demasiado largo, lo más seguro es que debamos dividirlo en más métodos más básicos. Eso hará nuestro código más comprensible y más sencillo de arreglar cuando falle (porque creeme, fallará).</li>
<li><strong>Clases demasiado largas.</strong> Un poco en la misma linea que lo anterior, es posible que necesites abstraer un poco más tu código, y dividir una clase en varias clases pequeñas.</li>
<li><strong>Envidia de características.</strong> Lo mismo te digo una cosa que te digo otra. Si notamos que una de nuestras clases usa excesívamente los métodos de otra, merece la pena cosiderar si realmente esas dos clases deberían estar separadas.</li>
<li><strong>Intimidad inapropiada.</strong> Una clase no debería depender de otras clases en según que aspectos de implementación críticos. Las clases deberían ser reutilizables y independientes. En estas situaciones tambien deberíamos plantearnos la fusión de las dos clases.</li>
<li><strong>Rechazo del legado.</strong> Una clase que sobreescribe un método heredado debería respetar el propósito inicial del método. Con esto quiero decir que no es lógico ni aceptable que un método que calcule raízes cuadradas se sobreescriba con un método que elimine acentos en una cadena de texto. No tienen nada que ver el uno con el otro. La pregunta que deberíamos hacernos ahora es: ¿realmente esta clase debería tener este padre y no otro?. Recordemos que la composición siempre es una solución válida.</li>
<li><strong>Clases perezosas.</strong> Hemos hablado de clases demasiado largas, pero ¿y las clases demasiado cortas?. Puede que debamos integrar su funcionalidad en otra clase.</li>
<li><strong>Métodos duplicados.</strong> ¿Realmente necesitamos ese método para elevar al cubo teniendo este que eleva al cuadrado?. Mucho mejor si hacemos un método capaz de elevar a n. Debemos evitar tener varios métodos con funcionalidades parecidas y buscar más métodos configurables con parámetros.</li>
<li><strong>Complejidad artificial.</strong> ¿Estamos ante un problema complicado o nosotros lo hemos vuelto complicado?. No tiene sentido forzar, por ejemplo, el uso de complejos <a href="http://es.wikipedia.org/wiki/Patrones_de_dise%C3%B1o">patrones de diseño</a> en problemas que realmente son tan sencillos que no los requieren.</li>
</ul>
<p>Estas son algunas fuentes potenciales de problemas que podemos llegar a tener y que son fáciles de ver con un vistazo simple al código. El código puede, y debe; ser bonito.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juanmasantoyo.es/index.php/2008/12/05/olor-de-codigo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programar orientado a objetos</title>
		<link>http://www.juanmasantoyo.es/index.php/2007/07/04/programar-orientado-a-objetos/</link>
		<comments>http://www.juanmasantoyo.es/index.php/2007/07/04/programar-orientado-a-objetos/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 22:07:24 +0000</pubDate>
		<dc:creator>Juanma</dc:creator>
				<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.juanmasantoyo.es/?p=38</guid>
		<description><![CDATA[Cuando programamos una clase, o un conjunto de ellas; es habitual considerar que esa clase no tiene porqué ser específica de un proyecto. En ocasiones debe ser así, pero en otras no es necesario.

Concretamente, puedes dotar una clase de la habilidad de obtener o transformar (o obtener y transformar) datos, o puedes dotarla de la habilidad de aplicar esos datos en el nivel más superior del proyecto. Ejemplificando: Puedes hacer una clase que se encargue de obtener datos de una base de datos, pero se debería programar otra clase con la intención de mostrar esos datos en pantalla. He visto códigos donde las clases tienen métodos para obtener y tratar información, y métodos distintos para aplicarla. Tampoco es una mala opción. Quizás un poco incómoda, pero también funcional.]]></description>
			<content:encoded><![CDATA[<p>Cuando programamos una clase, o un conjunto de ellas; es habitual considerar que esa clase no tiene porqué ser específica de un proyecto. En ocasiones debe ser así, pero en otras no es necesario.</p>
<p>Concretamente, puedes dotar una clase de la habilidad de obtener o transformar (o obtener y transformar) datos, o puedes dotarla de la habilidad de aplicar esos datos en el nivel más superior del proyecto. Ejemplificando: Puedes hacer una clase que se encargue de obtener datos de una base de datos, pero se debería programar otra clase con la intención de mostrar esos datos en pantalla. He visto códigos donde las clases tienen métodos para obtener y tratar información, y métodos distintos para aplicarla. Tampoco es una mala opción. Quizás un poco incómoda, pero también funcional.<br />
<span id="more-38"></span><br />
Pero lo que no debe suceder nunca, es que un único método se encargue de obtener la información y de aplicarla. Podría pensarse que es más cómodo, y ciertamente lo es, siempre que nunca en la vida, jamás de los jamases, vayas a usar esa clase en otro proyecto, o tengamos la seguridad de que ese proyecto no va a sufrir ninguna modificación. Por supuesto, esa situación no existe. El cliente nunca se va a conformar con la primera versión acabada del proyecto (nunca), y tu jefe siempre te sugerirá (quizás con una mirada amenazadora) que reutilices el código de un proyecto anterior.</p>
<p>Resumiendo: una clase bien hecha debe cumplir ciertos puntos:</p>
<ul>
<li>Debe ser fácil de ampliar.</li>
<li>Debe ser traspasable a otras aplicaciones de forma íntegra.</li>
<li>Debe poder ser pasada a un colega, publicada a la comunidad, etc.</li>
</ul>
<p>Salgo hoy con estas historias, porque después de una semana en modo hardcore developer he conseguido acabar (bueno, prácticamente acabar) el nuevo y espectacular diseño del blog (espero que os guste, seáis quienes seáis los que pasáis por aquí xD). Y entre las funciones de wordpress hay cada cosa… Las funciones devuelven código HTML listo para publicar en el mejor de los casos, de hecho, lo más normal es que directamente impriman la información en la página. Un desastre.</p>
<p>Por ejemplo, si llamas a la función que te permite obtener el listado de categorías, en vez de devolver los datos íntegros, o en su defecto el html ya montado; simplemente imprime el código en pantalla sin dar opción al programador de tratar los datos antes de publicarlos. Vamos, no tiene pies ni cabeza.</p>
<p>La intención no es mala, porque simplifica mucho el trabajo para diseñadores con pocos conocimientos de programación, pero el problema real es que no existe la posibilidad de obtener los datos íntegros antes de mostrarlos en pantalla.</p>
<p>Después de algunos meses con este blog, estoy viendo que wordpress es una maravilla, pero en este aspecto hay que suspenderlos y darles una colleja, para que se espabilen en nuevas versiones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juanmasantoyo.es/index.php/2007/07/04/programar-orientado-a-objetos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
