Programación de dardos - Clases

Dart es un lenguaje orientado a objetos. Admite funciones de programación orientadas a objetos como clases, interfaces, etc.classen términos de programación orientada a objetos es un modelo para la creación de objetos. UNclassencapsula datos para el objeto. Dart brinda soporte integrado para este concepto llamadoclass.

Declarar una clase

Utilizar el class palabra clave para declarar un classen Dart. Una definición de clase comienza con la palabra clave class seguida de laclass name; y el cuerpo de la clase encerrado por un par de llaves. La sintaxis para el mismo se da a continuación:

Sintaxis

class class_name {  
   <fields> 
   <getters/setters> 
   <constructors> 
   <functions> 
}

los classLa palabra clave va seguida del nombre de la clase. Las reglas para los identificadores deben tenerse en cuenta al nombrar una clase.

Una definición de clase puede incluir lo siguiente:

  • Fields- Un campo es cualquier variable declarada en una clase. Los campos representan datos pertenecientes a objetos.

  • Setters and Getters- Permite al programa inicializar y recuperar los valores de los campos de una clase. Un getter / setter predeterminado está asociado con cada clase. Sin embargo, los predeterminados se pueden anular definiendo explícitamente un setter / getter.

  • Constructors - responsable de asignar memoria para los objetos de la clase.

  • Functions- Las funciones representan acciones que puede realizar un objeto. En ocasiones, también se denominan métodos.

Estos componentes juntos se denominan data members de la clase.

Ejemplo: declarar una clase

class Car {  
   // field 
   String engine = "E1001";  
   
   // function 
   void disp() { 
      print(engine); 
   } 
}

El ejemplo declara una clase Car. La clase tiene un campo llamadoengine. losdisp() es una función simple que imprime el valor del campo engine.

Creando instancia de la clase

Para crear una instancia de la clase, use el newpalabra clave seguida del nombre de la clase. La sintaxis para el mismo se da a continuación:

Sintaxis

var object_name = new class_name([ arguments ])
  • los new La palabra clave es responsable de la creación de instancias.

  • El lado derecho de la expresión invoca al constructor. Se deben pasar valores al constructor si está parametrizado.

Ejemplo: instanciar una clase

var obj = new Car("Engine 1")

Acceder a atributos y funciones

Se puede acceder a los atributos y funciones de una clase a través del objeto. Utilizar el '.' notación de puntos (llamada comoperiod) para acceder a los miembros de datos de una clase.

//accessing an attribute 
obj.field_name  

//accessing a function 
obj.function_name()

Ejemplo

Eche un vistazo al siguiente ejemplo para comprender cómo acceder a los atributos y funciones en Dart:

void main() { 
   Car c= new Car(); 
   c.disp(); 
}  
class Car {  
   // field 
   String engine = "E1001";  
   
   // function 
   void disp() { 
      print(engine); 
   } 
}

los output del código anterior es el siguiente:

E1001

Constructores de dardos

Un constructor es una función especial de la clase que se encarga de inicializar las variables de la clase. Dart define un constructor con el mismo nombre que el de la clase. Un constructor es una función y, por tanto, se puede parametrizar. Sin embargo, a diferencia de una función, los constructores no pueden tener un tipo de retorno. Si no declara un constructor, un valor predeterminadono-argument constructor se proporciona para usted.

Sintaxis

Class_name(parameter_list) { 
   //constructor body 
}

Ejemplo

El siguiente ejemplo muestra cómo usar constructores en Dart:

void main() { 
   Car c = new Car('E1001'); 
} 
class Car { 
   Car(String engine) { 
      print(engine); 
   } 
}

Debería producir lo siguiente output -

E1001

Constructores nombrados

Dart proporciona named constructors para habilitar una clase define multiple constructors. La sintaxis de los constructores nombrados es la siguiente:

Sintaxis: Definición del constructor

Class_name.constructor_name(param_list)

Ejemplo

El siguiente ejemplo muestra cómo puede usar constructores con nombre en Dart:

void main() {           
   Car c1 = new Car.namedConst('E1001');                                       
   Car c2 = new Car(); 
}           
class Car {                   
   Car() {                           
      print("Non-parameterized constructor invoked");
   }                                   
   Car.namedConst(String engine) { 
      print("The engine is : ${engine}");    
   }                               
}

Debería producir lo siguiente output -

The engine is : E1001 
Non-parameterized constructor invoked

La esta palabra clave

los thispalabra clave se refiere a la instancia actual de la clase. Aquí, el nombre del parámetro y el nombre del campo de la clase son los mismos. Por lo tanto, para evitar la ambigüedad, el campo de la clase tiene el prefijothispalabra clave. El siguiente ejemplo explica lo mismo:

Ejemplo

El siguiente ejemplo explica cómo utilizar el this palabra clave en Dart -

void main() { 
   Car c1 = new Car('E1001'); 
}  
class Car { 
   String engine; 
   Car(String engine) { 
      this.engine = engine; 
      print("The engine is : ${engine}"); 
   } 
}

Debería producir lo siguiente output -

The engine is : E1001

Clase de dardos ─ Getters y Setters

Getters y Setters, también llamado como accessors y mutators, permite que el programa inicialice y recupere los valores de los campos de clase, respectivamente. Los getters o accessors se definen mediante elgetpalabra clave. Los setters o mutadores se definen utilizando elset palabra clave.

Un getter / setter predeterminado está asociado con cada clase. Sin embargo, los predeterminados se pueden anular definiendo explícitamente un setter / getter. Un captador no tiene parámetros y devuelve un valor, y el definidor tiene un parámetro y no devuelve un valor.

Sintaxis: Definición de un captador

Return_type  get identifier 
{ 
}

Sintaxis: Definiendo un setter

set identifier 
{ 
}

Ejemplo

El siguiente ejemplo muestra cómo puede utilizar getters y setters en una clase de dardos -

class Student { 
   String name; 
   int age; 
    
   String get stud_name { 
      return name; 
   } 
    
   void set stud_name(String name) { 
      this.name = name; 
   } 
   
   void set stud_age(int age) { 
      if(age<= 0) { 
        print("Age should be greater than 5"); 
      }  else { 
         this.age = age; 
      } 
   } 
   
   int get stud_age { 
      return age;     
   } 
}  
void main() { 
   Student s1 = new Student(); 
   s1.stud_name = 'MARK'; 
   s1.stud_age = 0; 
   print(s1.stud_name); 
   print(s1.stud_age); 
}

Este código de programa debería producir lo siguiente output -

Age should be greater than 5 
MARK 
Null

Herencia de clase

Dart apoya el concepto de herencia, que es la capacidad de un programa para crear nuevas clases a partir de una clase existente. La clase que se amplía para crear clases más nuevas se denomina clase padre / superclase. Las clases recién creadas se denominan clases secundarias / subclases.

Una clase hereda de otra clase usando la palabra clave 'extiende'. Child classes inherit all properties and methods except constructors from the parent class.

Sintaxis

class child_class_name extends parent_class_name

Note - Dart no admite herencia múltiple.

Ejemplo: herencia de clase

En el siguiente ejemplo, declaramos una clase Shape. La clase se amplía con elCircleclase. Dado que existe una relación de herencia entre las clases, la clase hija, es decir, la claseCar obtiene un acceso implícito a su miembro de datos de clase padre.

void main() { 
   var obj = new Circle(); 
   obj.cal_area(); 
}  
class Shape { 
   void cal_area() { 
      print("calling calc area defined in the Shape class"); 
   } 
}  
class Circle extends Shape {}

Debería producir lo siguiente output -

calling calc area defined in the Shape class

Tipos de herencia

La herencia puede ser de los siguientes tres tipos:

  • Single - Cada clase puede extenderse como máximo desde una clase principal.

  • Multiple- Una clase puede heredar de varias clases. Dart no admite herencia múltiple.

  • Multi-level - Una clase puede heredar de otra clase secundaria.

Ejemplo

El siguiente ejemplo muestra cómo funciona la herencia multinivel:

void main() { 
   var obj = new Leaf(); 
   obj.str = "hello"; 
   print(obj.str); 
}  
class Root { 
   String str; 
}  
class Child extends Root {}  
class Leaf extends Child {}  
//indirectly inherits from Root by virtue of inheritance

La clase Leafderiva los atributos de las clases Root y Child en virtud de la herencia multinivel. Susoutput es como sigue -

hello

Dart: herencia de clases y anulación de métodos

La anulación de método es un mecanismo mediante el cual la clase secundaria redefine un método en su clase principal. El siguiente ejemplo ilustra lo mismo:

Ejemplo

void main() { 
   Child c = new Child(); 
   c.m1(12); 
} 
class Parent { 
   void m1(int a){ print("value of a ${a}");} 
}  
class Child extends Parent { 
   @override 
   void m1(int b) { 
      print("value of b ${b}"); 
   } 
}

Debería producir lo siguiente output -

value of b 12

El número y el tipo de los parámetros de la función deben coincidir al anular el método. En caso de una discrepancia en el número de parámetros o su tipo de datos, el compilador de Dart arroja un error. La siguiente ilustración explica lo mismo:

import 'dart:io'; 
void main() { 
   Child c = new Child(); 
   c.m1(12); 
} 
class Parent { 
   void m1(int a){ print("value of a ${a}");} 
} 
class Child extends Parent { 
   @override 
   void m1(String b) { 
      print("value of b ${b}");
   } 
}

Debería producir lo siguiente output -

value of b 12

La palabra clave estática

los static La palabra clave se puede aplicar a los miembros de datos de una clase, es decir, fields y methods. Una variable estática conserva sus valores hasta que el programa finaliza la ejecución. Los miembros estáticos son referenciados por el nombre de la clase.

Ejemplo

class StaticMem { 
   static int num;  
   static disp() { 
      print("The value of num is ${StaticMem.num}")  ; 
   } 
}  
void main() { 
   StaticMem.num = 12;  
   // initialize the static variable } 
   StaticMem.disp();   
   // invoke the static method 
}

Debería producir lo siguiente output -

The value of num is 12

La súper palabra clave

los superLa palabra clave se utiliza para referirse al padre inmediato de una clase. La palabra clave se puede utilizar para hacer referencia a la versión de superclase de unvariable, property, o method. El siguiente ejemplo ilustra lo mismo:

Ejemplo

void main() { 
   Child c = new Child(); 
   c.m1(12); 
} 
class Parent { 
   String msg = "message variable from the parent class"; 
   void m1(int a){ print("value of a ${a}");} 
} 
class Child extends Parent { 
   @override 
   void m1(int b) { 
      print("value of b ${b}"); 
      super.m1(13); 
      print("${super.msg}")   ; 
   } 
}

Debería producir lo siguiente output -

value of b 12 
value of a 13 
message variable from the parent class