Diferencia entre revisiones de «Flutter DART Clases»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 87: Línea 87:
 
* En el ejemplo anterior vimos que al definir las propiedades de la clase, éstas deberían admitir valores nulos, ya que cuando instanciamos no les damos unos valores iniciales.
 
* En el ejemplo anterior vimos que al definir las propiedades de la clase, éstas deberían admitir valores nulos, ya que cuando instanciamos no les damos unos valores iniciales.
  
 +
:<syntaxhighlight lang="java" enclose="div" highlight="7" >
 +
class Vehiculo{
 +
 
 +
  int anoCompra; // Necesitamos indicar que admite valores nulos, ya que al instanciar no le damos un valor por defecto
 +
  String matricula;
 +
  String marca;
 +
 
 +
  Vehiculo(this.anoCompra,this.marca, this.matricula);
 +
 
 +
  @override
 +
  String toString() => 'El vehículo de la marca $marca con matrícula $matricula se compró en el año $anoCompra';
 +
 
 +
}
 +
void main() {
  
 +
  final veh1 = new Vehiculo(2018,'Opel','1234GHZ'); 
 +
  print(veh1);
 +
 
 +
  final veh2 = Vehiculo(2020,'Peugot','6543HZZ');
 +
  print(veh2);
 +
 
 +
 
 +
}
 +
</syntaxhighlight>
  
 
<br />
 
<br />

Revisión del 18:46 5 jul 2021

Introducción

  • Como comenté anteriormente este curso está pensado para alumnos que ya tienen conocimientos previos en algún lenguaje de programación orientado a objetos.
En esta sección se va a explicar las diferencias y características con respecto a otros lenguajes orientados a objetos en lo que se refiere al uso de clases y objetos,


  • En Dart no es necesario realizar el new cuando instanciamos una clase.
Esto se emplea mucho en Flutter ya que todo en él se base en crear widgets (Clases) y por tanto aparecería de forma continua new´s por todos lados.
Sin embargo, si vamos a emplear clases creadas por nosotros, se recomienda hacer uso de new para diferenciarlo de la llamada a una función.


Veamos un ejemplo, con conceptos de otros lenguajes de programación orientado a objetos como el empleo del método toString:
class Vehiculo{
  
  int? anoCompra; // Necesitamos indicar que admite valores nulos, ya que al instanciar no le damos un valor por defecto
  String? matricula;
  String? marca;
  
  @override
  String toString() => 'El vehículo de la marca $marca con matrícula $matricula se compró en el año $anoCompra'; 
}
void main() {

  final veh1 = new Vehiculo();
  veh1.marca='Opel';
  veh1.matricula='1234GHZ';
  veh1.anoCompra = 2018;
  
  print(veh1);
  
  final veh2 = Vehiculo(); // No necesitamos new, pero se recomienda si son clases nuestras
  veh2.marca='Peugot';
  veh2.matricula='6543HZZ';
  veh2.anoCompra = 2020;
  
  print(veh2);
  
}



Constructores

  • Funcionan igual que en el lenguaje Java.
Veamos un ejemplo de uso:


class Vehiculo{
  
  int? anoCompra; // Necesitamos indicar que admite valores nulos, ya que al instanciar no le damos un valor por defecto
  String? matricula;
  String? marca;
  
  Vehiculo(int anoCompra, String matricula, String marca){
    this.anoCompra = anoCompra;
    this.marca = marca;
    this.matricula = matricula;
  }
  
  @override
  String toString() => 'El vehículo de la marca $marca con matrícula $matricula se compró en el año $anoCompra'; 
}
void main() {

  final veh1 = new Vehiculo(2018,'Opel','1234GHZ');  
  print(veh1);
  
  final veh2 = Vehiculo(2020,'Peugot','6543HZZ'); 
  print(veh2);
  
}
Fijarse que un constructor no es más que un método y por tanto podemos emplear todo lo aprendido con los parámetros (opciones, posicionales,...)
Ejercicio propuesto: Modifica el ejercicio anterior y haz con los parámetros puedan ser enviados en cualquier orden especificando el nombre del parámetro en la llamada. Haz que todos ellos sean obligatorios.



  • En el ejemplo anterior vimos que al definir las propiedades de la clase, éstas deberían admitir valores nulos, ya que cuando instanciamos no les damos unos valores iniciales.
class Vehiculo{
  
  int anoCompra; // Necesitamos indicar que admite valores nulos, ya que al instanciar no le damos un valor por defecto
  String matricula;
  String marca;
  
  Vehiculo(this.anoCompra,this.marca, this.matricula);
  
  @override
  String toString() => 'El vehículo de la marca $marca con matrícula $matricula se compró en el año $anoCompra'; 
  
}
void main() {

  final veh1 = new Vehiculo(2018,'Opel','1234GHZ');  
  print(veh1);
  
  final veh2 = Vehiculo(2020,'Peugot','6543HZZ'); 
  print(veh2);
  
  
}


Enlace a la página principal de la UD2

Enlace a la página principal del curso




-- Ángel D. Fernández González -- (2021).