Skip to main content

¿Qué es un mixin?

En la programación de computadoras, un mixin es una clase que es heredada por otra clase pero que no debe 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 script o aquellos que tienen la capacidad de crear scripts, como JavaScript y Perl.

Los mixins son únicos porque se convierten en parte de una subclase durante la compilación. Sus métodos y constantes están incluidos en la subclase. Otro rasgo único de las clases mixin es que los métodos pueden definirse y vincularse 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 tiempo de ejecución. Esta unión en tiempo de ejecución permite que las mixinas sean muy flexibles.

Un problema común en la herencia múltiple es la ambigüedad en la llamada a 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 distintas versiones del método, 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ó una mezcla 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 idiomas no emulan la funcionalidad completa de los mixins, porque las interfaces solo pueden contener constantes y declaraciones de métodos. Los mixins, por otro lado, pueden contener implementaciones completas de métodos. Esos idiomas que no admiten mixins a menudo tienen alternativas viables que pueden ser inducidos a hacer más o menos lo mismo.