Programación Orientada a Objetos 26/05/2016 Examen Teórico Convocatoria de Junio de 2016 Nombre:_______________________________________________________________________ DNI:_______________________ Grupo:_____________________________________________ 1. Responde a las siguientes cuestiones: a) Un programador Java desarrolla un proyecto denominado puzzle utilizando el entorno Eclipse (con la configuración por defecto del proyecto) y decide ejecutarlo desde la línea de comandos. Escribe el comando para la ejecución sabiendo que: la aplicación se lanza desde la carpeta del proyecto la clase principal puzzle.programa Inicio.java se encuentra ubicada en es necesaria la librería configuracion.jar, ubicada en la carpeta lib. el paquete b) Explica el significado de una clase con el modificador final. ¿Es compatible utilizar el modificador final en la clase y en las declaraciones (atributos y métodos) de la clase? Programación Orientada a Objetos 26/05/2016 2. Supuesta la clase abstracta A, y una variable var, responde de forma razonada a las siguientes cuestiones: a) ¿Cuál podría ser el tipo estático de var (distinto de A) para que el casting (A)var sea correcto en tiempo de compilación? b) ¿Es posible asignar una referencia a un objeto a var de manera que el resultado de la consulta (var.getClass() == A.class) sea true? Programación Orientada a Objetos 26/05/2016 3. Responde de forma razonada a las siguientes cuestiones: a) Explica el concepto de regla covariante y muestra un ejemplo. b) Si una clase no implementa ningún constructor ¿es posible que el constructor por defecto falle en tiempo de compilación? Programación Orientada a Objetos 26/05/2016 4. Dada la jerarquía de excepciones de la figura y el siguiente código, contesta a las siguientes cuestiones: public class Excepciones { public void lanzarMoneda() throws Excepcion1{ Random random = new Random(); int valor = random.nextInt(2); switch (valor){ case 0: throw new Excepcion1(); case 1: throw new Excepcion2(); } } } public void metodo() throws Excepcion3{ try{ lanzarMoneda(); }catch (Excepcion1 e1){ System.err.println("E1"); }catch (Excepcion2 e2){ System.err.println("E2"); } finally{ System.out.println("finally"); } } a) Define las constantes cara y cruz para mejorar la legibilidad del método lanzarMoneda(). b) El compilador señala que existe un error en tiempo de compilación. Explica el motivo e indica la forma de solucionarlo. Una vez solucionado explica cuál sería el resultado de una ejecución del método metodo(). Programación Orientada a Objetos 26/05/2016 5. Responde de forma razonada a las siguientes cuestiones: a) ¿Qué diferencia existe entre las siguientes declaraciones de métodos? void metodo(List<Elemento> elementos) void metodo (List<? extends Elemento> elementos) b) ¿Qué papel juega el mecanismo de autoboxing en el uso de las colecciones de Java (como LinkedList) con tipos primitivos? Programación Orientada a Objetos 26/05/2016 6. Contesta a las siguientes cuestiones: a) Explica por qué es recomendable redefinir conjuntamente los métodos equals y hashCode. b) Supongamos una clase A que redefine el método clone de la clase Object, y dada una variable oa de tipo A. ¿Cuál es el resultado de la siguiente expresión? Justifica la respuesta. oa.equals(oa.clone()); Programación Orientada a Objetos 26/05/2016 7. Dado el siguiente código, contesta de forma razonada a las siguientes cuestiones: public class PasoParametros { void cambio(String x, String[] array){ array[0] = x; } public static void main(String[] args){ args[0] = "hola"; cambio("examen", args); System.out.print(args[0]); } } a) El compilador señala que existe un error de compilación y, además existe otro error conceptual (compila pero podría no funcionar). Explica y soluciona ambos problemas. b) Explica cuál sería el resultado de la ejecución del método main. Programación Orientada a Objetos 26/05/2016 8. Queremos ofrecer una interfaz que defina un tipo de datos que represente un proveedor de objetos de un mismo tipo. Para ello la interfaz debe declarar una operación que retorne un objeto. El ejercicio consiste en: a) Declarar la interfaz, con el fin de que el tipo de datos sea lo más reutilizable posible. b) Implementar la interfaz en una clase que retorne un número aleatorio entre 0 y 99 cada vez que se invoque a la operación. Programación Orientada a Objetos 9. Colecciones. 26/05/2016 Implementa un método genérico que reciba como parámetros una lista y un valor de un elemento. La funcionalidad del método consiste en borrar todas las ocurrencias en la lista de elementos iguales al pasado como parámetro. El método devolverá el número de ocurrencias que se han borrado. Se establece como requisito utilizar un iterador explícito para el procesamiento de la lista. Programación Orientada a Objetos 26/05/2016 10. Java 8. a) Explica qué es y para qué se utiliza el concepto de método por defecto en una interfaz. Ilustra la explicación con un ejemplo. b) Utilizando el modelo de procesamiento basado en streams, implementa un método que muestre por la consola un listado de asignaturas de un cierto tipo. La clase Asignatura se implementa como sigue: enum TipoAsignatura {C1, C2, ANUAL} public class Asignatura { private String nombre; private Set<Alumno> matriculados; private TipoAsignatura tipo; private LocalDate fechaExamen; } // Métodos get … El método recibe como parámetros una colección de asignaturas y un tipo de asignatura. La funcionalidad del método consiste en mostrar en la consola el nombre de la asignatura, la fecha del examen y el número de matriculados, de aquellas asignaturas del tipo establecido como parámetro. Además, los resultados deben mostrarse ordenados de menor a mayor fecha de examen (orden natural). Un ejemplo de uso de este método podría ser mostrar las asignaturas del primer cuatrimestre.