programación orientada a objetos temario herencia – concepto – tipo de herencia – herencia en...

28
Programación Orientada a Objetos Temario • Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis • Sobre escritura de métodos • Constructores con herencia y uso de super • Jerarquía de llamada en constructores

Upload: juan-francisco-benitez-palma

Post on 02-Feb-2016

250 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Programación Orientada a Objetos

Temario• Herencia– Concepto– Tipo de Herencia– Herencia en java simple– Sintaxis

• Sobre escritura de métodos• Constructores con herencia y uso de super• Jerarquía de llamada en constructores

Page 2: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

- Cuando unos padres tienen un hijo, ese hijo HEREDARA muchos de los atributos que tenían sus padres.

- Cuando un abuelo fallece, todos sus hijos y nietos HEREDAN sus riquezas.

- Uno como chileno, HEREDA muchos derechos, deberes y beneficios por el simple hecho de ser chilenos.

He aquí ejemplos prácticos de HERENCIA

Introducción

Page 3: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Concepto– La idea de la herencia es permitir la creación de nuevas

clases basadas en clases existentes.– Cuando heredamos de una clase existente, reusamos (o

heredamos) métodos y campos, y agregamos nuevos campos y métodos para cumplir con la situación nueva.

– Cada vez que encontremos la relación "es-un" entre dos clases, estamos ante la presencia de herencia.

– La clase ya existente es llamada superclass, o clase base, o clase padre.

– La clase nueva es llamada subclase, clase derivada, o clase hija.

– A través de la herencia podemos agregar nuevos campos, y podemos agregar o sobre montar métodos (override).

Herencia

Page 4: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Tipos de Herencia:- Principalmente existen dos tipos de herencia.

• Herencia simple: una clase solo puede tener un padre, por lo tanto la estructura de clases será en forma de árbol.• Herencia múltiple: Una clase puede tener uno o varios

padres. La estructura de clases es un grafo

Herencia

Page 5: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Tipos de Herencia:• Herencia simple:– Muy fácil de entender y manejar tanto por el

lenguaje como por el programador.– Limitada puesto que en el mundo real un objeto

puede pertenecer a varias clases y sin embargo aquí esta situación no se puede modelar.

Herencia

Page 6: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Tipos de Herencia:• Herencia múltiple:– Es mas realista y da al programador más libertad y

mas posibilidades de reutilización de código.– Es mucho más difícil de utilizar por la posibilidad

de ciclos y para los lenguajes de programación es muy costoso el permitirlo.

Herencia

Page 7: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Herencia en Java SimpleEn la creación de Java se estableció que la forma de abordar la herencia sería la simple, en donde las facilidades de Herencia multiple serían implementadas en parte por otras estructuras como Interface.• Características– Estructura jerárquica en árbol en donde en la raiz

podemos encontrar la clase Object, de las que heredan todas las clases.

– Todas las clases tienen un padre – Todos los objetos son “Object”– Java no permite que una subclase elimine un método o

una variable de instancia aunque esta no la necesite

Herencia

Page 8: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Sintaxis• Uso de extends– La palabra reservada extends ser refiere que

«hereda de»• Uso de super– La palabra reservada super se refiera a los atributos,

constructores y metodos de la clase padre.

Public class ClaseHija extends ClasePadre{

}

Herencia

Page 9: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Ejercicio Resuelto• Crear un objeto de la clase alumno en donde:

la clase Persona tiene los atributos rut,nombre,edad y luego la clase alumno herede de persona y agregue los atributos carrera y escuela.– Crear Clase Persona.– Crear Clase Alumno y agregar la clausula extends

Persona.– Crear un Objeto Alumno y agregar todos los

atributos que posee.

Herencia

Page 10: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Crear Clase Personapackage herencia01;public class Persona { // Atributos private int rut; private String nombre; private int edad;

// Constructores public Persona() { }

public Persona(int rut, String nombre, int edad) { this.rut = rut; this.nombre = nombre; this.edad = edad; }

public int getRut() { return rut; }public void setRut(int rut) { this.rut = rut; }public String getNombre() { return nombre; }public void setNombre(String nombre) { this.nombre = nombre; }public int getEdad() { return edad; }public void setEdad(int edad) { this.edad = edad; } }

Herencia

Page 11: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Crear Clase Alumno y agregar la clausula extends Personapackage herencia01;

public class Alumno extends Persona{ // Atributos private String carrera; private String escuela; // Constructores public Alumno() {

}

public Alumno(String carrera, String escuela) { this.carrera = carrera; this.escuela = escuela; } public Alumno(int rut, String nombre, int edad, String carrera, String escuela) { super.setRut(rut); super.setNombre(nombre); super.setEdad(edad); this.carrera = carrera; this.escuela = escuela; } public String getCarrera() { return carrera; }

public void setCarrera(String carrera) { this.carrera = carrera; }public String getEscuela() { return escuela; }public void setEscuela(String escuela) { this.escuela = escuela; }}

Herencia

Page 12: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Crear un Objeto Alumno y agregar todos los atributos que posee.

package herencia01;public class Main {public static void main(String[] args) { Alumno al = new Alumno(); al.setRut(1); al.setNombre("Federico"); al.setEdad(20); al.setCarrera("Ingeniería Informática"); al.setEscuela("Informática y Telecomunicaciones"); }}

Herencia

Page 13: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Ejercicio Resuelto• Conclusiones– Al heredar de Persona alumno adquiere los

atributos de tener rut, nombre y edad– Este principio facilita la reutilización de código

considerablemente para alumno.– La palabra reservada super sirve para cambiar los

atributos del padre a traves de los metodos públicos get y set.

Herencia01.rar

Herencia

Page 14: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Ejercicio Resuelto• Crear una aplicación que permita calcular el área y perímetro de un cuadrado, rectángulo

y circulo utilizando herencia.– Crear la clase Figuras que represente la agrupación de las formulas de cálculos de

AREA y PERIMETRO de todas las figuras (cuadrado, rectángulo y circulo) .– Crea la clase Circulo en donde: • Herede las formulas de FIGURAS• tenga el atributo RADIO, y use los métodos que calculen el area y el perimetro que

vienen de la clase padre (Figuras).– Crea la clase Rectángulo en donde: • Herede las formulas de FIGURAS• tenga el atributo RADIO, y use los métodos que calculen el area y el perimetro que

vienen de la clase padre (Figuras).– Crea la clase Cuadrado en donde: • Herede las formulas de FIGURAS• tenga el atributo RADIO, y use los métodos que calculen el area y el perimetro que

vienen de la clase padre (Figuras).– Cree la clase Main en donde use la clase Circulo, Rectangulo y Cuadrado, y muestre

un informe final de todas las Areas Y Perimetros de todas las figuras

Herencia

Page 15: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Herenciapackage javaapplication16;public class Cuadrado extends Figuras{ private int lado; Cuadrado() {

} public void setLado(int lado) { this.lado = lado; } public double calcularArea() { double resultado = 0; resultado = super.calcularAreaCuadrado(lado); return resultado; } public double calcularPerimetro() { double resultado = 0; resultado = super.calcularPerimetroCuadrado(this.lado); return resultado; }}

package javaapplication16;public class Circulo extends Figuras{ private int radio; public Circulo() { this.radio = 0; } public void setRadio(int radio) { this.radio = radio; } public double calcularArea() { double resultado = 0; resultado = super.calcularAreaCirculo(this.radio); return resultado; } public double calcularPerimetro() { double resultado = 0; resultado = super.calcularPerimetroCirculo(this.radio); return resultado; }}

Page 16: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Herenciapackage javaapplication16;public class Rectangulo extends Figuras{ private int ladoA; private int ladoB; public Rectangulo() { this.ladoA = 0; this.ladoB = 0; } public void setLadoA(int ladoA) { this.ladoA = ladoA; } public void setLadoB(int ladoB) { this.ladoB = ladoB; } public double calcularArea() { double resultado = 0; resultado = super.calcularAreaRectangulo(this.ladoA, this.ladoB); return resultado; } public double calcularPerimetro() { double resultado = 0; resultado = super.calcularPerimetroRectangulo(this.ladoA, this.ladoB); return resultado; }}

Page 17: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

package javaapplication16;import javax.swing.JOptionPane;public class Main{ public static void main(String[] args) { JOptionPane.showMessageDialog(null,"Bienvenido a aplicacion FIGURAS"); int numero1, numero2; numero1 = numero2 = 0; Circulo cir = new Circulo(); Rectangulo rec = new Rectangulo(); Cuadrado cua = new Cuadrado(); String tmp; // Variable Temporal

tmp = JOptionPane.showInputDialog("Ingrese lado del cuadrado"); numero1 = Integer.parseInt(tmp); cua.setLado(numero1);

tmp = JOptionPane.showInputDialog("Ingrese 1er lado del Rectangulo"); numero1 = Integer.parseInt(tmp); rec.setLadoA(numero1); tmp = JOptionPane.showInputDialog("Ingrese 2do lado del Rectangulo"); numero2 = Integer.parseInt(tmp); rec.setLadoB(numero2);

tmp = JOptionPane.showInputDialog("Ingrese Radio del CIRCULO"); numero1 = Integer.parseInt(tmp); cir.setRadio(numero1);

String mensaje_final = ""; mensaje_final = mensaje_final + "\n [Cuadrado] \n Perimetro: "+ cua.calcularPerimetro() +" \n Area: "+cua.calcularArea(); mensaje_final = mensaje_final + "\n [Rectangulo] \n Perimetro: "+ rec.calcularPerimetro() +" \n Area: "+rec.calcularArea(); mensaje_final = mensaje_final + "\n [Circulo] \n Perimetro: "+ cir.calcularPerimetro() +" \n Area: "+cir.calcularArea(); JOptionPane.showMessageDialog(null," -- Informe Final -- \n" + mensaje_final); }}

Herencias 2.rar

Page 18: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Sobre-escritura de métodos:-¿Qué pasa si al heredar un método de una clase padre no cumple con lo que yo quiero hacer en la clase?- ¿Puedo personalizar métodos que ya han sido heredados? SI

Es aquí donde usamos el comando @Override (del ingles ‘Anular’ o ‘No hacer caso de’) que hace que ignore el método heredado, y cree uno totalmente nuevo(sobre-escritura)OJO: @Override no sobre-escribe el método en la clase padre, sino solo en la clase donde ha sido heredada(hijo)

Page 19: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Ejercicios Resueltos:• Crea la clase ‘Calculadora’ en donde tenga solo un atributo (numero1) con su respectivo accesador y mutador. Tambien crear el metodo ‘sumar()’ en cual simplemente sume al atributo +1.• Crea la clase ‘Maquina’ el cual herede los componentes de ‘Calculadora’, pero sobre-escriba el método sumar() para que este sume le sume +10 al atributo de calculadora.• En la clase ‘Main’ has que un usuario ingrese un numero, y llama los metodos ‘sumar()’ de Calculadora y Maquina POR SEPARADO. Muestre los resultados.

Sobre-escritura de métodos

Page 20: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

package sobreescritura_metodos1;public class Calculadora{ private int numero1;

public Calculadora() {

} public int getNumero1() { return numero1; } public void setNumero1(int numero1) { this.numero1 = numero1; }

public void sumar() { this.numero1 = this.numero1 + 1; } }

package sobreescritura_metodos1;public class Maquina extends Calculadora{ @Override public void sumar() // Metodo NUEVO { super.setNumero1( super.getNumero1() + 10 ); }}

Sobre-escritura de métodos

Page 21: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

package sobreescritura_metodos1;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner teclado = new Scanner(System.in); Calculadora c = new Calculadora(); Maquina m = new Maquina();

System.out.println("Ingrese numero"); int n = teclado.nextInt(); c.setNumero1(n); m.setNumero1(n);

// sumar de CALCULADORA (+1) c.sumar(); System.out.println("Metodo sumar (Calculadora) -> "+c.getNumero1()); // sumar de MAQUINA (+10) m.sumar(); System.out.println("Metodo sumar (Maquina) -> "+m.getNumero1()); }}

sobreescritura_metodos1.rar

Archivo ->Sobre-escritura de métodos

Page 22: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

•Jerarquía de llamada en constructores:-Si tu quiere llegar a hacer un tramite en la comuna de ‘Estación Central’, primero deberías haber llegado a la ‘Región Metropolitana’. Pero antes de llegar a esta región, deberías haber llegado a ‘Chile’. Pero antes de llegar a este país, deberías haber llegado a ‘América del sur’ …….

[Aquí se aplica la ‘Jerarquía de llamada en constructores’ para solucionar esta situacion].

Page 23: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Jerarquía de llamada en constructores

Mi Abuelo

Mi Padre

YO

Mi Hijo

Orden de llamadaOrden de ejecución de constructores

[super.]

Page 24: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Jerarquía de llamada en constructores

Mi Abuelo Mi Padre YO Mi Hijo

Orden de llamada

Public class yo extend MiPadre { Yo() { System.out.println( “Aquí estoy YO ”); }}

Public class MiPadre extend MiAbuelo { MiPadre() { System.out.println( “Aquí esta mi padre ”); }}

Public class MiAbuelo{ MiAbuelo() { System.out.println( “Aquí esta Mi Abuelo !!”); }}

Public class MiHijo extend Yo { MiHijo() { System.out.println( “Aquí esta mi Hijo ”); }}

Orden de ejecución de constructores

public static void main(String[] args){ Yo x = new Yo(); }

Aquí esta Mi Abuelo !!Aquí esta mi padreAquí estoy YO

PantallaCódigo

Page 25: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Jerarquía de llamada en constructores

Ejercicios Resueltos:•Analiza esta código:

public class Uno{ Uno(){ System.out.println("UNO”); }}

public class Tres extends Dos{ Tres(){ System.out.println("TRES”); }}

public class Dos extends Uno{ Dos(){ System.out.println("DOS”); }}

public class Ejemplo{ public static void main(String[] args) { Tres hola = new Tres(); }}

¿¿ Que es lo que saldrá en la pantalla al ejecutar ‘Ejemplo’??

Page 26: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Jerarquía de llamada en constructores

Ejercicios Resueltos:

A) Tres

C) UnoDosTres

D) TresDosUno

B) Uno

E) ‘Error de compilación’

Page 27: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Jerarquía de llamada en constructores

Ejercicios Resueltos:Respuesta:

Es cierto que la primera clase que se llama es ‘Tres’, pero antes de hacer lo que esta dentro del constructor, se heredan las clases padres … y después de heredar todos sus componentes, empieza a ejecutarse la clase [en el dibujo, se empieza en el punto 3]

C) Uno Dos Tres

public class Dos extends Uno{ Dos(){ System.out.println("DOS”); } }

public class Uno{ Uno(){ System.out.println("UNO”); } }

public class Tres extends Dos{ Tres(){ System.out.println("TRES”); } }

12

3 4 50

Page 28: Programación Orientada a Objetos Temario Herencia – Concepto – Tipo de Herencia – Herencia en java simple – Sintaxis Sobre escritura de métodos Constructores

Ejercicios Propuestos:Crea el proyecto ‘empresa’, en donde tenga las siguientes clases:• Crea la clase ‘Gerente’, en donde tenga 2 atributos, que son ‘Riquezas’(int) [cantidad de dinero que maneja la empresa] y ‘sueldoG’ (int) [sueldo del gerente (60% de las riquezas)]. Crea el método ‘calcularSueldo()’ donde calcule el sueldo del gerente dependiendo las riquezas que administra el gerente.• Crea la clase ‘Supervisor’, en donde herede las características de ‘Gerente’, y tenga un atributo llamado ‘sueldoS’ (int) [sueldo del supervisor (30% de las riquezas)]. Reemplaza el método ‘calcularSueldo()’ para que calcule el sueldo del supervisor, dependiendo las riquezas que administra el gerente. • Crea la clase ‘Empleado’, en donde herede las características de ‘Supervisor’, y tenga un atributo llamado ‘sueldoE’ (int) [sueldo del Empleado (10% de las riquezas)]. Reemplaza el método ‘calcularSueldo()’ para que calcule el sueldo del empleado, dependiendo las riquezas que administra el gerente. • En la clase ‘Main’, Has un objeto de ‘Empleado’, y con ella asigna las riquezas que tiene la empresa. Muestra los sueldos del Gerente, Supervisor y del Empleado.

Sobre-escritura de métodos