No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Dart

Curso de Dart

Argel Franco Bejarano de la Cruz

Argel Franco Bejarano de la Cruz

Herencia

20/29
Recursos

La herencia nos permite adquirir las propiedades de una clase ‘Padre’.

La clase hijo entonces tiene las propiedades de la clase ‘Padre’ y además tiene sus propiedades propias, mismas que heredará a sus hijos.

Por ejemplo todas las clases heredan por defecto de la clase ‘Object’ ya que en Dart todo es un objeto, por lo tanto todas las clases de Dart comparten algunos miembros.

Aportes 27

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Like si en el minuto 3:03 te dio un calambre en el ojo 😄

Un ejemplo sencillo de herencia:

void main() {

  Asgardiano thor = Asgardiano()
   ..nombre = 'Thor Fransisco'
   ..arma = 'los Rayitos'
   ..padre = 'señor Odin';    
  
  thor.ataque();
  thor.familia();
  
}

class Heroe{
  var nombre;
  var arma;

  void ataque(){
    print('$nombre usa como arma $arma');
  }
}

class Asgardiano extends Heroe{
  var padre;

  void familia(){
    print('El papi de $nombre es $padre');
  }
}

RESUMEN DE LA CLASE

Herencia: Es una propiedad de la programación orientada a objetos. La misma nos permite adquirir los atributos y métodos de una clase padre. Al todas las clases heredar de la clase Object, todas pueden tener por ejemplo el método toString().

class Empleado{
	var id;
	var nombre;
}

class Chofer extends Empleado{	//La palabra extends indica herencia
	bool tieneCamiones;
}

//Cualquier objeto creado a partir de la clase Chofer tendrá también como atributos un id y un nombre, ya que son heredados de la clase padre, Empleado

Por la temática de los Avengers…

void main() {
  AsgardianHeroe thor = AsgardianHeroe()
   ..name = 'Thor Odinson'
   ..weapon = 'Mjolnir';
  thor.attack();
  
  TechHeroe IronMan = TechHeroe()
    ..name = 'Anthony Stark'
    ..weapon = 'Nanotechnology Armour';
  IronMan.attack();
}

class Heroe{
  var name;
  var life;
  var weapon;
  void attack(){
    print('Heroe attack!');
  }
}

class AsgardianHeroe extends Heroe{
  void attack(){
    print('Mighty attack!');
  }
}

class TechHeroe extends Heroe{
  void attack(){
    print('Technological attack!');
  }
}

Para los que les interese el tema de usar constructores con super()

main(List<String> args) {
  Frontend dev = Frontend(1, "Sebastián", 9999999, "Reactjs");

  print(
      "El dev ${dev.id} llamado ${dev.name} trabaja con el framework ${dev.framework} y gana \$${dev.salary}.");
}

class Developer {
  int id;
  String name;
  int salary;

  Developer(this.id, this.name, this.salary);

  void calcSalary() => print("This developer earn ${salary * 5.5}.");
}

class Frontend extends Developer {
  String framework;

  Frontend(int id, String name, int salary, String this.framework)
      : super(id, name, salary);
  void skill() =>
      print("He is a Frontend Developer and works with $framework Framework.");
}

Vehiculo*

Este es el codigo para continuar la practica desafio. Me gusta usar los … puntos para acortar codigo.

main(List<String> arguments) {
  Chofer chofer = Chofer()
  ..id=1
  ..nombre='roberto'
  ..salario=100
  ..calcularSalario()
  ..buenaConducta();

  Cajero cajero = Cajero()
  ..id=2
  ..nombre='Angel'
  ..salario=100
  ..calcularSalario()
  ..buenaConducta();
}

class Empleado{
  var id;
  var nombre;
  var salario;

  void calcularSalario(){
    print('salario del empleado es ${salario * 5.5}');
  }
}
class Conducta{
  void buenaConducta(){
    print('el empleado se comporto correctamente');
  }
}
class Chofer implements Empleado,Conducta{
  var id;
  var nombre;
  var salario;

  @override
  void buenaConducta() {
    print('El empleado se comporto inadecuadamente');
  }

  @override
  void calcularSalario() {
    print('el salario del empleado es ${salario*5.5}');
  }

}
class Cajero implements Empleado,Conducta{
  var id;
  var nombre;
  var salario;

  @override
  void buenaConducta() {
    print('El empleado se comporto adecuadamente');
  }

  @override
  void calcularSalario() {
    print('el salario del empleado es ${salario*5.5}');
  }
}

Uso de mayúscula en las clases

falto mucho la explicacion de Super()

Me da la impresión que falto la explicación del super() …

Cada clase veo mas utilidad de pasar cursos POO

Vendedor vendedor = new Vendedor();
es lo mismo que?:
Empleado vendedor = new Vendedor():

Si fueran una clase donde se tengan que pasar mas 10 o 20 parametros ?
Como se haria mas dinamico y practico para el codigo ?

main(List<String> args) {

  Chofer chofer= Chofer();
  chofer.id=1;
  chofer.nombre="Roberto";
  chofer.salario=100.00;
  chofer.vehiculoAsignado="de trabajo";

  chofer.CalcularSalario();


  vendedor ven =vendedor();

  ven.id=2;
  ven.nombre="Pedro";
  ven.salario=120.0;
  ven.venderaCliente();

  ven.CalcularSalario();
}

class Empleado{
  var id;
  var nombre;
  double salario;


  void CalcularSalario(){
    print('El trabajador tiene un salario de ${salario * 5.5}');
  }
}

class Chofer extends Empleado{

  String vehiculoAsignado;

  void manejarVehiculo(){
    print('Manejando');
  }

}


class vendedor extends Empleado{
  String idliente;

  void venderaCliente(){
    print('Vender .....');
  } 
}```

genial

muchas gracias por la explicación

Definición de herencia

Código de herencia

Genial!

Se entendio facil

Muy bien explicado el tema 😃

//En dart todo es un objeto ya que hereda de la clase Object, si heredan las funcionalidades de la clase hijo a padre
main(List<String> args) {
  Chofer chofer = Chofer();
  chofer.id = 1;
  chofer.nombre = 'Pedro';
  chofer.salario = 100.0;
  chofer.vehivuloAsignado = 'de trabajo';

  chofer.manejarVehiculo();
  chofer.calcularSalario();

  Vendedor vendedor = Vendedor();
  vendedor.id = 2;
  vendedor.nombre = 'Daniel';
  vendedor.salario = 120.0;
  
  vendedor.venderCliente();
  vendedor.calcularSalario();
}

class Empleado {
  var id;
  var nombre;
  double salario;

  void calcularSalario() {
    print('El trabajador tiene un salario de ${salario * 5.5}');
  }
}

class Chofer extends Empleado {
  String vehivuloAsignado;

  void manejarVehiculo() {
    print('Manejando...');
  }
}

class Vendedor extends Empleado {
  String idCliente;

  void venderCliente() {
    print('Vender...');
  }
}

No sé si pasare verguenza ajena por lo que voy a decir pero me pueden corregir si estoy equivocado, pero para mi lo que angel está haciendo es una pésima practica de programación, entre que el mismo pone los valores y entre que el instancia el objeto y ni siquiera el usuario es capaz de insertar los datos, yo haría un bucle por cada objeto y que el usuario coloque los datos con un set, además que no enseño como haría el usuario para insertar datos, el curso y el lenguaje están bastante bien… pero hay cosas que no se pueden omitir… no puedes ir al metodo main y hacer ese tipo de cosas, estas escribiendo codigo de más y tienes que modificar todas las variables, digo yo… vamos yo lo haría así pero cada programador es un mundo aparte x.x

Hola
Comparto un ejemplo del código utilizando polimorfismo y variables privadas:

Clase Empleado

/**
 * CLASE PADRE - EMPLEADO
 */
class PadreEmpleado{

  int _id;
  String _nombre;
  double _salario;

//Setter
  void set setID (int id) => _id = id;
//Getter
  int get getID => _id;

//Setter
  void set setNombre(String nombre) => _nombre = nombre;
//Getter
  String get getNombre => _nombre;

//Setter
  void set setSalario(double salario) => _salario = salario;
//Getter
  double get getSalario => _salario;

  String imprimirPantalla() {

    return 'El trabajador ${_nombre}, con el ID ${_id}. \n'
    'Tiene un salario de ${_salario * 5.5} colones por semana. \n';
  }

}

Clase Chofer

/*
 * CLASE HIJO - CHOFER
 */
import 'Herencia_Empleado.dart';

class HijoChofer extends PadreEmpleado{

  String _vehiculoAsignado;

  //Setter
  void set setVehiculo(String vehiculo) => _vehiculoAsignado = vehiculo;

  //Getter
  String get getVehiculo => _vehiculoAsignado;

  //Polimorfismo
 @override
  String imprimirPantalla() {

    return super.imprimirPantalla() + 'Vehículo asignado: ${_vehiculoAsignado}. \n';
  }

}

Clase Vendedor

/*
 * CLASE HIJO - VENDEDOR
 */
import 'Herencia_Empleado.dart';

class HijoVendedor extends PadreEmpleado{

  String _idCliente;

  //Setter
  void set setIdCliente(String idCliente) => _idCliente = idCliente;

  //Getter
  String get getIdCliente => _idCliente;

  //Polimorfismo
  @override
  String imprimirPantalla() {

    return super.imprimirPantalla() + 'Tipo de clientes asignados: ${_idCliente}. \n';
  }

}

Main()

/*
 * CONVOCANDO LAS FAMILIA DE CLASES
 * PadreEmpleado - HijoChofer - HijoVendedor
 */

import 'Herencia_Chofer.dart';
import 'Herencia_Vendedor.dart';

main(List<String> arguments){

  HijoChofer chofer = HijoChofer();
  chofer.setID = 45;
  chofer.setNombre = 'Ruddy Rudo';
  chofer.setSalario = 20000;
  chofer.setVehiculo = 'BMW';

  print(chofer.imprimirPantalla());

  HijoVendedor vendedor = HijoVendedor();
  vendedor.setID = 46;
  vendedor.setNombre = 'Dart Salas';
  vendedor.setSalario = 30000;
  vendedor.setIdCliente = 'Japoneses';

  print(vendedor.imprimirPantalla());
}

Salida

El trabajador Ruddy Rudo, con el ID 45. 
Tiene un salario de 110000.0 colones por semana. 
Vehículo asignado: BMW. 

El trabajador Dart Salas, con el ID 46. 
Tiene un salario de 165000.0 colones por semana. 
Tipo de clientes asignados: Japoneses. 


Process finished with exit code 0

La herencia te permite usar los métodos de una clase padre en otras clases, también te permite eligir si quieres que un objeto lo tenga y otro no.

Mi código

void main() {
  EmpleadoAprendiz aprendiz = EmpleadoAprendiz();
  
  aprendiz.entidad = "Sena";
  
  EmpleadoPlanta   empPlanta = EmpleadoPlanta();
  
  empPlanta.Id = 101;
  empPlanta.Planta = "Mirolindo";
  empPlanta.Salario = 1000.000;
  empPlanta.nombre  = "Roberto";
}
  
  
class Empleado{
  var Id;
  var nombre;
  double Salario;
  
  
  void calcularSalario(){
    print("El trabajador tiene un salario de ${Salario * 5.5}");
  }
}


class EmpleadoPlanta extends Empleado{
  String Planta;
  
  void trabajando_Planta(){
    print("Este empleado esta en la $Planta.");
  }
}

class EmpleadoAprendiz{
  String entidad;
  
  void EntidadAprendiz(){
    print("El aprendiz es de la entidad $entidad");
  }
  
}