Story Transcript
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2013/14
EXAMEN FINAL. 30 de junio de 2014
EXAMEN PARA ALUMNOS PRESENTADOS AL PRIMER PARCIAL PRIMERA PARTE EJERCICIO 1 – Cuestiones (1 punto) 1
2
3
4
5
6
7
8
9
10
Seleccione la opción correcta en cada caso, teniendo en cuenta que tan sólo puede marcar una de las opciones. Cuando termine, traslade las opciones marcadas a la tabla superior. Cada cuestión contestada correctamente suma 0.1 puntos. Por cada tres errores se restan 0.1 puntos. 1) A la vista de la siguiente interfaz y clase, escoja la afirmación correcta: public interface TipoDesconocido { public Integer getPropiedad1(); public void setPropiedad1(Integer n); public Integer getPropiedad2(); } public class TipoDesconocidoImpl implements TipoDesconocido { private Integer prop1; public TipoDesconocidoImpl(Integer prop1) { this.prop1=prop1; } //… se omite el código del resto de métodos de la clase… }
a) El tipo TipoDesconocido tiene dos propiedades básicas, una consultable y modificable y otra sólo consultable. b) La implementación proporcionada por la clase es errónea, pues hace falta declarar un segundo atributo. c) El tipo TipoDesconocido tiene una propiedad básica y una propiedad derivada. d) El tipo TipoDesconocido es inmutable. 2) Sea el comparador public class ComparadorA implements Comparator { public int compare (String s1, String s2) { int res = s1.length() – s2.length(); if (res == 0) { res = s1.compareTo(s2); } return res; } }
Indique qué contendrá el array a, tras ejecutar el siguiente código:
1
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2013/14
EXAMEN FINAL. 30 de junio de 2014
String [] a = {“java”,“ruby”,”python”,”c”,”c#”}; Arrays.sort(a, new ComparadorA());
a) b) c) d)
{”c”,”c#”,“java”,“ruby”,”python”} {”c”,”c#”,“java”,”python”,“ruby”} {“ruby”,”python”,“java”,”c#”,”c”} {”python”,“ruby”,“java”,”c#”,”c”}
3) A partir de las siguientes definiciones de clases en Java: public class A { /* Se omite el código del cuerpo de la clase */ } public class B extends A { /* Se omite el código del cuerpo de la clase */ }
y suponiendo que ambas clases incluyen un constructor sin parámetros, señale cuál de las siguientes secuencias de sentencias es incorrecta: a) b) c) d)
A a = new A(); B b=a; B b = new B(); A a=b; A a = new B(); Object o = new B();
4) El método toString() aplicado al objeto lista de tipo List devuelve la cadena [A, B, C, D]. Para modificar la lista de manera que el método devolviera [A, B, E, C, D] deberíamos invocar: a) b) c) d)
lista.add(‘E’); lista.add(3, ‘E’); lista.add(2, ‘E’); lista.add(‘E’, 3);
5) Sean dos Set a y b, donde a contiene los elementos {1, 3, 5, 7, 9} y b contiene los elementos {1, 2, 3, 4, 5}. Después de realizar la operación a.retainAll(b), el valor de a será: a) b) c) d)
{7, 9} {2, 4} {1, 2, 3, 4, 5, 7, 9} {1, 3, 5}
6) Dadas las siguientes declaraciones, marque la que sea incorrecta: a) b) c) d)
Punto[ ] tablaPuntos = new PuntoImpl[4]; int[ ] v1 = new int [5]; Punto[ ] tablaPuntos = new PuntoImpl[ ]; Double[ ] alturas = {1.75, 1.95, 1.83};
7) Indique cómo se rellenarían los huecos para que el siguiente método devuelva true si todos los números de la lista l son pares. public Boolean todosPares(List l) { Boolean res = ___(1)____; for (Integer e: l) { if (____(2)_____) { res = ___(3)__;
2
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2013/14
EXAMEN FINAL. 30 de junio de 2014
break; } } return res; }
a) b) c) d)
(1) true (1) false (1) true (1) false
(2) e%2!=0 (2) e%2==0 (2) e%2==0 (2) e%2!=0
(3) false (3) true (3) false (3) true
8) Indique cuál sería el valor de la variable res tras ejecutarse el siguiente bloque de sentencias: Integer res = 0, n; for (n=1; n!=4; n++) { res += n; if (n == 2) { break; } }
a) b) c) d)
6 3 0 La ejecución nunca acaba (bucle infinito).
9) Sea el siguiente trozo de código: TipoEnumerado a = LABEL_A; switch(a) { case LABEL_A: case LABEL_B: System.out.print(“b”); case LABEL_C: case LABEL_D: System.out.print(“d”); case LABEL_E: System.out.print(“e”); default: System.out.print(“fin”); }
¿Qué aparecerá por consola al ejecutarlo? a) b) c) d)
b bde bdefin No aparece nada, porque hay errores
10) En relación a los métodos equals(…) y hashCode() de la clase Object, señale la respuesta correcta: a) Si o1.equals(o2) devuelve false, debe cumplirse que o1.hashCode()==o2.hashCode(). b) Si o1.hashCode()!=o2.hashCode(), debe cumplirse que o1.equals(o2) devuelva true. c) Si o1.equals(o2) devuelve true, debe cumplirse que o1.hashCode()==o2.hashCode(). d) No existe ninguna relación entre el comportamiento de equals(…) y hashCode().
3
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2013/14
EXAMEN FINAL. 30 de junio de 2014
SEGUNDA PARTE CONTEXTO Se desea implementar parte de un sistema de información para la gestión de un centro médico. Para ello, considere los siguientes tipos: Persona: ■ Propiedades: ● DNI, de tipo String, consultable. ● Nombre, de tipo String, consultable. ● Apellidos, de tipo String, consultable. ● Dirección, de tipo String, consultable y modificable. ● Teléfono, de tipo String , consultable y modificable. ● Fecha de nacimiento, de tipo Calendar, consultable. ● Género, de tipo Genero, consultable, siendo Genero un tipo enumerado con los valores HOMBRE, MUJER. ■ Criterio de igualdad: por DNI. ■ Orden natural: por DNI. ■ Representación como cadena: el DNI, apellidos y nombre separados por comas y espacios en blanco. Por ejemplo, “12345678X, Mesa López, Ana” ■ Constructores: ● Un constructor que recibe parámetros con valores para todas las propiedades del tipo. ● Un constructor que recibe un objeto de tipo Persona, y crea un nuevo objeto, con el mismo valor de las propiedades que el objeto pasado como parámetro. Cita, tipo inmutable: ■ Propiedades: ● Fecha, de tipo Calendar. Como simplificación de la implementación, en la fecha solo se utilizarán el día, mes y año de la cita (no se preocupe por hora, minutos,…). ● Paciente, de tipo Persona. ■ Restricciones: La fecha de la cita no puede ser anterior a la fecha en que se está creando una cita. Si esto sucediera, se lanzaría la excepción ExcepcionCitaNoValida. ■ Criterio de igualdad: Por fecha y paciente. ■ Orden natural: Por fecha, y a igualdad de fechas, por paciente. ■ Representación como cadena: La fecha seguida de dos puntos, un espacio y los datos del paciente. Por ej. “30/06/2014: 12345678X, Mesa López, Ana”. Suponga que dispone del método: public static String fechaToString(Calendar c) contenido en la clase de utilidad Fechas. ■ Constructor: un constructor que reciba parámetros con valores para todas las propiedades del tipo. Facultativo extiende a Persona: ■ Propiedades: ● IdColegiado, de tipo String, consultable. ● Especialidad, de tipo String, consultable. ● Citas, de tipo SortedSet, consultable y ordenado por el orden natural de Cita.
4
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2013/14
EXAMEN FINAL. 30 de junio de 2014
■ ■ ■ ■ ■ ■
● Citas por día, de tipo Multimap, consultable. Es una propiedad derivada de la propiedad citas. Restricciones: Un facultativo no puede atender a más de 20 citas al día. El número de citas máximo podría variar en futuras versiones de la aplicación. Criterio de igualdad: el de Persona. Orden natural: el de Persona. Representación como cadena: la especialidad seguida de una coma, un espacio en blanco y la representación como cadena de la persona. Por ej. “Traumatología, 12345679Y, García Pérez, Francisco” Constructor: un constructor que reciba parámetros con valores para todas las propiedades básicas del tipo excepto las citas. En el momento de la creación, un facultativo no tiene citas. Otros métodos: ● boolean concertarCita(Calendar fecha, Persona paciente), añade una cita con la fecha y los datos del paciente a las citas del facultativo, siempre que la fecha sea posterior o igual al día en que se está concertando la cita, y el facultativo tenga hueco ese día (no se haya agotado el máximo diario). Si no se puede concertar la cita, el método devuelve false, y, en caso contrario, devuelve true. ● void cancelarCita (Calendar fecha, Persona paciente), cancela la cita del paciente en la fecha dada. Si el paciente no tenía cita concertada en esa fecha, el método no hará nada. ● void cancelarCitas(Calendar fecha), cancela todas las citas de una fecha dada. Si no hay citas para esa fecha, el método no hará nada.
EJERCICIO 2 1) 2) 3) 4)
4 Ptos.
(0,25 ptos.) Cabecera de la clase FacultativoImpl y atributos. (0,5 ptos.) Constructor. (0,25 ptos.) Los métodos relacionados con Object que considere necesarios definir. Las operaciones concertarCita (1,25 ptos.), cancelarCita (0,75 ptos.) y cancelarCitas (1 pto.).
EJERCICIO 3
3 Ptos.
En los siguientes apartados, y salvo que se diga lo contrario, no puede hacer uso de ninguna librería externa (como Guava), y sólo puede usar un bucle. Aplique siempre que sea posible los esquemas secuenciales vistos en el curso. Implemente en una clase UtilesCentroMedico: 1) (1,5 ptos.) El método SortedSetfacultativosDeEspecialidades que dada una lista de facultativos, y un conjunto con nombres de especialidades, devuelva una lista ordenada con los facultativos de las especialidades del conjunto. La lista resultado debe estar ordenada por especialidad. public static List facultativosDeEspecialidades ( List facultativos, Set especialidades) 2) (1,5 ptos.) El método facultativoConMasPacientes. Este método debe devolver el facultativo con más pacientes. La cabecera del método es la siguiente: public static Facultativo facultativoConMasPacientes (Set facultativos) Apóyese en un método auxiliar si lo estima necesario. 5
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2013/14
EXAMEN FINAL. 30 de junio de 2014
EJERCICIO 4
2 Ptos.
En los siguientes ejercicios, no está permitido el uso de bucles ni de cualquier librería externa. Sí puede implementar criterios de comparación alternativos si así lo viera conveniente. Suponga definidos los tres conjuntos siguientes en una clase de utilidad diferente a los tipos descritos: private static Set tiempoParcial; private static Set masDeUnaEspecialidad; private static Set docentes; y que representan a los facultativos que trabajan a tiempo parcial, con más de una especialidad y que ejercen la docencia en la Universidad respectivamente. Además no son conjuntos disjuntos. Implemente: 1) (1,25 ptos.) El método public static SortedSet masDeunaEspecYDocentes(), que devuelve aquellos facultativos ordenados por su IdColegiado que tengan más de una especialidad y sean docentes. 2) (0,75 ptos.) El método public static Set tiempoCompleto(), que devuelve aquellos facultativos que no trabajan a tiempo parcial de entre todos los facultativos contemplados en los tres conjuntos. Tenga en cuenta que un facultativo puede trabajar solamente a tiempo parcial o a tiempo completo.
6