Variables polimórficas (plantillas): definición, uso y aplicación

Slides:



Advertisements
Presentaciones similares
el 1, el 4 y el 9 tres cuadrados perfectos autosuficientes
Advertisements

Complejidad Computacional
Curso de java básico (scjp)
Curso de Java Capitulo 7: Continuación Poo Profesor:
Fundamentos de la programación orientada a objetos
POLIMORFISMO "una interfaz, múltiples métodos".
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.
Arquitectura CLARO-TECNOTREE
Polimorfismo Unidad 4.
Introducción Abdelahad, Corina Natalia Abdelahad, Yanina Zoraida
Lección 1 Introducción a la POO
Lección 2 Encapsulamiento
FUNCIONES EN C.
Informática II Prof. Dr. Gustavo Patiño MJ
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
Árboles binarios. Algoritmos básicos
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
UNIVERSIDAD LATINA (UNILA)
Aplicación del paradigma orientado a objetos
Diseño y programación de
PROGRAMACION ORIENTADA A OBJETOS
Programación Orientada a Objetos en Java
Marzo 2007 Lenguajes Visuales Clase III.
HERENCIA.
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.
Herencia e Interfaces.
Programación Orientada a Objetos usando C++
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Medio de tele-comunicación
Modificadores.
POO Java Módulo 3 Elementos de programas Identificadores
Herencia y Polimorfismo en JAVA
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
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.
Tema 10: Interfaces Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
 2003 Prentice Hall, Inc. All rights reserved. 1 Capítulo 6: Clases y Abstracción de Datos Índice del capítulo 6.1 Introducción 6.2 Estructuras 6.3 Clases.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Clase Teórica No. 4 Programación IV
Jerarquía de Clases: Herencia, Composición y Polimorfismo
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
Herramientas de polimorfismo y herencia en C++
Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
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.
PROGRAMACION ORIENTADA A OBJETOS POR OVER YESID BARRERA FERNANDEZ.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
CONCEPTOS.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación CLASES DE JAVA Diciembre de 2008.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
Clases “ Es una Abstracción de un elemento del mundo real ”
Unidad 6 Polimorfismo.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Prof. Manuel B. Sánchez.  El origen del término polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Transcripción de la presentación:

Variables polimórficas (plantillas): definición, uso y aplicación

objetos de comportarse de múltiples formas. Polimorfismo: Upcasting Polimorfismo: es la capacidad que tiene los objetos de comportarse de múltiples formas. Polimorfismo: Upcasting Únicamente tienen sentido por la existencia de la herencia. ¨El polimorfismo (o upcasting) consiste en la posibilidad de que una referencia a objetos de una clase pueda conectarse también con objetos de descendientes de ésta.

El sentido del polimorfismo es realizar una generalización, olvidar los detalles concretos de uno o varios objetos de distintas clases y buscar un punto común a todos ellos en un ancestro Se trata de algo que realiza comúnmente la mente humana durante el proceso de Razonamiento.

Las conexiones polimórficas se realizan a veces de manera implícita en el paso de argumentos a una operación. Puede contener referencias a objetos de diferentes clases. El polimorfismo hace posible que un usuario pueda añadir nuevas clases a una jerarquía sin modificar o recompilar el código escrito en términos de la clase base.

Permite programar a nivel de clase base utilizando objetos de clases derivadas Se puede clasificar el polimorfismo en dos grandes clases: Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.

Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.

El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica. También se clasifica en herencia por redefinición de métodos abstractos y por método sobrecargado. El segundo hace referencia al mismo método con diferentes parámetros.

VARIABLES POLIMÓRFICAS (Ejemplos)

En términos de programación, el polimorfismo permite que un solo nombre de clase o de método represente diferente código seleccionado mediante algún mecanismo automático. De esta forma, puesto que un nombre puede representar diferente código, también puede representar muchos comportamientos distintos. Un lenguaje que acepta el polimorfismo es un lenguaje polimórfico. Un lenguaje monomórfico no acepta el polimorfismo, está restringido a un comportamiento estático, porque cada nombre está ligado en forma estática a su código.

ObjetoPersonalidad.java public class ObjetoPersonalidad { public String hablar() { return "Soy un objeto."; }

ObjetoPesimista.java ObjetoOptimista.java public class ObjetoPesimista extends ObjetoPersonalidad { public String hablar() { return "El vaso está medio vacio."; } public class ObjetoOptimista extends ObjetoPersonalidad { return "El vaso está medio lleno.";

ObjetoIntrovertido.java ObjetoExtrovertido.java public public class ObjetoIntrovertido extends ObjetoPersonalidad { public String hablar() { return “Hola."; } public class ObjetoExtrovertido extends ObjetoPersonalidad { return "Hola, bla, bla, bla, sabías que bla, bla, bla.";

ObjetoPersonalidad.java Estas clases conforman una jerarquía de herencia. La clase base, ObjetoPersonalidad, declara un método: hablar(). Cada subclase redefine hablar() y devuelve su propio mensaje con base en su personalidad. La jerarquía establece relaciones de sustituibilidad entre los subtipos y su madre.

EjemploPersonalidad.java public class EjemploPersonalidad { public static void main( String [] args ) { ObjetoPersonalidad personalidad = new ObjetoPersonalidad(); ObjetoPesimista pesimista = new ObjetoPesimista(); ObjetoOptimista optimista = new ObjetoOptimista(); ObjetoIntrovertido introvertido = new ObjetoIntrovertido(); ObjetoExtrovertido extrovertido = new ObjetoExtrovertido(); // la sustituibilidad permite hacer lo siguiente ObjetoPersonalidad [] personalidades = new ObjetoPersonalidad[5]; personalidades[0] = personalidad; personalidades[1] = pesimista; personalidades[2] = optimista; personalidades[3] = introvertido; personalidades[4] = extrovertido;

EjemploPersonalidad.java // el polimorfismo hace que el ObjetoPersonalidad parezca tener muchos comportamientos distintos System.out.println( "El ObjetoPersonalidad[0] habla: " + personalidades[0].hablar()); System.out.println( "El ObjetoPersonalidad[1] habla: " + personalidades[1].hablar()); System.out.println( "El ObjetoPersonalidad[2] habla: " + personalidades[2].hablar()); System.out.println( "El ObjetoPersonalidad[3] habla: " + personalidades[3].hablar()); System.out.println( "El ObjetoPersonalidad[4] habla: " + personalidades[4].hablar()); }

EjemploPersonalidad.java El resultado de la ejecución es el siguiente: El ObjetoPersonalidad[0] habla: Soy un objeto. El ObjetoPersonalidad[1] habla: El vaso está medio vacío. El ObjetoPersonalidad[2] habla: El vaso está medio lleno. El ObjetoPersonalidad[3] habla: Hola. El ObjetoPersonalidad[4] habla: Hola, bla, bla, bla, sabías que bla, bla, bla. Process exited with exit code 0.

EjemploPersonalidad.java El método hablar() de ObjetoPersonalidad tiene muchos comportamientos distintos. Aun cuando ObjetoPersonalidad define que hablar() imprima “Soy un objeto.”, ObjetoPersonalidad exhibe más de un comportamiento. Cada instancia de ObjetoPersonalidad se comporta de manera distinta cuando el main() llama al método hablar().

EjemploPersonalidad.java Ésta es la esencia del comportamiento polimórfico; parece que ObjetoPersonalidad, el nombre, tiene muchos comportamientos. La variable personalidades de la clase EjemploPersonalidad es un ejemplo de variable polimórfica. Una variable polimórfica es aquella que puede contener muchos tipos distintos.

TIPOS DE POLIMORFISMO Existen tres modalidades de polimorfismo: Polimorfismo de inclusión. Redefinición. Sobrecarga.

POLIMORFISMO DE INCLUSIÓN Permite que un objeto exprese muchos comportamientos distintos en tiempo de ejecución. Es decir, permite dar un tratamiento genérico a los objetos relacionados. A continuación, vamos a ver un caso de ejemplo donde se utiliza el polimorfismo de inclusión.

POLIMORFISMO DE INCLUSIÓN: EJEMPLO Consideremos los siguientes métodos: public void haceHablar ( ObjetoPesimista obj ) { System.out.println( obj.hablar() ); } public void haceHablar ( ObjetoOptimista obj ) { public void haceHablar ( ObjetoIntrovertido obj ) { public void haceHablar ( ObjetoExtrovertido obj ) {

POLIMORFISMO DE INCLUSIÓN: EJEMPLO ObjetoPesimista, ObjetoOptimista, ObjetoIntrovertido y ObjetoExtrovertido están relacionados porque todos derivan de ObjetoPersonalidad. La sustituibilidad y el polimorfismo de inclusión ofrecen la posibilidad de escribir un método para manejar todos los tipos derivados de ObjetoPersonalidad: public void haceHablar ( ObjetoPersonalidad obj ) { System.out.println( obj.hablar() ); } La sustituibilidad permite pasar cualquier ObjetoPersonalidad al método haceHablar(). El polimorfismo asegura que sea llamado el método apropiado de la instancia. El polimorfismo llama al método con base en el tipo verdadero de la instancia (ObjetoPesimista, ObjetoOptimista, ObjetoIntrovertido, ObjetoExtrovertido), y no con base en el tipo aparente de la instancia (ObjetoPersonalidad).

POLIMORFISMO DE INCLUSIÓN: EJEMPLO El polimorfismo de inclusión es útil porque reduce la cantidad de código por escribir. En lugar de tener que escribir un método para cada tipo concreto de ObjetoPersonalidad, tan sólo es necesario escribir un método que maneje todos los tipos. El polimorfismo de inclusión y la sustituibilidad permiten que haceHablar() trabaje con cualquier objeto que cumpla la condición “ES UN” ObjetoPersonalidad. El polimorfismo de inclusión facilita la incorporación de nuevos subtipos a un programa porque no es necesario agregar un método específico para ese nuevo tipo. Simplemente se puede reutilizar haceHablar(). El polimorfismo de inclusión también es interesante porque permite que las instancias de ObjetoPersonalidad den la impresión de contar con muchos comportamientos distintos. El mensaje mostrado por haceHablar() varía según la información que se pase al método.

REDEFINICIÓN La redefinición es un tipo importante de polimorfismo. Permite redefinir un método y confiar en que el polimorfismo se encargará de que siempre se ejecute el método correcto. A continuación, vamos a ver un caso de ejemplo donde se utiliza la redefinición y el polimorfismo.

REDEFINICIÓN: EJEMPLO Analicemos las definiciones de las siguientes clases: public class ObjetoEnojado { // devuelve el estado de ánimo protected String getEstadoAnimo() { return "enojado"; } // pregunta al objeto cómo se siente public void preguntaEstadoAnimo() { System.out.println(“¡Hoy me siento " + getEstadoAnimo() + "!");

REDEFINICIÓN: EJEMPLO Analicemos las definiciones de las siguientes clases: public class ObjetoFeliz extends ObjetoEnojado { // redefine el estado de ánimo de la clase protected String getEstadoAnimo() { return "feliz"; } // especialización public void reir() { System.out.println("jaja jeje jiji jojo juju");

REDEFINICIÓN: EJEMPLO ObjetoFeliz redefine el método getEstadoAnimo() de ObjetoEnojado. Es interesante darnos cuenta que, internamente, la definición de preguntaEstadoAnimo() de ObjetoEnojado hace una llamada a getEstadoAnimo(). ObjetoFeliz no redefine el método preguntaEstadoAnimo(). En vez de ello, lo hereda como método recursivo de ObjetoEnojado. Al llamar a preguntaEstadoAnimo() en un ObjetoFeliz, el polimorfismo de la instancia se asegura de llamar a la versión redefinida de getEstadoAnimo() de ObjetoFeliz. En definitiva, el polimorfismo se encarga de los detalles sobre qué método llamar. Esto nos libera de tener que redefinir preguntaEstadoAnimo() para llamar a la versión correcta de getEstadoAnimo().

SOBRECARGA La sobrecarga o polimorfismo ad-hoc permite utilizar el mismo nombre de método para distintos métodos. Cada método difiere sólo en la cantidad y tipo de sus parámetros. A continuación, vamos a ver un caso de ejemplo donde se utiliza la sobrecarga.

Sobrecarga: Ejemplo Consideremos los siguientes métodos de java.lang.Math: public static int max ( int a, int b ); public static long max ( long a, long b ); public static float max ( float a, float b ); public static double max ( double a, double b ); Todos los métodos max son ejemplos de sobrecarga. Se puede observar que los métodos max sólo difieren en el tipo de parámetros. La sobrecarga es útil cuando un método no está definido por sus argumentos. Es decir, un método es un concepto independiente de sus argumentos. Por ejemplo, el método max es un concepto genérico que toma dos parámetros e indica cuál es mayor. Esta definición no cambia, ya sea que se comparen números enteros, de punto flotante o de doble precisión. La operación + es otro ejemplo de método sobrecargado. El concepto + es independiente de sus argumentos, pues podemos agregar todo tipo de elementos.

Sobrecarga: Ejemplo Si la sobrecarga no fuera posible, tendríamos que hacer lo siguiente: public static int max_int ( int a, int b ); public static long max_long ( long a, long b ); public static float max_float ( float a, float b ); public static double max_double ( double a, double b ); Sin la sobrecarga, sería necesario dar un nombre único a cada método. Los métodos max no serían independientes de sus parámetros. Es decir, Max dejaría de ser un concepto abstracto; y tendríamos que definir el método de acuerdo con sus argumentos. Dar diferentes nombres a cada método no es polimórfico. Cuando todos los métodos comparten el mismo nombre, se obtiene comportamiento polimórfico pues distintos métodos son llamados de acuerdo con los tipos de parámetros que se pasan.

Sobrecarga: Ejemplo El polimorfismo se encarga de llamar al método apropiado. La forma en que el polimorfismo enruta la llamada al método depende del lenguaje de programación. Algunos lenguajes resuelven la llamada al método durante la compilación, mientras que otros la enlazan dinámicamente en tiempo de ejecución.