Practical Object Oriented Design in Ruby – Reducing Costs with Duck Typing – En Español

Polimorfismo en su mínima expresión es la descripción que le puedo dar a este capítulo de POODR de @sandimetz. El título es Reducing Costs with Duck Typing, que, claro sin contexto suena bastante chistoso, ¿a que se refiere? ¿por que tipos de patos?

Ok, empezamos con algo familiar, si camina como pato, hace como pato, entonces es un pato, ¿no? En cuanto a cuestiones de clases la explicación viene de la mano de los capítulos anteriores, en si la idea es simplificar los mensajes entre objetos, a traves de usar interfaces únicas entre objetos que permite usar el mismo método o firma para delegar una función o mensaje entre ellos.

Menos plática más código, el ejemplo es el siguiente:

Cuando una clase trata de instanciar varias clases desde un mismo método entonces debemos usar duck typing:

Como pueden ver esto puede llevarnos a tener alta dependencia con diferentes clases y todo en un sólo método. El detalle que explica este capítulo es el cuando y como utilizar duck typing, lo primero es saber identificar cuando es necesario, el ejemplo anterior es típico pero no el único, también cuando vemos validaciones que incluyen kind_of? o is_a?, o la instrucción responds_to? casi seguro tendremos un duck typing en potencia.

La solución está basada en tener un acuerdo entre las clases abstraiendo la funcionalidad, básicamente es nombrar un método que será común entre las clases y al ser utilizado dentro del método que llama a varias clases podrá quitarle la alta dependencia y esconder lo que no es necesario de cada clase.

Los duck types se caracterizan por tener un método firma de entrada, los cual los hace compartir la interfaz pública pero no la implementación.

¿Que les parece? Comentarios bienvenidos…

JL Torres