HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

Documentos relacionados
Java Avanzado Facultad de Ingeniería. Escuela de computación.

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Java en 2 horas. Rodrigo Santamaría

Ejercicios del tema 7: Clases y objetos

Las plantillas permiten definir funciones genéricas.

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

JAVA 7 Los fundamentos del lenguaje Java

PROGRAMACION ORIENTADA A OBJETOS EN C++

Prof. Dr. Paul Bustamante

15. Parámetros o argumentos

Herencia e Interfaces

Programación orientada a objetos

Modulo 11. Clases y Objetos en Java

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

La Herencia: Teoría (1)

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

Prácticas de Programación

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

TEMA 5. EXCEPCIONES EN JAVA DEFINICIÓN DE EXCEPCIONES EN PROGRAMACIÓN TIPOS DE EXCEPCIONES / ERRORES Y CÓMO TRATARLOS

El lenguaje de programación Java

Pruebas de unidad con JUnit

Programación Orientada a Objetos en Java

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Tema 6. Gestión dinámica de memoria

La sintaxis básica para definir una clase es la que a continuación se muestra:

Guía - Taller # 2 (JAVA)

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Introducción. Curso de Middleware. Práctica 6. 1 de 9

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

Práctica 4: Herencia. Objetivos:

2.2 Nombres, Ligado y Ámbito

Curso de Java POO: Programación orientada a objetos

Definición y Conversión de datos. Agustín J. González ELO-329

Tema 7: Polimorfismo. Índice

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Introducción a la Programación Orientada a Objetos

GUÍA DE ESTILO EN JAVA

PROGRAMACIÓN ORIENTADA A OBJETOS

Aquí se declaran los. Aquí se declaran los métodos de la clase. *Atributos de la clase

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

Introducción al lenguaje Java

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

FACULTAD DE INGENIERÍA

REPASO ARRAYS MULTIDIMENSIONALES EN JAVA. DECLARACIÓN Y USO. EJEMPLOS Y EJERCICIOS RESUELTOS. (CU00905C)

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Curso Introducción JAVA Pág.: 1

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

9. Objetos y clases Clases

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Introducción. Herencia y Polimorfismo. Ejemplos (I) Ejemplos (II) Control de Acceso. Herencia

Java Inicial (20 horas)

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo

CLASES QUE UTILIZAN OBJETOS. RELACIÓN DE USO ENTRE CLASES JAVA. CONCEPTO DE DIAGRAMA DE CLASES. (CU00641B)

Manual Para Hacer Ejecutables de aplicaciones JAVA usando Advanced Installer 7.6

Principios de Computadoras II

Ejercicios de evaluación de fundamentos de programación en Java

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema: Introducción al IDE de Microsoft Visual C#.

Universidad de Cantabria

Tema: Sobrecarga de Operadores.

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Computación III. Objetivo de aprendizaje del tema

PROYECTO FIGURAS DIAGRAMA DE FLUJO

Tema 4. Excepciones en Java

INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones

RESPUESTA Sí, una clase puede manejar objetos. Aunque esta frase es bastante ambigua, apréndetela de memoria para el examen y no le des más vueltas.

EXAMEN PARCIAL 23 de Octubre de 2015 Programación I. Grado en Matemáticas e Informática ETSIINF UPM

Conceptos de Programación Orientada a Objetos

Java para programadores

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

2.1. Introducción al lenguaje Java

1 HILOS (THREADS) EN JAVA

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia

Programación Orientada a Objetos (POO)

Objective C (Desarrollo con Apple)

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

5. Sentencias selectivas o condicionales

Ficheros y streams. Desde el punto de vista de Java, cada fichero no es más que una secuencia o flujo de bytes [stream].

Etapa 3.1. Implementación de la clase Operacion

Introducción a la Programación Orientada a Objetos PRACTICO N 6

Índice ÍNDICE EJERCICIO 1: CÁLCULO FINANCIERO (5 PTOS.) EJERCICIO 2: AGENCIA DE COLOCACIONES (5 PTOS.)...4

b c b c b b a a c a a c b c c b b c b c d c c c b

Interfaces y Clases Internas. ELO329: Diseño y Programación Orientados a Objetos

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

APUNTES JAVA ARRAYS (ARREGLOS) Un arreglo es un grupo de posiciones de memoria contiguas. Todas las cuales tienen el mismo nombre y el mismo tipo.

TEMA 3. CLASES. EJERCICIOS

Pasos a seguir para crear una aplicación visual en el lenguaje de programación Java con Netbeans IDE.

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Transcripción:

Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2009/2010 Nombre:... Fecha: / 11 / 2009 HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS Esta hoja de ejercicios nos servirá para repasar las nociones más importantes de los Temas 2 y 3. 1. Los dos requisitos previos fundamentales para que podamos hablar de que un método se comporta de modo polimorfo son: 1. 2. 2. El polimorfismo de métodos está directamente vinculado con el enlazado dinámico de métodos. Explica cuál es el comportamiento por defecto en Java y C++ con respecto al enlazado: C++: Java: 3. Supongamos que un determinado método redefinido(): void aparece en dos clases, clase Base y clase Derivada. Supón que nuestro compilador sólo ofrece enlazado estático. Qué versiones del método serían llamadas en el siguiente fragmento? Base obj1 = new Derivada ( un objeto ); Derivada obj2 = new Derivada ( otro objeto ); // obj1.redefinido (); //Invocación 2 obj2.redefinido (); //Invocación 3 Invocación 3: 4. Supongamos que en el ejemplo anterior nuestro compilador ofreciera enlazado dinámico. Qué versiones de los métodos serían invocadas? Base obj1 = new Derivada ( un objeto ); Derivada obj2 = new Derivada ( otro objeto ); // obj1.redefinido (); //Invocación 2 obj2.redefinido (); //Invocación 3 1-7

Invocación 3: 5. Repasemos la diferencia entre declaración y construcción. Tenemos una clase Base y una clase Derivada que hereda de la primera. Qué sucedería al compilar el siguiente fragmento de código? Relaciona tu repuesta con la idea de subtipado. Base obj1 = new Derivada (); Derivada obj2 = new Derivada (); obj2 = obj1; 6. Qué sucedería al cambiar el orden de la asignación anterior? Relaciona tu repuesta con la idea de subtipado. Base obj1 = new Derivada (); Derivada obj2 = new Derivada (); Pasamos ahora a los lenguajes Java y C++. 7. Qué tipo de enlazado ofrece C++ por defecto? (Estático o dinámico) Hay polimorfismo de métodos por defecto? 8. Qué tipo de enlazado ofrece Java por defecto? (Estático o dinámico) Hay polimorfismo de métodos por defecto? 9. Cuáles son las dos condiciones necesarias para conseguir enlazado dinámico de métodos en C++? 1. 2. 2-7

10. Repaso sobre herencia: Cuál es la primera orden que debe aparecer siempre en un constructor de una clase derivada, tanto en Java como en C++? 11. Observa el siguiente fragmento de código en C++. Supón que existe un método redefinido(): void que aparece tanto en las clases Base como en la clase Derivada Qué versión del método será invocada? Base obj1; Derivada obj2; 12. Imagina el anterior fragmento de código en Java Qué sucedería? Base obj1; Derivada obj2 = new Derivada(); 13. Supongamos que el método redefinido(): void aparece ahora en el fichero Base.h con el modificador virtual Qué versión del mismo sería llamada? class Base{ private: char nombre[20]; public: Base(); virtual void redefinido(); class Derivada: public Base { public: Derivada(); void redefinido(); Base * obj1; 3-7

obj1->redefinido(); Se cumplen los requisitos para que haya polimorfismo (y enlazado dinámico)? Qué versión del método redefinido(): void será invocada? 14. Pasemos a ver una nueva situación en la cual nos gustaría contar con enlazado dinámico: trabajo con arrays (o estructuras genéricas). Supongamos que tenemos la misma declaración de clases que en el ejercicio 13. Qué versiones del método void: redefinido() se invocarían en el siguiente contexto? Base * obj1 =new Base; Base array_base [2]; array_base [0] = (*obj1); array_base [1] = (*obj2); for (int i = 0; i < 2; i++){ //Invocación i : array_base[i].redefinido(); 15. Repetimos el ejercicio anterior con ligeras modificaciones (recuerda que el método redefinido(): void tiene el modificador virtual ). Supongamos que tenemos la misma declaración de clases que en el ejercicio 13. Qué versiones del método void: redefinido() se invocarían en el siguiente contexto? Base * obj1 =new Base; Base * array_base [2]; array_base [0] = obj1; array_base [1] = obj2; for (int i = 0; i < 2; i++){ 4-7

//Invocación i : array_base[i]->redefinido(); 16. Incidimos una vez más en la idea de subtipado Qué resultado obtendrías el compilar el siguiente fragmento de código en C++? (El resultado sería equivalente en Java, la respuesta está directamente relacionada con la relación de subtipado) Base * obj1 =new Derivada; Derivada * array_derivada [2]; array_derivada[0] = obj1; array_derivada[1] = obj2; for (int i = 0; i < 2; i++){ //Invocación i : array_derivada[i]->redefinido(); 17. Repasamos también la forma de obtener polimorfismo en funciones auxiliares en C++. Qué versión del método redefinido(): void se invocaría a través de la función auxiliar (Base): void en el siguiente contexto? void auxiliar (Base); Base * obj1 =new Derivada; // auxiliar (*obj1); // auxiliar (*obj2); void auxiliar (Base bas){ 5-7

bas.redefinido(); 18. Qué versión del método redefinido(): void se invocaría a través de la función auxiliar(base *): void en el siguiente contexto? void auxiliar (Base *); Base * obj1 =new Derivada; // auxiliar (obj1); // auxiliar (obj2); void auxiliar (Base * bas){ bas->redefinido(); 19. Veamos ahora una de las propiedades del modelo de memoria de Java: paso por referencia de parámetros. Qué sucedería al realizar las siguientes acciones en Java? public class principal{ public static void main (String [] args){ Base obj1 = new Base(); Derivada obj2 = new Derivada(); permutar (obj1, obj2); //Invocación 1 //Invocación 2 obj2.redefinido() public static void permutar(base bas1, Base bas2){ Base aux; 6-7

aux = bas1; bas1 = bas2; bas2 = aux; Invocación 1. Qué método redefinido (): void ha sido invocado? Invocación 2. Qué método redefinido (): void ha sido invocado? 20. Recuperamos la sintaxis de redefinición de métodos en C++. Supón definido un método tostring(): void en una clase Base. Tenemos una clase Derivada que hereda de Base. Redefine el comportamiento del método tostring(): void de tal forma que invoque al mismo método de la clase Base y después muestre una cadena Estamos en la clase Derivada. 21. Repite el ejercicio 20 en Java, teniendo en cuenta que el método tostring(): String no muestra una cadena de texto por pantalla sino que la devuelve. 22. Comenta los diferentes usos que puede tener el modificador final en Java, en particular cuando es aplicado a un atributo de la clase y cuando es aplicado a un método. Atributos: Métodos: 7-7