🤔 ¿Conoces la herencia?
La herencia nos permite crear nuevas clases que reutilizan, extienden y/o modifican el comportamiento de clases preexistentes. La clase preexistente se llama superclase y la nueva clase que estamos creando se llama clase derivada. En Dart, sólo podemos heredar una superclase, pero la herencia es transitiva. Si la class Hatch
deriva de la class Car
y esta clase deriva de la class Vehicle
, entonces Hatch derivará de Vehicle. Usa extends
para crear la clase derivada, y super
cuando quieras referirte a la superclase.
Cuando class Car extends Vehicle
, todas las propiedades, variables, funciones implementadas en class Vehicle
estarán disponibles en class Car
.
También es posible sobrescribir las funciones de la superclase.
Así que: Se utiliza extends
cuando se quiere crear una versión más específica de una clase.
2⃣️ Usando implements
Supongamos que se quiere crear una clase Coche propia, sin heredar todas las propiedades, variables y funciones de la clase Vehículo, pero se quiere heredar sólo el tipo Vehículo. Para ello, la clase Car debe implementar la interfaz Vehicle.
Dart permite implementar múltiples clases o interfaces.
✍️ Ejemplo
Imagina que necesitas implementar un pájaro y un pato, ambos son animales, pero el pájaro sólo puede volar y el pato puede volar y nadar. Haremos esto usando lo que sabemos hasta ahora.
Primero, crearemos la superclase y los comportamientos:
Ahora, crearemos Bird
y Duck
, implementando los comportamientos adecuados:
Nota, que usando implements
tuvimos que implementar las funciones fly
y swim
, ¡repitiendo código! No era posible heredar las implementaciones de comportamiento de esta manera. ¿Hay alguna forma de reutilizar el código de estos comportamientos? Sí, ¡lo veremos a continuación!
3⃣️ Usando con
Mixin es un tipo diferente de estructura, que sólo se puede utilizar con la palabra clave with
y se utiliza para incluir fragmentos de código común, yo diría, reutilizar el código.
Los mixins son una forma de reutilizar el código de una clase en múltiples jerarquías de clases (dartlang.org).
Así es como los mixins realizan la implementación anterior:
Puedes reemplazar abstract class
por mixin
si lo prefieres.
Los mixins son una forma de abstraer y reutilizar una familia de operaciones y estado, es similar a la reutilización que obtienes al extender una clase, pero no son múltiples herencias, sigue habiendo una sola superclase. Funcionan poniendo la implementación del mixin encima de la superclase para crear una nueva clase. En el ejemplo anterior, es posible reescribir una función, los mixins permiten esto.
✌️Gracias
Esta fue mi primera historia en Medium, espero que os haya gustado 😃.
Me gustaría agradecer a Romain Rastel por la increíble historia sobre mixins, te aconsejo que leas para entender aún más sobre este tema.
Cualquier pregunta, no dudes en preguntar abajo.