En esta publicación, cubriremos casos de uso para implementos, extensiones y con palabras clave. Implementa v / s Extiende v / s Con palabras clave en Dart.
Introducción
Si está desarrollando una aplicación Flutter, debería haber visto muchos casos de uso para implementos, extensiones y palabras clave. Para alguien que nunca ha trabajado con Dart antes, la diferencia entre estas palabras clave no es obvia.
En este post, profundizaremos en estas palabras clave para ampliar nuestra comprensión de Flutter y Dart.
Implements Es Para Forzar el Comportamiento A Través de la Interfaz
En POO, una interfaz es algo que obliga a la clase derivada a implementar una lista de campos y métodos públicos.
Pero a diferencia de otros lenguajes de programación tradicionales como C# y JAVA, Dart no tiene tipos de interfaz explícitos. Cada clase, por defecto, define su propia interfaz compuesta de campos y métodos públicos. Por lo tanto, cada clase puede actuar como una interfaz en Dart.
utilizamos la palabra clave implements para implementar una interfaz. Además, una clase puede implementar múltiples interfaces.
En el ejemplo anterior, la clase D implementa las clases A, B y C, por lo que debe implementar los métodos y campos públicos de esas clases.
Además, dado que Dart no tiene interfaces explícitas, usamos la clase abstracta como interfaz.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Extends Es Para Compartir el Comportamiento A Través de Herencia
En POO, la herencia implica compartir el comportamiento entre clases. No podemos compartir funciones con una interfaz. Por lo tanto, cuando implementamos una clase, no podemos compartir su comportamiento.
En el ejemplo anterior, puede ver que la clase B necesita proporcionar su propia implementación del método doA el comportamiento no se comparte.
Si desea compartir el comportamiento entre estas dos clases, debe usar la palabra clave extends.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
En el ejemplo anterior, dado que B extiende A, puede llamar al método doA() directamente desde el objeto de B.
A diferencia de implementar múltiples interfaces, Dart solo admite herencia única. Por lo tanto, no se puede extender desde varias clases.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
Con Is For Mixin
En POO, un mixin es una clase que contiene métodos para uso de otras clases. A diferencia del enfoque de interfaz y herencia, un mixin no tiene que ser la clase padre de esas otras clases.
Por lo tanto, un mixin no impone restricciones de uso ni fuerza restricciones de tipo.
Normalmente colocará funciones comunes dentro de un mixin. En Dart, hacemos uso del mixin usando la palabra clave con.
Como se muestra en el ejemplo anterior, la implementación de mixin campos puede ser reemplazado si es necesario. Además, una clase puede usar múltiples mixins.
Algunas cosas Más A Tener En Cuenta Sobre Mixin
Usar Una Clase Como Mixin
En Dart, una clase también se puede usar como mixin si la clase no tiene constructor. Por ejemplo, el siguiente código es válido.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
Pero este de abajo no es válido porque la clase D declara un constructor.
class D { D() { } doD() { print('d'); }}class E with D {}
Aplicar Mixin Para Tipos específicos
También puede aplicar un mixin para que se pueda usar para ciertas clases de tipos solo mediante el uso de la palabra clave on al definir el mixin.
mixin Z on D { doZ() { }}class D { doD() { print('d'); }}//Can't do this!class E with Z {}//Can do this!class F extends D with Z {}
Conclusión
En este post aprendimos sobre los casos de uso de implementos, extensiones y con palabras clave al desarrollar aplicaciones de Flutter/Dart.
Implementa v / s Extiende v/s Con
Para resumir use:
- Implementa para aplicar comportamientos.
- Se extiende para compartir comportamientos de una sola clase.
- Mixins para compartir comportamientos de varios tipos reutilizables.
Más información:
- Dart Características del Lenguaje
- Aprender Aleteo