SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
Herencia
     Hay clases que comparten gran parte de sus características.


          El mecanismo conocido con el nombre de herencia
           permite reutilizar clases: Se crea una nueva clase
         que extiende la funcionalidad de una clase existente
       sin tener que reescribir el código asociado a esta última.


   La nueva clase, a la que se denomina subclase, puede poseer
   atributos y métodos que no existan en la clase original.

   Los objetos de la nueva clase heredan los atributos y los
   métodos de la clase original, que se denomina superclase.




§ Trabajador es una clase genérica que sirve para almacenar
  datos como el nombre, la dirección, el número de teléfono
  o el número de la seguridad social de un trabajador.
§ Empleado es una clase especializada para representar los
  empleados que tienen una nómina mensual (encapsula datos
  como su salario anual o las retenciones del IRPF).
§ Consultor es una clase especializada para representar a
  aquellos trabajadores que cobran por horas (por ejemplo,
  registra el número de horas que ha trabajado un consultor
  y su tarifa horaria).
OOP – Clases y objetos: Java      -2-                   © Fernando Berzal
Las clases Empleado y Consultor,
      además de los atributos y de las operaciones que definen,
     heredan de Trabajador todos sus atributos y operaciones.




                  Un empleado concreto tendrá,
    además de sus atributos y operaciones como Empleado,
todos los atributos correspondientes a la superclase Trabajador.

OOP – Clases y objetos: Java    -3-                  © Fernando Berzal
En Java:

import java.util.Date;                       // Para las fechas

public class Trabajador
{
  private String nombre;
  private String puesto;
  private String direccion;
  private String telefono;
  private Date   fecha_nacimiento;
  private Date   fecha_contrato;
  private String NSS;

    // Constructor

    public Trabajador (String nombre, String NSS)
    {
      this.nombre = nombre;
      this.NSS = NSS;
    }

    // Métodos get & set
    // ...

    // Comparación de objetos

    public boolean equals (Trabajador t)
    {
      return this.NSS.equals(t.NSS);
    }

    // Conversión en una cadena de caracteres

    public String toString ()
    {
      return nombre + " (NSS "+NSS+")";
    }
}
               NOTA:           Siempre es recomendable definir
                               los métodos equals() y toString()

OOP – Clases y objetos: Java           -4-               © Fernando Berzal
public class Empleado extends Trabajador
{
  private double sueldo;
  private double impuestos;
    private final int PAGAS = 14;

    // Constructor
    public Empleado
          (String nombre, String NSS, double sueldo)
    {
      super(nombre,NSS);
        this.sueldo    = sueldo;
        this.impuestos = 0.3 * sueldo;
    }

    // Nómina
    public double calcularPaga ()
    {
      return (sueldo-impuestos)/PAGAS;
    }

    // toString
    public String toString ()
    {
      return "Empleado "+super.toString();
    }
}

           Con la palabra reservada extends indicamos que
           Empleado es una subclase de Trabajador.

           Con la palabra reservada super accedemos a miembros
           de la superclase desde la subclase.
               Generalmente, en un constructor, lo primero que nos
               encontramos es una llamada al constructor de la clase
               padre con super(…). Si no ponemos nada, se llama al
               constructor por defecto de la superclase antes de
               ejecutar el constructor de la subclase.
OOP – Clases y objetos: Java       -5-                  © Fernando Berzal
class Consultor extends Trabajador
{
  private int    horas;
  private double tarifa;

    // Constructor
    public Consultor (String nombre, String NSS,
                      int horas, double tarifa)
    {
      super(nombre,NSS);

        this.horas = horas;
        this.tarifa = tarifa;
    }

    // Paga por horas
    public double calcularPaga ()
    {
      return horas*tarifa;
    }

    // toString
    public String toString ()
    {
      return "Consultor "+super.toString();
    }
}
           La clase Consultor también define un método llamado
           calcularPaga(), si bien en este caso el cálculo se hace
           de una forma diferente por tratarse de un trabajador de un
           tipo distinto.

           Tanto la clase Empleado como la clase Consultor
           redefinen el método toString() que convierte un objeto
           en una cadena de caracteres.
                      De hecho, Trabajador también redefine este
                      método, que se hereda de la clase Object, la clase
                      base de la que heredan todas las clases en Java.

OOP – Clases y objetos: Java         -6-                  © Fernando Berzal
Redefinición de métodos
  Como hemos visto en el ejemplo con el método toString(),
     cada subclase hereda las operaciones de su superclase
      pero tiene la posibilidad de modificar localmente el
 comportamiento de dichas operaciones (redefiniendo métodos).

// Declaración de variables
Trabajador trabajador;
Empleado   empleado;
Consultor consultor;

// Creación de objetos
trabajador = new Trabajador ("Juan", "456");
empleado = new Empleado          ("Jose", "123", 24000.0);
consultor = new Consultor ("Juan", "456", 10, 50.0);


// Salida estándar con toString()
System.out.println(trabajador);
               Juan (NSS 456)
System.out.println(empleado);
               Empleado Jose (NSS 123)
System.out.println(consultor);
               Consultor Juan (NSS 456)



// Comparación de objetos con equals()
System.out.println(trabajador.equals(empleado));
               false
System.out.println(trabajador.equals(consultor));
               true

OOP – Clases y objetos: Java    -7-              © Fernando Berzal
Polimorfismo
         Al redefinir métodos, objetos de diferentes tipos
     pueden responder de forma diferente a la misma llamada
  (y podemos escribir código de forma general sin preocuparnos
     del método concreto que se ejecutará en cada momento).


Ejemplo
Podemos añadirle a la clase Trabajador un método
calcularPaga genérico (que no haga nada por ahora):


public class Trabajador…
   public double calcularPaga ()
   {
     return 0.0;                // Nada por defecto
   }


En las subclases de Trabajador, no obstante, sí que definimos el
método calcularPaga() para que calcule el importe del pago
que hay que efectuarle a un trabajador (en función de su tipo).


public class Empleado extends Trabajador…
   public double calcularPaga ()                // Nómina
   {
     return (sueldo-impuestos)/PAGAS;
   }


class Consultor extends Trabajador…
   public double calcularPaga ()                // Por horas
   {
     return horas*tarifa;
   }


OOP – Clases y objetos: Java   -8-                 © Fernando Berzal
Como los consultores y los empleados son trabajadores, podemos
crear un array de trabajadores con consultores y empleados:
 …
 Trabajador trabajadores[] = new Trabajador[2];
 trabajadores[0] = new Empleado
                   ("Jose", "123", 24000.0);
 trabajadores[1] = new Consultor
                   ("Juan", "456", 10, 50.0);
  …

Una vez que tenemos un vector con todos los trabajadores de una
empresa, podríamos crear un programa que realizase los pagos
correspondientes a cada trabajador de la siguiente forma:
   …
   public void pagar (Trabajador trabajadores[])
   {
     int i;
       for (i=0; i<trabajadores.length; i++)
           realizarTransferencia ( trabajadores[i],
                     trabajadores[i].calcularPaga());
   }
   …
               Para los trabajadores del vector anterior, se realizaría
                                                       '%¤#" ¦¨©§¦¤¢ 
                                                       ¨$ ! £  ¡  ¨  ¨ £¥£ ¡
               una transferencia de 1200  @¤29£¤#!8¥ 765$31©§¦¤)(¤ 
                                                4  4 2 0 ¨ £¥£ ¡
               otra transferencia, esta vez de 500


Cada vez que se invoca el método calcularPaga(), se busca
automáticamente el código que en cada momento se ha de
ejecutar en función del tipo de trabajador (enlace dinámico).

La búsqueda del método que se ha de invocar como respuesta a
un mensaje dado se inicia con la clase del receptor. Si no se
encuentra un método apropiado en esta clase, se busca en su clase
padre (de la hereda la clase del receptor). Y así sucesivamente
hasta encontrar la implementación adecuada del método que se ha
de ejecutar como respuesta a la invocación original.

OOP – Clases y objetos: Java            -9-                          © Fernando Berzal
El Principio de Sustitución de Liskov

    “Debe ser posible utilizar cualquier objeto instancia de una
      subclase en el lugar de cualquier objeto instancia de su
    superclase sin que la semántica del programa escrito en los
            términos de la superclase se vea afectado.”

                                              Barbara H. Liskov  Stephen N. Zilles:
                                           “Programming with Abstract Data Types”
                Computation Structures Group, Memo No 99, MIT, Project MAC, 1974.
                                (ACM SIGPLAN Notices, 9, 4, pp. 50-59, April 1974.)




El cumplimiento del Principio de Sustitución de Liskov
permite obtener un comportamiento y diseño coherente:

       Ejemplo
       Cuando tengamos trabajadores,
       sean del tipo particular que sean,
       el método calcularPaga() siempre calculará
       el importe del pago que hay que efectuar
       en compensación por los servicios del trabajador.




Acerca de la sobrecarga de métodos
No hay que confundir el polimorfismo con la sobrecarga de métodos
(distintos métodos con el mismo nombre pero diferentes parámetros).

       Ejemplo
       Podemos definir varios constructores
       para crear de distintas formas objetos de una misma clase.

OOP – Clases y objetos: Java            - 10 -                     © Fernando Berzal
Un ejemplo clásico: Figuras geométricas




public class Figura
{
  protected double x;
  protected double y;
  protected Color color;
  protected Panel panel;


    public Figura (Panel panel, double x, double y)
    {
      this.panel = panel;
      this.x     = x;
      this.y     = y;
    }

    public void setColor (Color color)
    {
      this.color = color;
      panel.setColor(color);
    }

    public void dibujar ()
    {
      // No hace nada aquí…
    }
}

OOP – Clases y objetos: Java   - 11 -     © Fernando Berzal
public class Circulo extends Figura
{
  private double radio;
    public Circulo(Panel panel,
                   double x, double y, double radio)
    {
      super(panel,x,y);
      this.radio = radio;
    }
    public void dibujar ()
    {
      panel.drawEllipse(x,y, x+2*radio, y+2*radio);
    }
}


public class Cuadrado extends Figura
{
  private double lado;
    public Cuadrado(Panel panel,
                    double x, double y, double lado)
    {
      super(panel,x,y);
      this.lado = lado;
    }
    public void dibujar ()
    {
      panel.drawRectangle(x,y, x+lado, y+lado);
    }
}




OOP – Clases y objetos: Java   - 12 -     © Fernando Berzal
La palabra reservada final
En Java, usando la palabra reservada final, podemos:

1. Evitar que un método se pueda redefinir en una subclase:

       class Consultor extends Trabajador
       {
         …
         public final double calcularPaga ()
         {
           return horas*tarifa;
         }
         …
       }
           Aunque creemos subclases de Consultor, el dinero
               que se le pague siempre será en función de las horas
               que trabaje y de su tarifa horaria (y eso no podremos
               cambiarlo aunque queramos).


2. Evitar que se puedan crear subclases de una clase dada:

       public final class Circulo extends Figura
       …

       public final class Cuadrado extends Figura
       …

               Al usar final, tanto Circulo como Cuadrado son
               ahora clases de las que no se pueden crear subclases.

       En ocasiones, una clase será “final”…
            porque no tenga sentido crear subclases o, simplemente,
            porque deseamos que la clase no se pueda extender.


RECORDATORIO:
En Java, final también se usa para definir constantes simbólicas.

OOP – Clases y objetos: Java       - 13 -                © Fernando Berzal

Weitere ähnliche Inhalte

Was ist angesagt?

Sobrecarga de operadores
Sobrecarga de operadoresSobrecarga de operadores
Sobrecarga de operadoresr0na91
 
POO Unidad 2: Clases y objetos Ejercicio 1
POO Unidad 2: Clases y objetos Ejercicio 1POO Unidad 2: Clases y objetos Ejercicio 1
POO Unidad 2: Clases y objetos Ejercicio 1Fabiola Valerio Ramirez
 
Clase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpooClase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpoojorg_marq
 
SCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, PooSCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, Pooflekoso
 
3. Utilización de los objetos predefinidos del lenguaje
3. Utilización de los objetos predefinidos del lenguaje3. Utilización de los objetos predefinidos del lenguaje
3. Utilización de los objetos predefinidos del lenguajeLaura Folgado Galache
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc X
 
OOP-JS pjs
OOP-JS pjsOOP-JS pjs
OOP-JS pjsJona Val
 
4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuarioLaura Folgado Galache
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodosDanae Aguilar Guzmán
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc X
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidadElena Perz
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascriptguest030dc2
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignacionesjorg_marq
 

Was ist angesagt? (20)

Sobrecarga de operadores
Sobrecarga de operadoresSobrecarga de operadores
Sobrecarga de operadores
 
POO Unidad 2: Clases y objetos Ejercicio 1
POO Unidad 2: Clases y objetos Ejercicio 1POO Unidad 2: Clases y objetos Ejercicio 1
POO Unidad 2: Clases y objetos Ejercicio 1
 
Clase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpooClase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpoo
 
Unidad 3: Herencia Ejercicio 1
Unidad 3: Herencia Ejercicio 1Unidad 3: Herencia Ejercicio 1
Unidad 3: Herencia Ejercicio 1
 
SCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, PooSCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, Poo
 
3. Utilización de los objetos predefinidos del lenguaje
3. Utilización de los objetos predefinidos del lenguaje3. Utilización de los objetos predefinidos del lenguaje
3. Utilización de los objetos predefinidos del lenguaje
 
Semana 4 Introduccion Javascript
Semana 4   Introduccion JavascriptSemana 4   Introduccion Javascript
Semana 4 Introduccion Javascript
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)
 
OOP-JS pjs
OOP-JS pjsOOP-JS pjs
OOP-JS pjs
 
4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario
 
Codigo
CodigoCodigo
Codigo
 
Semana 4 Javascript funciones y Metodos
Semana 4   Javascript funciones y MetodosSemana 4   Javascript funciones y Metodos
Semana 4 Javascript funciones y Metodos
 
Taller 1 3
Taller 1 3Taller 1 3
Taller 1 3
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase string
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignaciones
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 

Ähnlich wie Herencia clase

Ähnlich wie Herencia clase (20)

Lab herencia
Lab herenciaLab herencia
Lab herencia
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
Lp2docclases
Lp2docclasesLp2docclases
Lp2docclases
 
Java
JavaJava
Java
 
Guion p1a
Guion p1aGuion p1a
Guion p1a
 
Guia poo
Guia pooGuia poo
Guia poo
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 
9.herencia en java
9.herencia en java9.herencia en java
9.herencia en java
 
10 sintaxis oo
10 sintaxis oo10 sintaxis oo
10 sintaxis oo
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
 
Introducción a la Programaciónen Java
Introducción a la Programaciónen JavaIntroducción a la Programaciónen Java
Introducción a la Programaciónen Java
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en Java
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clases
 
Datos previos
Datos previosDatos previos
Datos previos
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
Metodo constructor de una clase JAVA
Metodo constructor de una clase JAVAMetodo constructor de una clase JAVA
Metodo constructor de una clase JAVA
 
Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4
 
Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 

Mehr von Jose Antonio

Mercadeo y tecnología, El comercio electrónico
 Mercadeo y tecnología, El comercio electrónico Mercadeo y tecnología, El comercio electrónico
Mercadeo y tecnología, El comercio electrónicoJose Antonio
 
aprendizaje colaborativo
aprendizaje colaborativoaprendizaje colaborativo
aprendizaje colaborativoJose Antonio
 
Triptico del yarumo
Triptico del yarumoTriptico del yarumo
Triptico del yarumoJose Antonio
 
Triptico de matapalo
Triptico de matapaloTriptico de matapalo
Triptico de matapaloJose Antonio
 
Triptico de el araguaney
Triptico de el araguaneyTriptico de el araguaney
Triptico de el araguaneyJose Antonio
 
Triptico de chaguaramo
Triptico de chaguaramoTriptico de chaguaramo
Triptico de chaguaramoJose Antonio
 
Jose chirinos currículo
Jose chirinos currículoJose chirinos currículo
Jose chirinos currículoJose Antonio
 
Currículo jose chirinos
Currículo jose chirinosCurrículo jose chirinos
Currículo jose chirinosJose Antonio
 
Generacion de una familia
Generacion de una familiaGeneracion de una familia
Generacion de una familiaJose Antonio
 
Metodologia pacie bloque de cierre
Metodologia pacie bloque de cierreMetodologia pacie bloque de cierre
Metodologia pacie bloque de cierreJose Antonio
 
metodologia pacie bloque de cierre
metodologia pacie bloque de cierremetodologia pacie bloque de cierre
metodologia pacie bloque de cierreJose Antonio
 
pacie, bloque de cierre
pacie, bloque de cierrepacie, bloque de cierre
pacie, bloque de cierreJose Antonio
 
secund life avatar
secund life avatarsecund life avatar
secund life avatarJose Antonio
 

Mehr von Jose Antonio (20)

Mercadeo y tecnología, El comercio electrónico
 Mercadeo y tecnología, El comercio electrónico Mercadeo y tecnología, El comercio electrónico
Mercadeo y tecnología, El comercio electrónico
 
aprendizaje colaborativo
aprendizaje colaborativoaprendizaje colaborativo
aprendizaje colaborativo
 
Triptico del yarumo
Triptico del yarumoTriptico del yarumo
Triptico del yarumo
 
Triptico de matapalo
Triptico de matapaloTriptico de matapalo
Triptico de matapalo
 
Triptico de saman
Triptico de samanTriptico de saman
Triptico de saman
 
Triptico de el araguaney
Triptico de el araguaneyTriptico de el araguaney
Triptico de el araguaney
 
Triptico de chaguaramo
Triptico de chaguaramoTriptico de chaguaramo
Triptico de chaguaramo
 
áRbol caoba
áRbol caobaáRbol caoba
áRbol caoba
 
Jose chirinos currículo
Jose chirinos currículoJose chirinos currículo
Jose chirinos currículo
 
Currículo jose chirinos
Currículo jose chirinosCurrículo jose chirinos
Currículo jose chirinos
 
Computadora
ComputadoraComputadora
Computadora
 
Generacion de una familia
Generacion de una familiaGeneracion de una familia
Generacion de una familia
 
La adopcion
La adopcionLa adopcion
La adopcion
 
Union familiar
Union  familiarUnion  familiar
Union familiar
 
JAVA- basico
JAVA- basicoJAVA- basico
JAVA- basico
 
Metodologia pacie bloque de cierre
Metodologia pacie bloque de cierreMetodologia pacie bloque de cierre
Metodologia pacie bloque de cierre
 
metodologia pacie bloque de cierre
metodologia pacie bloque de cierremetodologia pacie bloque de cierre
metodologia pacie bloque de cierre
 
pacie, bloque de cierre
pacie, bloque de cierrepacie, bloque de cierre
pacie, bloque de cierre
 
Fatla cierre
Fatla cierreFatla cierre
Fatla cierre
 
secund life avatar
secund life avatarsecund life avatar
secund life avatar
 

Kürzlich hochgeladen

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 

Kürzlich hochgeladen (20)

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 

Herencia clase

  • 1. Herencia Hay clases que comparten gran parte de sus características. El mecanismo conocido con el nombre de herencia permite reutilizar clases: Se crea una nueva clase que extiende la funcionalidad de una clase existente sin tener que reescribir el código asociado a esta última. La nueva clase, a la que se denomina subclase, puede poseer atributos y métodos que no existan en la clase original. Los objetos de la nueva clase heredan los atributos y los métodos de la clase original, que se denomina superclase. § Trabajador es una clase genérica que sirve para almacenar datos como el nombre, la dirección, el número de teléfono o el número de la seguridad social de un trabajador. § Empleado es una clase especializada para representar los empleados que tienen una nómina mensual (encapsula datos como su salario anual o las retenciones del IRPF). § Consultor es una clase especializada para representar a aquellos trabajadores que cobran por horas (por ejemplo, registra el número de horas que ha trabajado un consultor y su tarifa horaria). OOP – Clases y objetos: Java -2- © Fernando Berzal
  • 2. Las clases Empleado y Consultor, además de los atributos y de las operaciones que definen, heredan de Trabajador todos sus atributos y operaciones. Un empleado concreto tendrá, además de sus atributos y operaciones como Empleado, todos los atributos correspondientes a la superclase Trabajador. OOP – Clases y objetos: Java -3- © Fernando Berzal
  • 3. En Java: import java.util.Date; // Para las fechas public class Trabajador { private String nombre; private String puesto; private String direccion; private String telefono; private Date fecha_nacimiento; private Date fecha_contrato; private String NSS; // Constructor public Trabajador (String nombre, String NSS) { this.nombre = nombre; this.NSS = NSS; } // Métodos get & set // ... // Comparación de objetos public boolean equals (Trabajador t) { return this.NSS.equals(t.NSS); } // Conversión en una cadena de caracteres public String toString () { return nombre + " (NSS "+NSS+")"; } } NOTA: Siempre es recomendable definir los métodos equals() y toString() OOP – Clases y objetos: Java -4- © Fernando Berzal
  • 4. public class Empleado extends Trabajador { private double sueldo; private double impuestos; private final int PAGAS = 14; // Constructor public Empleado (String nombre, String NSS, double sueldo) { super(nombre,NSS); this.sueldo = sueldo; this.impuestos = 0.3 * sueldo; } // Nómina public double calcularPaga () { return (sueldo-impuestos)/PAGAS; } // toString public String toString () { return "Empleado "+super.toString(); } } Con la palabra reservada extends indicamos que Empleado es una subclase de Trabajador. Con la palabra reservada super accedemos a miembros de la superclase desde la subclase. Generalmente, en un constructor, lo primero que nos encontramos es una llamada al constructor de la clase padre con super(…). Si no ponemos nada, se llama al constructor por defecto de la superclase antes de ejecutar el constructor de la subclase. OOP – Clases y objetos: Java -5- © Fernando Berzal
  • 5. class Consultor extends Trabajador { private int horas; private double tarifa; // Constructor public Consultor (String nombre, String NSS, int horas, double tarifa) { super(nombre,NSS); this.horas = horas; this.tarifa = tarifa; } // Paga por horas public double calcularPaga () { return horas*tarifa; } // toString public String toString () { return "Consultor "+super.toString(); } } La clase Consultor también define un método llamado calcularPaga(), si bien en este caso el cálculo se hace de una forma diferente por tratarse de un trabajador de un tipo distinto. Tanto la clase Empleado como la clase Consultor redefinen el método toString() que convierte un objeto en una cadena de caracteres. De hecho, Trabajador también redefine este método, que se hereda de la clase Object, la clase base de la que heredan todas las clases en Java. OOP – Clases y objetos: Java -6- © Fernando Berzal
  • 6. Redefinición de métodos Como hemos visto en el ejemplo con el método toString(), cada subclase hereda las operaciones de su superclase pero tiene la posibilidad de modificar localmente el comportamiento de dichas operaciones (redefiniendo métodos). // Declaración de variables Trabajador trabajador; Empleado empleado; Consultor consultor; // Creación de objetos trabajador = new Trabajador ("Juan", "456"); empleado = new Empleado ("Jose", "123", 24000.0); consultor = new Consultor ("Juan", "456", 10, 50.0); // Salida estándar con toString() System.out.println(trabajador); Juan (NSS 456) System.out.println(empleado); Empleado Jose (NSS 123) System.out.println(consultor); Consultor Juan (NSS 456) // Comparación de objetos con equals() System.out.println(trabajador.equals(empleado)); false System.out.println(trabajador.equals(consultor)); true OOP – Clases y objetos: Java -7- © Fernando Berzal
  • 7. Polimorfismo Al redefinir métodos, objetos de diferentes tipos pueden responder de forma diferente a la misma llamada (y podemos escribir código de forma general sin preocuparnos del método concreto que se ejecutará en cada momento). Ejemplo Podemos añadirle a la clase Trabajador un método calcularPaga genérico (que no haga nada por ahora): public class Trabajador… public double calcularPaga () { return 0.0; // Nada por defecto } En las subclases de Trabajador, no obstante, sí que definimos el método calcularPaga() para que calcule el importe del pago que hay que efectuarle a un trabajador (en función de su tipo). public class Empleado extends Trabajador… public double calcularPaga () // Nómina { return (sueldo-impuestos)/PAGAS; } class Consultor extends Trabajador… public double calcularPaga () // Por horas { return horas*tarifa; } OOP – Clases y objetos: Java -8- © Fernando Berzal
  • 8. Como los consultores y los empleados son trabajadores, podemos crear un array de trabajadores con consultores y empleados: … Trabajador trabajadores[] = new Trabajador[2]; trabajadores[0] = new Empleado ("Jose", "123", 24000.0); trabajadores[1] = new Consultor ("Juan", "456", 10, 50.0); … Una vez que tenemos un vector con todos los trabajadores de una empresa, podríamos crear un programa que realizase los pagos correspondientes a cada trabajador de la siguiente forma: … public void pagar (Trabajador trabajadores[]) { int i; for (i=0; i<trabajadores.length; i++) realizarTransferencia ( trabajadores[i], trabajadores[i].calcularPaga()); } … Para los trabajadores del vector anterior, se realizaría '%¤#" ¦¨©§¦¤¢  ¨$ ! £ ¡ ¨ ¨ £¥£ ¡ una transferencia de 1200 @¤29£¤#!8¥ 765$31©§¦¤)(¤  4 4 2 0 ¨ £¥£ ¡ otra transferencia, esta vez de 500 Cada vez que se invoca el método calcularPaga(), se busca automáticamente el código que en cada momento se ha de ejecutar en función del tipo de trabajador (enlace dinámico). La búsqueda del método que se ha de invocar como respuesta a un mensaje dado se inicia con la clase del receptor. Si no se encuentra un método apropiado en esta clase, se busca en su clase padre (de la hereda la clase del receptor). Y así sucesivamente hasta encontrar la implementación adecuada del método que se ha de ejecutar como respuesta a la invocación original. OOP – Clases y objetos: Java -9- © Fernando Berzal
  • 9. El Principio de Sustitución de Liskov “Debe ser posible utilizar cualquier objeto instancia de una subclase en el lugar de cualquier objeto instancia de su superclase sin que la semántica del programa escrito en los términos de la superclase se vea afectado.” Barbara H. Liskov Stephen N. Zilles: “Programming with Abstract Data Types” Computation Structures Group, Memo No 99, MIT, Project MAC, 1974. (ACM SIGPLAN Notices, 9, 4, pp. 50-59, April 1974.) El cumplimiento del Principio de Sustitución de Liskov permite obtener un comportamiento y diseño coherente: Ejemplo Cuando tengamos trabajadores, sean del tipo particular que sean, el método calcularPaga() siempre calculará el importe del pago que hay que efectuar en compensación por los servicios del trabajador. Acerca de la sobrecarga de métodos No hay que confundir el polimorfismo con la sobrecarga de métodos (distintos métodos con el mismo nombre pero diferentes parámetros). Ejemplo Podemos definir varios constructores para crear de distintas formas objetos de una misma clase. OOP – Clases y objetos: Java - 10 - © Fernando Berzal
  • 10. Un ejemplo clásico: Figuras geométricas public class Figura { protected double x; protected double y; protected Color color; protected Panel panel; public Figura (Panel panel, double x, double y) { this.panel = panel; this.x = x; this.y = y; } public void setColor (Color color) { this.color = color; panel.setColor(color); } public void dibujar () { // No hace nada aquí… } } OOP – Clases y objetos: Java - 11 - © Fernando Berzal
  • 11. public class Circulo extends Figura { private double radio; public Circulo(Panel panel, double x, double y, double radio) { super(panel,x,y); this.radio = radio; } public void dibujar () { panel.drawEllipse(x,y, x+2*radio, y+2*radio); } } public class Cuadrado extends Figura { private double lado; public Cuadrado(Panel panel, double x, double y, double lado) { super(panel,x,y); this.lado = lado; } public void dibujar () { panel.drawRectangle(x,y, x+lado, y+lado); } } OOP – Clases y objetos: Java - 12 - © Fernando Berzal
  • 12. La palabra reservada final En Java, usando la palabra reservada final, podemos: 1. Evitar que un método se pueda redefinir en una subclase: class Consultor extends Trabajador { … public final double calcularPaga () { return horas*tarifa; } … } Aunque creemos subclases de Consultor, el dinero que se le pague siempre será en función de las horas que trabaje y de su tarifa horaria (y eso no podremos cambiarlo aunque queramos). 2. Evitar que se puedan crear subclases de una clase dada: public final class Circulo extends Figura … public final class Cuadrado extends Figura … Al usar final, tanto Circulo como Cuadrado son ahora clases de las que no se pueden crear subclases. En ocasiones, una clase será “final”… porque no tenga sentido crear subclases o, simplemente, porque deseamos que la clase no se pueda extender. RECORDATORIO: En Java, final también se usa para definir constantes simbólicas. OOP – Clases y objetos: Java - 13 - © Fernando Berzal