En programación, la herencia y el polimorfismo son dos conceptos fundamentales orientados a objetos. En Dart, estos conceptos se implementan de manera muy efectiva e intuitiva. Empecemos por la herencia.
Herencia
La herencia es un mecanismo que permite que una clase herede las propiedades y métodos de otra clase. La clase de la que hereda se llama subclase o clase derivada, y la clase de la que hereda se llama superclase o clase base.
En Dart, la herencia se implementa utilizando la palabra clave 'extends'. Por ejemplo, considere la siguiente clase base 'Animal':
clase Animal { comer vacío() { print('Comiendo...'); } }
Podemos crear una subclase 'Perro' que hereda de 'Animal' de la siguiente manera:
clase Perro extiende Animal { corteza vacía() { print('Ladrando...'); } }
Ahora, un objeto de la clase 'Dog' puede acceder tanto al método 'eat()' de la clase base 'Animal' como al método 'bark()' de la clase misma:
var d = Perro(); comer(); // Salida: Comiendo... d.ladrar(); // Salida: Ladrando...
Esto es herencia. La clase 'Perro' hereda todas las propiedades y métodos de la clase 'Animal' y también puede agregar sus propios métodos y propiedades.
Polimorfismo
El polimorfismo es un concepto que permite que un objeto sea tratado como una instancia de una clase base, aunque en realidad sea una instancia de una subclase. Esto es muy útil cuando quieres escribir código que pueda manejar objetos de muchas clases diferentes, siempre y cuando todas esas clases sean subclases de una determinada clase base.
En Dart, el polimorfismo se implementa mediante el uso de variables de tipo base para hacer referencia a objetos de subclase. Por ejemplo, considere la siguiente clase base 'Forma' y dos subclases 'Círculo' y 'Cuadrado':
clase abstracta Forma { sorteo nulo(); } clase Círculo extiende Forma { sorteo vacío() { print('Dibujando un círculo...'); } } clase Cuadrado extiende Forma { sorteo vacío() { print('Dibujando un cuadrado...'); } }
Ahora, podemos crear una función que acepte un objeto de tipo 'Forma' y llame al método 'draw()' en él:
void drawShape(Forma de forma) { forma.draw(); }
Luego podemos pasar un objeto 'Círculo' o 'Cuadrado' a esta función, y se llamará al método 'draw()' apropiado:
var c = Círculo(); dibujarForma(c); // Salida: Dibujando un círculo... var s = Cuadrado(); dibujarForma(s); // Salida: Dibujando un cuadrado...
Esto es polimorfismo. La función 'drawShape()' puede manejar cualquier objeto que sea una instancia de 'Shape' o cualquiera de sus subclases.
En resumen, la herencia y el polimorfismo son dos conceptos muy poderosos en la programación orientada a objetos que le permiten escribir código más reutilizable y flexible. En Dart, estos conceptos se implementan de una manera muy intuitiva y fácil de usar, lo que convierte a Dart en una excelente opción para el desarrollo de aplicaciones.