La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.

Presentaciones similares


Presentación del tema: ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."— Transcripción de la presentación:

1 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación

2 Polimorfismo Programación I El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su significado: Poli = Múltiple, morfismo= Formas Esto implica que un Objeto puede tomar diversas formas ó comportarse de diferentes maneras dependiendo las situaciones que se presenten durante la ejecución.

3 Polimorfismo Programación I Por ejemplo: Tome un objeto que sume dos números cualesquiera (enteros, punto flotante, etc.) y devuelve un total. (suma de dos números) En este caso, lo que parece ser la misma operación mantiene en realidad un comportamiento único (suma de dos números) en forma transparente para diferentes tipos de argumento. Esto es polimorfismo en acción.

4 Polimorfismo Programación I “Es el mecanismo que permite definir e invocar funciones idénticas en denominación e interfaz, pero con implementación diferente". El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica, que pueden utilizarse de manera intercambiable mediante código cliente en tiempo de ejecución.

5 Polimorfismo Programación I En muchos lenguajes orientados a objetos el polimorfismo se admite tanto en tiempo de ejecución como en tiempo de compilación. La sobrecarga de funciones (funciones con el mismo nombre, pero con cantidad de parámetros y/o tipos de parámetros diferentes) es un ejemplo de polimorfismo en el momento de la compilación. En Java el polimorfismo en tiempo de ejecución, se logra mediante el uso de herencia, clases abstractas e interfaces.

6 Polimorfismo Programación I Según lo anterior, el polimorfismo en cualquier lenguaje de POO, puede ser usado de dos maneras fundamentales: Polimorfismo basado en Herencia. Polimorfismo en Sobrecarga de Métodos

7 Polimorfismo Basado en Herencia Programación I La mayoría de los sistemas de programación orientada a objetos proporcionan polimorfismo a través de la herencia. Éste permite que las instancias de diferentes clases reaccionen de una forma particular al llamado de una función. El polimorfismo basado en la herencia implica definir métodos en una clase base y reemplazarlos con nuevas implementaciones en clases derivadas.

8 Polimorfismo Basado en Herencia Programación I A través del concepto de la Herencia es posible ilustrar este comportamiento:

9 Polimorfismo Basado en Herencia Programación I Figura a = new Circulo(); Figura b = new Triangulo(); Inicialmente se puede pensar que este código generaría un error debido a que el tipo de referencia es distinta a la instancia del objeto, como se ha visto hasta ahora: Figura obj = new Figura(); Sin embargo, el fragmento anterior es correcto y demuestra el concepto de Polimorfismo.

10 Polimorfismo Basado en Herencia Programación I class Triangulo extends Figura { ….. //Atributos public void imprimir( ) { System.out.print(“Es Triangulo”); } } class Circulo extends Figura { ….. //Atributos public void imprimir( ) { System.out.print(“Es Circulo”); } } Figura a = new Circulo(); Figura b = new Triangulo(); a.imprimir(); b.imprimir(); ¿Qué imprimiría? class Figura { ….. //Atributos public void imprimir( ) { System.out.print(“Es Figura”); } }

11 Programación I En resumen, Polimorfismo es la habilidad de comportarse de diferentes formas, por ejemplo, un Ejecutivo tiene acceso a métodos de la clase Empleado. Recordemos que Ejecutivo “es un” Empleado. Empleado String nombre; float sueldo; Empleado(String, float); mostrar(); Ejecutivo int presupuesto; Ejecutivo(String, float, int); mostrar(); Polimorfismo Basado en Herencia

12 Programación I Un objeto tiene solo una forma, que es dada cuando se construye el objeto, sin embargo, una variable es polimórfica porque puede referir a objetos de diferentes formas. En Java se permite, lo siguiente: Empleado e = new Ejecutivo(); Polimorfismo Basado en Herencia

13 Programación I Empleado e = new Ejecutivo(); Usando la variable e, sólo se puede tener acceso a los atributos que son de la clase Empleado (Clase Padre), debido que para el compilador e es un Empleado y no un Ejecutivo. Esto No es permitido: e.presupuesto = 2000000; //Ilegal asignación a atributo de la clase Ejecutivo Polimorfismo Basado en Herencia

14 Programación I Asumiendo lo siguiente: Empleado e = new Empleado(); Ejecutivo m = new Ejecutivo(); Si se hace: e.mostrar() y m.mostrar() se invocan diferentes comportamientos. El objeto e ejecuta la versión mostrar() de la clase Empleado y el objeto m, ejecuta la versión mostrar() de la clase Ejecutivo. Ahora, que sucederá, si ejecutamos lo siguiente: Empleado e = new Ejecutivo(); e.mostrar(); Polimorfismo Basado en Herencia

15 Programación I De hecho, se obtiene el comportamiento asociado con el objeto al cual la variable refiere en tiempo de ejecución, es decir, con la clase que se hizo el new (Clase Hija). Esto quiere decir que, el comportamiento no es determinado en tiempo de compilación por tipo de variable. En el ejemplo previo, e.mostrar() ejecutará el método mostrar de la clase Ejecutivo. Este es un aspecto de polimorfismo, y a este comportamiento se le conoce como Invocación de Métodos Virtuales. Polimorfismo Basado en Herencia

16 Programación I El tipo de dato de retorno debe ser idéntico al del método a sobreescribir. El método de la clase Hija no puede ser menos accesible que el método a sobreescribir en la clase Padre. Recuerde que el nombre del método y la lista de argumentos de un método de una clase hija deben ser idénticos al del método en la clase padre, para que el método de la clase hija pueda sobreescribir al del padre. Polimorfismo Basado en Herencia Reglas para la Sobreescritura de Métodos

17 Programación I Considere lo siguiente: public class Padre{ public void Hacer() { } } public class Hija extends Padre{ private void Hacer() { } } public class UsaAmbas{ public void OtroHacer() { Padre p1=new Padre(); Padre p2=new Hija(); p1.Hacer(); p2.Hacer(); } p2.Hacer() ejecuta el método de la versión de la clase Hija, pero no puede ser accedido porque fue declarado privado. Polimorfismo Basado en Herencia Invocación de Métodos Virtuales

18 Programación I Colecciones de objetos con diferentes tipos de clases son denominados Colecciones Heterogéneas. Empleado [ ] consejoDirectivo = new Empleado[10] consejoDirectivo[0]= new Ejecutivo(); consejoDirectivo[1]=new Empleado(); consejoDirectivo[2]=new Secretaria(); Polimorfismo Basado en Herencia Colecciones Heterogéneas

19 Programación I Una variable es polimórfica, si puede almacenar objetos de varios tipos. Por ejemplo: el vector publicaciones en la clase Noticias. De forma similar si una variable es polimórfica, la llamada de métodos en esa variable también lo será. PublicacionMensaje PublicacionFoto Por ejemplo: en la clase Noticias el código “post.mostrar()” es polimórfico, ya que como se pudo observar en ejercicios pasados, allí se invocará tanto el método mostrar de PublicacionMensaje como el de PublicacionFoto, dependiendo de los objetos que se hayan agregado a las Noticias. Polimorfismo Basado en Herencia

20 Programación I Esto se debe a que la variable post es polimórfica porque en algún momento puede contener la referencia de un objeto de tipo PublicacionMensaje y en otro puede ser de tipo PublicacionFoto. Polimorfismo Basado en Herencia

21 Programación I Esto se debe a que la variable post es polimórfica porque en algún momento puede contener la referencia de un objeto de tipo PublicacionMensaje y en otro puede ser de tipo PublicacionFoto. Polimorfismo Basado en Herencia polimorfismo en tiempo de ejecución Este tipo de polimorfismo se conoce como polimorfismo en tiempo de ejecución debido a que las referencias de los objetos solo se conocen cuando el programa entra en ejecución.

22 Programación I Polimorfismo Basado en Herencia Un diagrama de clases incompleto, que representa un modelo del Juego de Ajedrez. En la jerarquía de Herencia de la Pieza, la implementación de los métodos dependerá del tipo de pieza.

23 Programación I public class Instrumento { protected String nombre; public Instrumento() { } public void tocar() { System.out.print("Instrumento.tocar()"); } } class Guitarra extends Instrumento { public int nro_cuerdas; public Guitarra(){ } public void tocar() { System.out.println("Guitarra.tocar()");} } class Guzla extends Guitarra { public String tono; public Guzla(){ } public void tocar() { System.out.println("Guzla.tocar()");} } public class Implementacion { public Implementacion() { } public void afinar(Instrumento i) { i.tocar(); } public void afinarTodo(Instrumento[] e) { for (int i = 0; i < e.length; i++) this.afinar(e[i]); } public static void main(String[] args) { Implementacion obj = new Implementacion(); Instrumento[] orquesta=new Instrumento[2]; int i = 0; orquesta[i++] = new Guitarra(); orquesta[i++] = new Guzla(); obj.afinarTodo(orquesta); } } Polimorfismo Basado en Herencia

24 Programación I Se pueden escribir métodos que acepten como argumentos objetos genéricos y trabajar apropiadamente con objetos de cualquier subclase. Por ejemplo: //En la clase Implementacion public void afinar (Instrumento i){ i.tocar(); } El método afinar puede recibir en i la referencia de un objeto de Instrumento, Guitarra o Guzla. Polimorfismo Basado en Herencia Argumentos Polimórficos

25 Programación I Es la clase administradora de todas las clases en Java. Una declaración de clase sin la cláusula extends, implícitamente usa “extends Object” public class Instrumento {....... } public class Instrumento extends Object{....... } Es equivalente a: Polimorfismo Basado en Herencia La Clase Object

26 Programación I Dado que se pueden pasar objetos usando referencias a su clase padre, se desea conocer con cuál objeto se está actualmente trabajando. Suponga la siguiente jerarquía: public class Instrumento extends Object public class Guitarra extends Instrumento public class Guzla extends Guitarra Polimorfismo Basado en Herencia Operador instanceof Instrumento Object Guitarra Guzla

27 Programación I Suponga ahora que en el método afinar, antes de invocar al método tocar, debe registrar el número de cuerdas ó ajustar el tono dependiendo si se trata de una Guitarra ó una Guzla, respectivamente. Primero se debe Verificar que la referencia que llega en i sea una Guitarra ó una Guzla. public void afinar (Instrumento i){ if (i instanceof Guitarra) { //Proceso si es una Guitarra } else if (i instanceof Guzla) { //Proceso si es una Guzla } i.tocar(); } Polimorfismo Basado en Herencia Operador instanceof

28 Programación I En circunstancias en que se recibe la referencia a la clase padre y se tiene actualmente un objeto a una subclase, se puede restaurar la funcionalidad del objeto haciéndole un casting a la referencia. Por ejemplo: Polimorfismo Basado en Herencia Casting de Objetos public void afinar (Instrumento i){ if (i instanceof Guitarra) { Guitarra obj1=new Guitarra(); obj1=(Guitarra) i; obj1.nro_cuerdas=5; obj1.tocar(); } else if (i instanceof Guzla) { Guzla obj2=new Guzla(); obj2=(Guitarra) i; obj2.tono="re"; obj2.tocar(); } else i.tocar(); }

29 Polimorfismo en Sobrecarga de Métodos Programación I El concepto de polimorfismo, en cuanto a cambio de forma, se puede extender a los métodos. Java permite que varios métodos dentro de una clase se llamen igual, siempre y cuando su lista de parámetros sea distinta. Por ejemplo, si tuviéramos un método que sirviera para sumar números pero sin indicar de qué tipo.

30 Programación I Polimorfismo en Sobrecarga de Métodos /* Diversos modos de sumar */ public class Sumar { public float suma(float a, float b) { System.out.println("Estoy sumando reales"); return a+b; } public int suma(int a, int b) { System.out.println("Estoy sumando enteros"); return a+b; } public static void main(String[] args) { float x = 1, float y = 2; int v = 3, int w = 5; System.out.println(suma(x,y)); System.out.println(suma(v,w)); } }

31 Polimorfismo en Sobrecarga de Métodos Programación I La sobrecarga de métodos también pueden ser aplicada a los constructores. public class Rectangulo { private int x1, y1, x2, y2; public Rectangulo(int ex1, int ey1, int ex2, int ey2){ x1 = ex1; x2 = ex2; y1 = ey1; y2 = ey2; } public Rectangulo(){ x1 = 0; x2 = 0; y1 = 1; y2 = 1; } public int calcularArea(){ return (x2-x1) * (y2-y1); } }

32 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Finalización


Descargar ppt ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."

Presentaciones similares


Anuncios Google