La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Programación Orientada a Objetos"— Transcripción de la presentación:

1 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

2 He aquí ejemplos prácticos de HERENCIA
Introducción 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

3 Herencia 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).

4 Tipos de Herencia: 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

5 Tipos de Herencia: 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.

6 Tipos de Herencia: 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.

7 Herencia en Java Simple
En 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

8 Sintaxis Herencia Uso de extends Uso de super
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 { }

9 Ejercicio Resuelto Herencia
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.

10 Herencia 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; Crear Clase Persona package 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;

11 Herencia 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); public String getCarrera() return carrera; Crear Clase Alumno y agregar la clausula extends Persona package herencia01; public class Alumno extends Persona { // Atributos private String carrera; private String escuela; // Constructores public Alumno() } public void setCarrera(String carrera) { this.carrera = carrera; } public String getEscuela() return escuela; public void setEscuela(String escuela) this.escuela = escuela;

12 Herencia 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"); }

13 Ejercicio Resuelto Herencia 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.

14 Ejercicio Resuelto Herencia
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: Crea la clase Cuadrado en donde: 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

15 Herencia package javaapplication16; 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() { resultado = super.calcularPerimetroCirculo(this.radio); package 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() { resultado = super.calcularPerimetroCuadrado(this.lado);

16 Herencia package 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() { resultado = super.calcularPerimetroRectangulo(this.ladoA, this.ladoB);

17 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"); 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"); 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); }

18 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 (del ingles ‘Anular’ o ‘No hacer caso de’) que hace que ignore el método heredado, y cree uno totalmente nuevo(sobre-escritura) no sobre-escribe el método en la clase padre, sino solo en la clase donde ha sido heredada(hijo)

19 Sobre-escritura de métodos
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.

20 Sobre-escritura de métodos
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; Sobre-escritura de métodos package sobreescritura_metodos1; public class Maquina extends Calculadora { @Override public void sumar() // Metodo NUEVO super.setNumero1( super.getNumero1() ); }

21 Sobre-escritura de métodos
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()); } Sobre-escritura de métodos Archivo ->

22 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].

23 [super.] Jerarquía de llamada en constructores Orden de llamada
Mi Abuelo [super.] Orden de llamada Mi Padre YO Orden de ejecución de constructores Mi Hijo

24 Código Pantalla Jerarquía de llamada en constructores Orden de llamada
Mi Abuelo Mi Padre YO Mi Hijo Public class MiAbuelo { MiAbuelo() System.out.println( “Aquí esta Mi Abuelo !!”); } Public class MiPadre extend MiAbuelo { MiPadre() System.out.println( “Aquí esta mi padre ”); } Public class yo extend MiPadre { Yo() System.out.println( “Aquí estoy YO ”); } Public class MiHijo extend Yo { MiHijo() System.out.println( “Aquí esta mi Hijo ”); } Código Pantalla public static void main(String[] args) { Yo x = new Yo(); } Aquí esta Mi Abuelo !! Aquí esta mi padre Aquí estoy YO Orden de ejecución de constructores

25 Ejercicios Resueltos:
Jerarquía de llamada en constructores Ejercicios Resueltos: Analiza esta código: public class Uno{ Uno(){ System.out.println("UNO”); } public class Dos extends Uno{ Dos(){ System.out.println("DOS”); } public class Tres extends Dos{ Tres(){ System.out.println("TRES”); } public class Ejemplo{ public static void main(String[] args) { Tres hola = new Tres(); } ¿¿ Que es lo que saldrá en la pantalla al ejecutar ‘Ejemplo’??

26 Jerarquía de llamada en constructores
Ejercicios Resueltos: A) Tres D) Tres Dos Uno B) Uno C) Uno Dos Tres E) ‘Error de compilación’

27 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 1 2 public class Uno{ Uno(){ System.out.println("UNO”); } } public class Dos extends Uno{ Dos(){ System.out.println("DOS”); } } public class Tres extends Dos{ Tres(){ System.out.println("TRES”); } } 3 4 5

28 Sobre-escritura de métodos
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.


Descargar ppt "Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google