<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://php.apsique.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Php y otras yerbas - Camina como pato, parpa como pato, ¿será un pato?: Duck Typing - Comentarios</title>
 <link>http://php.apsique.com/contenido/camina_pato_parpa_pato_sera_pato_duck_typing</link>
 <description>Comentarios para &quot;Camina como pato, parpa como pato, ¿será un pato?: Duck Typing&quot;</description>
 <language>es</language>
<item>
 <title>También en ruby.es</title>
 <link>http://php.apsique.com/contenido/camina_pato_parpa_pato_sera_pato_duck_typing#comment-4603</link>
 <description>&lt;p&gt;Lo mismo,pero más claro:&lt;br /&gt;
&lt;a href=&#039;http://www.ruby.org.es/node/73&#039;&gt;El concepto de &quot;Duck Typing&quot;&lt;/a&gt;&lt;/p&gt;
</description>
 <pubDate>Mon, 27 Jun 2005 11:36:12 -0700</pubDate>
 <dc:creator>clbustos</dc:creator>
 <guid isPermaLink="false">comment 4603 at http://php.apsique.com</guid>
</item>
<item>
 <title>Camina como pato, parpa como pato, ¿será un pato?: Duck Typing</title>
 <link>http://php.apsique.com/contenido/camina_pato_parpa_pato_sera_pato_duck_typing</link>
 <description>&lt;p&gt;&lt;a href=&#039;http://www.ultraguia.com.ar/Varios/VocesAnimales.htm&#039;&gt;Parpa&lt;/a&gt;: Voz del pato (por si acaso).&lt;br /&gt;
&lt;img src=&quot;http://php.apsique.com/files/pato.png&quot; style=&quot;float:right; margin:10 px&quot; /&gt; Duck Typing, o &lt;b&gt;Tipeo Pato&lt;/b&gt;, es una forma de pensar los objetos característica de Ruby. Está muy relacionada con la generación de objetos por prototipos, aunque no es lo mismo.&lt;br /&gt;
Para partir, una de las cosas que más me gustó del venerable &lt;a href=&#039;http://www.amazon.com/exec/obidos/tg/detail/-/0201633612?v=glance&#039;&gt;Design Patterns&lt;/a&gt; de Gamma (y los otros tres) fue el capítulo que habla sobre las interfaces. Resumiendo, la idea es que cuando uno crea las clases, lo importante no es definir que tal objeto es de cual o tal clase, sino la interface que presenta a los otros objetos. Muchas de las técnicas tienen como único objetivo entregar una interface más consistente o más simple para lograr un determinado objetivo.&lt;br /&gt;
En lenguajes como C++ o Java, encontramos un enfoque platónico de la generación de objetos. Nosotros creamos nuestras clases &quot;ideales&quot; (e incluso &quot;metaideales&quot;, cuando las definimos como abstractas), que se concretan en objetos reales al instanciarlos. Ahora bien, una vez creado un objeto ya no podemos cambiar su interface, porque para mantener la coherencia de nuestro sistema celestial no podemos hacer que nuestros objetos cambien de interface o de implementación de un momento a otro, ya que la clase es el tipo. El problema es que, muchas veces, necesitamos hacer PRECISAMENTE ESO.&lt;br /&gt;
Para Ruby, las cosas son distintas. Un objeto es sólo eso, un objeto. Si bien puede pertenecer a una clase en particular, su tipo (o que es lo mismo, su interface), puede ser manipulada en cualquier momento.&lt;br /&gt;
Para trabajar, entonces, en Ruby, vamos a preguntarnos más &quot;que es lo que puede hacer este objeto&quot; que &quot;de que clase es este objeto&quot;. O, como dice la hermosa frase: &quot;Camina como pato, grazna como pato, debe ser un pato&quot;&lt;br /&gt;
Entonces, por ejemplo, en vez de definir un método a la Javiana&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
function habla(Animal animal)&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Lo que hacemos en ruby es decir, cuando queramos que nuestro animal hable&lt;br /&gt;
&lt;code lang=&quot;ruby&quot;&gt;&lt;br /&gt;
animal.habla if animal.respond_to?(habla)&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
En términos más técnicos, esto hace que el tipo (o la interface), no sea definida en tiempo de compilación (Java, alguien?), sino en tiempo real. Podemos ir agregándoles piernas, brazos, voz a nuestro objeto a lo largo del programa, hasta el hermoso momento en que hagamos decir a nuestro pato:&lt;br /&gt;
&lt;code lang=&quot;ruby&quot;&gt;&lt;br /&gt;
pato.rebuzna if pato.respond_to?(rebuzna)&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
O sea, claro, mientras rebuzne, puede ser un burro :S&lt;/p&gt;
</description>
 <comments>http://php.apsique.com/contenido/camina_pato_parpa_pato_sera_pato_duck_typing#comments</comments>
 <category domain="http://php.apsique.com/categoria/temas_generales/programacion">Programación</category>
 <category domain="http://php.apsique.com/lenguajes/ruby">Ruby</category>
 <category domain="http://php.apsique.com/categoria/busquedas_comunes/duck_typing">duck typing</category>
 <pubDate>Wed, 22 Jun 2005 20:07:06 -0700</pubDate>
 <dc:creator>clbustos</dc:creator>
 <guid isPermaLink="false">468 at http://php.apsique.com</guid>
</item>
</channel>
</rss>
