s a c i f r m i













![Ejemplo. Personalidad. java public class Ejemplo. Personalidad { public static void main( String [] Ejemplo. Personalidad. java public class Ejemplo. Personalidad { public static void main( String []](https://slidetodoc.com/presentation_image/430799aa035f01d7bf081a2a269db191/image-14.jpg)

















- Slides: 31
s a c i f r ó m i l o p s e l b a i r Va : ) s a l l i t n y (pla o s u , n ó i c i n i f e d n ó i c a c i l ap
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. 9
Objeto. Personalidad. java public class Objeto. Personalidad { public String hablar() { return "Soy un objeto. "; } } 10
Objeto. Pesimista. java Objeto. Optimista. java public class Objeto. Pesimista extends Objeto. Personalidad { public String hablar() { return "El vaso está medio vacio. "; } } public class Objeto. Optimista extends Objeto. Personalidad { public String hablar() { return "El vaso está medio lleno. "; } } 11
Objeto. Introvertido. java Objeto. Extrovertido. java public class Objeto. Introvertido extends Objeto. Personalidad { public String hablar() { return “Hola. "; } } public class Objeto. Extrovertido extends Objeto. Personalidad { public String hablar() { return "Hola, bla, sabías que bla, bla. "; } 12 }
Objeto. Personalidad. java �Estas clases conforman una jerarquía de herencia. �La clase base, Objeto. Personalidad, 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. 13
Ejemplo. Personalidad. java public class Ejemplo. Personalidad { public static void main( String [] args ) { Objeto. Personalidad personalidad = new Objeto. Personalidad(); Objeto. Pesimista pesimista = new Objeto. Pesimista(); Objeto. Optimista optimista = new Objeto. Optimista(); Objeto. Introvertido introvertido = new Objeto. Introvertido(); Objeto. Extrovertido extrovertido = new Objeto. Extrovertido(); // la sustituibilidad permite hacer lo siguiente Objeto. Personalidad [] personalidades = new Objeto. Personalidad[5]; personalidades[0] = personalidad; personalidades[1] = pesimista; personalidades[2] = optimista; personalidades[3] = introvertido; personalidades[4] = extrovertido; 14
Ejemplo. Personalidad. java // el polimorfismo hace que el Objeto. Personalidad parezca tener muchos comportamientos distintos System. out. println( "El Objeto. Personalidad[0] habla: " + personalidades[0]. hablar()); System. out. println( "El Objeto. Personalidad[1] habla: " + personalidades[1]. hablar()); System. out. println( "El Objeto. Personalidad[2] habla: " + personalidades[2]. hablar()); System. out. println( "El Objeto. Personalidad[3] habla: " + personalidades[3]. hablar()); System. out. println( "El Objeto. Personalidad[4] habla: " + personalidades[4]. hablar()); } } 15
Ejemplo. Personalidad. java � El resultado de la ejecución es el siguiente: El Objeto. Personalidad[0] habla: Soy un objeto. El Objeto. Personalidad[1] habla: El vaso está medio vacío. El Objeto. Personalidad[2] habla: El vaso está medio lleno. El Objeto. Personalidad[3] habla: Hola. El Objeto. Personalidad[4] habla: Hola, bla, sabías que bla, bla. Process exited with exit code 0. 16
Ejemplo. Personalidad. java �El método hablar() de Objeto. Personalidad tiene muchos comportamientos distintos. Aun cuando Objeto. Personalidad define que hablar() imprima “Soy un objeto. ”, Objeto. Personalidad exhibe más de un comportamiento. �Cada instancia de Objeto. Personalidad se comporta de manera distinta cuando el main() llama al método hablar(). 17
Ejemplo. Personalidad. java �Ésta es la esencia del comportamiento polimórfico; parece que Objeto. Personalidad, el nombre, tiene muchos comportamientos. �La variable personalidades de la clase Ejemplo. Personalidad es un ejemplo de variable polimórfica. �Una variable polimórfica es aquella que puede contener muchos tipos distintos. 18
TIPOS DE POLIMORFISMO �Existen tres modalidades de polimorfismo: �Polimorfismo de inclusión. �Redefinición. �Sobrecarga. 19
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. 20
POLIMORFISMO DE INCLUSIÓN: EJEMPLO � Consideremos los siguientes métodos: public void hace. Hablar ( Objeto. Pesimista obj ) { System. out. println( obj. hablar() ); } public void hace. Hablar ( Objeto. Optimista obj ) { System. out. println( obj. hablar() ); } public void hace. Hablar ( Objeto. Introvertido obj ) { System. out. println( obj. hablar() ); } public void hace. Hablar ( Objeto. Extrovertido obj ) { System. out. println( obj. hablar() ); } 21
POLIMORFISMO DE INCLUSIÓN: EJEMPLO � Objeto. Pesimista, Objeto. Optimista, Objeto. Introvertido y Objeto. Extrovertido están relacionados porque todos derivan de Objeto. Personalidad. � La sustituibilidad y el polimorfismo de inclusión ofrecen la posibilidad de escribir un método para manejar todos los tipos derivados de Objeto. Personalidad: public void hace. Hablar ( Objeto. Personalidad obj ) { System. out. println( obj. hablar() ); } � La sustituibilidad permite pasar cualquier Objeto. Personalidad al método hace. Hablar(). � 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 (Objeto. Pesimista, Objeto. Optimista, Objeto. Introvertido, Objeto. Extrovertido), y no con base en el tipo aparente de la instancia (Objeto. Personalidad). 22
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 Objeto. Personalidad, tan sólo es necesario escribir un método que maneje todos los tipos. � El polimorfismo de inclusión y la sustituibilidad permiten que hace. Hablar() trabaje con cualquier objeto que cumpla la condición “ES UN” Objeto. Personalidad. � 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 hace. Hablar(). � El polimorfismo de inclusión también es interesante porque permite que las instancias de Objeto. Personalidad den la impresión de contar con muchos comportamientos distintos. El mensaje mostrado por hace. Hablar() varía según la información que se pase al método. 23
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. 24
REDEFINICIÓN: EJEMPLO � Analicemos las definiciones de las siguientes clases: public class Objeto. Enojado { // devuelve el estado de ánimo protected String get. Estado. Animo() { return "enojado"; } // pregunta al objeto cómo se siente public void pregunta. Estado. Animo() { System. out. println(“¡Hoy me siento " + get. Estado. Animo() + "!"); } } 25
REDEFINICIÓN: EJEMPLO � Analicemos las definiciones de las siguientes clases: public class Objeto. Feliz extends Objeto. Enojado { // redefine el estado de ánimo de la clase protected String get. Estado. Animo() { return "feliz"; } // especialización public void reir() { System. out. println("jaja jeje jiji jojo juju"); } } 26
REDEFINICIÓN: EJEMPLO � Objeto. Feliz redefine el método get. Estado. Animo() de Objeto. Enojado. Es interesante darnos cuenta que, internamente, la definición de pregunta. Estado. Animo() de Objeto. Enojado hace una llamada a get. Estado. Animo(). � Objeto. Feliz no redefine el método pregunta. Estado. Animo(). En vez de ello, lo hereda como método recursivo de Objeto. Enojado. Al llamar a pregunta. Estado. Animo() en un Objeto. Feliz, el polimorfismo de la instancia se asegura de llamar a la versión redefinida de get. Estado. Animo() de Objeto. Feliz. � En definitiva, el polimorfismo se encarga de los detalles sobre qué método llamar. Esto nos libera de tener que redefinir pregunta. Estado. Animo() para llamar a la versión 27 correcta de get. Estado. Animo().
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. 28
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. 29
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 30 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. 31