Dardo: extiende Vs con implementos Vs

Todos los desarrolladores que trabajan con dart para el desarrollo de aplicaciones que usan el marco Flutter regularmente encuentran diferentes usos de los implementos, extensiones y palabras clave. En Dart, una clase puede heredar otra clase, es decir, Dart puede crear una nueva clase a partir de una clase existente. Hacemos uso de palabras clave para hacerlo. En este artículo, analizaremos 3 de las palabras clave utilizadas para el mismo propósito y las compararemos, a saber:

  • extiende
  • con
  • implementos

Echemos un vistazo a ellos uno a la vez.

 

extiende

En Dart, la palabra clave extends se usa típicamente para alterar el comportamiento de una clase usando Herencia. La capacidad de una clase para derivar propiedades y características de otra clase se denomina herencia . Es la capacidad de un programa para crear una nueva clase a partir de una clase existente. En palabras más simples, podemos decir que usamos extends para crear una subclase y super para referirnos a la superclase. La clase cuyas propiedades son heredadas por la clase secundaria se llama Clase principal . La clase principal también se conoce como clase base o superclase . La clase que hereda propiedades de otra clase se denomina clase secundaria . La clase secundaria también se conoce como clase derivada, clase heredera o subclase.La palabra clave extends es la herencia típica de la clase OOP. Si la clase Second extiende la clase First, todas las propiedades, variables y métodos implementados en la clase First también están disponibles en la clase Second. Además, puede anular métodos.

Usa extender si desea crear una versión más específica de una clase. Por ejemplo, si Apple se extiende desde la clase Fruit, significa que todas las propiedades, variables y funciones definidas en la clase Fruit estarán disponibles en la clase Apple.

Ejemplo:

A continuación podemos ver un ejemplo de implementación de la palabra clave extends. No estamos obligados a anular la definición de la clase heredada y podemos usar la definición existente en la clase secundaria.

Dart

// Class with name First
class First {
  static int num = 1;
  void firstFunc(){
    print('hello');
  }
}
 
// inherits from First class
class Second extends First{
//   No need to override
}
 
void main(){
   
  // instance of First Class
  var one = First();
   
  // calling firstFunc()
  one.firstFunc();
   
  // printing static variable of class
  print(First.num);
   
  // instance of Second Class
  var second = Second();
   
  // calling firstFunc() that
  // has been inherited
  second.firstFunc();
}

Salida :

hello
1
hello

implementos 

Las interfaces definen un conjunto de métodos disponibles en un objeto. Dart no tiene una sintaxis para declarar interfaces. Las declaraciones de clase son en sí mismas interfaces en Dart. Una interfaz es algo que obliga a la clase derivada a implementar una lista establecida de campos y métodos públicos.

La palabra clave implement se utiliza para implementar una interfaz forzando la redefinición de las funciones.

Cada clase define implícitamente una interfaz que contiene todos los miembros de instancia de la clase y de cualquier interfaz que implemente. Si desea crear una clase A que admita la API de la clase B sin heredar la implementación de B, la clase A debe implementar la interfaz B. Una clase implementa una o más interfaces declarándolas en una cláusula implements y luego proporcionando las API requeridas por las interfaces. 

Ejemplo:

Dart

// Class with name First
class First {
   
  // function to print "hello"
  void firstFunc(){
    print('hello');
  }
}
 
// We inherit the propertied
// of implemented class
class Second implements First{
   
  // by overriding the functions
  // in implemented class
  @override
  void firstFunc(){
    print('We had to declare the methods of implemented class');
  }
}
 
void main(){
   
  // instance of First Class
  var one = First();
   
  // calling firstFunc()
  one.firstFunc();
  // instance of Second Class
  var second = Second();
   
  // calling firstFunc() that
  // has been inherited
  second.firstFunc(); 
}

Producción:

hello
We had to declare the methods of implemented class

con

Los mixins son una forma de reutilizar los métodos de una clase en varias jerarquías de clases. Los mixins pueden entenderse como clases abstractas utilizadas para reutilizar los métodos en varias clases que tienen funciones/atributos similares. Los mixins son una forma de abstraer y reutilizar una familia de operaciones y estados. Es similar a la reutilización que se obtiene al extender una clase, pero no se trata de herencias múltiples. Todavía solo existe una superclase.

With se usa para incluir Mixins . Un mixin es un tipo diferente de estructura, que solo se puede usar con la palabra clave with .

Mixin es un tipo diferente de estructura, que solo se puede usar con la palabra clave with . En Dart, una clase puede desempeñar el papel de mixin si la clase no tiene un constructor. También es importante tener en cuenta que un mixin no fuerza una restricción de tipo ni impone restricciones de uso en los métodos de clase.

Ejemplo:

Dart

// mixin with name First
mixin First {
  void firstFunc(){
    print('hello');
  }
}
 
// mixin with name temp
mixin temp {
  void number(){
    print(10);
  }
}
 
// mixin type used with keyword
class Second with First, temp{
  @override
  void firstFunc(){
    print('can override if needed');
  }
}
 
void main(){
  var second = Second();
  second.firstFunc();
  second.number();
}

Producción:

can override if needed
10

Publicación traducida automáticamente

Artículo escrito por dhruv_tewari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *