0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Estructuras.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Curso de Java Capitulo 7: Continuación Poo Profesor:
Definición de Clases y Variables de referencia.
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Introducción a la Programación Orientada a Objetos Una Universidad administra varias residencias para estudiantes extranjeros. Cada residencia ocupa un.
El proceso de desarrollo de software
El Proceso de desarrollo de software
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
Tipo de Dato Abstracto Tipos de datos:
Herencia y Polimorfismo
Aplicación del paradigma orientado a objetos
Programación Orientada a Objetos
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Modificadores.
Herencia y Polimorfismo en JAVA
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Criterios de la Orientación a Objetos 1. Método y Lenguaje (proceso de pensamiento y notaciones para analizar y producir software). 2. Implementación y.
Semana 5 Subprogramas..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Clase 10: Estructuras de datos y arreglos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Herramientas de polimorfismo y herencia en C++
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tabla.
Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
Detalles Generales sobre Java
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
Programación orientada a objetos Capítulo 9 Algo mas sobre herencias.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Programación Orientada a Objetos: CLASES Y OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Diferencia entre implementar en RPA e IPOO - Diseño En.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Estructuras polimóficas Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

POLIMORFISMO El concepto de polimorfismo es central en la programación orientada a objetos. En el contexto de la programación orientada a objetos el polimorfismo está relacionado con variables, asignaciones y métodos. Introducción a la Programación Orientada a Objetos IPOO Polimorfismo significa muchas formas y en ciencias de la computación en particular se refiere a “la capacidad de asociar diferentes definiciones a un mismo nombre, de modo que el contexto determine cuál corresponde usar”.

POLIMORFISMO Introducción a la Programación Orientada a Objetos IPOO Una variable polimórfica puede quedar asociada a objetos de diferentes clases. Una asignación polimórfica liga un objeto de una clase a una variable declarada de otra clase. Un método polimórfico incluye una o más variables polimórficas como parámetro.

CASO DE ESTUDIO: NÓMINA DE EMPLEADOS Persona > nombre : String calleNro : String telefono : String String > … > establecerCalleNro(d: String)… > obtenerCalleNro(): String toString(): String Introducción a la Programación Orientada a Objetos IPOO

Empleado > basico: real cantHijos: entero fechaIngreso: Fecha >… > establecerBasico(b: real) aumentarBasico(a: real)… > toString(): String masAntiguo(e: Empleado): booleano sueldoNeto(mh: real): real diasVacaciones(): entero Al salario básico se le suma $1000 si tiene entre 10 y 15 años de antigüedad y $2000 si tiene más de 15 años de antigüedad. A este valor se le suma $mh por cada hijo. Una semana cuando cumple 1 año, 2 semanas cuando cumple 5 años y 3 semanas cuando su antigüedad es mayor a 10 años. Retorna verdadero si el empleado que recibe el mensaje es más antiguo que el argumento

CASO DE ESTUDIO: NÓMINA DE EMPLEADOS Ejecutivo > productividad: real presupuesto: real viaticos: real > establecerPresupuesto(p: real ) aumentarPresupuesto(a: real )… > obtenerPresupuesto(): real sueldoNeto(mh: real): real diasVacaciones(): entero 6 20 días A partir del sueldo neto de cualquier empleado, se suma la productividad

POLIMORFISMO Introducción a la Programación Orientada a Objetos IPOO Persona Cliente Empleado Ejecutivo Dada la siguiente jerarquía de clases:

VARIABLES POLIMÓRFICAS 8 Persona unaPersona; unaPersona = new Persona(); Una variable polimórfica puede quedar asociada a objetos de diferentes clases. : Persona unaPersona unaPersona = new Empleado(); : Empleado unaPersona

POLIMORFISMO Dado que una variable puede estar asociada a objetos de diferentes tipos, distinguiremos entre: El tipo estático de una variable, es el tipo que aparece en la declaración. El tipo dinámico de una variable se determina en ejecución y corresponde a la clase a la que corresponde el objeto referenciado. Introducción a la Programación Orientada a Objetos IPOO El tipo estático de una entidad determina el conjunto de tipos dinámicos a los que puede quedar asociada.

POLIMORFISMO Son válidas las siguientes asignaciones polimórficas: Y también: 10 El tipo estático de una entidad determina el conjunto de tipos dinámicos a los que puede quedar asociada. Persona unaPersona; Empleado unEmpleado = new Empleado(); Ejecutivo unEjecutivo = new Ejecutivo(); unaPersona = unEmpleado; unaPersona = unEjecutivo; unEmpleado = unEjecutivo; unaPersona = new Empleado(); unaPersona = new Ejecutivo();

POLIMORFISMO La variable unaPersona puede quedar ligada a objetos de clase Persona, Cliente, Empleado o Ejecutivo. La variable unEmpleado puede quedar ligada a objetos de clase Empleado o Ejecutivo. 11 Persona unaPersona; Empleado unEmpleado = new Empleado(); unaPersona = unEmpleado; : Empleado unaPersona unEmpleado Introducción a la Programación Orientada a Objetos IPOO

POLIMORFISMO 12 Empleado unEmpleado = new Empleado(); Empleado otroEmpleado = new Ejecutivo (); Ejecutivo unEjecutivo = new Ejecutivo (); Introducción a la Programación Orientada a Objetos IPOO unEmpleado.aumentarBasico(100); otroEmpleado.aumentarBasico(100); unEjecutivo.aumentarBasico(100);

POLIMORFISMO El pasaje de parámetros también puede ser polimórfico: El método definido en la clase Empleado como: Puede usarse con un argumento de clase Ejecutivo : 13 Empleado unEmpleado = new Empleado(); Ejecutivo unEjecutivo = new Ejecutivo(); Introducción a la Programación Orientada a Objetos IPOO public boolean masAntiguo(Empleado e){ … } unEmpleado.masAntiguo(unEjecutivo);

LIGADURA DINÁMICA DE CÓDIGO Polimorfismo, overriding (redefinición de métodos) y ligadura dinámica de código son conceptos fuertemente ligados. La posibilidad de que una variable pueda referenciar a objetos de diferentes clases y de que existan varias definiciones para una misma signatura, brinda flexibilidad al lenguaje siempre que además exista ligadura dinámica de código. Introducción a la Programación Orientada a Objetos IPOO La ligadura dinámica de código es la vinculación en ejecución de un mensaje con un método.

POLIMORFISMO, DEROGACIÓN Y LIGADURA DINÁMICA 15 Empleado unEmpleado = new Empleado(); Empleado otroEmpleado = new Ejecutivo(); Ejecutivo unEjecutivo = new Ejecutivo(); unEmpleado.sueldoNeto(100); otroEmpleado.sueldoNeto(100); unEjecutivo.sueldoNeto(100); Introducción a la Programación Orientada a Objetos IPOO Se liga al método definido en Empleado Se liga al método definido en Ejecutivo

POLIMORFISMO, DEROGACIÓN Y LIGADURA DINÁMICA 16 Empleado unEmpleado = new Empleado(); Empleado otroEmpleado = new Ejecutivo(); System.out.println(unEmpleado.toString()); System.out.println(otroEmpleado.toString()); Introducción a la Programación Orientada a Objetos IPOO Se liga al método definido en Empleado Se liga al método definido en Ejecutivo

CHEQUEO DE TIPOS El polimorfismo es un mecanismo que favorece la reusabilidad pero debe restringirse para brindar confiabilidad. En Java el polimorfismo y la ligadura dinámica quedan restringidos por el chequeo de tipos. Los chequeos de tipos en compilación previenen errores de tipo en ejecución. Introducción a la Programación Orientada a Objetos IPOO

CHEQUEO DE TIPOS El chequeo de tipos establece restricciones sobre: –las asignaciones polimórficas –los mensajes que un objeto puede recibir Introducción a la Programación Orientada a Objetos IPOO

POLIMORFISMO Y CHEQUEO DE TIPOS Una variable polimórfica puede referenciar a objetos de su clase o de alguna de las clases derivadas. El compilador reporta ERROR en las siguientes asignaciones: 19 Persona unaPersona; Empleado unEmpleado = new Empleado(); Ejecutivo unEjecutivo = new Ejecutivo(); Introducción a la Programación Orientada a Objetos IPOO unEmpleado = unaPersona; unEjecutivo = unaPersona; unEjecutivo = unEmpleado;

POLIMORFISMO Y CHEQUEO DE TIPOS Una variable polimórfica determina los mensajes que un objeto puede recibir, aunque el objeto determina la implementación específica del comportamiento que se ejecuta en respuesta a los mensajes. Son válidos los mensajes: 20 Empleado unEmpleado ; Ejecutivo unEjecutivo = new Ejecutivo (…); unEmpleado = unEjecutivo; Introducción a la Programación Orientada a Objetos IPOO unEmpleado.establecerBasico (1500); unEjecutivo.establecerPresupuesto(200);

POLIMORFISMO Y CHEQUEO DE TIPOS El compilador reporta ERROR en los siguientes mensajes: 21 Empleado unEmpleado ; Empleado nuevo ; Ejecutivo unEjecutivo = new Ejecutivo (…); unEmpleado = unEjecutivo; nuevo = new Ejecutivo (…); Introducción a la Programación Orientada a Objetos IPOO unEmpleado.establecerPresupuesto(100); nuevo.aumentarPresupuesto(100);

POLIMORFISMO, DEROGACIÓN CHEQUEO DE TIPOS Y LIGADURA DINÁMICA 22 Empleado unEmpleado = new Empleado(); Empleado otroEmpleado = new Ejecutivo(); unEmpleado.diasVacaciones(); otroEmpleado.diasVacaciones(); Introducción a la Programación Orientada a Objetos IPOO Se liga al método definido en Empleado Se liga al método definido en Ejecutivo

POLIMORFISMO, DEROGACIÓN CHEQUEO DE TIPOS Y LIGADURA DINÁMICA El objeto referenciado por unEmpleado sólo podrá recibir los mensajes que corresponden al comportamiento de la clase Empleado. Sin embargo, si un método está redefinido en la clase Ejecutivo, la ligadura se establece con el método provisto por Ejecutivo. 23 Introducción a la Programación Orientada a Objetos IPOO Empleado unEmpleado = new Ejecutivo();

CASO DE ESTUDIO: PLANTA DE EMPLEADOS La empresa mantiene la información referida a sus empleados en una colección. La colección brinda servicios para insertar, eliminar y buscar elementos y además para calcular: - Total de Salarios básicos. - Contar los empleados que tienen más de d días de vacaciones. - Total de Salarios netos. -Total de Salarios básicos de los ejecutivos. -Total de los presupuestos asignados a los Ejecutivos. 24 Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS 25 Persona ClienteEmpleado Ejecutivo PlantaEmpleados PlantaE mpleados es una colección.

CASO DE ESTUDIO: PLANTA DE EMPLEADOS Empleado > PlantaEmpleados Empleado [] t cantEmpleados: entero … > insertar(a: Empleado) … > existeEmpleado(a: Empleado): boolean…

CASO DE ESTUDIO: PLANTA DE EMPLEADOS Empleado > PlantaEmpleados Empleado [] t cantEmpleados: entero > basicoTotal() : real contarMasVacaciones(d: entero): entero basicoEjecutivos(): real presupuestoEjecutivos(): real netoTotal(h: real): real Cuenta la cantidad de empleados que tienen más de d días de vacaciones

CASO DE ESTUDIO: PLANTA DE EMPLEADOS import java.util.*; class PlantaEmpleados{ private Empleado[] t; private int cantEmpleados; } 28 El arreglo mantiene referencias a objetos de clase Empleado o de alguna de sus subclases. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS 29 :Empleado :Ejecutivo t Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS El arreglo t está constituido por una colección de variables polimórficas. Cuando una componente del arreglo reciba un mensaje su comportamiento dependerá de la clase a la que pertenezca esta componente. 30 Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public float basicoTotal (){ float bt = 0; for (int i = 0; i < cantElementos(); i++){ bt = bt + t[i].obtenerBasico(); } return bt; } 31 El método obtenerBasico () es el mismo para todos los empleados, está implementado en la clase Empleado. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public int contarMasVacaciones(int d){ int c = 0; for (int i = 0; i < cantElementos(); i++){ if (t[i].diasVacaciones() >= d) c++; } return c; } 32 La ligadura con el método diasVacaciones() se establece de acuerdo a la clase del objeto referenciado por t[i]. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public double netoTotal(float h){ float c = 0; for (int i = 0; i <cantElementos();i++) { c = c + t[i].sueldoNeto(h); } return c; } 33 Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public double basicoEjecutivos(){ float be = 0; for (int i = 0; i < cantElementos(); i++){ if (t[i] instanceof Ejecutivo){ be = be + t[i].obtenerBasico(); } } return be; } 34 Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public double presupuestoEjecutivos(){ float c = 0; for (int i = 0; i < cantElementos(); i++){ if (t[i] instanceof Ejecutivo) { c = c + t[i].obtenerPresupuesto(); } return c; } 35 Introducción a la Programación Orientada a Objetos IPOO El mensaje no es válido Error en compilación

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public double presupuestoEjecutivos(){ float c = 0; Ejecutivo eje; for (int i = 0; i < cantElementos(); i++){ if (t[i] instanceof Ejecutivo){ eje = t[i]; c = c + eje.obtenerPresupuesto(); } return c; } 36 Introducción a la Programación Orientada a Objetos IPOO La asignación no es válida Error en compilación

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public double presupuestoEjecutivos(){ float c = 0; Ejecutivo eje; for (int i = 0; i < cantElementos(); i++){ if (t[i] instanceof Ejecutivo){ eje = (Ejecutivo) t[i]; c = c + eje.obtenerPresupuesto(); } return c; } 37 –El casting relaja el control del compilador, el programador asegura que no va a haber errores.

CASO DE ESTUDIO: PLANTA DE EMPLEADOS public double presupuestoEjecutivos(){ float c = 0; Ejecutivo eje; for (int i = 0; i < cantElementos(); i++){ eje = (Ejecutivo) t[i]; c = c + eje.obtenerPresupuesto(); } return c; } 38 Introducción a la Programación Orientada a Objetos IPOO Error en ejecución EXCEPCIÓN :Empleado t

CASO DE ESTUDIO: PLANTA DE EMPLEADOS Una excepción indica que se ha producido un evento inesperado en ejecución, con frecuencia un error. Algunas excepciones provocan que el programa termine anormalmente. Cuando Java intenta hacer un cast sobre un objeto y su clase no corresponde con el operador se produce una excepción y se genera un objeto de clase ClassCastException. Los errores más peligrosos son los que saltean los controles y pasan desapercibidos. 39 Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: PLANTA DE EMPLEADOS El uso de instanceof está desaconsejado por la Programación Orientada a Objetos. Si el diseño está bien elaborado no debería ser necesario. Sin embargo, al cambiar los requerimientos, las clases pueden modificarse y las nuevas funcionalidades se implementan con instanceof. 40 Introducción a la Programación Orientada a Objetos IPOO