



<?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>Software Guisho &#187; Ingeniería de software</title>
	<atom:link href="http://software.guisho.com/temas/ingenieria-de-software/feed" rel="self" type="application/rss+xml" />
	<link>http://software.guisho.com</link>
	<description>Hablemos un poco de software con ñ.</description>
	<lastBuildDate>Thu, 10 Nov 2011 22:50:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Hacer Software NO es programar</title>
		<link>http://software.guisho.com/hacer-software-no-es-programar</link>
		<comments>http://software.guisho.com/hacer-software-no-es-programar#comments</comments>
		<pubDate>Tue, 11 May 2010 21:15:52 +0000</pubDate>
		<dc:creator>guisho (Luis H. Fernandez)</dc:creator>
				<category><![CDATA[El Negocio Del Softare]]></category>
		<category><![CDATA[Ingeniería de software]]></category>
		<category><![CDATA[Una empresa de software]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[desarrollo de software]]></category>
		<category><![CDATA[negocios de software]]></category>
		<category><![CDATA[programar]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=198</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/hacer-software-no-es-programar&amp;text=Hacer Software NO es programar&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
Una de las lecciones que más cuesta aprender para un buen programador es la siguiente: programar NO es lo más importante en el software. Un poco irónico, pero cierto. Para ser más específicos, hacer del software un negocio NO se hace programando. Claro, nos toca el orgullo, el karma, el ego. Nos gusta sentirnos esenciales [...]


No related posts.]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/hacer-software-no-es-programar&amp;text=Hacer Software NO es programar&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p><a href="http://software.guisho.com/wp-content/uploads/2010/05/compu.jpg"><img class="alignleft size-full wp-image-203" title="Compu" src="http://software.guisho.com/wp-content/uploads/2010/05/compu.jpg" alt="" width="129" height="150" /></a>Una de las lecciones que más cuesta aprender para un buen programador es la siguiente: programar NO es lo más importante en el software. Un poco irónico, pero cierto. Para ser más específicos, hacer del software un negocio NO se hace programando. Claro, nos toca el orgullo, el karma, el ego. Nos gusta sentirnos esenciales en el proceso. Pero no, al final somos los peones de todo el camino. No nos estoy desprestigiando, somos peones de alto nivel, difíciles de conseguir, que podemos ser caros y lo demás&#8230;pero somos altamente reemplazables, y en rol de negocio NO jugamos un papel importante. Así como los cortadores de café no son claves en el negocio del café, o los cocineros en un restaurante de comida rápida poco tienen que decir ese negocio, o como los ingenieros químicos de comidas empacadas tienen poco que decir en su negocio. De nuevo son puestos CLAVES siempre y cuando EXISTA y FUNCIONE el negocio. Pero ellos, al igual que nosotros, no suelen influir desde el punto de vista de negocios.</p>
<p><span id="more-198"></span></p>
<p>Aquellos a quienes nos gusta desarrollar software, sabemos que podemos hacer muchas cosas, y creemos que podemos hacer cualquier cosa. Iniciar un proyecto es barato y sencillo, y por lo general, nos gusta involucrarnos mucho en nuestras nuevas y brillantes ideas. Y caemos en la tentación de pensar que si desarrollamos un sistema que hace tal o cual maravilla, la gente ira corriendo a nuestras oficinas a solicitarnos instalaciones. Pero el mundo no funciona así.</p>
<p>Intentando unificar la industria del software con otras industrias me pongo a pensar. ¿Qué hace que una fábrica de vehículos sea eficiente? ¿Son acaso los que manufacturan las diversas partes del vehículo? ¿O son los que aplican la pintura? ¿A lo mejor los que hacen los diseños nuevos? Mmmm, seguramente son los que  perfeccionan los diseños de motores&#8230;.NO!!!! Si bien las personas que realizan estas tareas son VITALES para el funcionamiento de la fábrica de carros, no son los que hacen que la fábrica de carros sea exitosa. Son los puestos ejecutivos los claves (me cuesta decir esto, aunque resulte obvio).</p>
<p>Pero a nosotros nos cuesta, y nos cuesta mucho darnos cuenta de esto. Desarrollar software es un proceso complejo y que consume muchos recursos mentales, y sobre todo mucho tiempo. Mientras desarrollamos nos enfocamos en sólo eso, en desarrollar, en programar, y eso nos deja poco tiempo para el proceso creativo fuera del software.</p>
<p>Aprendimos una vez que un producto de software es más que el código compilado: que la documentación es importante, que el soporte es importante, que la atención al usuario es importante, que las ventas son importantes, que lo visual es importante, que el mercadeo es importante, y ¿adivinen qué? se nos olvida eso!</p>
<p>Usemos el siguiente ejemplo:  dos personas que conciben una misma idea para un software. Para no hacer nada complicado, pensemos que la idea es vender en línea tickets de cine con combos de comida incluídos. La primera persona que lo piensa es un &#8220;hombre de negocios¨, y la otra es un programador que es un gurú en la materia. ¿Qué camino tomará cada uno? El hombre de negocios buscará quien le asesore para &#8220;comprar&#8221; o &#8220;hacer&#8221; el software que quiere; buscará también quien le haga el mercadeo, buscará socios capitalistas para financiar el proyecto, buscará las mejores estrategias para vender la idea, pondrá especial interés en el retorno de la inversión en el tiempo.</p>
<p>Por otro lado, uno de nosotros tomará un camino distinto. Pensaremos en qué plataforma VAMOS a desarrollar el producto, que features bonitos le podemos poner. Haremos una medio medición de cuanto nos tomará el desarrollo. El costo ni nos preocupa porque al fin, lo vamos a hacer NOSOTROS. Si algún día llegamos a terminar el desarrollo, tal vez comenzaremos a buscar una manera de hacer una campaña en línea y ver la manera de que algunas personas puedan encontrarnos por google y por facebook. En cuanto a retorno de la inversión, pensamos que lo peor que haya pasado es que hayamos perdido NUESTRO tiempo. Y bueno, con las ventas&#8230;.pues las ventas de un producto bueno solitas se darán.</p>
<p>¿A quién le irá mejor?</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/hacer-software-no-es-programar/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>El Rol Del Email en un Proyecto</title>
		<link>http://software.guisho.com/el-rol-del-email-en-un-proyecto</link>
		<comments>http://software.guisho.com/el-rol-del-email-en-un-proyecto#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:45:38 +0000</pubDate>
		<dc:creator>guisho (Luis H. Fernandez)</dc:creator>
				<category><![CDATA[Ingeniería de software]]></category>
		<category><![CDATA[almacenamiento de conocimiento]]></category>
		<category><![CDATA[base de datos de conocimiento]]></category>
		<category><![CDATA[conocimiento]]></category>
		<category><![CDATA[coreo electronico]]></category>
		<category><![CDATA[el rol del correo electronico]]></category>
		<category><![CDATA[el rol del email]]></category>
		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=191</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/el-rol-del-email-en-un-proyecto&amp;text=El Rol Del Email en un Proyecto&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
El correo electrónico, email, es una de las herramientas más utilizadas como medio de comunicación en un proyecto de software. A través del email se establece comunicación con los clientes y entre los miembros del equipo de desarrollo. Usualmente el uso del email se extiende a todos los ámbitos del proyecto: factibilidad, levantado de requerimientos, [...]


No related posts.]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/el-rol-del-email-en-un-proyecto&amp;text=El Rol Del Email en un Proyecto&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p><a href="http://software.guisho.com/wp-content/uploads/2010/02/email.jpg"><img class="alignleft size-medium wp-image-192" title="email" src="http://software.guisho.com/wp-content/uploads/2010/02/email-300x299.jpg" alt="" width="300" height="299" /></a>El correo electrónico, email, es una de las herramientas más utilizadas como medio de comunicación en un proyecto de software. A través del email se establece comunicación con los clientes y entre los miembros del equipo de desarrollo. Usualmente el uso del email se extiende a todos los ámbitos del proyecto: factibilidad, levantado de requerimientos, desarrollo, mantenimiento, resolución de dudas, propuestas de ideas, y un gran etcétera.</p>
<p>Aunque el email es una gran herramienta, en la actualidad hay un &#8220;sobre uso&#8221; del correo. Para absolutamente todo se hace un nuevo mail. Y en muchas ocasiones, el email no es la mejor herramienta para solucionar los problemas. Quiero aclarar que estoy hablando de proyectos de chicos a medios, proyectos en los que una empresa naciente se involucra. Para proyectos más grandes hay otras herramientas que generalmente se utilizan, que de no utilizarse no sería posible el desarrollo en gran escala.</p>
<p><span id="more-191"></span></p>
<p>Este es un tema de manejo de proyectos, asunto sobre el cual quiero dedicarle algunos posts. El manejo de proyectos es uno de los grandes puntos grises del desarrollo de software, y un área que poco interés se suele poner en las empresas. Cada vez más me convenzo de que un buen software está íntimamente ligado a un buen manejo de proyecto.</p>
<p>Pero volviendo al tema, NO ES SENSATO utilizar el mail para todo. Seguro les ha tocado más de una ocasión buscar un documento que enviado por un cliente, que sabe Dios dónde se encuentra en su inbox (o su respectiva carpeta o tag). Y luego de 20 minutos de búsqueda el archivo buscado estaba en un mail con &#8220;No Subject&#8221; que su cliente envío hace un par de meses. O quieren ver la versión de la especificación en la que se contemplaba x o y característica del producto que ahora ya no está contemplada, o la fecha de entrega, etc.</p>
<p>Y dependiendo del rol que cumplan en el proyecto, la avalancha de mails puede parecerles SPAM. Si ustedes son parte del equipo de ventas, pero están incluídos en el CC (y son uno de los 25 destinatarios de CADA mail del proyecto) le perderán la pista a las cosas importantes. Además cada quien tiene una configuración distinta para responder, y de pronto la &#8220;conversación&#8221; se vuelve un hilo de mails que pocos entienden.</p>
<p>El email funciona muy bien para muchas cosas, pero cada vez veo más claro que como método de almacenamiento de conocimiento no es una buena herramienta. Como menciono hay herramientas alternativas, software para manejar proyectos, para almacenar documentos, etc. Pronto haré una lista de software disponible para esto. Hay herramientas que almacenan mejor el conocimiento, que lo pueden indexar de distintas maneras, que pueden buscar relaciones, que pueden intentar estructurar el conocimiento, y que no excluyen el email. Hay algunas herramientas que consideran los replys de los mails&#8230;y es una gran cosa.</p>
<p>Una lista de razones por las que considero que hay que buscar alternativas al mail para manejar el flujo de información en un proyecto:</p>
<ul>
<li>El conocimiento se vuelve, hasta cierto punto restringido. Sólo los destinatarios poseen el conocimiento sobre el proyecto, lo que de principio le reduce la vida. Claro, hay cosas confidenciales, pero hay muchas otras que son del interés común tanto de la empresa proveedora como el cliente.</li>
<li>Es sumamente complicado de organizar. Aunque ahora existen maneras eficientes de manejar cada correo de entrada, los correos en los que se tratan distintos temas, se vuelven un desafío.</li>
<li>Mucha información puede volverse ruido. Si todas las mail de un proyecto se van a la carpeta &#8220;Proyecto X&#8221; de nuestro manejador de correo, de pronto tendremos una carpeta con miles de correos que no nos sirven, a lo más para hacer búsquedas.</li>
<li>No se escriben buenos mails. Abundan los mail con subjects malos, los mails de más, los mails mal escritos, los mails que no dicen nada, o que dicen algo en mucho, etc. Que es otro tema que algún día tocaremos, cómo y porque escribir buenos mails.</li>
</ul>
<p>Pero hay un punto importante: mucha de la información sobre el proyecto sale del cliente, y el cliente USA EL EMAIL, y hacerlo utilizar otra herramienta, es prácticamente imposible. Así que la solución que se utilice DEBE usar el mail como interfase. Irónico pero cierto. Intentar que el cliente use &#8220;nuestra herramienta&#8221; es algo difícil de lograr, así que el mail debe ser utilizado, pero con un nuevo enfoque.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/el-rol-del-email-en-un-proyecto/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Patron Adaptador &#8211; Pattern Adapter &#8211; Patrones de diseño</title>
		<link>http://software.guisho.com/patron-adaptador-pattern-adapter-patrones-de-diseno</link>
		<comments>http://software.guisho.com/patron-adaptador-pattern-adapter-patrones-de-diseno#comments</comments>
		<pubDate>Thu, 19 Nov 2009 21:41:37 +0000</pubDate>
		<dc:creator>guisho (Luis H. Fernandez)</dc:creator>
				<category><![CDATA[Buenas prácticas - Mejores Prácticas]]></category>
		<category><![CDATA[Ingeniería de software]]></category>
		<category><![CDATA[Patrones de diseño]]></category>
		<category><![CDATA[Patrones Estructurales]]></category>
		<category><![CDATA[adaptador]]></category>
		<category><![CDATA[adapter pattern]]></category>
		<category><![CDATA[patron adaptador]]></category>
		<category><![CDATA[patron adapter]]></category>
		<category><![CDATA[patrones]]></category>
		<category><![CDATA[wrapper]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=179</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/patron-adaptador-pattern-adapter-patrones-de-diseno&amp;text=Patron Adaptador &#8211; Pattern Adapter &#8211; Patrones de diseño&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
El patrón estructural que ahora vamos a analizar es muy eficaz así como sencillo. Se puede utilizar en muchos contextos y es de especialidad utilidad cuando se utilizan códigos o librerías ajenos al que estamos utilizando y sobre el que no tenemos control. Este patrón se le conoce como adaptador o adapter en inglés, aunque [...]


Related posts:<ol><li><a href='http://software.guisho.com/prototype-pattern-patron-prototipo-patrones-de-diseno' rel='bookmark' title='Permanent Link: Prototype Pattern &#8211; Patron Prototipo &#8212; Patrones de diseño'>Prototype Pattern &#8211; Patron Prototipo &#8212; Patrones de diseño</a></li>
<li><a href='http://software.guisho.com/builder-pattern-interfaces-fluidas-patrones-de-diseno' rel='bookmark' title='Permanent Link: Builder Pattern, Interfaces Fluidas&#8211; Patrones de diseño'>Builder Pattern, Interfaces Fluidas&#8211; Patrones de diseño</a></li>
<li><a href='http://software.guisho.com/abstract-factory-pattern-patrones' rel='bookmark' title='Permanent Link: Abstract Factory Pattern &#8211; Patrones'>Abstract Factory Pattern &#8211; Patrones</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/patron-adaptador-pattern-adapter-patrones-de-diseno&amp;text=Patron Adaptador &#8211; Pattern Adapter &#8211; Patrones de diseño&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p><a href="http://software.guisho.com/wp-content/uploads/2009/11/adaptador.jpg"><img class="alignleft size-full wp-image-181" title="adaptador" src="http://software.guisho.com/wp-content/uploads/2009/11/adaptador.jpg" alt="adaptador" width="240" height="240" /></a>El patrón estructural que ahora vamos a analizar es muy eficaz así como sencillo. Se puede utilizar en muchos contextos y es de especialidad utilidad cuando se utilizan códigos o librerías ajenos al que estamos utilizando y sobre el que no tenemos control. Este patrón se le conoce como adaptador o adapter en inglés, aunque algunos lo llaman también wrapper, que viene siendo como envoltorio. Ambos nombres tienen bastante sentido y explican el por qué de este patrón.</p>
<p><span id="more-179"></span></p>
<p>Antes de comenzar con código o parecido, pensemos en este problema. En muchos países se utilizan las espigas redondas en los tomacorrientes, y en otros las espigas planitas. En ocasiones tenemos un dispositivo que tiene 3 espigas y el tomacorrientes 2. Sin embargo sabemos que el aparato que deseamos conectar &#8220;entiende&#8221; la corriente eléctrica, &#8220;la acepta&#8221;, aunque la interfaz para conectarse a ella sea una distinta a la que posee. ¿Qué hacemos en estos casos? Usamos un adaptador! O un convertidor, o un transformador, cómo le querramos llamar.  Pues lo mismo sucede con el software. Sucede a menudo que nos encontramos con librerías que pueden sernos de utilidad, pero que existe la necesidad de adaptarnos a ellas. En esos casos tenemos dos opciones: modificar todo nuestro código para que se adapte a la librería, o podemos crear un adaptadro que traduzca lo nuestro a lo de ellos y lo de ellos a lo nuestro. Un ejemplo sencillo en el mundo Java es el de los Enumeration y los Iterators. Ambos tienen un hasNext()  o  un hasMoreElements() que hacen lo mismo; al igual que un next() y un nextElement() que hacen lo mismo. Imaginemos todo lo queremos manejar con Iterators, podemos crear un adaptador que nos &#8220;convierta&#8221; entre Iterator y Enumeration.</p>
<p>Vamos con el usual ejemplo. Imaginemos tenemos un sistema que maneja coches, barcos, aviones y parecidos. Generalmente los motores que se usan son de gasolina, pero las nuevas tendencias han popularizado los motores eléctricos. Para simplificar mi caso y mostra bien el punto, tenemos que el proveedor de vehículos eléctricos nos provee sus librerías para el motor eléctrico que es prácticamente igual a nuestras implementaciones pero con otros nombres (prender en vez de encender, &#8220;mover más rápido&#8221; en vez de acelerar, etc.), y tiene una restricción extra: para poder acelerar o detener el motor, este tiene que estar conectado. Y surge el problema ¿cómo hacemos para nuestras librerías puedan hacer uso del motor eléctrico? Podríamos reescribirlas todas, pero el tiempo que eso nos tomaría sería mucho. Además sabemos que existirían problemas que nuestras librerías ya han solucionado.</p>
<p>Como nos gusta ser elegantes en nuestro uso de objetos, hace muchos años creamos una clase abstracta (pensamos también hacer una interfaz, pero la clase abstracta nos provee otros métodos útiles):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.guisho.software.patrones.adapter</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> Motor <span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> encender<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> acelerar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apagar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">//...mas metodos que hacen muchas cosas</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Y tenemos nuestras implementaciones de algunos motores, por ejemplo el motor económico:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.guisho.software.patrones.adapter</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MotorEconomico <span style="color: #000000; font-weight: bold;">extends</span> Motor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> MotorEconomico<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;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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><span style="color: #0000ff;">&quot;Craendo motor economico&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> encender<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Encendiendo motor economico.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> acelerar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Acelerando motor economico.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apagar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Apagando motor economico.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Y el motor gastón (que ya no se vende tanto!):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.guisho.software.patrones.adapter</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MotorGaston <span style="color: #000000; font-weight: bold;">extends</span> Motor <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> MotorGaston<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;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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><span style="color: #0000ff;">&quot;Creando el motor gaston&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> encender<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Bum, bum....encendiendo motor gaston&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> acelerar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Buuuuuuuuuuuum, acelerando y gastando muuuucha gas&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apagar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Apagando motor gaston&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Estas clases siempre nos han funcionado bien, y de hecho tienen muchas cosas como servicios, mantenimientos y otros, que usamos gracias a la interfaz motor. Por ejemplo es común que usemos cosas como estás:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">        Motor motor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MotorEconomico<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">encender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">acelerar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">apagar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #666666; font-style: italic;">//hacer mas cosas....</span>
        motor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MotorGaston<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">encender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">acelerar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">apagar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ahora la empresa que construye motores eléctricos nos manda su propia implementación que va así:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MotorElectrico <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">boolean</span> conectado <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> MotorElectrico<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Creando motor electrico&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">conectado</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> conectar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Conectando motor eléctrico&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">conectado</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> activar<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;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">conectado</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;No se puede activar porque no esta conectado el motor electrico&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</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><span style="color: #0000ff;">&quot;Esta conectado, activando motor electrico....&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moverMasRapido<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;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">conectado</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;No se puede mover rapido el motor electrico porque no esta conectado...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</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><span style="color: #0000ff;">&quot;Moviendo mas rapido...aumentando voltaje&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> detener<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;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">conectado</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;No se puede detener motor electrico porque no esta conectado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</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><span style="color: #0000ff;">&quot;Deteniendo motor electrico&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> desconectar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Desconectando motor electrico...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">conectado</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como vemos, este motor hace lo mismo que el nuestro, pero de manera y con llamadas un poco diferentes. ¿Cómo hacemos para integrar este MotorEléctrico al resto de nuestro sistema? Así es, con un adaptador o adapter!<br />
El adapter &#8220;envuelve&#8221; al objeto extraño (por eso le llaman wrapper también, ya que wrapper viene siendo envoltorio).</p>
<p>Nuestro adaptador se escribiría así:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.guisho.software.patrones.adapter</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MotorElectricoAdapter <span style="color: #000000; font-weight: bold;">extends</span> Motor<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> MotorElectrico motorElectrico<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> MotorElectricoAdapter<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;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">motorElectrico</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MotorElectrico<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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><span style="color: #0000ff;">&quot;Creando motor Electrico adapter&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> encender<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Encendiendo motorElectricoAdapter&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">motorElectrico</span>.<span style="color: #006633;">conectar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">motorElectrico</span>.<span style="color: #006633;">activar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> acelerar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Acelerando motor electrico...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">motorElectrico</span>.<span style="color: #006633;">moverMasRapido</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apagar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</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><span style="color: #0000ff;">&quot;Apagando motor electrico&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">motorElectrico</span>.<span style="color: #006633;">detener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">motorElectrico</span>.<span style="color: #006633;">desconectar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como ven el adapter se encarga no solo de corregir los nombres de los métodos, sino también cosas como conectar y desconectar el motor, cosas que a nuestra implementación no le importan. Pero lo más importante es que ahora podemos utilizar esta implemetnación de Motor en nuestro sistema utilizando la implementación de ellos. Por ejemplo podemos hacer cosas como esta:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">        Motor motor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MotorEconomico<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">encender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">acelerar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">apagar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        motor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MotorGaston<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">encender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">acelerar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">apagar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        motor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MotorElectricoAdapter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">encender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">acelerar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        motor.<span style="color: #006633;">apagar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>El patrón adapter aparece en todos lados, aunque muchas veces no se le llama adapter específicamente. Ahora que lo conocemos lo podemos usar en nuevos proyectos, o tal vez puede solucionarlos problemas que resolvimos a medias en algún software por ahí. Como siempre les <a href="http://software.guisho.com/wp-content/uploads/2009/11/adapter.zip">dejo el código fuente.</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>Related posts:<ol><li><a href='http://software.guisho.com/prototype-pattern-patron-prototipo-patrones-de-diseno' rel='bookmark' title='Permanent Link: Prototype Pattern &#8211; Patron Prototipo &#8212; Patrones de diseño'>Prototype Pattern &#8211; Patron Prototipo &#8212; Patrones de diseño</a></li>
<li><a href='http://software.guisho.com/builder-pattern-interfaces-fluidas-patrones-de-diseno' rel='bookmark' title='Permanent Link: Builder Pattern, Interfaces Fluidas&#8211; Patrones de diseño'>Builder Pattern, Interfaces Fluidas&#8211; Patrones de diseño</a></li>
<li><a href='http://software.guisho.com/abstract-factory-pattern-patrones' rel='bookmark' title='Permanent Link: Abstract Factory Pattern &#8211; Patrones'>Abstract Factory Pattern &#8211; Patrones</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/patron-adaptador-pattern-adapter-patrones-de-diseno/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>El ejemplo del constructor</title>
		<link>http://software.guisho.com/el-ejemplo-del-constructor</link>
		<comments>http://software.guisho.com/el-ejemplo-del-constructor#comments</comments>
		<pubDate>Mon, 17 Aug 2009 21:18:03 +0000</pubDate>
		<dc:creator>guisho (Luis H. Fernandez)</dc:creator>
				<category><![CDATA[Ingeniería de software]]></category>
		<category><![CDATA[albañil]]></category>
		<category><![CDATA[desarrollo de software]]></category>
		<category><![CDATA[inofrmáticos albañiles]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=174</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/el-ejemplo-del-constructor&amp;text=El ejemplo del constructor&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
Hace ya algunos años lei por primera vez este texto. Quisiera poner la referencia del autor, pero no encontré quien lo pudo haber escrito,  así que si alguien me dice a quién darle el crédito, con gusto se lo daremos Aparte de lo gracioso en sí mismo, ahora que lo leo años después, desafortunadamente es [...]


No related posts.]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/el-ejemplo-del-constructor&amp;text=El ejemplo del constructor&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p><a href="http://software.guisho.com/wp-content/uploads/2009/08/albanil.jpg"><img class="alignleft size-medium wp-image-175" title="albanil" src="http://software.guisho.com/wp-content/uploads/2009/08/albanil-300x225.jpg" alt="albanil" width="300" height="225" /></a>Hace ya algunos años lei por primera vez este texto. Quisiera poner la referencia del autor, pero no encontré quien lo pudo haber escrito,  así que si alguien me dice a quién darle el crédito, con gusto se lo daremos <img src='http://software.guisho.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Aparte de lo gracioso en sí mismo, ahora que lo leo años después, desafortunadamente es muy acertado. Digo desafortunadamente, porque tenemos que cambiar la manare de hacer proyectos de software. Urgentemente. Nuevas metodologías, nuevas herramientas, nuevos paradigmas. Actualmente el proceso de hacer software es más complicado de lo que, en mi humilde opinión, debería ser. ¿Qué piensan?</p>
<p><span id="more-174"></span></p>
<p><strong>5 de enero</strong><br />
Hoy me han llevado al lugar de construcción por primera vez. La situación es perfecta: tiene parada de bus cercana y enfrente hay una cafetería con comida casera. El viejo edificio de apartamentos, al que va a sustituir nuestra nueva construcción, lleva un año al borde de la ruina. Mi propia empresa ha colocado varios puntales que, por el momento, han ido evitando que el caduco edificio reviente por sus múltiples grietas. La construcción de este megalito ladrillo comenzó hace cinco años, y aunque los pisos superiores nunca llegaron a recibir el agua, la electricidad y el enfoscado de las paredes, en diez meses los cimientos ya se habían desplazado peligrosamente y las vigas presentaban peligrosas fisuras. La cansada torre de viviendas ya ha cumplido su propósito y ahora nosotros la conduciremos a una muerte dulce&#8230; Por supuesto, el viejo edificio no será demolido hasta después de construir y probar el nuevo, lo que nos deja poco espacio de maniobra; pero no vamos a dejar a todas esas familias en la calle durante la construcción. De cualquier modo, los vecinos de la vieja y decadente estructura nos miran con recelo. Saben que el nuevo edificio tendrá viviendas cómodas, pero algunos de los residentes no podrán costearlas. Ni sé qué va a ser de la gente, ni es asunto mío. Llegan los primeros camiones de ladrillos.</p>
<p><strong>6 de enero</strong><br />
Me han presentado a Matías, la persona a quien &#8220;voy a reportar&#8221;. No me han dicho si es el capataz, el jefe de obra, el aparejador, o el arquitecto; sólo me han dicho que todo lo que tenga que &#8220;reportar&#8221; se lo &#8220;reporte&#8221; a él. Así que, por donde él diga, yo zaca-zaca, como una locomotora. Esa es la definición que me han dado de nuestra metodología. He buscado &#8220;reportar&#8221; en el diccionario, y no aparece.</p>
<p><strong>10 de febrero</strong><br />
En algo más de un mes, hemos cavado medio metro de cimientos. Ayer Matías nos dijo que empezáramos a poner ladrillos, porque el tiempo designado para la cimentación se había agotado hace dos semanas. No aceptó nuestras excusas de que las prometidas excavadoras aún no habían llegado y que nos habíamos visto obligados a cavar con las paletas de enyesar. Un compañero se trajo un pala de cavar que guardaba de una obra anterior y casi le echan por razones deontológicas. Según Matías, lo que pasa es que frecuentamos demasiado la cafetería. El asunto se ha zanjado con un &#8220;hale&#8221;, a levantar paredes y luego que cada palo aguante su &#8220;vela&#8221;. El trabajo sin planos es dificultoso. Los cimientos tienen una forma algo pintoresca. He pedido una plomada para que las paredes queden verticales y he recibido improperios poniendo en duda mi masculinidad. Ya sé que Matías no es el arquitecto, porque el arquitecto es un tal Ignacio. Pasó a supervisar la obra el otro día. Aunque aún no había nada que ver. Me han llegado rumores, aunque no son muy dignos de crédito, de que existen fotocopias de planos.</p>
<p><strong>1 de junio</strong><br />
Anoche estuvimos hasta la siete de la mañana cubriendo con tablas y enmoquetando el espacio que algún día ocupará el despacho de la planta, aunque el edificio no es aún más que una maraña de vigas de todos los tamaños y algunas paredes que habrá que tirar más tarde están en el sitio equivocado. Hemos traído baterías para los fluorescentes y unos muebles de caoba preciosos. Por suerte, todo estuvo a punto para la demo. Izamos al cliente con la grúa hasta su futuro despacho y pudo contemplar la vista que disfrutaría desde el emplazamiento. El viento hizo que la pared oeste, que dos de mis compañeros sujetaban con la espalda, se derrumbara con gran estruendo sobre la mesa de caoba en el peor momento. Gracias a Dios, el cliente fue comprensivo: esto pasa siempre en las demos, y él está curado de espanto, dijo mientras el sacudíamos el polvo del traje. Dice que el lunes que viene vendrá a probar las instalaciones sanitarias. Supliremos con cubos la inexistencia de tuberías.</p>
<p><strong>5 de marzo</strong><br />
Han transcurrido casi catorce meses. Llevamos ya siete de retraso y el edificio no acaba de superar el estado de &#8220;casi terminado&#8221;. Soy de los pocos albañiles que no ha cambiado de obra en este tiempo. Matías está consumido por la zozobra y se pasa el día en la cafetería trasegando Soberanos. El arquitecto no ha vuelto a pasar por aquí. Los rumores dicen que existieron unos planos, pero no eran de un bloque de pisos, sino de un polideportivo. Por lo visto, en las reuniones del comité de construcción se dijo que la filosofía era la misma y que sólo harían falta modificaciones mínimas. Ahora comprendo por qué nos hicieron instalar aros de baloncesto en el hueco del ascensor. Siempre dije que acabaríamos teniendo que quitarlos o aquello no era un hueco de ascensor, que era cuestión de lógica. Matías siempre me contestaba que no le viniera con tecnicismos. Estoy perdiendo la vocación de constructor. He decidido apuntarme por las tardes a un curso de informática, a ver si puedo cambiar de vida. Este oficio mío no es serio.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/el-ejemplo-del-constructor/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NTR: No Te Repitas (DRY: Don&#8217;t Repeat Yourself)</title>
		<link>http://software.guisho.com/ntr-no-te-repitas-dry-dont-repeat-yourself</link>
		<comments>http://software.guisho.com/ntr-no-te-repitas-dry-dont-repeat-yourself#comments</comments>
		<pubDate>Sun, 21 Jun 2009 18:40:01 +0000</pubDate>
		<dc:creator>guisho (Luis H. Fernandez)</dc:creator>
				<category><![CDATA[Ingeniería de software]]></category>
		<category><![CDATA[Buenas prácticas - Mejores Prácticas]]></category>
		<category><![CDATA[dont repeat yourself]]></category>
		<category><![CDATA[dry principle]]></category>
		<category><![CDATA[no te repitas]]></category>
		<category><![CDATA[pragmatic programmer]]></category>
		<category><![CDATA[principio dry]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=169</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/ntr-no-te-repitas-dry-dont-repeat-yourself&amp;text=NTR: No Te Repitas (DRY: Don&#8217;t Repeat Yourself)&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
Hace algunos años ya me topé con el libro &#8220;Pragmatic Programmer&#8221;  de Andrew Hunt y David Thomas. Aconsejo a todos los que tengan la oportunidad que adquieran el libro y le den una buena leída. Muestra de manera clara muchas verdades que conocemos, pero que realmente pocas veces aplicamos. Algún día escribiré un post del [...]


No related posts.]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/ntr-no-te-repitas-dry-dont-repeat-yourself&amp;text=NTR: No Te Repitas (DRY: Don&#8217;t Repeat Yourself)&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p><a href="http://software.guisho.com/wp-content/uploads/2009/06/funny_hatchet.jpg"><img class="alignleft size-medium wp-image-171" title="funny_hatchet" src="http://software.guisho.com/wp-content/uploads/2009/06/funny_hatchet-223x300.jpg" alt="funny_hatchet" width="223" height="300" /></a>Hace algunos años ya me topé con el libro <a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X">&#8220;Pragmatic Programmer&#8221;  de Andrew Hunt y David Thomas</a>. Aconsejo a todos los que tengan la oportunidad que adquieran el libro y le den una buena leída. Muestra de manera clara muchas verdades que conocemos, pero que realmente pocas veces aplicamos. Algún día escribiré un post del libro. Pero hoy quiero enfocarme en el DRY Principle. A este principio se le conoce también como &#8220;single point of thruth&#8221; o &#8220;punto único de verdad&#8221;.</p>
<p>El principio establece que, en un entorno informático, la información no debe repetirse. Es decir, el conocimiento almacenado en un programa informático debe mantenerse en un, y sólo en un, lugar. De primas a primeras, el principio parece evidente, pero cuando investigamos algunas piezas de código, incluso las nuestras, nos damos cuenta que constantemente violamos el principio.</p>
<p><span id="more-169"></span></p>
<p>Para aclarar el concepto vamos con un ejemplo, harto común, con el que nos topamos constantemente. Supongamos que estamos haciendo una parte de un sistema en el cual se almacenará un catálogo de productos, digamos de frutas. Normalmente lo que haríamos es primero crear la base de datos. En la base de datos se tendrían estos campos: id, código, nombre, precio. En la misma base de datos agregamos ciertas restricciones al producto: el código es único y es una cadena de 10 caracteres, el nombre no puede ir vacío, el precio no pueden ser cero (observemos que incluso los tipos de esos datos radican en la creación de la tabla en la base de datos).</p>
<p>Una vez creada la base de datos, nos dirigimos a nuestro IDE para crear el código que trabajará con esos datos. Los enfoques varían mucho, y las maneras de trabajar con esos datos también. Pero en este caso vamos a trabajar con una capa de persistencia basada en un ORM (Object-Ralational Mapping). En algún lado de la configuración del ORM estableceremos que la tabla fruta se mapeará al objeto Fruta. Que el objeto Fruta tendrá un id, un nombre, un código y un precio.</p>
<p>Con nuestro mapeo funcionando, nos dirigimos a crear nuestro objeto Fruta. Nuestro objeto tendrá un BigInt para el id, tendrá un String para el código, otro para el nombre y un BigDecimal para el precio. Ahora crearemos los métodos de accesos (accessor methods) con su set y su get. Si la capa de persistencia nos echa una mano no tendremos que verificar que el código sea único, pero si no, tendremos que codificarlo nosotros.</p>
<p>Ahora, si somos queremos que nuestro código sea escalable y pueda mantenerse a largo plazo, utilizaremos alguna implementación del patrón MVC (Model-View-Controller, o Modelo-Vista-Controlador). En cada uno pondremos los respectivos campos de la fruta: el id, el código, el nombre y el precio. Haremos un listado de las frutas que hay almacenadas, y una forma para agregar y/o editar entradas.  En la vista le diremos al controlador qué desplegar, y haremos una tabla en el View. El model ya lo implementamos, que es nuestro objeto Fruta. Para la forma haremos lo mismo, pondremos los campos de fruta y lo guardaremos. Para proteger nuestro modelo haremos algunas validaciones del lado del servidor, pero para darle una experiencia interactiva al usuario, también haremos validaciones en el lado del cliente. Usaremos, claro está, uno de esos bonitos frameworks que ahora nos hacen la vida más fácil con javascript. La validación del código único requerirá una llamada de Ajax, y las demás serán simples validaciones con Javascript.</p>
<p>Ahora estamos a punto con el manejo de frutas en el sistema. Tenemos un diseño robusto, altamente escalable, muy legible. Pasamos nuestro trabajo orgullosos a control de calidad. Control de calidad nos informa que el máximo de caracteres de código es 10 y en el javascript del cliente nosotros pusimos 10. Bueno, un teclazo de más a cualquiera le pasa, ¿no?. Pasado un tiempo nos dicen que en el mapeo del ORM no pusimos correctamente el precio, y permitimos que sea vacío. Cosas, la prisa hizo que se nos pasara por alto. Pero pasado todo eso, todo bien.<br />
Pasados unos días, nos mandan un requerimiento del cliente que pide que el código en vez de ser de 10 caracteres va a ser de 15 (cambiaron un par de cosas del negocio), y que hará falta otro código: el código de bodega que será de 20 caracteres y también hará falta el peso unitario, que será un decimal opcional.<br />
En nuestra mente comienza a correr el tedioso proceso que tenemos que realizar: hacer los cambios en la base de datos, hacer los cambios en el mapeo, hacer los cambios en el objeto fruta, hacer los cambios en el controller y en el view para la lista, hacer los cambios en el controller y en el view (que incluye dos validaciones de javascript). Que tedio no????? Además&#8230;.qué fácil será confundirnos.</p>
<p>A todo esto la documentación estaba ya lista, y habrá que cambiarla, pero por falta de tiempo creemos que se quedará tal y como está.</p>
<p>He aquí lo que nos pasa cuando violamos el principio DRY. El principio DRY establece que la información, o el conocimiento debe estar almacenado en UN SOLO LUGAR, para evitar el tedio de cambiar las cosas en mil lados cuando hacen falta cambios, además de ahorrarnos la tendencia a cometer errores cuando hay que cambiar muchas cosas que significan lo mismo. Analicemos los cambios: agregar un campo y modificar otro. Este conocimiento, en gran parte está almacenado en la base de datos (aunque no todo, por ejemplo en la base de datos no podemos hacer ciertas validaciones para los códigos, o cosas parecidas).</p>
<p>Por eso ideas como las aplicadas por ruby (convención sobre configuración) han sido muy populares últimamente. Grails ofrece también un enfoque bonito. Por ejemplo, si cambio las restricciones en mi setter de fruta, ¿no sería menester que esas restriccinoes se extendieran a todos lados? Agrego un campo en mi clase, agrego pesoUnitario, ¿no se deberían propagar estos cambios a la base de datos, a los controllers, a los views, al javascript, a la documentación? Por ello también soy un fan de la generación de código: permite reducir la redundancia de la información.</p>
<p>Nadie negará la utilidad de patrones como el MVC, o de ideas como el ORM. Pero a veces esas soluciones crean una sobre ingeniería tan grande que no sé si compensan sus soluciones. En nuestros tiempos donde los IDEs son tan poderosos nos deberían ayudar un poco más en este tema. No hablo de herramientas CASE, hablo de un nuevo enfoque de programación. Esperemos en el futuro surjan ideas y solucinoes nuevas (en las que espero ustedes y yo aportemos nuestra parte) para este problema de la constante violación del DRY. Programar debe simplificarse mucho. Hemos desarrollado soluciones a soluciones y cada año hay nuevas propuestas, pero siento lo mismo que hablaba una vez con alguien: estamos haciendo el mango del hacha más bonito, más durable, más ergonómico, más resistente a golpes&#8230;cuando lo que deberíamos estar haciendo es diseñando una sierra eléctrica!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/ntr-no-te-repitas-dry-dont-repeat-yourself/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calidad del software</title>
		<link>http://software.guisho.com/calidad-del-software</link>
		<comments>http://software.guisho.com/calidad-del-software#comments</comments>
		<pubDate>Sun, 30 Nov 2008 00:15:27 +0000</pubDate>
		<dc:creator>guisho (Luis H. Fernandez)</dc:creator>
				<category><![CDATA[Ingeniería de software]]></category>
		<category><![CDATA[calidad]]></category>
		<category><![CDATA[calidad del software]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=16</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/calidad-del-software&amp;text=Calidad del software&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
Calidad en el software. El término calidad siempre me ha parecido ambiguo. ¿Que hace que un bien o servicio &#8220;posea&#8221; calidad? No sé. Hay procesos de calidad, chequeos de calidad, y mil cosas con calidad, pero nadie entiende a ciencia cierta qué es calidad, aunque todos comprenden el término. Aunque para algunos es aquel software [...]


No related posts.]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/calidad-del-software&amp;text=Calidad del software&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p>Calidad en el software.</p>
<p>El término calidad siempre me ha parecido ambiguo. ¿Que hace que un bien o servicio &#8220;posea&#8221; calidad? No sé. Hay procesos de calidad, chequeos de calidad, y mil cosas con calidad, pero nadie entiende a ciencia cierta qué es calidad, aunque todos comprenden el término. Aunque para algunos es aquel software que no tiene bugs, para otros el que satisface al cliente, para otros es el que optimiza recursos, para otros el que se mira bonito, etc.<span id="more-16"></span></p>
<p>Cuando el término entra al contexto del software, la cosa se pone peor. ¿Qué hace que un software sea uno de calidad o no? Claro, debido a lo ambiguo del término, la discusión en este tema no tendrá fin.</p>
<p>Con todo, lo que hacemos es software, y nos gustaría hacer siempre software de calidad. Para poder etiquetar a un software como uno de calidad, debemos definir algunos atributos para poder poner el software en evaluación. Estos atributos, y sus prioridades, cambian cuando cambia el contexto de software: un sistema para hospitales se juzga de una manera distinta a una página web.</p>
<p>En FFSE R. Glass propone siete atributos del software que le confieren lo que llamamos calidad:<br />
+Portabilidad: la portabilidad implica que un programa puede correr en distintas plataformas, no sólo de sistemas operativos sino diferentes versiones, diferentes ambientes y esquemas.<br />
+Fiabilidad o confiabilidad: el software hace lo que debería hacer, y no &#8220;truena&#8221;.<br />
+Eficiencia: que tanto recursos economiza en tiempo y espacio el software.<br />
+Facilidad de uso: es fácil de usar?<br />
+Evaluable: Es sencillo de examinar? Se le pueden correr fácilmente unit tests?<br />
+Leíble: Es el código expresivo y fácil de comprender?<br />
+Mofificable: Qué tan sencillo es modificar el software.<br />
+Escalibilidad: pueden agregarse funciones de manera rápida y consistente?</p>
<p>Buscando en internet, encontré otros atributos que vale la pena mencionar:</p>
<p>+Compatibilidad: es el software amigable con otros sistemas?<br />
+Seguridad: es el software seguro contra ataques externos?</p>
<p>Todos concordarán que los atributos anteriores son buenos parámetros para medir la calidad de un producto de software. Sin embargo el orden de estos productos varían de proyecto a proyecto. Un proyecto que maneja información confidencial puede que tenga la seguridad muy alta, una página de internet tendrá muy alta la facilidad de uso, un software bancario tomará más en cuenta la fiabilidad que la portabilidad.</p>
<p><strong>El usuario y el código</strong></p>
<p>Al usuario final le viene del norte en qué tecnología corre un programa, o que metodología de desarrollo se utilizó para su creación. Poco le importa si se utilizó un lenguaje de cuarta generación o assembler. El usuario toma por sentado ciertos estándares y cierta funcionalidad. Por ejemplo un usuario espera siempre que en el lugar que aparezca un disquete se grabe su trabajo. Si esto no funciona bien, el usuario tendrá una muy mala percepción del software, y por tanto el software no tendrá mucha calidad.</p>
<p>El otro lado de la moneda es la calidad del código. ¿Es sencillo de encontrar errores? ¿Hay un buen uso del modelo de programación? ¿Se optimiza el uso del hardware? Aquí cada quien tiene un criterio diferente, hay filosofías, metodologías, paradigmas y demás.</p>
<p>Glass expone algo que me llamó mucho la atención: la satisfacción del cliente no es lo mismo que calidad de software. Entre los elementos que evalúa el cliente están cosas como el precio del producto, el diseño, el tiempo de entrega, el soporte y otros. Un mal software puede tener una alta satisfacción (aunque poco probable), y un buen software puede ser mal valuado por el usuario (créanme, sucede). Entonces la política de calidad de la empresa en general es distinta a la política de calidad del software en sí. Pese a muchas opiniones, el software es el código y nada más. Otras cosas le van unidas, pero no son software.</p>
<p>En Pragmatic Programme Hunt y Thomas exponen un punto importante: software lo suficientemente bueno. En ocasiones, especialmente cuando no hay restricciones de calendario, el desarrollador quiere siempre mejorar su software. Irónicamemte un software puede ser siempre mejorado. Hay que aprender cuando un software es lo suficientemnete bueno, porque agregarle funcionalidad o mejoras puede ser hasta contraproducente si no se sabe donde parar. Al final esto es ingeniería de software, y como todas las ingenierías nuestro objetivo es calcular. Si voy a comprar alambre para cercas las plantas de mi casa puedo calcular la circunferencia usando 3 en vez de pi, si voy calcular los materiales necesarios para un edificio redondo seguramente usaré 3.14159 o tal vez más dígitos, y si estoy calculando la órbita de una nave espacial definitivamente usaré más decimales. Hay que saber cual me conviene más. Lo mismo en el software.</p>
<p>Existe un ISO, el 9126 que se dedica a la calidad de software tiene puntos muy interesantes. Especialmente me gustó la división que hacen para medir la calidad: la calidad del modelo, la calidad de la métrica externa, la de la métrica interna y la calidad en el uso de las métricas. Está también CMMI que se dedica a la calidad estandarizar la calidad del software y la calidad del proceso productivo de éste.</p>
<p>En fin la calidad de software es algo que radica entre lo objetivo y lo subjetivo. Hay mucha leña por ahí para partir, porque el universo del software es también dinámico y los parámetros también cambian. Cada equipo de trabajo tiene sus propios parámetros. Lo que quiero recalcar es que cada equipo debe definir cuales son sus parámetros para medir la calidad de su software. Luego modelar, diseñar, implementar y mantener el software apegado a esos claves. En cada proyecto el orden de prioridades cambian también y hay que tenerlo presente, porque al final de los cantares lo que queremos es que nuestro software funcione, le guste al usuario y se acerque lo más ppsible a hacer lo que tiene que hacer.</p>
<p><small><strong><br />
Luis H. Fernandez<br />
luishernan@gmail.com<br />
</strong></small><br />
Algunos links.</p>
<p>http://synergix.wordpress.com/2008/07/02/modelo-de-calidad-tradicional-del-software/</p>
<p>http://blog.xebia.com/2008/11/05/what-exactly-is-software-quality/</p>
<p>http://en.wikipedia.org/wiki/Software_quality</p>
<p>http://satc.gsfc.nasa.gov/support/STC_APR96/qualtiy/stc_qual.PDF</p>
<p>http://en.wikipedia.org/wiki/ISO_9126</p>
<p>http://www.bth.se/tek/besq.nsf/(WebFiles)/CF1C3230DB425EDCC125706900317C44/$FILE/chapter_1.pdf</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/calidad-del-software/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Español, español&#8230;español en inglés</title>
		<link>http://software.guisho.com/espanol-espanolespanol-en-ingles</link>
		<comments>http://software.guisho.com/espanol-espanolespanol-en-ingles#comments</comments>
		<pubDate>Wed, 19 Nov 2008 23:26:51 +0000</pubDate>
		<dc:creator>guisho (Luis H. Fernandez)</dc:creator>
				<category><![CDATA[Ingeniería de software]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=7</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/espanol-espanolespanol-en-ingles&amp;text=Español, español&#8230;español en inglés&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
No sólo en el software, sino que en muchas áreas, el inglés ha sido una lengua que ha metido sus narices en todas las culturas. En la nuestra con especial fuerza: programamos en inglés. Al menos yo, no conozco un lenguaje de programación cuyas palabras clave estén escritas en otro idioma. Tiene sus ventajas el [...]


No related posts.]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/espanol-espanolespanol-en-ingles&amp;text=Español, español&#8230;español en inglés&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p>No sólo en el software, sino que en muchas áreas, el inglés ha sido una lengua que ha metido sus narices en todas las culturas. En la nuestra con especial fuerza: programamos en inglés. Al menos yo, no conozco un lenguaje de programación cuyas palabras clave estén escritas en otro idioma. Tiene sus ventajas el uso del inglés: es más corto. Pero sobro todo tiene la ventaja de que todos podemos ponernos de acuerdo en un idioma para comunicarnos.<span id="more-7"></span></p>
<p>Y no sólo las palabras claves se escriben en inglés. Los foros, las comunidades se construyen en inglés. Las documentaciones y los bugs, todo se hace en inglés. Cuando nos topamos con algún problema extraño, llegaremos con foros en los que muchas veces ninguno de los participantes habla inglés como lengua materna, pero todos hablan inglés para intercomunicarse. Me causa gracia cuando en un foro me comunico con personas de Irlanda, India, Brasil, Rumania, México, Alemania, Rusia y etc. Me asobmra que todos nos podamos comunicar. De no existir el inglés simplemente no habría un medio de comunicación. Cuando busco un software nuevo, o alguna herramienta por ahí, espero que la página esté en inglés. Incluso cuando la página tiene una versión española, prefiero batirme con la que está escrita en la lengua de shakespeare. Sin duda el inglés permite la existencia y el crecimiento de una comunidad muy grande de desarrolladores.</p>
<p>Pero hablar español nos cuesta plata. Hacer programas en español nos cuesta más plata y tiempo que hacerlos en inglés. Usar ñ,á,é,í,ó,ú,ü,¿,¡ y alguno que otro por ahí es sumamente caro. Nuestro idioma tiene poco o ninguna influencia en el mundo del software. Tanto así que la misma palabra &#8220;software&#8221; la tuvimos que traer del inglés tal y como estaba. Sí, el inglés nos ayuda a aprender, pero nuestras aplicaciones las escribimos en español. Y eso no siempre es tan sencillo como parece.  Muchos de los que leen estas letras sin duda han tenido más de alguna rabieta cuando ven que en su software aparecen Ã­,Ã¡&amp;#65533;,Ã©,Ã  y otro buen montón de simbolitos raros. O cuando uno tiene que hacer maravillas para hacer que funcione una base de datos con encoding latin-1, un server con ISO-8859-1 y una aplicación con UTF-8. Alguien, con un toque de sátira, dijo una vez &#8220;lo bueno de los estándares es que hay muchos&#8221;. Más de alguno se ha puesto a llorar cuando hace un pequeño cambio y ve que cambia al charset que. Todos estamos acostumbrados a términos de charset, asdfasd, asdfasd.</p>
<p>En lo personal intento tratar de usar siempre UTF8, pero no siempre es posible debido a que en ocasiones no tengo el control sobre la plataforma en la que instalaré. Este es el primer post sobre el español y el inglés que haré. Hay muchos libros y muchos lugares en los que se puede obtener información sobre como hacer mejor software, pero esos siempre son en inglés (ironías), así que pienso comenzar la discusión para aquellos que hablamos español&#8230;.¿cómo podemos mejorar el software en español? Lo gracioso es que siempre estaremos escribiendo aplicaciones en español definiéndolas en inglés.</p>
<p style="color:#008;text-align:right;"> </p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/espanol-espanolespanol-en-ingles/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bienvenidos</title>
		<link>http://software.guisho.com/bienvenidos</link>
		<comments>http://software.guisho.com/bienvenidos#comments</comments>
		<pubDate>Wed, 19 Nov 2008 17:39:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ingeniería de software]]></category>
		<category><![CDATA[Bienvenidos]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://software.guisho.com/?p=3</guid>
		<description><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/bienvenidos&amp;text=Bienvenidos&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
Abro este espacio para lograr un poco de discusión y para exponer mis ideas sobre el desarrollo de software. Si estás leyendo estas letras es porque te gusta programar, porque de otra manera no te interesa mucho lo que diré. Creo que el desarrollo de software sufre un estancamiento severo. Hemos desarrollado nuevas e interesantes [...]


No related posts.]]></description>
			<content:encoded><![CDATA[
<div style="float: right; padding-left: 5px;" class="twitterbutton"><a href="http://twitter.com/share?url=http://software.guisho.com/bienvenidos&amp;text=Bienvenidos&amp;via=lhernandez&amp;related=guishogt"><img align="right" src="http://software.guisho.com/wp-content/plugins//easy-twitter-button/i/buttons/es/tweetn.png" style="border: none;" alt="" /></a></div>
<p><span> </span>Abro este espacio para lograr un poco de discusión y para exponer mis ideas sobre el desarrollo de software. Si estás leyendo estas letras es porque te gusta programar, porque de otra manera no te interesa mucho lo que diré.</p>
<p><span> </span>Creo que el desarrollo de software sufre un estancamiento severo. Hemos desarrollado nuevas e interesantes técnicas, modelos de manejo de datos, metodologías de desarrollo, y un sin fin de formas para hacer las cosas. La nuestra es una tarea altamente intelectual y hemos estado viendo como hacernos la vida más sencilla.</p>
<p><span> </span>Sin embargo los tiempos y costos de desarrollo permanecen iguales, sino es que han crecido más. El estallido de GUIs con mucho entorno gráfico han añadido dificultad a nuestra tarea. El desarrollo en web se ha tornado altamente dominante, y los usuarios esperan webs bonitas, pero a nosotros, por lo general, no nos gusta hacer cosas bonitas, nos gusta hacer cosas que funcionen. Han aparecido los diseñadores gráficos, cosa que no es mala en sí, pero no han aparecido formas de lograr una simbiosis entre programadores y diseñadores gráficos.</p>
<p><span> </span>Todos aprendemos nuevas tecnologías y frameworks constantemente. Aparecen, y queremos usarlos. Algunas de estas ideas fructifican y se convierten en estándares de facto. Muchas otras crean un gran alboroto pero terminan quedando en lo que algunos llaman shelfware, es decir en la librera guardados y considerados como ideas interesantes pero que no aplican.</p>
<p><span> </span>Finalmente, creo que el software es una gran oportunidad de desarrollo para Latinoamérica. La inversión en software es relativamente pequeña: una computadora y alguien que sepa usarla. No se precisan de multimilonarias fábricas ni materias primas. Necesitamos personas educadas que sepan manejar y crear y software. Siempre me he preguntado: ¿por qué de los miles de frameworks que aparecen, hay tan pocos latinoamericanos? Y cuando de casualidad me encuentro con uno de origen latinoamericano, generalmente es brasileño. Este blog tambien quiero que sea una invitación, que lance una espinita, para que desarrolladores hispanos nos pongamos las pilas y creemos. Tenemos la capacidad, aunque nos hemos dormido.</p>
<p><span> </span>Así que bienvenidos, ojalá aparezca pronto la crítica y las ideas. El nuestro es un mundo precioso, así que démosle un toque con ñ.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://software.guisho.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://software.guisho.com/bienvenidos/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

