
Mixins
Lectura recomendada:
https://medium.com/flutter-community/dart-what-are-mixins-3a72344011f3
En Dart, un mixin es una forma de reutilizar código en múltiples clases sin utilizar herencia tradicional. Un mixin permite agregar funcionalidad adicional a una clase sin necesidad de ser su superclase.
Para crear un mixin en Dart, se utiliza la palabra clave mixin
seguida del nombre del mixin y se define una serie de métodos y/o propiedades que se pueden utilizar en otras clases.
Aquí tienes un ejemplo que muestra cómo se crea y se utiliza un mixin en Dart:
mixin Saludador {
void saludar() {
print('¡Hola!');
}
void despedir() {
print('¡Adiós!');
}
}
class Persona with Saludador {
String nombre;
Persona(this.nombre);
}
void main() {
Persona persona = Persona('Juan');
persona.saludar(); // Imprime "¡Hola!"
persona.despedir(); // Imprime "¡Adiós!"
}
En el ejemplo anterior, se define un mixin llamado Saludador
que proporciona dos métodos: saludar()
y despedir()
. El mixin se declara con la palabra clave mixin
seguida del nombre del mixin.
Luego, se crea una clase Persona
que utiliza el mixin Saludador
utilizando la palabra clave with
. Esto permite que la clase Persona
tenga acceso a los métodos definidos en el mixin.
En la función main()
, se crea un objeto persona
de la clase Persona
y se puede llamar a los métodos saludar()
y despedir()
que provienen del mixin Saludador
.
Los mixins son útiles cuando se desea agregar funcionalidad adicional a varias clases sin tener que repetir código o establecer una relación de herencia compleja. Permiten una composición flexible y reutilización de código en Dart. Es importante destacar que una clase puede usar múltiples mixins a través de la palabra clave with
.
Ejercicio de la Sesión
//Clase abstracta Animal
abstract class Animal {}
//Clases que heredan de Animal
class Mamifero extends Animal {}
class Ave extends Animal {}
class Pez extends Animal {}
//mixins
mixin Volador {
void volar() => print("Estoy volando");
}
mixin Caminante {
void caminar() => print("Estoy caminando");
}
mixin Nadador {
void nadar() => print("Estoy nadando");
}
//Mamiferos
class Delfin extends Mamifero with Nadador {}
class Murcielago extends Mamifero with Volador, Caminante {}
class Gato extends Mamifero with Caminante {}
//Aves
class Paloma extends Ave with Caminante, Volador {}
class Pato extends Ave with Caminante, Nadador, Volador {}
//Peces
class Tiburon extends Pez with Nadador {}
class PezVolador extends Pez with Nadador, Volador {}
//Función main principal
void main() {
print("Flipper");
final flipper = Delfin();
flipper.nadar();
print("Batman");
final batman = Murcielago();
batman.caminar();
batman.volar();
print("namor");
final namor = Pato();
namor.caminar();
namor.volar();
namor.nadar();
}