Download Examen Teórico Convocatoria de Junio de 2012

Document related concepts
no text concepts found
Transcript
Programación Orientada a Objetos
31/5/2012
Examen Teórico
Convocatoria de Junio de 2012
Nombre:_______________________________________________________________________
DNI:_______________________Titulación:___________________________________________
1. Sobre el control de errores en Java:
a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica el
error e indica cómo resolverlo:
public class NuevaException extends Exception { // ... }
public void metodo() {
// ...
throw new NuevaException();
}
b) Declara un método que evalúe un precondición usando un aserto. ¿Cuál es la diferencia entre
el uso de asertos y excepciones para el tratamiento de precondiciones?
2. Recorridos “for each” en Java:
a) Explica el funcionamiento de un recorrido “for each” y su relación con las interfaces Iterable
e Iterator.
b) ¿Podemos eliminar elementos de una colección que se recorre con un “for each”? Justifica la
respuesta.
1
Programación Orientada a Objetos
31/5/2012
3. En el contexto de la genericidad de Java pueden aparecer estos dos tipos de declaraciones:
-
<T extends Empleado>
-
<? extends Empleado>
Explica las diferencias entre ambas declaraciones.
4. Sobre los tipos primitivos en Java:
a) Explica razonadamente el resultado del siguiente programa que no contiene errores de
compilación:
public static void main(String[] args) {
Integer a = null;
int b = a;
System.out.println(b);
}
b) ¿Qué diferencia hay entre estas dos construcciones de arrays de booleanos?
boolean array1[] = new boolean[3];
Boolean array2[] = new Boolean[3];
2
Programación Orientada a Objetos
31/5/2012
5. Sobre constructores en Java, responde justificadamente:
a) En la implementación de un constructor, indica cómo podemos reutilizar otro constructor.
b) Si una clase ofrece solo un constructor, ¿debe ser el constructor sin parámetros?
c) ¿En qué ocasiones una subclase está obligada a declarar algún constructor?
6. Indica los errores conceptuales y de compilación del siguiente método Java:
void metodo(Set<String> coleccion) {
HashSet<String> otra = (HashSet<String>) coleccion;
String primero = otra.iterator().next();
if (primero != "primero") {
// Borrar el primer elemento
otra.remove(0);
}
// Añadir "primero" como el primero
otra.add(0, "primero");
}
3
Programación Orientada a Objetos
31/5/2012
7. En relación a la ejecución de aplicaciones Java:
a) Suponiendo una aplicación compilada en la carpeta c:\examen, ¿qué es necesario para que el
siguiente comando siempre funcione?
> java programa.Principal
b) Indica si la siguiente afirmación es verdadera o falsa justificando la respuesta: “El comando jar
se utiliza para ejecutar aplicaciones Java empaquetadas en ficheros .jar”
8. Métodos de la clase Object de Java:
a) Dada una clase A, indica qué es necesario para que la siguiente implementación (sin
modificaciones) del método clone compile correctamente:
public Object clone() {
return super.clone();
}
b) Dada una clase A que hereda directamente de Object, ¿es correcta la redefinición del método
equals? Según esta implementación, ¿sería necesaria la redefinición?
public boolean equals(A obj) {
return this == obj;
}
4
Programación Orientada a Objetos
31/5/2012
9. En Java, indica si las siguientes afirmaciones son verdaderas o falsas justificando las
respuestas:
a) Dada una variable con tipo estático LinkedList<Empleado>, sólo es posible añadir
objetos de la clase Empleado a la colección.
b) Un método con modificador static puede ser implementación de un método de una
interfaz.
10. Escribe un método en Java que cumpla los siguientes requisitos:
-
Acepta como parámetros un entero y un número variable de cadenas.
-
Puede ser aplicado sólo desde código del mismo paquete al que pertenece la clase en la que
está definido.
-
Retorna un conjunto de las cadenas que recibe como parámetro ordenado por orden
lexicográfico (orden natural).
-
No permite ser redefinido.
5
Programación Orientada a Objetos
31/5/2012
11. Escribe el código equivalente C++ del siguiente código Java y justifica la respuesta:
package examen;
public interface Examen {
List<Integer> getDatos(String clave, Examen otro);
}
12. En C++:
a) ¿Qué significa que una clase sea amiga de otra? ¿Cómo afecta la herencia a la relación de
amistad?
b) Explica cómo podemos aumentar la visibilidad de un método heredado. ¿Podría reducirse la
visibilidad?
6
Programación Orientada a Objetos
31/5/2012
13. En C++, implementa la clase Contador, que representa un contador, cumpliendo los
siguientes requisitos:
-
La cuenta siempre comienza por 0.
-
Ofrece el operador de igualdad.
-
El contador se incrementa en una unidad.
-
El contador tiene memoria. Aplicando una operación recordará el valor de la cuenta que
podrá ser restaurado posteriormente.
-
Aplica Diseño por Contrato.
7
Programación Orientada a Objetos
31/5/2012
14. Responde según la titulación:
Planes antiguos: En C#, indica las diferencias entre una clase y una estructura.
Grado:
a) En C++, declara e implementa un constructor de copia para la clase Contador (ejercicio
anterior).
b) El compilador de C++ aplica en ocasiones el constructor de copia de forma implícita, es decir,
sin que exista una llamada al constructor. ¿En qué ocasiones sucede?
15. Escribe el código equivalente Java del siguiente código C++ justificando la respuesta.
class Examen {
private:
int* orden;
A oa;
public:
Examen(int preguntas = 3) { //... }
};
8