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

Slides:



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

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.
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
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.
Programación Orientada a Objetos usando C++
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.
Variables polimórficas (plantillas): definición, uso y aplicación
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.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
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++
Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005.
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
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.
Programación orientada a objetos Capítulo 9 Algo mas sobre herencias.
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.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
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.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
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.

Polimorfismo Programación I Por ejemplo: Tome un objeto que sume dos números cualesquiera (enteros, punto flotante, etc.) y devuelve un total. 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 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 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