Download Examen Teórico Convocatoria de Septiembre de 2012

Document related concepts
no text concepts found
Transcript
Programación Orientada a Objetos
05/09/2012
Examen Teórico
Convocatoria de Septiembre de 2012
Nombre:_______________________________________________________________________
DNI:_______________________Titulación/Grupo:____________________________________
1- Respecto a la tecnología Java:
a) ¿Por qué se dice que Java es independiente de la plataforma?
b) ¿Qué es necesario para que un fichero .jar sea ejecutable?
2- Dado el siguiente código:
//Fichero: PasoParametros.java
public class PasoParametros {
private void setHoraCanarias(Date ahora) {
ahora = new Date();
ahora.setHours(ahora.getHours()-1);
}
public static void main(String[] args) {
// Fecha y hora actual
Date ahora = new Date();
setHoraCanarias(ahora);
System.out.println("hora en canarias" +
ahora);
}
}
1
a) Explica y soluciona el error de
compilación del código.
b) Explica cuál es la salida de la
ejecución del método main.
Programación Orientada a Objetos
05/09/2012
3- Responde a las siguientes preguntas relacionadas con los métodos de la clase
Object:
a) Implementa una clase Copiable que redefina el método clone de manera que
todas las clases que hereden de ella tengan disponible la copia superficial sin tener
que manejar ninguna excepción.
b) Supuesta la clase A que hereda de la clase Copiable y no redefine ningún método
heredado, explica cuál sería el resultado de la ejecución del siguiente código:
public class Programa {
public static void main(String[] args) {
A oa = new A();
Object copia = oa.clone();
System.out.println((copia.getClass() == Object.class) + " " +
oa.equals(copia));
}
}
4- Respecto al modificador final de Java, contesta de forma razonada a las siguientes
preguntas:
a) ¿Es posible utilizar el modificador final en la declaración de un constructor?
b) ¿Es posible modificar el estado de un objeto referenciado desde un atributo final
una vez establecido su valor en el constructor? Recuerda que el estado de un
objeto viene dado por el valor de sus atributos.
2
Programación Orientada a Objetos
05/09/2012
5- Dado el siguiente código, contesta de manera justificada a las siguientes preguntas:
//Fichero: Polimorfismo.java
class A {
public int f() { return 0; }
public int g() { return 3; }
}
a) ¿Cuál es el tipo dinámico de la
variable ob?
b) ¿Cuál es el resultado de la ejecución?
class B extends A {
public int f() { return 1; }
public int g() { return super.f(); }
}
class C extends B {
public int f() { return 2; }
}
c) ¿Es válida en tiempo de compilación
cualquier conversión de tipos (casting)
entre las clases de la jerarquía de
herencia (A, B, C y D)? Justifica la
respuesta utilizando ejemplos.
class D extends A {
public int f() { return 4; }
}
public class Polimorfismo {
public static void main(String[] args) {
A oa = new C();
B ob = (B) oa;
System.out.println(ob.g());
}
}
6- Indica si son verdaderas o falsas las siguientes afirmaciones justificando la respuesta:
a) La regla covariante permite que dos métodos sobrecargados tengan diferente valor
de retorno.
b) Aunque los tipos primitivos no son objetos son compatibles con la clase Object.
3
Programación Orientada a Objetos
05/09/2012
7- Sea la clase java.util.zip.ZipFile la encargada de leer las entradas de un fichero
comprimido zip. La definición de uno de sus constructores es como sigue:
/**
* Abre un fichero zip para lectura.
*
* @param name el nombre del fichero ZIP
* @throws ZipException Si ocurre un error en el formato del ZIP
* @throws IOException Si ocurre una excepción de entrada salida
* @throws SecurityException si existe un gestor de la seguridad y comprueba
que el fichero no tiene permiso de lectura.
*/
public ZipFile(String name) throws IOException {…}
Siendo la jerarquía de excepciones la que se muestra en la figura, contesta justificando la
respuesta a las siguientes preguntas:
a) ¿Es correcta la declaración del constructor o falta la
declaración de alguna excepción? Justifica la respuesta.
Exception
IOException
RuntimeException
ZipException
SecurityException
b) Implementa un método main que abra un fichero zip y
muestre el número de entradas que contiene. En caso de
error se debe informar del tipo de error que ha ocurrido.
El nombre del fichero zip se toma de los argumentos del
programa. Para mostrar el número de entradas se puede
utilizar el método size() de la clase ZipFile.
4
Programación Orientada a Objetos
05/09/2012
8- Respecto a las interfaces en Java, contesta de forma razonada a las siguientes
preguntas:
a) ¿La implementación de un tipo como una clase abstracta puede reemplazarse
siempre por la definición de una interface?
b) ¿Qué ventaja tiene la definición de un tipo como interface en lugar de cómo una
clase abstracta?
9- Sobre los conjuntos en Java:
a) ¿Cómo gestionan las clases que implementan la interfaz Set la duplicidad de
elementos (fallo en compilación, fallo en ejecución, valor de retorno)?
b) ¿Qué relación existe entre las interfaces Comparable, Comparator y la clase
TreeSet?
10- Explica el problema de compatibilidad entre variables de tipos genéricos, cómo se
soluciona y utiliza un ejemplo para ilustrarlo.
5
Programación Orientada a Objetos
05/09/2012
11- Contesta de forma razonada a las siguientes preguntas sobre el operador de
asignación en C++:
a) ¿Qué implicación tiene la definición de un atributo const en la implementación por
defecto del operador de asignación?
b) ¿Por qué una asignación polimórfica entre objetos con semántica valor supone una
pérdida de información?
12- Respecto a la genericidad:
a) Compara Java y C++ en relación a las operaciones que son aplicables sobre las
entidades (variables, atributos, parámetros) de tipo genérico (por ejemplo, T).
b) En C++, explica la siguiente declaración del atributo contenido de la clase
Generica y qué tipos se pueden utilizar para la instanciación del tipo genérico sin
que se produzca un error en tiempo de compilación.
template<class T> class Generica{
private:
T contenido[SIZE];
public:
…
};
6
Programación Orientada a Objetos
05/09/2012
13- Respecto al mecanismo de excepciones en C++, explica:
a) La definición de nuevas excepciones por parte del programador.
b) El tratamiento, en el código cliente, de las excepciones declaradas por los
métodos.
14- Explica la diferencia entre ligadura estática y ligadura dinámica y cómo se aplica en
los lenguajes (responde según la titulación):
Planes antiguos: C#
Grado: C++
7
Programación Orientada a Objetos
05/09/2012
15- Escribe el código C++ equivalente a la siguiente tipo en Java. Explica todos los
problemas que te encuentres y las decisiones de diseño que tengas que tomar.
package septiembre.teorico;
interface Interface15 {
int VALOR = 5;
void met();
}
8