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

Slides:



Advertisements
Presentaciones similares
Unidad 3 Lenguajes .Net y POO
Advertisements

Curso de java básico (scjp)
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java Capitulo 7: Continuación Poo Profesor:
POLIMORFISMO UNIDAD 4.
Herencia en C#.
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.
Informática II Prof. Dr. Gustavo Patiño MJ
Herencia y Polimorfismo
Aplicación del paradigma orientado a objetos
Diseño y programación de
PROGRAMACION 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.
HERENCIA.
Lenguaje de Programación Java Profesor: Mauricio Martínez P. Análisis y Diseño Orientado a Objetos UML: Lenguaje de Modelamiento Unificado Toma de Requerimientos.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
Medio de tele-comunicación
Modificadores.
Herencia y Polimorfismo en JAVA
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Introducción a Java II.
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.
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.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Programación Orientada a Objetos
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Herramientas de polimorfismo y herencia en C++
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Programación Orientada 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.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Detalles Generales sobre Java
Programación orientada a objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
CONCEPTOS.
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.
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,
Programación Orientada a Objetos: CLASES Y OBJETOS
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
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.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
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. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Prof. Manuel B. Sánchez.  El origen del término polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
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.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
Transcripción de la presentación:

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

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.

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.

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.

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.

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

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.

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

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.

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”); } }

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

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

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 = ; //Ilegal asignación a atributo de la clase Ejecutivo Polimorfismo Basado en Herencia

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

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

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

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

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

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

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

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.

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.

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

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

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

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

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

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(); }

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.

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

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

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