¿Qué es un Mixin?

En programación de computadoras, un mixin es una clase que es heredada por otra clase pero que no está destinada a ser instanciada. Una sola clase puede heredar muchos mixins, por lo que muchas colecciones de funciones se pueden consolidar fácilmente. Aunque muchos lenguajes de programación comunes usan la metodología mixin, hay muchos más que no lo hacen, incluidos C ++ y Java. En general, los mixins se encuentran en lenguajes de scripting o en aquellos lenguajes que tienen la capacidad de crear scripts, como JavaScript y Perl.

Los mixins son únicos en el sentido de que se convierten en parte de una subclase durante la compilación. Sus métodos y constantes se incluyen en la subclase. Otro rasgo único de las clases mixin es que los métodos se pueden definir y vincular a objetos en tiempo de ejecución. La mayoría de los lenguajes utilizan un enfoque diferente, vinculando y definiendo métodos en tiempo de compilación en lugar de en tiempo de ejecución. Esta unión en tiempo de ejecución permite que los mixins sean muy flexibles.

Un problema común en la herencia múltiple es la ambigüedad en la llamada de métodos, y los mixins pueden resolver este problema porque no siguen exactamente las mismas reglas que la herencia múltiple. Por ejemplo, la herencia múltiple puede crear el llamado «diamante de la muerte», donde una clase padre A tiene subclases B y C, y una clase D hereda de ambas clases B y C. El problema en este escenario es que los métodos que tienen el mismo nombre en las clases A, B y C se puede heredar en la clase D, haciendo múltiples versiones del mismo método sin distinciones claras. Los mixins resuelven este problema manteniendo cada versión del método distinta, en lugar de intentar sobrescribirlas como en la herencia múltiple estándar.

Los mixins no anulan los métodos en las clases en las que se heredan. Por ejemplo, si una clase A definió un método «myMethod» y heredó un mixin B que también definió el método «myMethod», ambos métodos aún podrían llamarse sin ambigüedad, y la implementación de «myMethod» en la clase A aún sería completamente accesible. Exactamente cómo se llamarían estos métodos depende del idioma en el que se implemente el mixin.

Algunos lenguajes de programación que no usan mixins, como Java, usan interfaces para imitarlos. Las interfaces en estos lenguajes no emulan la funcionalidad completa de mixins, porque las interfaces solo pueden contener constantes y declaraciones de métodos. Mixins, por otro lado, puede contener implementaciones completas de métodos. Los lenguajes que no admiten mixins suelen tener alternativas viables a las que se puede persuadir para que hagan más o menos lo mismo.