HERENCIA TEMA
CAPACIDADES      Conocer  la propiedad de la orientación a objetos: Herencia.      Especificar jerarquía de clases.     Determinar  las diferencias entre Herencia Simple y Herencia Múltiple     Desarrollar aplicaciones en Java de problemas con orientación a objetos: Uso de Herencia.
Herencia. Definición La Herencia es la relación que existe entre dos clases, en la que una clase derivada se crea a partir de otra ya existente, denominada clase base  Es un Mecanismo exclusivo y fundamental de la Programación Orientada a Objetos. Es el principal mecanismo que ayuda a fomentar y facilitar la reutilización del software
Herencia. Definición La relación de herencia se establece entre una nueva clase (referida aquí con el nombre  Nueva ) y una clase ya existente (referida aquí con el nombre  Existente ).
Herencia. Definición La relación de herencia se establece entre una clase  Nueva   y una clase  Existente . Sobre la clase que hereda de la existente: Nueva   hereda todas las características de  Existente . Nueva   puede definir características adicionales. Nueva   puede redefinir características heredadas de  Existente . El proceso de herencia no afecta de ninguna forma a la superclase  Existente . Para que una nueva clase sea subclase de otra existente basta con añadir  extends  existente  a continuación del nombre de la nueva:
Herencia. Definición public class  Nueva  extends  Existente  { ..... }  
Tipos de Herencia.    HERENCIA SIMPLE es un tipo de herencia en la que una clase hereda el estado (estructura) y el comportamiento de una sola clase base. Es decir hay herencia múltiple cuando una clase hereda de una sola clase base.
Tipos de Herencia.    HERENCIA MULTIPLE E s un tipo de herencia en la que una clase hereda el estado (estructura) y el comportamiento de más de una clase base. Java no ha desarrollado la herencia múltiple, sólo permite la herencia de una sola clase base. En casos especiales es posible simular herencia múltiple con las interfaces.
Ejemplo Herencia Múltiple
Herencia. Implementación Java Public class Empleado{ protected String codigo;  protected String apell, nomb, cargo; protected double sueldo; public Empleado(String ncod, String nape, String nnom, String ncar, double nsuel) { codigo=ncod;   apell=nape; nomb=nnom;   cargo=ncar; sueldo=nsuel;   }  
Herencia. Implementación Java. public void aumentasueldo(double porcentaje) { sueldo+=sueldo*porcentaje*100; }   public Strint toString() { return apell+nomb; }  }
Herencia. Implementación Java. public class Ejecutivo extends Empleado { double presupuesto; public Ejecutivo(String ncod, String nap, String nno, String ncar, double nsuel, double npres) { super(ncod, nap, nno, ncar, nsuel, npres); this.presupuesto=npres; }   public void asignapres(double p) { presupuesto=p; } }
Herencia. Implementación Java ........ Ejecutivo jef=new Ejecutivo(“Juan”, “Perez”, “jefe logística”, 2000, 30000); jef.aumentasueldo(); ........ .......
Categoría protected: El especificador de acceso  protected  es equivalente al especificador private con el agregado de que los atributos protegidos de una clase base son accesibles para los miembros de cualquier clase derivada de esa clase.
 
Herencia y Constructores Los constructores de la clase base se invocan antes del constructor de la clase derivada. Si una clase base, es a su vez una clase derivada, sin constructores se invocan también en secuencia: constructor base, constructor derivada. Los constructores no se heredan aunque los constructores por defecto se generan si se requiere.
Jerarquía de Clases
La clase Object Object es la raiz de la jerarquía de herencia (de implementación) en Java   Object define un conjunto de métodos útiles, que pueden ser redefinidos en cada clase
Métodos de la clase clase Object    public boolean equals(Object o) :  Permite definir el criterio de igualdad utilizado para los objetos de una determinada clase (el operador == únicamente chequea la igualdad de referencias).  public String toString() :  Permite decidir la  representación  externa  de un objeto. Por defecto es el valor de su referencia, etiquetada con el nombre de la clase. protected Object clone() throws CloneNotSupportedException : devuelve una copia del objeto si la clase implementa la interfaz Cloneable.
Métodos de la clase clase Object   public final Class getClass(): clase que representa el tipo del objeto. protected void finalize() throws Thorowable: (relacionado con liberar memoria) 
Ejemplo. Métodos clase Object class Punto implements Cloneable { private int x,y; public Punto(int a, int b) { x=a; y=b; } public Punto() { x=0; y=0; }
Ejemplo. Métodos clase Object public Object clone() { Object obj=null; try   { obj=super.clone();   } catch(CloneNotSupportedException ex)   { System.out.println("no se puede duplicar..");   } return obj; } public void trasladar (int dx, int dy) { x=x+dx; y=y+dy; }
Ejemplo. Métodos clase Object public String toString() { String texto="origen: ("+x+", "+y+")"; return texto; } protected void finalize() throws Throwable  { System.out.println("Finalizando objetos..."); } }
Ejemplo. Métodos clase Object public class TestP { public static void main(String[]args)throws IOException { int wa, wb; String temp; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); PrintStream sal=System.out; sal.println("Ingrese valor x:"); temp=br.readLine(); wa=Integer.parseInt(temp);
Ejemplo. Métodos clase Object sal.println("Ingrese valor y: "); temp=br.readLine(); wb=Integer.parseInt(temp); Punto p1=new Punto(wa,wb); temp=p1.toString(); sal.println(temp);  p1.trasladar(5,5); temp=p1.toString(); sal.println(temp);
Ejemplo. Métodos clase Object sal.println("segundo objeto2"); Punto p2= (Punto) p1.clone();  temp=p2.toString(); sal.println(temp); if (p1.equals(p2)) { sal.println("Objetos iguales.."); } else { sal.println("Objetos Diferentes....."); }
Ejemplo. Métodos clase Object   p1=null; p2=null; // Ejecutar el recolector de basura Runtime runtime = Runtime.getRuntime(); runtime.gc(); runtime.runFinalization();  } }
Java - Herencia APLICACIÓN DESARROLLADA
Enunciado aplicación Herencia Elabore una aplicación java que implemente herencia de figuras geométricas (cuadrado, triángulo y círculo). Implementar métodos y botones para calcular el área y dibujar el objeto correspondiente.
Pasos 1. Diseñe la interfaz visual.
Pasos
Pasos
2. Escribir atributos y métodos de la clase Figura public class Figura {  protected String nombre; protected double area; public Figura(String xno)  {  nombre=xno;  } public String getnonbre()  {  return "Soy un "+nombre;  }    public double getarea()  {  return area;  } }
3. Escribir atributos y métodos de la clase Poligono public class Poligono extends Figura {  protected double largo,ancho; public Poligono(String xn, double a, double b) { super(xn); largo=a; ancho=b;  } public double getlar()  {  return largo;  } public double getan()  {  return ancho;  } }
4. Escribir atributos y métodos de la clase Circulo public class Circulo extends Figura { private double radio; public Circulo(double ra) {  super("circulo");  radio=ra;  }    public void areacir() {  area=3.1415*radio*radio;  }    public void dibujacir(Graphics g) {  int xl, xa;  int tx=(int)radio;  int ty=(int)radio; g.drawOval(300,200,tx,tx); } }
5. Escribir atributos y métodos de la clase Cuadrado public  class Cuadrado extends Poligono { public Cuadrado(double m) { super("cuadrado",m,m); }    public void areacuad()  {   area=largo*ancho;   } public void dibujacuad(Graphics g) { int xl, xa;  xl=(int)largo; g.drawLine(300,200,300+xl,200); g.drawLine(300+xl,200,300+xl,200+xl); g.drawLine(300+xl,200+xl,300,200+xl); g.drawLine(300,200+xl,300,200);  } }
6. Escribir atributos y métodos de la clase Triangulo public class Triangulo extends Poligono { public Triangulo(double p, double q) {  super("triangulo",p,q);  } public void areatrian() {   area=0.5*largo*ancho;   }   public void dibujatrian(Graphics g) { int xl, xa;  xl=(int)largo;  xa=(int)ancho; g.drawLine(300,200,300+xl,200); g.drawLine(300+xl,200,300+xl,200+xl); g.drawLine(300+xl,200+xl,300,200);  } }
7. Definición de Objetos En la clase Frame1 definir los siguientes objetos: Cuadrado c1; Triangulo t1; Circulo cir;
8. Codificar botones void jButton1_actionPerformed(ActionEvent e) { double xa; Graphics g=getGraphics(); xa=Double.valueOf(txtlado.getText()).doubleValue(); c1=new Cuadrado(xa); salida.append(""+c1.getnonbre()); c1.areacuad(); salida.append("\nArea Cuadrado: "+c1.getarea()); c1.dibujacuad(g); }
8. Codificar botones void jButton2_actionPerformed(ActionEvent e)  { txtlado.setText(""); salida.setText("");  }   void jButton3_actionPerformed(ActionEvent e)  { double xa,xb; Graphics g=getGraphics(); xa=Double.valueOf(txtbase.getText()).doubleValue(); xb=Double.valueOf(txtaltura.getText()).doubleValue(); t1=new Triangulo(xa,xb); salida1.append(""+t1.getnonbre()); t1.areatrian(); salida1.append("\nArea Triangulo: "+t1.getarea()); t1.dibujatrian(g); }
8. Codificar botones void jButton4_actionPerformed(ActionEvent e) { txtbase.setText(""); txtaltura.setText(""); salida1.setText(""); }   void jButton5_actionPerformed(ActionEvent e)  { double xra; Graphics g=getGraphics(); xra=Double.valueOf(txtradio.getText()).doubleValue(); cir=new Circulo(xra); salida2.append(""+cir.getnonbre()); cir.areacir(); salida2.append("\nArea Circulo: "+cir.getarea()); cir.dibujacir(g);  }
Ejecución
Ejecución
Ejecución
GRACIAS POR SU ATENCION

Tema2

  • 1.
  • 2.
    CAPACIDADES     Conocer la propiedad de la orientación a objetos: Herencia.      Especificar jerarquía de clases.     Determinar las diferencias entre Herencia Simple y Herencia Múltiple     Desarrollar aplicaciones en Java de problemas con orientación a objetos: Uso de Herencia.
  • 3.
    Herencia. Definición LaHerencia es la relación que existe entre dos clases, en la que una clase derivada se crea a partir de otra ya existente, denominada clase base Es un Mecanismo exclusivo y fundamental de la Programación Orientada a Objetos. Es el principal mecanismo que ayuda a fomentar y facilitar la reutilización del software
  • 4.
    Herencia. Definición Larelación de herencia se establece entre una nueva clase (referida aquí con el nombre Nueva ) y una clase ya existente (referida aquí con el nombre Existente ).
  • 5.
    Herencia. Definición Larelación de herencia se establece entre una clase Nueva y una clase Existente . Sobre la clase que hereda de la existente: Nueva hereda todas las características de Existente . Nueva puede definir características adicionales. Nueva puede redefinir características heredadas de Existente . El proceso de herencia no afecta de ninguna forma a la superclase Existente . Para que una nueva clase sea subclase de otra existente basta con añadir extends existente a continuación del nombre de la nueva:
  • 6.
    Herencia. Definición publicclass Nueva extends Existente { ..... }  
  • 7.
    Tipos de Herencia.   HERENCIA SIMPLE es un tipo de herencia en la que una clase hereda el estado (estructura) y el comportamiento de una sola clase base. Es decir hay herencia múltiple cuando una clase hereda de una sola clase base.
  • 8.
    Tipos de Herencia.   HERENCIA MULTIPLE E s un tipo de herencia en la que una clase hereda el estado (estructura) y el comportamiento de más de una clase base. Java no ha desarrollado la herencia múltiple, sólo permite la herencia de una sola clase base. En casos especiales es posible simular herencia múltiple con las interfaces.
  • 9.
  • 10.
    Herencia. Implementación JavaPublic class Empleado{ protected String codigo; protected String apell, nomb, cargo; protected double sueldo; public Empleado(String ncod, String nape, String nnom, String ncar, double nsuel) { codigo=ncod; apell=nape; nomb=nnom; cargo=ncar; sueldo=nsuel; }  
  • 11.
    Herencia. Implementación Java.public void aumentasueldo(double porcentaje) { sueldo+=sueldo*porcentaje*100; }   public Strint toString() { return apell+nomb; } }
  • 12.
    Herencia. Implementación Java.public class Ejecutivo extends Empleado { double presupuesto; public Ejecutivo(String ncod, String nap, String nno, String ncar, double nsuel, double npres) { super(ncod, nap, nno, ncar, nsuel, npres); this.presupuesto=npres; }   public void asignapres(double p) { presupuesto=p; } }
  • 13.
    Herencia. Implementación Java........ Ejecutivo jef=new Ejecutivo(“Juan”, “Perez”, “jefe logística”, 2000, 30000); jef.aumentasueldo(); ........ .......
  • 14.
    Categoría protected: Elespecificador de acceso protected es equivalente al especificador private con el agregado de que los atributos protegidos de una clase base son accesibles para los miembros de cualquier clase derivada de esa clase.
  • 15.
  • 16.
    Herencia y ConstructoresLos constructores de la clase base se invocan antes del constructor de la clase derivada. Si una clase base, es a su vez una clase derivada, sin constructores se invocan también en secuencia: constructor base, constructor derivada. Los constructores no se heredan aunque los constructores por defecto se generan si se requiere.
  • 17.
  • 18.
    La clase ObjectObject es la raiz de la jerarquía de herencia (de implementación) en Java Object define un conjunto de métodos útiles, que pueden ser redefinidos en cada clase
  • 19.
    Métodos de laclase clase Object   public boolean equals(Object o) : Permite definir el criterio de igualdad utilizado para los objetos de una determinada clase (el operador == únicamente chequea la igualdad de referencias). public String toString() : Permite decidir la representación externa de un objeto. Por defecto es el valor de su referencia, etiquetada con el nombre de la clase. protected Object clone() throws CloneNotSupportedException : devuelve una copia del objeto si la clase implementa la interfaz Cloneable.
  • 20.
    Métodos de laclase clase Object   public final Class getClass(): clase que representa el tipo del objeto. protected void finalize() throws Thorowable: (relacionado con liberar memoria) 
  • 21.
    Ejemplo. Métodos claseObject class Punto implements Cloneable { private int x,y; public Punto(int a, int b) { x=a; y=b; } public Punto() { x=0; y=0; }
  • 22.
    Ejemplo. Métodos claseObject public Object clone() { Object obj=null; try { obj=super.clone(); } catch(CloneNotSupportedException ex) { System.out.println("no se puede duplicar.."); } return obj; } public void trasladar (int dx, int dy) { x=x+dx; y=y+dy; }
  • 23.
    Ejemplo. Métodos claseObject public String toString() { String texto="origen: ("+x+", "+y+")"; return texto; } protected void finalize() throws Throwable { System.out.println("Finalizando objetos..."); } }
  • 24.
    Ejemplo. Métodos claseObject public class TestP { public static void main(String[]args)throws IOException { int wa, wb; String temp; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); PrintStream sal=System.out; sal.println("Ingrese valor x:"); temp=br.readLine(); wa=Integer.parseInt(temp);
  • 25.
    Ejemplo. Métodos claseObject sal.println("Ingrese valor y: "); temp=br.readLine(); wb=Integer.parseInt(temp); Punto p1=new Punto(wa,wb); temp=p1.toString(); sal.println(temp); p1.trasladar(5,5); temp=p1.toString(); sal.println(temp);
  • 26.
    Ejemplo. Métodos claseObject sal.println("segundo objeto2"); Punto p2= (Punto) p1.clone(); temp=p2.toString(); sal.println(temp); if (p1.equals(p2)) { sal.println("Objetos iguales.."); } else { sal.println("Objetos Diferentes....."); }
  • 27.
    Ejemplo. Métodos claseObject p1=null; p2=null; // Ejecutar el recolector de basura Runtime runtime = Runtime.getRuntime(); runtime.gc(); runtime.runFinalization(); } }
  • 28.
    Java - HerenciaAPLICACIÓN DESARROLLADA
  • 29.
    Enunciado aplicación HerenciaElabore una aplicación java que implemente herencia de figuras geométricas (cuadrado, triángulo y círculo). Implementar métodos y botones para calcular el área y dibujar el objeto correspondiente.
  • 30.
    Pasos 1. Diseñela interfaz visual.
  • 31.
  • 32.
  • 33.
    2. Escribir atributosy métodos de la clase Figura public class Figura { protected String nombre; protected double area; public Figura(String xno) { nombre=xno; } public String getnonbre() { return "Soy un "+nombre; }   public double getarea() { return area; } }
  • 34.
    3. Escribir atributosy métodos de la clase Poligono public class Poligono extends Figura { protected double largo,ancho; public Poligono(String xn, double a, double b) { super(xn); largo=a; ancho=b; } public double getlar() { return largo; } public double getan() { return ancho; } }
  • 35.
    4. Escribir atributosy métodos de la clase Circulo public class Circulo extends Figura { private double radio; public Circulo(double ra) { super("circulo"); radio=ra; }   public void areacir() { area=3.1415*radio*radio; }   public void dibujacir(Graphics g) { int xl, xa; int tx=(int)radio; int ty=(int)radio; g.drawOval(300,200,tx,tx); } }
  • 36.
    5. Escribir atributosy métodos de la clase Cuadrado public class Cuadrado extends Poligono { public Cuadrado(double m) { super("cuadrado",m,m); }   public void areacuad() { area=largo*ancho; } public void dibujacuad(Graphics g) { int xl, xa; xl=(int)largo; g.drawLine(300,200,300+xl,200); g.drawLine(300+xl,200,300+xl,200+xl); g.drawLine(300+xl,200+xl,300,200+xl); g.drawLine(300,200+xl,300,200); } }
  • 37.
    6. Escribir atributosy métodos de la clase Triangulo public class Triangulo extends Poligono { public Triangulo(double p, double q) { super("triangulo",p,q); } public void areatrian() { area=0.5*largo*ancho; }   public void dibujatrian(Graphics g) { int xl, xa; xl=(int)largo; xa=(int)ancho; g.drawLine(300,200,300+xl,200); g.drawLine(300+xl,200,300+xl,200+xl); g.drawLine(300+xl,200+xl,300,200); } }
  • 38.
    7. Definición deObjetos En la clase Frame1 definir los siguientes objetos: Cuadrado c1; Triangulo t1; Circulo cir;
  • 39.
    8. Codificar botonesvoid jButton1_actionPerformed(ActionEvent e) { double xa; Graphics g=getGraphics(); xa=Double.valueOf(txtlado.getText()).doubleValue(); c1=new Cuadrado(xa); salida.append(""+c1.getnonbre()); c1.areacuad(); salida.append("\nArea Cuadrado: "+c1.getarea()); c1.dibujacuad(g); }
  • 40.
    8. Codificar botonesvoid jButton2_actionPerformed(ActionEvent e) { txtlado.setText(""); salida.setText(""); }   void jButton3_actionPerformed(ActionEvent e) { double xa,xb; Graphics g=getGraphics(); xa=Double.valueOf(txtbase.getText()).doubleValue(); xb=Double.valueOf(txtaltura.getText()).doubleValue(); t1=new Triangulo(xa,xb); salida1.append(""+t1.getnonbre()); t1.areatrian(); salida1.append("\nArea Triangulo: "+t1.getarea()); t1.dibujatrian(g); }
  • 41.
    8. Codificar botonesvoid jButton4_actionPerformed(ActionEvent e) { txtbase.setText(""); txtaltura.setText(""); salida1.setText(""); }   void jButton5_actionPerformed(ActionEvent e) { double xra; Graphics g=getGraphics(); xra=Double.valueOf(txtradio.getText()).doubleValue(); cir=new Circulo(xra); salida2.append(""+cir.getnonbre()); cir.areacir(); salida2.append("\nArea Circulo: "+cir.getarea()); cir.dibujacir(g); }
  • 42.
  • 43.
  • 44.
  • 45.