Java Mixins, un ejemplo sencillo

¿Qué son los Java Mixins? . El concepto de Mixin esta asociado a la reutilización de código. Un mixin es una clase que contiene código para que otras clases lo reutilicen pero que no se apoya en la herencia para hacerlo. Dicho así suena un poco extraño pero vamos a ver un ejemplo sencillo que nos aclare el tema. Supongamos que tenemos una jerarquía de clases orientadas a muebles.

java mixins

Tenemos la clase padre Mueble y varias clases hijas que heredan sus propiedades. Hasta aquí todo es normal .


package com.arquitecturajava;

public class Mueble {

	private String color;

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}
}



package com.arquitecturajava;

public class Armario extends Mueble {

}


package com.arquitecturajava;

public class Mesa extends Mueble{

}


package com.arquitecturajava;

public class Silla  extends Mueble{

}

En este caso solo hemos añadido una propiedad a la clase Mueble y todas las clases hijas la heredan. Ahora bien ¿que pasaría si queremos añadir la funcionalidad de plegar un mueble?. Es aquí donde tenemos un problema ya que la Silla y la Mesa se pueden plegar pero no así el Armario. ¿Cómo solventamos este problema?.

java mixins problema

Java Mixins

A partir de Java 8 , usar Java Mixins es muy sencillo . Recordemos que los interfaces soportan default methods , es decir métodos con implementación propia. Por lo tanto nos basta con construir un interface que implemente el método plegar.

java mixins java8

Vamos a ver el código de este interface:


package com.arquitecturajava;

public interface Plegable {

	public  default void plegar() {
		
		System.out.println("el mueble se pliega");
	}
}


Modificamos nuestras clases para que implementen el interface:

package com.arquitecturajava;

public class Silla  extends Mueble implements Plegable{

}
package com.arquitecturajava;

public class Mesa  extends Mueble implements Plegable{

}

Podemos probar el código desde un programa main y ver como la clase Silla y Mesa implementa la nueva funcionalidad.


package com.arquitecturajava;

public class Principal {

	public static void main(String[] args) {
		
		Mesa m= new Mesa();
		m.plegar();

	}

}


El resultado imprimira por la consola:

java mixins pliega

Hemos usado un Java Mixin para reutilizar funcionalidad dentro de una jerarquía de clases.

Otros artículos relacionados: Java y Constructores  , Java 8 Lambda  , Java Streams

It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

8 Responses to Java Mixins, un ejemplo sencillo

  1. Anthony Piñero 9 Noviembre, 2016 at 16:37 #

    Muy interesante! saludos!

    • Cecilio Álvarez Caules 9 Noviembre, 2016 at 16:55 #

      gracias 🙂

  2. Dudoso 9 Noviembre, 2016 at 20:59 #

    Tengo una duda. ¿Porqué usar una interface y no una clase que extienda de mueble MueblePlegable con esa implementación, y mesa y silla extienden de MueblePlegable? ¿Qué mejora aporta?

    • Cecilio Álvarez Caules 11 Noviembre, 2016 at 18:38 #

      Permite mantener una Jerarquía de clases sencillas .En muchas casos nos encontramos con situaciones que implican añadir una pequeña funcionalidad adicional y añadimos más y más clases a la jerarquía que la acaba complicando en exceso

  3. Carol 25 Noviembre, 2016 at 11:11 #

    muy ilustrativo, gracias!

    • Cecilio Álvarez Caules 28 Noviembre, 2016 at 18:29 #

      de nada 🙂

  4. Freddy_cuban 29 Diciembre, 2016 at 20:49 #

    Interesante!

    • Cecilio Álvarez Caules 30 Diciembre, 2016 at 16:57 #

      gracias 🙂

Deja un comentario