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