You are on page 1of 358

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA.

ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL


EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO / FEBRERO 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PRIMERA SEMANA

• Para la nota del examen, el Test vale el 30% y el Problema vale el 70%.
• El Test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el Test en una hoja de lectura óptica. El código de asignatura es 621040 y el tipo A.
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado
en el que ha realizado la práctica.

Primera Parte: Test


1. ¿Cuántos Terabytes hay en un Gigabyte?
a. 1/2
b. 2
c. 1/1024
d. 1024.

2. ¿Qué es la memoria RAM?


a. Memoria permanente de acceso aleatorio.
b. Memoria de sólo lectura.
c. Memoria volátil de acceso directo.
d. Memoria donde se almacena la configuración de los componentes del ordenador.

3. ¿Cuál de las siguientes afirmaciones es falsa?


a. Programar con lenguajes de bajo nivel exige conocer la estructura del equipo.
b. Se llama lenguaje máquina al lenguaje ensamblador.
c. El lenguaje ensamblador es de bajo nivel.
d. Los lenguajes orientados a objetos son de alto nivel.

4. Supongamos que necesitamos hacer una compra de un billete de avión por Internet. ¿Qué proceso
sería el más adecuado para que se llevara a cabo la compra?
a. Proceso on-line.
b. Proceso en lotes.
c. Proceso en tiempo compartido.
d. Proceso en tiempo real.

5. Dado el siguiente programa, indicar qué resultado daría por pantalla:


for (int i=1;i<5;i++)
{
System.out.print(i);
if ((i + 1) = = 3)
continue;
if ( i = = 3)
break;
System.out.print(i+1);
}
a. 12234
b. 1223
c. 12233445
d. 122
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO / FEBRERO 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

6. ¿En qué punto comienza la ejecución de un programa en Java?


a. En un método estático cualquiera, que hay que definir previamente.
b. En el constructor de una de las clases.
c. En el método estático main.
d. En el método estático begin.

7. Sea la clase:

Persona persona1 = new Persona();


Persona persona2;
persona1.setNombre(”Pepe”);
persona2 = persona1;
System.out.print(persona1.getNombre());
System.out.print(persona2.getNombre());
persona2.setNombre(“Juan”);
System.out.print(persona1.getNombre());
System.out.print(persona2.getNombre());

Indicar lo que se imprimiría en pantalla:


a. PepePepePepePepe
b. PepePepePepeJuan
c. PepePepeJuanPepe
d. PepePepeJuanJuan

8. Dada una clase declarada con la palabra reservada extends, indicar de cuántas clases padre puede
heredar directamente:
a. De ninguna.
b. De una.
c. De menos de 5.
d. De todas las que se necesiten.

9. ¿Qué tipos de acceso puede tener el atributo de una clase?


a. public, private, protected, package
b. public, private, associated
c. public, private, protected
d. public, private, protected, associated

10. ¿Cómo se crea un objeto de la clase Calendar de Java?


a. Primero hay que programar el código de la clase adaptándolo al sistema horario local.
Después se usa new Calendar( );
b. El objeto se crea con new Calendar( );
c. El objeto se crea con Calendar.getInstance( );
d. Se crea con new Calendar( ); pero antes de usarlo es necesario ejecutar
Calendar.getInstance( );
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO / FEBRERO 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

Segunda Parte: Problema

Se desea diseñar un programa que tendrá que ser capaz de gestionar obras cinematográficas, literarias y
musicales, permitiendo la creación, modificación y acceso de las diferentes obras y sus autores, así como la
impresión por pantalla de sus datos más característicos. De todas las obras necesitamos saber su título, su
autor y año de edición. Además, en concreto, de los libros nos interesa su editorial y su número de páginas;
de los discos queremos saber la discográfica que lo edita y el número de canciones; y de las películas
interesan los intérpretes y la productora. Todos los autores de una obra, así como los intérpretes de una
película, se consideran artistas. De cada artista queremos saber su nombre y su año de nacimiento. Por
último, se desea poder imprimir en pantalla todos los datos de cada obra.

Se pide:

1. Dibujar un esquema con las clases necesarias para este programa, indicando los atributos y métodos que
tiene cada una (sólo indicarlos, sin escribir su código). El esquema debe reflejar gráficamente la herencia de
clases en caso de que la haya. (3,5 puntos)

2. Codificar la clase correspondiente a las películas. (3,5 puntos)

Supongamos a partir de ahora que estamos programando el método “main”, y que hemos creado los
siguientes objetos:

Clase Nombre objeto Datos


Artista gonzaloSuarez Nombre: “Gonzalo Suárez”; Año de nacimiento: 1954
Artista carmeloGomez Nombre: “Carmelo Gómez”; Año de nacimiento: 1962
Artista maribelVerdu Nombre: “Maribel Verdú”; Año de nacimiento: 1970
Libro ciudadanoSade Título: “Ciudadano Sade”; Autor: gonzaloSuarez; Año de producción: 1999;
Editorial: “Plaza&Janés”; Número de páginas: 256

3. Escribir el código necesario para crear el objeto correspondiente a la película "El portero" (Gonzalo
Suárez, 2000, Lola Films, interpretada por Carmelo Gómez y Maribel Verdú). (1,5 puntos)

4. Codificar en una sola línea exactamente la siguiente modificación: "la fecha de nacimiento del autor de la
película 'El Portero' es 1934". Si a continuación imprimimos por pantalla los datos del libro "Ciudadano
Sade", ¿qué fecha de nacimiento se imprimirá en pantalla para el autor? Razonar la respuesta. (1,5 puntos)
PROBLEMA DE LA PRIMERA SEMANA
Solución al apartado 1:

Obra Artista

private String titulo; private String nombre;


private Artista autor; private int añoNacimiento;
private int añoEdicion;
Artista(String, int)
String getTitulo()
int getAñoNacimiento()
void setTitulo(String)
void setAñoNacimiento(int)
Artista getAutor()
String getNombre()
void setAutor(Artista)
void setNombre(String)
int getAñoEdicion()
void setAñoEdicion(int)

Libro Disco Pelicula

private String editorial; private String discografica; private String productora;


private int nPaginas; private int nCanciones; private Artista[] interpretes;

Libro(String, Artista, int, Disco(String, Artista, int, Pelicula(String, Artista, int,


String, int) String, int) String, Artista[])
String getEditorial() String getDiscografica() Artista[] getInterpretes()
void setEditorial(String) void setDiscografica(String) void setInterpretes(Artista[])
int getNPaginas() int getNCanciones() String getProductora()
void setNPaginas(int) void setNCanciones(int) void setProductora(String)
void imprimir() void imprimir() void imprimir()

Solución al apartado 2:

public class Pelicula extends Obra {

private Artista[] interpretes;


private String productora;

public Pelicula(String titulo, Artista autor, int año,


String productora, Artista[] interpretes) {
this.setTitulo(titulo);
this.setAutor(autor);
this.setAñoProducción(año);
this.productora = productora;
this.interpretes = interpretes;
}

public void imprimir() {


System.out.print("OBRA: " + this.getTitulo() + "; AUTOR: " +
this.getAutor() + "; AÑO DE PRODUCCIÓN:" + this.getAñoProducción()
+ "; PRODUCTORA: " + this.productora + "; INTÉRPRETES:");
int i;
for (i=0; i<this.interpretes.length; i++ ) {
System.out.print(interpretes[i].toString());
}
System.out.println();
}
}
Esta solución es posible porque no hemos definido ningún constructor para la clase Obra, por lo que
sigue disponible su constructor por defecto. En otro caso habría que programar el constructor de la
siguiente forma:

public Pelicula(String titulo, Artista autor, int año,


String productora, Artista[] interpretes) {
super(titulo, autor, año);
this.productora = productora;
this.interpretes = interpretes;
}

Solución al apartado 3:

Artista[] interpretes_portero = new Artista[2];


interpretes_portero[0] = carmeloGomez;
interpretes_portero[1] = maribelVerdu;

Pelicula elPortero = new Pelicula("El portero", gonzaloSuarez ,


2000, "Lola Films", interpretes_portero);

Solución al apartado 4:

Si se han declarado los atributos “private” y se han definido para ellos métodos “get” y “set”
(opción más correcta):

elPortero.getAutor().setAñoNacimiento(1934);

En caso contrario:

elPortero.autor.añoNacimiento=1934;

Al imprimir datos del libro, la fecha de nacimiento del autor sería 1934, ya que la modificación
hecha con la línea anterior afecta permanentemente al objeto “gonzaloSuarez”.

Solución Text Sem. 1ª:


1)c 2)c 3)b 4)d 5)b 6)c 7)d 8)b 9)c 10)c
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

SEGUNDA SEMANA

• Para la nota del examen, el Test vale el 30% y el Problema vale el 70%.
• El Test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el Test en una hoja de lectura óptica. El código de asignatura es 621040 y el tipo A.
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado
en el que ha realizado la práctica.

Primera Parte: Test

1. Los buses de control, ¿qué función realizan?


a. Controlan qué instrucción se carga en la Unidad de Control para ser ejecutada.
b. Comunican los periféricos con el procesador (CPU).
c. Llevan los datos de la RAM al procesador.
d. Llevan los datos que han sido procesados por la CPU de la RAM al disco duro.

2. Indicar cuál de las siguientes afirmaciones sobre memoria es errónea:


a. Hay tres tipos de memoria temporal: RAM, caché y virtual.
b. La memoria ROM es permanente y su contenido no se pierde al apagar el ordenador.
c. El acceso a la memoria virtual es más rápido que el acceso a RAM.
d. Se suele llamar memoria principal a la combinación de ROM y RAM.

3. ¿Cuál es la característica fundamental que diferencia a un sistema operativo multitarea?


a. Permite que varios usuarios puedan trabajar simultáneamente.
b. Permite gestionar dos o más procesadores.
c. Permite que se ejecuten varios procesos a la vez.
d. Permite ejecutar procesos en tiempo real.

4. El administrador de memoria se encarga de:


a. Seleccionar el proceso que se va a ejecutar a continuación
b. Dejar en memoria principal alguno de los componentes del SO.
c. Asignar memoria a los diferentes procesos.
d. Procesa los programas que se encargan de las entradas y salidas relacionadas con los
periféricos.

5. ¿Qué diferencia fundamental existe entre vectores y arrays?


a. Los vectores no se tienen que declarar y los arrays sí.
b. Los vectores pueden redimensionar su tamaño mientras que los arrays no.
c. No hace falta crear instancias de vectores porque se encuentran en librerías predefinidas de
java, cosa que en los arrays sí ocurre.
d. Los vectores pueden tener varias dimensiones, es decir se puede crear un vector de vectores
(por ejemplo una matriz), mientras que en arrays no.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

6. ¿Qué ocurre cuando en un método se pasa un parámetro por valor?


a. Que los cambios que se producen sobre el parámetro dentro del método permanecen cuando
se termina su ejecución.
b. Que los cambios que se producen sobre el parámetro dentro del método no permanecen
cuando se termina su ejecución.
c. Que sea cual sea el tipo del parámetro se convierte en un valor entero.
d. Que la variable de salida debe ser del mismo tipo que el parámetro.

7. Un método de clase (static), ¿se podría llamar sin instanciarse un objeto de la clase?
a. No, siempre hay que declarar el objeto y luego llamar al método.
b. No, siempre hay que declarar el objeto, crearlo y a continuación llamar al método.
c. Sí, se podría llamar al método desde la misma clase.
d. Sí, se podría llamar al método pero sólo si la clase es abstracta.

8. ¿Cuándo se utilizaría la estructura de repetición do-while?


a. Cuando se desea ejecutar el bloque de código que está en esa estructura al menos una vez
aunque no se cumplan las condiciones.
b. Cuando se desea ejecutar el bloque de código sólo si se cumplen unas condiciones.
c. Cuando se desea ejecutar un bloque una vez al menos pero sólo si las condiciones se
cumplen.
d. Ninguna de las anteriores.

9. Si tenemos el siguiente programa:


public class Arit{
public int sumar2(int sum){
return sum + 2;
}
public String sumar2(String sum){
return sum + 2;
}
public static void main (String[] args){
Arit x = new Arit();
System.out.println(x.sumar2("2"));
}
}
¿Qué mostraría el siguiente código?
a. Un error de compilación por sobrecarga.
b. 4
c. “22”
d. Un error de ejecución por no poder sumar un tipo string con el literal 2.

10. En relación al enunciado de la práctica, indicar cuál de las siguientes cabeceras es la correcta:
a. class Camion extends Vehiculo { …
b. class Vehiculo extends Camion { …
c. class Vehiculo (extends Camion) { …
d. extended class Camion { …
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

Segunda Parte: Problema

Una empresa de telecomunicaciones nos encarga realizar la primera versión de un programa para gestionar
mensajes de texto en diferentes formatos: e-mail, SMS (mensajes cortos de telefonía móvil) y chat
(mensajería instantánea). Todos los mensajes, independientemente del formato, tienen un usuario emisor, un
usuario receptor y un texto de mensaje. Además, en particular, un e-mail tiene un Asunto (de tipo texto) y un
conjunto de usuarios a los que llegará copia del mensaje; un SMS tiene un número del centro servidor, y un
mensaje instantáneo tiene un protocolo de mensajería. De cada usuario podemos necesitar su nombre, su
dirección de correo electrónico, su número de teléfono móvil y su dirección IP. Los mensajes pueden
enviarse, y al hacerlo se escribe por pantalla el cuerpo del mensaje independientemente de su formato.

1. Dibujar un esquema con las clases necesarias para este programa, indicando los atributos y métodos
que tiene cada una (sólo indicarlos, sin escribir su código). No es necesario incluir métodos “get” y
“set”. El esquema debe reflejar gráficamente la herencia de clases en caso de que la haya. (3 puntos)

La empresa nos explica ahora que al enviar un SMS debe haber un comportamiento especial (el resto de
formatos de mensaje mantienen su comportamiento): si el usuario receptor no tiene móvil, debe imprimirse
un mensaje de error. Además, si el mensaje SMS ocupa más de 145 caracteres, antes de imprimirlo debemos
irlo reduciendo hasta que no sobrepase ese tamaño. La reducción se hace con el método “String
reduce(String cadena)”, programado por otra empresa e incluido en el “package” smstools. Cada vez que se
ejecuta este método, mediante un diccionario de abreviaturas se reduce levemente la longitud del texto.

2. Explicar, en relación al concepto de herencia, cuál sería la mejor solución para encajar en el diseño
anterior este comportamiento particular del método “enviar” para los SMS. Indicar una solución
alternativa sin utilizar herencia y comentar sus ventajas o inconvenientes. (3 puntos)

3. Codificar el constructor de la clase correspondiente a los SMS. La presencia o ausencia de


constructor en una clase padre, ¿afecta de alguna manera a la clase que hereda? (2 puntos)

4. Codificar el método que permite enviar mensajes SMS. (2 puntos)


PROBLEMA DE LA SEGUNDA SEMANA

Solución al Apartado 1:

Usuario Mensaje

private String nombre; private Usuario emisor;


private String email; private Usuario receptor;
private String movil; private String texto;
private String ip;
void enviar()
Usuario(String, String,
movil, ip)

Email Sms Chat

private String asunto;


private int servidor; private String cliente;
private Usuario[] receptores;

Email(Usuario, Usuario, Sms(Usuario, Usuario, Chat(Usuario, Usuario,


String, boolean, int) String, int) String, String)

Solución al Apartado 2:

Habría que reescribir el método “enviar” en la clase “Sms”, de forma que el método “enviar”
original permaneciera en la clase Mensaje. Así, cuando se imprima un email o un mensaje
instantáneo, se recurrirá al método heredado de la clase padre, pero cuando se imprima un SMS se
ejecutará el método redefinido.
La alternativa sin herencia sería eliminar el método “enviar” de la clase padre y escribirlo
individualmente para cada formato de mensaje. Sin embargo, esta solución es peor, porque implica
duplicar información al escribir un mismo código varias veces (en este caso dos, pero podrían ser
más), con la consiguiente dificultad para mantener la coherencia en caso de un cambio en el código.

Solución al Apartado 3:

Al crear un objeto de la clase que hereda, lo primero que se hace es llamar implícitamente al
constructor por defecto de la clase padre, por lo que no es necesario escribir código adicional:
public Sms(Usuario emisor, Usuario receptor, String texto,
boolean multimedia, int servidor) {
this.setEmisor(emisor);
this.setReceptor(receptor);
this.setTexto(texto);
this.servidor = servidor;
}

Sin embargo, si hemos definido un constructor con argumentos para la clase padre, el constructor
por defecto deja de estar accesible y por tanto es necesario llamar explícitamente al constructor de
la clase padre que hemos creado:
public Sms(Usuario emisor, Usuario receptor, String texto,
boolean multimedia, int servidor) {
super(emisor,receptor,texto);
this.servidor = servidor;
}
Solución al Apartado 4:

public void enviar() {


if (this.getReceptor().getMovil()== null) {
System.out.println("ERROR: El receptor carece de móvil.");
}
else {
while(this.getTexto().length()>145) {
this.setTexto(Smstools.reduce(this.getTexto()));
}
System.out.println(this.getTexto());
}
}

Solución Text Sem. 2ª:


1)b 2)c 3)c 4)c 5)b 6)b 7)c 8)a 9)c 10)a
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
SEPTIEMBRE 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

ORIGINAL

• Para la nota del examen, el Test vale el 30% y el Problema vale el 70%.
• El Test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el Test en una hoja de lectura óptica. El código de carrera es 62, el de la asignatura 104 y
examen es de tipo A.
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado
en el que ha realizado la práctica.

Primera Parte: Test

1. La placa madre
a. es siempre compatible con cualquier nuevo componente.
b. es independiente de la CPU.
c. está compuesta por las unidades de almacenamiento y los buses.
d. integra todos los componentes que colectivamente proporcionan la funcionalidad del equipo.

2. ¿Qué se imprime al ejecutarse el siguiente código?

int resultado = 0;
int suma = 1;
while (suma < 5)
resultado+= suma;
System.out.print (resultado);

a. 0
b. 5
c. 1234
d. No imprimiría nada

3. ¿Qué es la tecnología “”plug-and-play”?


a. Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que
funcione sólo sería necesario enchufar el dispositivo e instalar los drivers adecuados que
vienen con dicho dispositivo. La asignación del número de interrupción asociada al
dispositivo se hace de forma automática.
b. Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que
funcione sólo sería necesario enchufar el dispositivo ya que los drivers los detecta de forma
automática. La asignación del número de interrupción asociada al dispositivo se hace de
forma manual.
c. Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que
funcione sólo sería necesario enchufar el dispositivo ya que los drivers los detecta de forma
automática. La asignación del número de interrupción asociada al dispositivo se hace de
forma automática.
d. Un sistema que permite la instalación de nuevos dispositivos. Para que funcione se tendría
que enchufar el dispositivo además de instalar un conversor para que pueda trabajar de
analógico a digital.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
SEPTIEMBRE 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

4. Cual de estas afirmaciones es falsa:


a. Un array puede estar constituido por objetos de cualquier clase.
b. El valor inicial por defecto de un array es null.
c. Es posible redimensionar el tamaño de un array una vez instanciado.
d. Un array puede ser creado en la misma línea en la que se declara.

5. Una máquina virtual …


a. hace que un computador se comporte como si fuera otro distinto.
b. es un computador en la red.
c. es un compilador de alto nivel.
d. es un compilador de bajo nivel.

6. Sean “Mamífero” y “Gato” dos clases que mantienen una relación de herencia padre-hijo. ¿Qué
habría que modificar para que el siguiente código sea correcto y por qué?

Animal a; /*Línea 1*/


Gato b; /*Línea 2*/
a= new Animal(); /*Línea 3*/
b=a; /*Línea 4*/

a. Nada. Es correcto.
b. No se puede asignar un objeto a otro de otra clase, luego cambiamos la línea 2:
Animal b;
c. Es necesario explicitar el tipo cuando asignamos un objeto a otro objeto perteneciente a una
clase hija, luego cambiamos la línea 4: b = (Gato)a;
d. Es necesario explicitar el tipo y crear una nueva instancia cuando asignamos un objeto a otro
objeto perteneciente a una clase hija, luego cambiamos la línea 4:
b = new (Gato) a;

7. Un sistema operativo...
a. gestiona los recursos del sistema de forma eficiente.
b. es básicamente un compilador.
c. es un componente hardware.
d. convierte el procesador en multi-procesador.

8. Dada una clase alumno:

public class Alumno{


private int edad;
public int darEdad(){
return this.edad;
}
public Alumno(int edad){
this.edad=edad;
}
}
¿Cuál sería la forma correcta de acceder a la edad de un objeto “a” de tipo “Alumno” desde otra
clase?

a. int x=Alumno.edad;
b. int x= a.edad;
c. int x=Alumno.darEdad(a);
d. int x=a.darEdad();
9. En la práctica del Rent a Car, ¿qué opción sería mejor para representar un contrato?
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
SEPTIEMBRE 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

a. Se crearía la clase contrato definiendo como atributos los datos de éste y la composición de
las clases vehículo y cliente.
b. Se crearía la clase contrato definiendo como atributos los datos de éste y los atributos que se
necesiten del vehículo y el cliente.
c. Se crearía la clase contrato definiendo como atributos los datos de éste. En el programa main
se definirían las relaciones necesarias entre el objeto contrato y los objetos vehículo y
cliente.
d. No haría falta la clase contrato, dentro del programa principal se pueden crear variables que
almacenan las fechas del contrato y se relacionen con la creación de un objeto cliente y un
objeto coche por ejemplo.

10. Sea la clase A

class A {
void imprimir () {System.out.print(“3”);}
}

y la clase B que hereda de A.

class B extends A {

void imprimir () {super.imprimir();System.out.print(“5”);}

public static void main (String [] args) {


B varB = new B();
A varA = varB;
varA.imprimir();

}
}

¿Qué se imprimiría en pantalla?


a. 3
b. 5
c. 35
d. Hay un error de compilación ya que no se puede asignar un objeto de la clase hija a otro
objeto de la clase padre.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
SEPTIEMBRE 2005
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

Segunda Parte: Problema

Un controlador que regula la automatización de una lavadora cuenta con una serie de componentes que son:
una válvula, un tambor, un motor y una bomba. El motor se caracteriza por el tiempo de duración del ciclo,
que se expresa en segundos (por defecto es de 30), por el estado del motor: encendido o apagado, y por el
sentido del giro, que puede ser: a izquierdas o a derechas. La variable de sentido de giro determina el
movimiento del motor de la lavadora. El motor funciona mediante ciclos de lavado. Durante la primera mitad
del ciclo el motor se encuentra en sentido a izquierdas, y durante la segunda mitad del ciclo el motor se
encuentra en sentido a derechas. Al final del ciclo, el motor queda en reposo. Además, el tambor tiene un
estado que puede ser lleno o vacío. La válvula realiza la acción de dar agua al tambor y la bomba realizar la
función de sacar agua del tambor. El controlador también se caracteriza por tener un detector de nivel que
indica si el tambor está lleno o no.

Se pide:

1. Dibujar un esquema con las clases necesarias para describir el controlador, indicando los atributos y
métodos que tiene cada una (sólo indicarlos, sin escribir su código). (4 puntos)
2. Supongamos ahora que se quiere introducir en el controlador la funcionalidad programa de Lavado
en Frío. Este programa debería ejecutar los siguientes pasos:
a. La válvula permite el paso del agua al tambor.
b. Se comprueba que el tambor está lleno y se indica en el detector de nivel (mientras el tambor
permanece vacío no se indica en el detector de nivel)
c. El motor realiza 50 ciclos de lavado, asignando al motor 40 segundos de duración de ciclo.
d. La bomba vacía al tambor de agua.
e. Se comprueba que el tambor está vacío y se indica en el detector de nivel (mientras el
tambor permanece lleno no se indica en el detector de nivel)
Escribir el código de dicho método. (6 puntos)

Solución Text:
1)d 2)d 3)c 4)c 5)a 6)c 7)a 8)d 9)a 10)c
Solución al apartado 1:

Controlador Tambor
private boolean detectorNivel private String estado;
private Motor motor;
String getEstado()
private Tambor tambor; void setEstado(String)
private Bomba bomba;
private Valvula valvula;
boolean getDetectorNivel() Valvula
void setDetectorNivel(boolean)
Motor getMotor()
void setMotor(Motor) void llenarTambor(Tambor)
Tambor getTambor()
void setTambor(Tambor)
Bomba getBomba()
void setBomba(Bomba) Motor
Valvula getValvula() private String sentGiro;
void setValvula(Valvula)
private Boolean estado;
private int segundos;
String getSentGiro()
void setSentGiro(String)
Bomba Boolean getEstado()
void setEstado(Boolean)
int getSegundos()
void vaciarTambor(Tambor) void setSegundos(int)
void setGiro(String)
void realizarCiclo()

Nota: En esta solución hemos dejado el constructor por defecto por lo que no aparece en el
diseño anterior.

Solución al apartado 2:

public void lavado_en_frio (){


// 1. Llenar el tambor de agua mediante la válvula
valvula.llenarTambor(tambor);
// 2. Detectar que el tambor esté lleno indicándolo en el detector de nivel.
while (tambor.getEstado().equals("vacio"))
System.out.println("Todavía no se ha llenado el tambor");
detectorNivel = true;
// 3. Hacer que el motor realice 50 ciclos asignando al motor 40 seg. por cada sentido del giro.
motor.setSegundos(40);
for (int nCiclos = 0; nCiclos < 50; nCiclos++)
motor.realizarCiclo();
// 4. Vaciar el tambor de agua mediante la bomba.
bomba.vaciarTambor(tambor);
// 5. Detectar que el tambor esté vacío indicándoselo en el detector de nivel.
while (tambor.getEstado().equals("lleno"))
System.out.println("Todavía no se ha vaciado el tambor");
detectorNivel = false;
}
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUS1RIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PRIMERA SEMANA

o Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
El test
• Responda el test en una hoja de lectura óptica. El código de carrera es 62, el de la asignatura 104 y
examen es de tipo A.
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado
en el que ha realizado la práctica.

Primera Parte: Test


l. ¿Qué resultado sacaría por pantalla este código?

public class A
{
protected int nurneroA;
public void setNurneroA(int nurn){ nurneroA nurn;}
=

public int suma(int num){return numeroA+num; }


}
public class B extends A
{
private int nurneroB;
public void setNurneroB(int nurn){ nurneroB nurn;}
=

public int suma(int num){return numeroB+numeroA+num;}


public static void main (String [] args)
{
B objB new BO;

objB.setNumeroA(IO);
objB.setNumeroB(S);
A objA objB;

System.out.println(objA.suma(3));
}
}
a. 10
h. Error de compilación, no se pueden realizar asignaciones con distinto tipo.
c. 18
d. 13

2. ¿Qué es necesano si queremos utilizar el método de una clase predefinida como por ejemplo
Integer. parselnt("String"); ?
a. Solamente se crea una instancia de la clase predefinida. En este caso: Integer integ � new
Integer(); integ. parselnt("String");
h. No es necesario importar la clase en cuestión ni crear una instancia de la clase predefinida.
c. Importar la clase en cuestión. En este caso: import java.lang.Integer; y crear una instancia
de la clase predefinida. En este caso: Integer integ � new Integer(); integ. parselnt("String");
d. Solamente se importa la clase en cuestión. En este caso: import java.lang.Integer;
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUS1RIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

3. ¿Cómo están formados los viajes en la parte dos de la práctica?


a. Están formados por: vuelo + alojamiento.
b. Están formados por: vuelo + apartamento.
c. Están formados por: vuelo + hotel.
d. Están formados por: vuelo + hotel + apartamento.

4. ¿Qué tareas no realiza la CPU (Unidad central de proceso)?


a. El control de la frecuencia de operación.
b. La interacción con otros microprocesadores y datos.
c. La coordinación de la operación del computador.
d. La realización de operaciones aritméticas y lógicas.

5. Supongamos que nos hemos ido de viaje y hemos grabado éste con una cámara de video. ¿Qué
puerto utilizaríamos para pasar la grabación de la cámara al PC en el menor tiempo?
a. El puerto paralelo.
b. El puerto FireWire.
c. El puerto USB.
d. El puerto serie.

6. El método "main":
a. es llamado por el intérprete de java cuando ejecutarnos un programa.
b. es llamado por todos los métodos contenidos en una clase.
c. define los atributos de una clase.
d. define las subclases de una clase.

7. ¿En que se diferencia los ensambladores de los compiladores?


a. Los ensambladores traducen lenguaje del tipo java y los compiladores de alto nivel.
b. No hay ninguna diferencia, los dos traducen lenguajes de alto nivel.
c. Los ensambladores traducen lenguaje de alto nivel y los compiladores de bajo nivel.
d. Los ensambladores traducen lenguaje de bajo nivel y los compiladores de alto nivel.

8. ¿Cuánto es el valor que sale por pantalla tras la ejecución de este código?
int j �O;
switch (j)
{
case 0: j+=2;
case 1: j++;
case 2: j+�2;
case 3: j++;
default:j--;
}
Systern. out. println(j);
a. 2
b. 1
c. 5
d. 3
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUS1RIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

9. El sistema operativo:
a. contiene a los componentes hardware.
b. repara los componentes hardware.
c. es siempre un componente hardware
d. gestiona los componentes hardware

10. Sea "el" una clase con 6 atributos, y sea "c2" otra clase con 3 atributos, 3 de los atributos de "el"
son los de la clase "c2". Tienen los mismos métodos aunque algunos se comportan de forma
diferente. ¿Qué relación de herencia es la correcta y por qué?

a. No se puede establecer herencia dado que los mismos métodos se comportan de manera
diferente.
b. No se puede establecer herencia dado que los atributos no son exactamente los mismos.
c. "c2" es hija de "el" dado que todos sus atributos están incluidos en "c2".
d. "el" es hija de "c2" dado que incluye sus atributos y añade nuevos.

Segunda Parte: Problema

La librería "Libro Nuevo" ha decidido gestionar las ventas de sus libros, revistas y cómic. Las ventas
pueden ser de varias obras a la vez, ya sean libros, revistas o cómic. Cada obra se caracteriza por tener en
común el identificador, el nombre, el nombre del autor (supongamos que sólo hay un autor), la editorial, el
año de edición y el precio. Las revistas a su vez tienen el número de serie. Los cómic también tienen el
nombre del dibujante. Además cada obra dispone del IVA que se tiene que aplicar. Éste será siempre el
mismo en función del tipo de obra: las revistas el 7%, los libros el 3% y los cómic el 10%. También se
podrá realizar el cálculo del precio final sumando al precio de la obra el IVA correspondiente.
Se pide:

l. Dibujar un esquema con las clases necesarias para este programa, indicando los atributos y métodos
en caso de haberlos (sólo indicarlos, sin escribir su código). (4 puntos)
2. Implementar la clase Venta. ¿Qué estructura sería la más adecuada para poder almacenar todos las
obras que se venden? (3 puntos)
3. Suponiendo que la clase venta tiene un método que sea importe de la venta. Implementar dicho
método para que calcule el coste total de la venta. (3 puntos)
Solución Primera Semana Feb 2006
Solución apartado 1
Venta Obra (Abstract)
private Vector obras_vendidas = new Vector(); private int id;
private String nombre;
public Venta () private String autor;
public Venta (Vector obras_vendidas) private String editorial;
public void addObra(Obra obra) private int añoEdiccion;
public double importeVenta() private double precio;

public Obra(int id, String nombre,


String autor, String editorial, int
añoEdiccion, double precio)
public abstract double
calcularImporte()

Comic Revista Libro


private String nDibujante; private int numSerie; private static final double iva = 3;
private static final double iva = 10; private static final double iva = 7;
public Libro(int id, String nombre,
public Obra(int id, String nombre, public Revista(int id, String String autor, String editorial, int
String autor, String editorial, int nombre, String autor, String añoEdiccion, double precio)
añoEdiccion, double precio, editorial, int añoEdiccion, double public double calcularImporte()
String nDibujante) precio, int numSerie)
public double calcularImporte() public double calcularImporte()

No se han puesto en el esquema pero también serían necesarios los métodos get y set de cada atributo en cada clase.

Solución apartados 2 y 3.

import java.util.Vector;
public class Venta
{
private Vector obras_vendidas = new Vector();

public Venta (){}


public Venta (Vector obras_vendidas)
{this.obras_vendidas = obras_vendidas;}

public void addObra(Obra obra)


{obras_vendidas.addElement(obra);}

public Vector getObras_vendidas()


{return obras_vendidas;}

public void setObras_vendidas(Vector obras_vendidas)


{this.obras_vendidas = obras_vendidas;}

public double importeVenta()


{
double costeTotal = 0;
Obra ob;
for(int i=0; i < obras_vendidas.size();i++)
{
ob = (Obra)obras_vendidas.elementAt(i);
costeTotal += ob.calcularImporte();
}
return costeTotal;
}
}
La estructura más adecuada sería la del Vector ya que no se sabe a priori las ventas que
se van a realizar.

Solución Text Sem. 1ª:


1)c 2)b 3)a 4)a 5)b 6)a 7)d 8)c 9)d 10)d
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUS1RIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

SEGUNDA SEMANA

o Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. El código de carrera es 62, el de la asignatura 104 y
examen es de tipo A.
o Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado
en el que ha realizado la práctica.

Primera Parte: Test

l. Suponiendo que "Persona" y "Alumno" son dos clases que mantienen una relación de herencia
("alumno" hereda de "Persona"). y que la clase "Alumno" dispone de un método "imprime" (la clase
"Persona" no) ¿ Cuál es el error de compilación que presenta este código y por qué?

Alumno a=new Alumno(); /*Linea 1*/


Persona p=a; /*Linea 2*/
p. imprime (); /*Linea 3*/

a. Error en la línea 2, dado que el objeto "a" no puede ser asignado a la referencia "p" de la
clase "Persona".
b. Error en la línea 3, dado que la "p" es una referencia de Persona, que no dispone de un
método "imprime".
c. No hay ningún error
d. Error en la línea 2 dado que el objeto "p" debe de instanciarse antes de serie asignado el
objeto "a".

2. A la hora de desarrollar una aplicación ¿ cuál es la diferencia entre lenguajes procedirnentales y


declarativos?
a. Los declarativos son un sinónimo de los lenguajes procedirnentales.
b. Los lenguajes declarativos sirven para declarar las variables y los procedirnentales sirven
para especificar las estructuras de los programas.
c. Los declarativos especifican que hacer, mientras que los procedirnentales especifican corno
hacerlo.
d. Los procedimentales especifican que hacer, mientras que los declarativos especifican como
hacerlo.

3. Los discos duros de un computador forman parte de:


a. la memoria RAlvl
b. las unidades de almacenamiento permanente.
c. las unidades de almacenamiento temporal.
d. la memoria cache.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUS1RIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

4. ¿Qué aparecería en pantalla tras ejecutar el siguiente programa?

class Ejemplo {
String s;
public void imprime(String s) {
System.out.println(s);
System.out.println(this.s);

public static void main(String []args) {


Ejemplo e= new Ejemplo();
e.s="P";
e.imprime("Q");

a. P yP
b. P yQ
c. Q yP
d. Q yQ

5. En relación a los atributos y métodos definidos corno públicos...


a. pueden ser accedidos desde otra clase, pero del mismo paquete.
b. solo los métodos pueden ser accedidos desde cualquier otra clase.
c. solo pueden ser accedidos desde otro paquete los métodos, no los atributos.
d. ambos pueden ser accedidos desde otro paquete.

6. Los componentes hardware incluyen, entre otros. . .


a. unidad central de procesamiento, y monitor.
b. procesador central y compilador.
c. unidad central de procesamiento, periféricos y sistema operativo
d. periféricos, procesador central y procesador de textos

7. ¿Qué código nunca podría generar dos objetos de la misma clase con los mismos valores?:
a. Triangulo objCir l � new Triangulo(5,8);
Triangulo objCir2 � new Triangulo (objCirl);
b. Triangulo objCir l � new Triangulo(5,8);
Triangulo objCir2 � objCir l;
c. Triangulo objCir l � new Triangulo(5,8);
Triangulo objCir2 � new Triangulo (5,8);
d. Triangulo objCir l � new Triangulo(5);
Triangulo objCir2 � new Triangulo (5);

8. El ciclo de vida del software . . .


a. termina cuando el software desarrollado es usado.
b. incluye desarrollo y mantenimiento del sistema software.
c. depende básicamente de la durabilidad de los componentes hardware.
d. comienza cuando el software desarrollado es usado.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUS1RIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA)
ENERO/FEBRERO 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

9. ¿Qué relación de herencia aparece en la práctica?


a. Apartamento hereda de Alojamiento.
b. Viaje hereda de Tour.
c. Vuelo hereda de Transporte.
d. Apartamento hereda de Hotel.

10. Cuál de las siguientes inicializaciones para un array es la correcta?


a. Array nombreArray3 � new int[20];
b. int [] nombreArray4 � new int[20];
c. int [] nombreArrayl � new Array(20);
d. Array nombreArray2 � new Array(20);

Segunda Parte: Problema

Una planta de tratamiento de piedras dispone de un conjunto de máquinas, siendo éstas de dos tipos:
cortadoras y pulidoras. Una piedra se caracteriza por su nombre y su resistencia. Cada maquina tiene un
identificador y un límite máximo de resistencia de la piedra que aceptan. Las cortadoras en particular
tienen además un mínimo de resistencia de la piedra para que ésta no se deshaga.

Con el objetivo de controlar la usabilidad de las máquinas de la planta, se desea disponer de un sistema
que, ante una piedra, pueda mostrar la lista de identificadores de máquinas de la planta, indicando si
acepta o no el tratamiento de dicha piedra.

Se pide

l. Realizar un esquema indicando las clases y relaciones necesarias para la implementación del
sistema. Indicar también los atributos y métodos necesarios. ( 4 puntos)
2. Implementar la clase que gestione la lista de máquinas ("planta") y el método que muestra la
lista mencionada en el enunciado. (3 puntos)
3. Sobre el sistema diseñado, generar el código que permita:
1. Crear una piedra de resistencia 5 y una nueva máquina pulidora con resistencia
máxima de piedra 4. (1 punto)
u. Crear un objeto tipo "Planta" y añadirle dicha máquina.
(1 punto)
111. Comprobar si dicha máquina acepta la piedra creada en 1. ( 1 punto)
PROBLEMA

Una planta de tratamiento de piedras dispone de un conjunto de máquinas, siendo


éstas de dos tipos: cortadoras y pulidoras. Un tipo de piedra se caracteriza por su
nombre y su resistencia. Cada maquina se caracteriza por su identificador. Por otro
lado, todas las máquinas se caracterizan por un límite máximo de resistencia de la
piedra que aceptan. Las cortadoras en particular requieren además un mínimo de
resistencia de la piedra para que esta no se deshaga.

Con el objetivo de controlar la usabilidad de las máquinas de la planta, se desea


disponer de un sistema que, ante un tipo de piedra, pueda mostrar la lista de
identificadores de máquinas de la planta, y para cada identificador, si acepta o no
dicho tipo de piedra.

Se pide

1. Realizar un esquema indicando las clases y relaciones necesarias para la


implementación del sistema. Indicar también los atributos y métodos
necesarios y sus tipos. (4 puntos)
2. Implementar la clase que gestione la lista de máquinas (“planta”) y el
método que muestra la lista. (3 puntos)
3. Sobre el sistema diseñado, generar el código que permita:
i. Crear un nuevo tipo de piedra de resistencia 5 y una nueva
máquina pulidora con resistencia máxima de piedra 4. (1 punto)
ii. Crear Crear un objeto tipo “Planta” y añadirle dicha máquina.
(1 punto)
iii. Comprobar si la máquina acepta la piedra. (1 punto)

Requisitos de diseño del ejercicio


1. El diseño de las clases es independiente de criterios de eficiencia.
2. El objetivo del sistema es concreto: controlar la usabilidad de las máquinas.
3. No hay ambigüedad en cuanto a modelos posibles.

Objetivos del ejercicio:

1. El alumno debe identificar la jerarquía de herencia dada por los tipos de máquina, con
peso_máximo y resistencia_máxima como atributos comunes, y resistencia_mínima como
atributo particular de las pulidoras.
2. El alumno debe definir una clase “planta” con un vector de ”máquinas”, no de ”pulidoras” ni
“cortadoras”, dado que para el control de la usabilidad sólo interesan los identificadores de
máquinas.
3. El alumno debe introducir un método “admitePiedra” en la superclase máquina y en la
subclase “pulidora”. Este método no puede estar en la clase “planta” porque la relación de
herencia no le da acceso al atributo “resistencia mínima” de la subclase “pulidora”. En la
superclase ”máquina” si es necesario dado que a este método se accede desde la clase
“planta”. En la subclase “pulidora” es tambien necesario dado que el método ha de
considerar un atributo propio de la subclase.
(Una opción alternativa es definir un método “admitePeso” solo en la superclase, y un método
“admiteResistencia” en ambas clases).
4. El alumno debe saber implementar un recorrido simple sobre los elementos de un vector.
Piedra
private String nombre;
Planta private int resistencia;
private Vector maquinas;
public void Piedra(String, int)
public void setResistencia(int)
public void mostrarLista()
public int getResistencia()
public void añadirMaquina(maquina)
public void setNombre(String)
public String getNombre()

Maquina

private String id;


private int resistenciaMax;

public void maquina(id,int)


public String getId()
public void setId(String)
public int getResistenciaMax()
public void setResistenciaMax(int)
public boolean aceptaPiedra(Piedra)

Cortadora
private int resistenciaMin;

public void Cortadora(id,int,int)


public int getResistenciaMin()
public void setResistenciaMin(int)
public boolean aceptaPiedra(Piedra)

Nota: La clase Maquina y Pulidora tendrían los mismos atributos y métodos. Al no


diferenciarse se podría decir que una pulidora es una máquina, no siendo necesario crear
una clase Pulidora.
IMPLEMENTACIÓN DE LA CLASE PLANTA
Import java.util.Vector;

public class Planta{


private Vector maquinas;

public void añadirMaquina(Maquina maquina){


this.maquinas.add(maquina);
}

public void mostarLista(Piedra p){


Maquina maquina;
for (int i=0;i < maquinas.length();i++)
{
maquina = (Maquina) maquinas.elementAt(i);
if (maquina.aceptaPiedra(p))
{
System.out.println” MAQUINA”+ maquina.getId()+” SI”;
}
else
{
System.out.println” MAQUINA”+maquina.getId()+” NO”;
}
}
}

LLAMADAS A MÉTODOS
/* DEFINICIÓN DE VARIABLES*/
Piedra piedra;
Maquina pulidora;
Planta planta;
boolean acepta;

/*INSTANCIACION DE VARIABLES*/
piedra=new Piedra(”marmol”,5);
pulidora=new Maquina(“m1”,”4”);
planta=new Planta();
planta.añadirMaquina(pulidora);
if (pulidora.aceptaPiedra(piedra))
System.out.prinln(“La piedra es aceptada”);
else
System.out.prinln(“La piedra no es aceptada”);

Solución Text Sem. 2ª:


1)b 2)c 3)b 4)c 5)d 6)a 7)b 8)b 9)a 10)b
SEPTIEMBRE 2006 ORIGINAL

NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

TIPO A

o Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
El test
o Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera,
el de la asignatura y el tipo de examen.
o Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado
en el que ha realizado la práctica.
• Rellene sus datos en esta boja y entréguela junto a la de lectura óptica.

Apellidos......... ... ... ... ... ...... ......... ......... ......... ... .....Nombre......... ... ... ... ........DNI... ............
Primera Parte: Test
l. La memoria ROM es:

a. Una memoria de acceso temporal, la cual no se puede borrar.


h. Una memoria de acceso temporal, la cual se puede borrar.
c. Una memoria de acceso permanente, la cual no se puede borrar.
d. Una memoria de acceso permanente, la cual se puede borrar.

2. ¿Cómo se mide la velocidad de un equipo?

a. Mediante las vibraciones del reloj de la placa madre.


b. Contabilizando el tiempo que se tarda en abrir el windows.
c. Mediante laBIOS.
d. Contabilizando el número de programas que se puede ejecutar en paralelo.

3. ¿Qué tipo de entorno operativo se relacionaría en mayor medida con el uso por parte del cliente de
un cajero automático?

a. Proceso en lotes.
h. Proceso en tiempo compartido.
c. Proceso interactivo.
d. Proceso de memorandum.

4. ¿Qué desventaja tiene el programar a nivel máquina frente a bajo y alto nivel?

a. La velocidad de ejecución de los programas.


b. El aprovechamiento de las capacidades del sistema.
c. El control del hardware.
d. La complejidad del proceso de programación.

5. Dentro del diseño de la práctica de este año, que clase se podría considerar abstracta:
a. La clase Viaje ya que tiene una composición de Vuelos y Alojamientos.
b. La clase Alojamiento ya que no se van a alquilar Alojamientos sino Hoteles o
Apartamentos.
c. La clase Vuelo ya que no hereda de ninguna clase padre.
d. La clase Hotel ya que hereda de la clase Alojamiento.

6. ¿Cuál de las estructuras se puede equipar al siguiente código?


for (int i�!;i<�S;i++)
{
if (i%2��o) System.out.println("Es par "+ i);
else Systern.out.println("Es impar "+ i);
i++ ;
}
a. mt1= 1;
while (i <� 5)
{
SEPTIEMBRE 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL
if (i%2��o) System.out.println("Es par "+ i);
else Systern.out.println("Es impar "+ i);
i++;
}
b. int i=l;
do
{
if (i%2��o) System.out.println("Es par "+ i);
else Systern.out.println("Es impar "+ i);
i++;
}while (i <� 5);
c. int i= 1;
while (i <� 5)
{
if (i%2==0) Systern.out.println("Es par "+ i);
else Systern.out.println("Es impar "+ i);
i++;i++;
}
d. int i�O;
while (i <� 5)
{
if (i%2��o) System.out.println("Es par "+ i);
else Systern.out.println("Es impar "+ i);
i++;

7. Si crearnos un objeto sin parámetros con la sentencia: A objA � new A();siendo la clase A la
siguiente:
public class A
{
intnA;
public A(int nA){this nA� nA;}
}
¿Qué pasaría a contmuación?
a. Se crearía un objeto objA ya que se llamaría al constructor por defecto de la clase A
b. Se crearía un objeto objA aunque al no tener parámetros se pasaría un valor nulo al
constructor public A(int nA){this.nA �nA;}
c. Daría un error de compilación debido a que si se declara un constructor en una clase el
constructor por defecto deja de ser accesible.
d. Daría un error de compilación por poner la palabra reservada new delante de la
expresión A().

8. Un equipo consta de un número de personas no determinado a pnon. ¿Cuál es el modo más


apropiado de representar este hecho en un programa?
a. Mediante un atributo en la clase "equipo" que referencia a "persona".
b. Mediante un array en la clase "equipo" cuyos elementos referencian a "persona".
c. Mediante un vector en la clase "equipo" cuyos elementos referencian a "persona".
d. Mediante un atributo en la clase "persona" que referencia a "equipo".

9. ¿Puede accederse al valor de un atributo de acceso privado ("private") desde una clase distinta?
a. No, dado que es un atributo de acceso privado.
b. Sí, si hay un método también privado que devuelva el valor del atributo.
c. Sí, si hay un método definido corno público que devuelva el valor del atributo.
d. Sí, si el valor se asigna en el constructor de la clase.
SEPTIEMBRE 2006
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

10. Sea una relación de herencia de "mamífero" con "perro" y "gato". ¿Cuál es el modo más apropiado
de definir un valor por defecto "vivíparo" en el atributo "forma de reproducción" de la clase
"mamífero"?

a. definiendo el atributo en la clase "mamífero" como constante.


b. definiendo el atributo en las subclases "perro" y "gato" corno constante.
c. asignando "vivíparo" en la definición del atributo de la clase "mamífero".
d. asignando "vivíparo" en la definición del atributo de las subclases "perro" y "gato".

Segunda Parte: Problema

Se necesita una aplicación informática para la venta de entradas en un rnulti-cine. Cada seswn se
caracteriza por la película proyectada, la sala en la que se proyecta, el día y la hora de comienzo de la
película, y el número de entradas vendidas. Todas las salas tienen el mismo número de asientos numerados
del uno al cien. Una sesión puede ser numerada o no. Si la sesión es numerada es necesario recordar qué
asientos han sido vendidos. Si es no numerada basta con llevar el recuento de entradas vendidas.

La funcionalidad del sistema debe incluir:

l. Un método "sugerir_asiento" para sesiones numeradas que proponga el primer asiento no


vendido (según su numeración). Si la sala está completa el método debe imprimir "sala
completa".
2. Un método "comprar_entrada" que, para sesiones no numeradas incremente el número de
asientos vendidos. Si no quedan asientos libres el método debe imprimir "sala completa".
Para sesiones numeradas el método recibe como entrada un número de asiento. Si el asiento
está libre lo vende. Si está vendido imprime "asiento vendido".

Se pide:

l. Dibujar un esquema con las clases necesarias para este programa, indicando y comentando
brevemente los atributos, métodos y relaciones entre clases (sólo indicarlos, sin escribir código).
Puntuación: 4 puntos
2. ¿Qué estructura sería la más adecuada para poder almacenar qué asientos han sido vendidos? ¿Por
qué? Puntuación: 1 punto
3. Implementar el/los métodos "comprar entrada" e indicar su localización en las clases. Puntuación: 3
puntos
4. Escribir el código necesario para (Puntuación: 2 puntos):
a. Crear una sesión numerada de la película "ET" el día 5 a las 18 horas en la sala l .
b. Crear una sesión no numerada de la película "V" el día 5 a las 20 horas en la sala 2.
c. Comprar 2 entradas con asientos 2 y 5 en la sesión numerada de la película "ET" del día 5
a las 18 horas en la sala l .
d. Pedir al sistema que sugiera un asiento para la sesión numerada. ¿Cuál sería la respuesta del
sistema?

Solución tipo A:
1)C 2)A 3)C 4)D 5)B 6)C 7)C 8)C 9)C 10)C
FUNDAMENTOS DE LA INFORMÁTICA

SOLUCIÓN AL EJERCICIO DE EXAMEN DE SEPTIEMBRE 2006

Se necesita una aplicación informática para la venta de entradas en un multi-cine.


Cada sesión se caracteriza por la película proyectada, la sala en la que se proyecta,
el día y la hora de comienzo de la película, y el número de entradas vendidas.
Todas las salas tienen el mismo número de asientos numerados del uno al cien.
Una sesión puede ser numerada o no. Si la sesión es numerada es necesario
recordar qué asientos han sido vendidos. Si es no numerada basta con llevar el
recuento de entradas vendidas.

La funcionalidad del sistema debe incluir:

1. Un método “sugerir_asiento” para sesiones numeradas que proponga


el primer asiento no vendido (según su numeración). Si la sala está
completa el método debe imprimir “sala completa”.
2. Un método “comprar_entrada” que, para sesiones no numeradas
incremente el número de asientos vendidos. Si no quedan asientos
libres el método debe imprimir “sala completa”. Para sesiones
numeradas el método recibe como entrada un número de asiento. Si el
asiento está libre lo vende. Si está vendido imprime “asiento vendido”.

Se pide:

1. Dibujar un esquema con las clases necesarias para este programa,


indicando y comentando brevemente los atributos, métodos y relaciones
entre clases (sólo indicarlos, sin escribir código) (3 puntos)

Comentarios al esquema:

- Las sesiones numeradas y no numeradas se comportan de manera distinta


(distintos métodos y atributos), luego deberían ser dos clases distintas.
- Ambas clases comparten algunos atributos, luego definimos una clase padre
sesión.
- Solo existen sesiones numeradas o no numeradas, por lo que la clase padre
sesión es abstracta. Además, esta clase padre no tiene constructor.
- Las sesiones numeradas necesitan una estructura de almacenamiento, mientras
que en las sesiones no numeradas basta con un contador de entradas vendidas,
por lo que el recuento de asientos no en un atributo común en ambas clases.
- El método comprar entrada posee argumentos de entrada distintos en cada
subclase, por lo que se trata en realidad de métodos distintos aunque se llamen
de la misma forma y no pueden definirse en la clase padre.
public abstract class Sesión

private String película;


private int sala;
private int dia;
private int hora

public SesionNumerada(String película,


int sala, int dia, int hora)

public class SesiónNumerada public class SesiónNoNumerada


private boolean[] asientosVendidos private int numEntradasVendidas;

public SesionNumerada(String película, public SesionNoNumerada(String


int sala, int dia, película, int sala, int dia, int hora)
int hora)
public int sugerirAsiento(); public void comprarEntrada();
public void comprarEntrada(int);

2. ¿Qué estructura sería la más adecuada para poder almacenar qué asientos
han sido reservados? ¿Por qué? (1 punto)

La estructura de datos más adecuada sería un ARRAY, dado que el número de asientos
máximo es conocido y no mucho mayor que el número de asientos que se ocuparán.
2. Implementar el/los métodos “comprar entrada” e indicar su localización en
las clases. (3 puntos)

En la clase SesiónNoNumerada tendríamos

public void comprarEntrada(){


if (this.NumEntradasVendidas>=100){
System.out.println(“Sala Completa”);
}else{
this.NumEntradasVendidas+=1;
}
}

En la clase SesiónNumerada:

public void comprarEntrada(int numAsiento){


if (numAsiento>100){
System.out.println(“Solo se dispone de 100 asientos”);
}else{
if (this.asientosVendidos[numAsiento]){
System.out.println(“Asiento Ocupado”);
}else{
this.asientosVendidos[numAsiento]=true;
}
}
}

3. Escribir el código necesario para:


a. Crear una sesión numerada de la película “ET” el día 5 a las 18
horas.
SesionNumerada sesion1=new SesionNumerada( “ET”,1,5,18)

b. Crear una sesión no numerada de la película “COMANDO” el día 5


a las 20 horas.
SesionNumerada sesion2=
new SesionNoNumerada( “COMANDO”,1,5,20)

c. Comprar 2 entradas con asientos 1 y 5 en la sesión numerada.


sesion1.comprarEntrada(1);
sesion1.comprarEntrada(2);

d. Pedir al sistema que sugiera un asiento para la sesión numerada.


¿Cuál sería la respuesta del sistema?
sesion1.sugerirAsiento();

Devolvería el asiento 2.
SEPTIEMBRE 2006 Reserva
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

RESERVA TIPO A

o Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
El test
o Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera,
el de la asignatura y el tipo de examen.
o Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado
en el que ha realizado la práctica.
• Rellene sus datos en esta boja y entréguela junto a la de lectura óptica.

Apellidos......... ... ... ... ... ...... ......... ......... ......... ... ..... Nombre......... ... ... ... ........DNI... ............
Primera Parte: Test
l. La memoria caché:
a. permite acceder con más rapidez a datos a los que se accede con frecuencia.
b. permite acceder con más rapidez a datos a los que se accede con poca frecuencia.
c. evita la pérdida de datos.
d. aumenta la cantidad de memoria disponible.

2. ¿Cuál es la ventaja de conectar periféricos mediante "plug-and-play"?


a. El índice de transferencia de datos es mayor.
h. No es necesario asignar manualmente el "driver" adecuado.
c. La conexión es más segura.
d. Usan el puerto USB.

3. Los lenguajes de alto nivel:


a. no requieren compilador.
b. permiten producir programas que se ejecutan con mayor rapidez.
c. facilitan el proceso de programación.
d. facilitan la fase de análisis del problema.

4. El "freeware" y "shareware" son:


a. arquitecturas software.
b. tipos de copyright en software.
c. paradigmas de programación.
d. protocolos de comunicación en red.

5. Suponiendo que cualquier "medio de transporte" pertenece necesariamente a alguna subclase


("autobús","tren", "barco"), ¿qué opción sería la más apropiada para representar este hecho?:
a. definir cada subclase como "private".
b. definir únicamente las tres superclases.
c. definir "medio de transporte" como una clase abstracta.
d. definir todos los atributos comunes en cada subclase.

6. Suponiendo que, en una estructura de herencia, cada subclase de la clase abstracta "figura" tiene
su propio método "calcula_area", y dado un objeto "f' declarado como "figura" ¿cómo tendrían
que estar declarados los métodos para poder ejecutar "f. calcula_area()"?
a. "calcula area" sólo en las subclases.
b. "calcula_area" en "figura" y en sus subclases.
c. "calcula_area" en "figura" y no en sus subclases.
d. no puede ser ejecutado de ninguna manera.

7. En la práctica de este año ¿cómo tendría que estar definido el método "calcular_precio"?
a. sólo en las subclases "hotel" y "apartamento".
h. en la superclase "alojamiento" y en las subclases "hotel" y "apartamento".
c. sólo en la superclase "alojamiento".
d. sólo en una de las subclases "hotel" o "apartamento".
SEPTIEMBRE 2006 Reserva
NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL
8. Dado el siguiente código que saldría por pantalla:

int[] arrayEnteros {1,2,3,5,6,7,8,9,10};


int i 9;

System.out.println(arrayEnteros[i]);
a. 9
b. 10
c. Saldría un error en compilación porque falta el número 4.
d. Saldría un error en ejecución debido a que la posición 9 está fuera del array.

9. ¿Cuándo se utiliza la composición?


a. Cuando una clase tiene una relación '"'es-un" con otra u otras clases.
b. Cuando una clase tiene una relación "tiene-un" con otra u otras clases.
c. Cuando una clase tiene una relación "asigna-a" con otra u otras clases.
d. La composición es un concepto que no existe en la programación orientada a objetos y en
concreto en la programación en java.

10. Dentro de la estructura de manejo de excepciones (try-catch-finally), ¿cuándo se ejecutan las


sentencias introducidas dentro del bloque finally?
a. Solamente se ejecuta el bloque finally cuando salte la excepción dentro del bloque try.
b. Solamente se ejecuta cuando salta una excepción dentro del bloque try y ésta no se recoge
en el bloque catch.
c. Se ejecuta siempre haya excepción o no.
d. El termino finally no existe en el manejo de excepciones (try-catch).

Segunda Parte: Problema

El Estado, a través de los bancos, oferta deuda pública a sus clientes. La deuda pública tiene distintas
modalidades que son: letras del tesoro y bonos. Todas ellas se pueden agrupar en lo que se denomina
cartera de inversión. Cualquier deuda tiene la fecha de suscripción, el tipo de interés que oferta y su valor.
Además necesita de un método que calcule, dada una fecha, la cantidad de intereses que va generando.
Para ello se ha de tener en cuenta que en las letras del tesoro los intereses no se actualizan hasta finalizar el
plazo de la deuda y en los bonos se actualizan anualmente. El plazo de la deuda es diferente en función de
la modalidad de la deuda. Para las letras del tesoro el plazo es de 2 años, mientras que los bonos tendrán
una duración de 5 años.

Se pide:

l. Realizar un diagrama de clases. En este diagrama se debe incluir las clases necesarias, sus
relaciones (explicando brevemente el por qué de cada una), los atributos de cada clase, el tipo de
éstos y su tipo de acceso. También definir sus métodos incluyendo el constructor. (sólo indicarlos,
sin escribir su código). Puntuación: 4 puntos.
2. hnplernentar la clase Letra del Tesoro. Puntuación: 2 puntos.
3. Suponernos el siguiente ejemplo:

Manuel tiene una cartera de inversión en el banco con las siguientes deudas:
o 2 letras del tesoro, una por valor de 500 euros al 4% de interés a fecha de 01/10/2005 y la
otra por valor de 900 al 5% a fecha de O 1/06/2004.
o 2 bonos de estado al 7% de interés con fecha de 10/06/2003 con un valor de 3000.
Se pide:
a. Realizar las sentencias concretas para crear cada una de las deudas expuestas anteriormente.
Puntuación: 1 punto.
b. hnplernentar un método y decir en qué clase se encuentra (añadirlo también al diagrama de
clases) dónde se pueda calcular dada una fecha qué intereses produce toda la cartera de
inversión. hnplementar las sentencias necesarias para dada la fecha de hoy, se pueda saber qué
intereses ha generado toda la deuda de la cartera. Puntuación: 3 puntos.

Solución tipo A Reserva:


1)A 2)B 3)C 4)B 5)C 6)B 7)B 8)D 9)B 10)C
SOLUCIÓN EXAMEN RESERVA 2006

1. Diseño de clase
CARTERA DEUDA (Abstract)

static private int identificador = 0; protected GregorianCalendar gcFechaSuscripcion;


private Vector deudas; protected int iTipoInteres;
public Cartera () protected int iValor;
public int getIdentificador ()
public void addDeuda(Deuda deuda) public GregorianCalendar getGcFechaSuscripcion()
public double calcularTotalIntereses public double getDTipoInteres()
(GregorianCalendar fecha) public int getIValor()
public setGcFechaSuscripcion(GregorianCalendar gcFechaSuscripcion)
public void setDTipoInteres(double dTipoInteres)
public void setIValor(int iValor)
abstract public double calcularInteres (GregorianCalendar fecha)

LETRA BONO

final private int iañosPlazo = 2; final private int iañosPlazo = 5;

public Letra (GregorianCalendar gcFechaSuscripcion, public Bono (GregorianCalendar gcFechaSuscripcion,


int dTipoInteres,int iValor) int dTipoInteres,int iValor)
public double calcularInteres (GregorianCalendar fecha) public double calcularInteres (GregorianCalendar fecha)

2. Implementar la clase Letra del tesoro.

import java.util.GregorianCalendar;
import java.util.Calendar;

public class Letra extends Deuda {


final private int iañosPlazo = 2;

public Letra (GregorianCalendar gcFechaSuscripcion,int


dTipoInteres,int iValor)
{
this.gcFechaSuscripcion = gcFechaSuscripcion;
if ((dTipoInteres > 0) &&(dTipoInteres <= 100))
this.dTipoInteres = dTipoInteres;
else
System.out.println("El interés debe estar entre 0 y 100.");

this.iValor = iValor;
}

public double calcularInteres (GregorianCalendar fecha)


{
Calendar gcFechaFinPlazo = gcFechaSuscripcion;
// Suma dos años a la fecha de suscripción
gcFechaFinPlazo.add(Calendar.DATE,2);
if (gcFechaFinPlazo.getTimeInMillis()<= fecha.getTimeInMillis())
return (iValor*(dTipoInteres/100));
else
return 0;

}
3. Resolviendo el ejemplo de Manuel
a. Ejemplo:

GregorianCalendar fecha1 = new GregorianCalendar(2005,10,1);


GregorianCalendar fecha2 = new GregorianCalendar(2004,6,1);
Letra letra1 = new Letra(fecha1,4,500);
Letra letra2 = new Letra(fecha2,5,900);

GregorianCalendar fecha3 = new GregorianCalendar(2003,6,10);


Bono bono1 = new Bono(fecha3,7,3000);
Bono bono2 = new Bono(fecha3,7,3000);

Cartera cartera1 = new Cartera();


cartera1.addDeuda(letra1);
cartera1.addDeuda(letra2);
cartera1.addDeuda(bono1);
cartera1.addDeuda(bono2);

b. Implementar el método calcularTotalIntereses, método de la clase


Cartera.

public double calcularTotalIntereses (GregorianCalendar fecha)


{
double totalDeudas = 0;
Deuda auxDeuda;

for (int i=0;i<deudas.size();i++)


{
auxDeuda = (Deuda) deudas.elementAt(i);
totalDeudas += auxDeuda.calcularInteres(fecha);
}

return totalDeudas;
}

// por defecto al crear un objeto del tipo gregorian calendar se


// crea con la fecha actual
GregorianCalendar fecha4 = new GregorianCalendar();

long interesTotales = cartera1.calcularTotalIntereses(fecha4);


System.out.println(interesTotales);
TIPO A
 Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
 El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
 Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el
de la asignatura y el tipo de examen.
 Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado en
el que ha realizado la práctica.
FEBRERO 2007 Primera semana

Apellidos……………………………………………………..Nombre……………………..DNI……………

Primera Parte: Test

1. ¿Cuál de las siguientes memorias no es volátil?


a. Memoria caché.
b. Memoria RAM.
c. Memoria virtual.
d. Memoria ROM.

2. ¿Qué es un hub?
a. Es un dispositivo de distribución de comunicaciones que permite la conexión de más
periféricos.
b. Es un bus como PCI.
c. Es un protocolo de comunicación como los puertos serie y paralelo.
d. Es un comunicador unidireccional entre el computador y los periféricos.

3. Entre las funciones fundamentales del sistema operativo no está:


a. El control de los procesos de entrada/salida.
b. La asignación de recursos a los procesos.
c. La gestión de ficheros.
d. Traducir código fuente a código objeto.

4. De las siguientes sentencias, ¿cuál es la que mejor describe la funcionalidad del programa controlador
de trabajo?
a. Carga el monitor en memoria al iniciarse el trabajo del sistema.
b. Carga en memoria los módulos de programa que necesite el proceso de ejecución.
c. Se encarga de planificar la secuencia de los diferentes trabajos, repartir la memoria y controlar
la cola de tareas y las interrupciones.
d. Se encarga de optimizar el uso de la memoria al asignar la misma a los diferentes programas.

5. ¿Qué estructura se utilizaría mejor en la práctica a la hora de almacenar los modelos dentro de la clase
GestiónMaquinaria?
a. Un array de tamaño N.
b. Una array de tamaño ilimitado.
c. Un ArrayList.
d. Una matriz de N x N.

6. ¿Cuál de los siguientes tipos no es primitivo?


a. 1.32
b. false
c. ‘b’
d. “mundo”
7. ¿Es correcta la siguiente sentencia?

System.out.println(Math.sqrt(25));

a. No es correcta ya que no se puede llamar a un método de una clase sin crearse previamente un
objeto.
b. No es correcta ya que la clase Math se tiene que importar previamente.
c. Es correcta porque la clase Math es una clase predefinida.
d. No es correcta ya que la clase Math carece del método sqrt(int).

8. ¿Es correcta la implementación de la siguiente clase?

public class A
{
private int x;
private int y;
public A(int x){this.x=x;}
public A(int x, int y){this.x=x;this.y=y;}
}
a. No, ya que dentro de una clase sólo se puede implementar un constructor.
b. No, ya que no se ha implementado el constructor por defecto.
c. Si, es correcta.
d. No, porque los parámetros d entrada a los constructores no se pueden llamar de la misma forma
que los atributos de la clase.

9. ¿Es correcto el siguiente código?

public class B{private int b;}


public class C extends B {private int c;}
public class D extends B {private int d;}

Dentro del método main se realizan las siguientes


sentencias:

D oD = new D();
C oC = (C) oD;

a. Si, ya que al ser C y D clases hijas de la clase padre B por polimorfismo se puede reconvertir
un objeto de la clase D en otro de la clase C.
b. No, porque no se pueden crear dos clases hijas de una misma clase padre.
c. No, porque una clase hija no se puede reconvertir a otra clase hija por tanto hay
incompatibilidad de tipos.
d. No, porque no se ha creado previamente el objeto oC con la sentencia C oC = new C();.
Sin esta sentencia previa no se puede asignar otros objetos al objeto oC.
10. ¿Qué resultado da la siguiente estructura de control? El operador % es el operador resto.
int x = 2;
do
{
try
{
if (x%2 == 0)
throw new Exception();
x++;
}
catch(Exception e){x--;}
finally
{
x=x+2;
System.out.print(x + " ");
}
}
while (x < 10);

a. 3 6 7 10
b. 4 6 8 10
c. 3 5 7 9
d. 3 6 8 10

Segunda Parte: Problema


Un circuito eléctrico puede estar formado, al menos, por una serie de resistencias eléctricas (R) medidas en
ohmios y una fuente eléctrica que es capaz de generar una diferencia de potencial V (que es la que se
almacena en el circuito). Dentro de los circuitos podemos ver que hay dos tipos, los circuitos en serie y los
circuitos en paralelo. Los circuitos en serie calculan la intensidad con la siguiente fórmula de la ley de Ohm
V= I(R1 + ... + Rn) mientras que los circuitos en paralelo calculan la intensidad con la siguiente formula I= V
(1/R1 + …+ 1/Rn).

1. Dibujar un diagrama de clases con los atributos y métodos necesarios, incluidos los métodos constructores.
(2 puntos)
2. Implementar la clase circuito serie. (2 puntos)
3. Implementar la creación del siguiente objeto de un circuito en serie:
a. Circuito con 3 resistencias de 3, 5 y 6 ohmios y una fuente de alimentación cuyo potencial es
medido a 4 voltios. (1 punto)
b. Hacer la llamada al método correspondiente. ¿Qué resultado daría por pantalla? (1 punto)
4. Definimos un circuito mixto como una composición donde puede haber circuitos en serie y/o circuitos en
paralelo. Implementar un método de la clase circuito mixto que calcule la suma de las intensidades de
todos los circuitos que componen el circuito mixto. Pista: Para este apartado se ha de tener en cuenta el
polimorfismo. (4 puntos)

Solución test febrero 2007 primera semana tipo A:

1D, 2A, 3D, 4C, 5C, 6D, 7C, 8C, 9C, 10A
Problema 1 semana Febrero 2007 Electrónica-Electricidad

Apartado 1

CircuitoMixto Circuito (Abstract)


protected ArrayList <Double> resistencias = new ArrayList <Double> ();
private ArrayList <Circuito> circuitos = new ArrayList <Circuito> ();
protected double v;
public void addResistencia(double r)
public Circuito ()
public void removeCircuito(Circuito c)
public Circuito (double v)
public double calcularIntensidadTotal()
public double getV()
public void setV(double v)
public void addResistencia(double r)
public void removeResistencia(double r)
public abstract double calcularIntensidadCircuito();

CircuitoSerie CircuitoParalelo

public CircuitoSerie () public CircuitoParalelo ()


public CircuitoSerie (double v) public CircuitoParalelo (double v)
public double calcularIntensidadCircuito() public double calcularIntensidadCircuito()
Apartado 2

import java.util.ArrayList;
public class CircuitoSerie extends Circuito
{
public CircuitoSerie (){super();}
public CircuitoSerie (double v)
{
super(v);
}
public double calcularIntensidadCircuito()
{
double totalResistencias = 0;
double intensidad;
for (double r: resistencias)
totalResistencias += r;
intensidad = v / totalResistencias;
return intensidad;
}
}

Apartado 3

public static void main (String[] args)


{
// 3. a. Se crea un circuito en serie
CircuitoSerie cs = new CircuitoSerie();
// Se añaden las resistencias una a una
cs. addResistencia(3);
cs. addResistencia(5);
cs. addResistencia(6);
// Se añade el V
cs.setV(4);
// 3.b. Llamada a calcularIntensdidad y se imprime por pantalla
System.out.println(cs.calcularIntensidadCircuito());
}
Apartado 4

public double calcularIntensidadTotal()


{
double intensidadTotal= 0;
for (Circuito c: circuitos)
intensidadTotal += c.calcularIntensidadCircuito();
return intensidadTotal;
}
TIPO A
 Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
 El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
 Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el
de la asignatura y el tipo de examen.
 Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado en
el que ha realizado la práctica.
FEBRERO 2007 Segunda Semana

Apellidos……………………………………………………..Nombre……………………..DNI……………

Primera Parte: Test

1. ¿Cuál de las siguientes memorias no es volátil?


a. Memoria caché.
b. Memoria RAM.
c. Memoria virtual.
d. Memoria ROM.

2. ¿Qué es un hub?
a. Es un dispositivo de distribución de comunicaciones que permite la conexión de más
periféricos.
b. Es un bus como PCI.
c. Es un protocolo de comunicación como los puertos serie y paralelo.
d. Es un comunicador unidireccional entre el computador y los periféricos.

3. Entre las funciones fundamentales del sistema operativo no está:


a. El control de los procesos de entrada/salida.
b. La asignación de recursos a los procesos.
c. La gestión de ficheros.
d. Traducir código fuente a código objeto.

4. De las siguientes sentencias, ¿cuál es la que mejor describe la funcionalidad del programa controlador
de trabajo?
a. Carga el monitor en memoria al iniciarse el trabajo del sistema.
b. Carga en memoria los módulos de programa que necesite el proceso de ejecución.
c. Se encarga de planificar la secuencia de los diferentes trabajos, repartir la memoria y controlar
la cola de tareas y las interrupciones.
d. Se encarga de optimizar el uso de la memoria al asignar la misma a los diferentes programas.

5. ¿Qué estructura se utilizaría mejor en la práctica a la hora de almacenar los modelos dentro de la clase
GestiónMaquinaria?
a. Un array de tamaño N.
b. Una array de tamaño ilimitado.
c. Un ArrayList.
d. Una matriz de N x N.

6. ¿Cuál de los siguientes tipos no es primitivo?


a. 1.32
b. false
c. ‘b’
d. “mundo”
7. ¿Es correcta la siguiente sentencia?

System.out.println(Math.sqrt(25));

a. No es correcta ya que no se puede llamar a un método de una clase sin crearse previamente un
objeto.
b. No es correcta ya que la clase Math se tiene que importar previamente.
c. Es correcta porque la clase Math es una clase predefinida.
d. No es correcta ya que la clase Math carece del método sqrt(int).

8. ¿Es correcta la implementación de la siguiente clase?

public class A
{
private int x;
private int y;
public A(int x){this.x=x;}
public A(int x, int y){this.x=x;this.y=y;}
}
a. No, ya que dentro de una clase sólo se puede implementar un constructor.
b. No, ya que no se ha implementado el constructor por defecto.
c. Si, es correcta.
d. No, porque los parámetros d entrada a los constructores no se pueden llamar de la misma forma
que los atributos de la clase.

9. ¿Es correcto el siguiente código?

public class B{private int b;}


public class C extends B {private int c;}
public class D extends B {private int d;}

Dentro del método main se realizan las siguientes


sentencias:

D oD = new D();
C oC = (C) oD;

a. Si, ya que al ser C y D clases hijas de la clase padre B por polimorfismo se puede reconvertir
un objeto de la clase D en otro de la clase C.
b. No, porque no se pueden crear dos clases hijas de una misma clase padre.
c. No, porque una clase hija no se puede reconvertir a otra clase hija por tanto hay
incompatibilidad de tipos.
d. No, porque no se ha creado previamente el objeto oC con la sentencia C oC = new C();.
Sin esta sentencia previa no se puede asignar otros objetos al objeto oC.
10. ¿Qué resultado da la siguiente estructura de control? El operador % es el operador resto.
int x = 2;
do
{
try
{
if (x%2 == 0)
throw new Exception();
x++;
}
catch(Exception e){x--;}
finally
{
x=x+2;
System.out.print(x + " ");
}
}
while (x < 10);

a. 3 6 7 10
b. 4 6 8 10
c. 3 5 7 9
d. 3 6 8 10

Segunda Parte: Problema


Un circuito eléctrico puede estar formado, al menos, por una serie de resistencias eléctricas (R) medidas en
ohmios y una fuente eléctrica que es capaz de generar una diferencia de potencial V (que es la que se
almacena en el circuito). Dentro de los circuitos podemos ver que hay dos tipos, los circuitos en serie y los
circuitos en paralelo. Los circuitos en serie calculan la intensidad con la siguiente fórmula de la ley de Ohm
V= I(R1 + ... + Rn) mientras que los circuitos en paralelo calculan la intensidad con la siguiente formula I= V
(1/R1 + …+ 1/Rn).

1. Dibujar un diagrama de clases con los atributos y métodos necesarios, incluidos los métodos constructores.
(2 puntos)
2. Implementar la clase circuito serie. (2 puntos)
3. Implementar la creación del siguiente objeto de un circuito en serie:
a. Circuito con 3 resistencias de 3, 5 y 6 ohmios y una fuente de alimentación cuyo potencial es
medido a 4 voltios. (1 punto)
b. Hacer la llamada al método correspondiente. ¿Qué resultado daría por pantalla? (1 punto)
4. Definimos un circuito mixto como una composición donde puede haber circuitos en serie y/o circuitos en
paralelo. Implementar un método de la clase circuito mixto que calcule la suma de las intensidades de
todos los circuitos que componen el circuito mixto. Pista: Para este apartado se ha de tener en cuenta el
polimorfismo. (4 puntos)

Solución test febrero 2007 segunda semana tipo A:


1A, 2A, 3A, 4A, 5D, 6C, 7A, 8A,9C, 10C
Se desea implementar un sistema para la gestión de zonas de tala. Cada
zona se caracteriza por el número de árboles que posee, pero además, hay
dos tipos de zonas, las zonas de tala anual y las zonas de tala
esporádica. Las zonas de tala esporádica se talan completamente cada 10
años, y se caracterizan por el año de la última poda. Las zonas de tala
anual se talan todos los años pero sólo un cierto porcentaje de árboles.
Cada zona de tala anual tiene asociada dicho porcentaje. Sabiendo que la
cantidad de madera promedio que se obtiene de un árbol es de 1000
kilogramos, el sistema debe permitir calcular, dado un año, la cantidad
de madera que se espera obtener dicho año en el conjunto de zonas
gestionadas.

1. Dibujar un esquema con las clases necesarias para este programa,


indicando los atributos y métodos en caso de haberlos (sólo
indicarlos, sin escribir su código). (4 puntos)
2. Implementar el/los métodos que calculen la cantidad de madera
extraída dado un año en una zona determinada y en todas las zonas.
¿Dónde se encontraría cada uno de dichos métodos?(4 puntos)
3. Implementar en código JAVA la creación de los siguientes objetos (2
puntos):
a. Una zona de tala esporádica que con 1000 árboles que se
taló en 1998.
b. Una zona de tala anual con 2000 árboles en donde se tala
anualmente un 10% de los árboles.
c. Un objeto gestión de zonas que incluya ambas zonas.

EJERCICIO 1:
GestorZonas
Zona
private ArrayList <zona> zonas;
private String nombre;
private int numArboles; public GestorZonas();
public int calculaKgMadera(int año)
public void añadirZona(Zona zona)
public Zona(String nombre,
int numArboles);
/*Metodos get y set*/
public int calculaKgMadera(int año)

ZonaTalaEsporadica ZonaTalaAnual

private int ultimoAñoTala; private int porcentaje;

public Zona(String nombre, public Zona(String nombre,


int numArboles); int numArboles);
public int getUltimoAñoTala(); public int getPorcentaje();
public void setUltimoAñoTala(int año); public void setPorcentaje(int porcent);
public int calculaKgMadera(int año); public int calculaKgMadera(int año);
EJERCICIO 2

En primer lugar, será necesario un método en la clase


“GestionZonas” que sume la madera recogida en las distintas zonas
que gestiona.

public void calculaKgMadera (int año){


int kgs=0;
for (int i=0;i < zonas.size();i++){
kgs=kgs+this.zonas.get(i).calculaKgMadera(año);
}
}
return kgs;
}

Dado que el método que calcula la cantidad de madera generada en


un año en una zona depende del tipo de zona, este método debe
estar implementado en ambas clases hijas de Zona. Además, este
método tendrá que estar también definido en la clase padre Zona,
para que pueda aplicarse polimorfirsmo. Es decir, para que pueda
accederse al método sin necesidad de conocer a qué subclase
referencia el objeto.

En la clase ZonaTalaEsporádica tendríamos

public int calculaKgMadera(int año){


int kgs=0;
/*Si el año fue un año de tala
(la diferencia ente el último año de tala
y el año en cuestión
es múltiplo del intervalo entre talas 10)*/
if ((año-ultimo_año_tala)%10)==0){
kgs=numArboles*1000;
}
return kgs;
}

En la clase ZonaTalaAnual tendríamos:

public int calculaKgMadera(int año){


int kgs=0;
kgs=numArboles*porcentaje*10; // porcentaje/100 * 1000
}
return kgs;
}
EJERCICIO 3:

Zona a=new Zona(“A”,1000);


a.setUltimoAñoTala(1998);

Zona a=new Zona(“B”,2000);


a.setPorcentaje(10);

GestorZonas gz=new GestorZonas();


gz.añadirZona(a);
gz.añadirZona(b);

NOTA: También podría haberse definido un constructor que incluyera


como parámetro de entrada los atributos “ultimoAñoTala” y
“porcentaje”. No sería necesario en ese caso llamar al método set
correspondiente.
SEPTIEMBRE 2007

TIPO A Na (ele)
Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja
el código de carrera, el de la asignatura y el tipo de examen.
Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre
y el Centro Asociado en el que ha realizado la práctica.
Rellene sus datos en esta hoja y entréguela junto a la de lectura óptica.

Apellidos……………………………………………..Nombre……………………..DNI………

Primera Parte: Test


1. Indica, de las siguientes opciones, aquella que no es un componente de la placa madre:
a. Puertos de entrada salida.
b. Interface IDE.
c. Tarjetas de memoria.
d. Fuente de alimentación.

2. ¿Afecta la memoria caché a la cantidad de instrucciones que un computador ejecuta en un cierto


tiempo?
a. No, dado que depende únicamente de la frecuencia de reloj.
b. Sí, dado que amplía la memoria de almacenamiento permantente.
c. Sí, dado que acelera los accesos a datos en memoria.
d. No. La memoria caché solo preserva los datos ante una caída del sistema.

3. El proceso en tiempo compartido (time-sharing) consiste en:


a. Distribuir los procesos en diferentes procesadores.
b. Sincronizar los relojes de diferentes procesadores.
c. Asignar a los procesos ranuras de tiempo en el procesador central.
d. Que los procesos compartan los canales de entrada/salida.

4. Indica cuál de los siguientes programas NO es un programas de control de un sistema operativo:


a. Cargador de módulos.
b. Controlador de tareas.
c. Administrador de memoria.
d. Compilador.

5. La composición entre clases sirve para:


a. Establecer mecanismos de herencia entre clases.
b. Implementar constructores por defecto.
c. Definir atributos de una clase como instancias de otras clases.
d. Implementar una lista de enteros (int).
6. ¿Cómo diseñaría un sistema que gestione productos en un supermercado de forma que el vendedor pueda
introducir nuevas marcas de productos en su sistema?
a. Definiendo cada nueva marca como una nueva clase hija de producto.
b. Definiendo “marca” como un valor (String) de un atributo de la clase producto.
c. Definiendo cada nueva marca como un nuevo atributo (booleano) de la clase producto.
d. No es posible que el usuario introduzca nuevas marcas sin implementar de nuevo el sistema.

7. La herencia es un mecanismo muy útil para:


a. La reutilización de código en la implementación de nuevos sistemas.
b. Implementar estructuras dinámicas de almacenamiento.
c. Generar código portable a otros sistemas operativos.
d. La implementación de bucles.

8. ¿Que secuencia de valores imprimiría el siguiente código?


for (int i=1;i<3;i++){
for (int j=1;j<3;j++){
System.out.println(i);
System.out.println(j);
}
}

a. 1,1,2,1,1,2,2,2
b. 1,1,2,2,2,1,1,2
c. 1,1,1,2,2,1,2,2
d. 1,2,1,2

9. Indica cuál de las siguientes afirmaciones es correcta:


a. En Java, un bloque try{...} sólo puede tener asociado un bloque catch{...}, cuyo código se
ejecutará siempre que salte una excepción en el try{...}.
b. En Java, un bloque try{...} puede tener asociados varios bloques catch{...} y, en caso de que salte
una excepción en el try{...}, se ejecutará primero, y mientras sea posible, el código del bloque
catch{...} secuencialmente más cercano.
c. En Java, un bloque try{...} puede tener asociados varios bloques catch{...} y, en caso de que salte
una excepción en el try{...}, se ejecutará el código del bloque catch que capture dicha excepción.
d. En Java, un bloque try{...} puede tener asociados varios bloques catch{...} y, en caso de que salte
una excepción en el try{...}, se ejecutarán todos los códigos de los bloques catch asociados a
dicho bloque.

10. ¿En qué clase se implementa el método comprobar_máquina_plantación en la práctica de este año?
a. En la clase GestiónMaquinaria.
b. En la clase Plantación.
c. En la clase Modelo_de_máquina
d. En la clase Producto.
Segunda Parte: Problema
Se desea implementar un sistema para el control de gastos de cambio de piezas en los
automóviles de una empresa de transporte. Cada año, los conductores que consideren
que se requiere un cambio de pieza por desgaste pedirán una revisión en el taller de
mantenimiento de la flota. El encargado del taller anotará la información relativa a las
revisiones realizadas. De cada revisión se anotará la fecha de revisión, la matrícula del
automóvil y el conjunto de piezas sustituídas. De cada pieza es necesario conocer su
código y coste. El sistema de control de revisiones debe disponer de un método que
permita calcular el coste total de todas las piezas de una revisión. Además, el sistema
debe tener en cuenta que, a efectos de facturación, existen tres tipos de piezas: las
importadas, las de fabricación nacional y las de desguace. A las importadas hay que
añadirles un porcentaje por gastos de envío, específico para cada pieza. A las de
fabricación nacional el porcentaje de IVA fijo, y a las de desguace no se les añade
ningún porcentaje.

Se pide:

1. Dibujar un diagrama de clases con los atributos y métodos necesarios, incluidos los
métodos constructores. Justificar en qué clase o clases se implementaría el o los
métodos para calcular el coste final de UNA pieza. (5 puntos)

2. Implementar el método necesario para calcular el coste total de una revisión. (3


puntos)

3. En un código aparte, escribir las instrucciones necesarias (creación de objetos y


llamadas a métodos) para (2 puntos):

a. Crear dos objetos que representen una revisión y una pieza de importación
nacional (con valores arbitrarios en sus atributos).

b. Incluir en la revisón la pieza instanciada.

c. Calcular el coste total de la revisión.

Solución test septiembre 2007, tipo A: 

1 d), 2 c), 3 c), 4 d), 5 c), 6 b), 7 a), 8 c), 9 c), 10 c)
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN
SEPTIEMBRE 2007, ESPECIALIDAD MECÁNICA

Se desea implementar un sistema para el control de gastos de cambio de


piezas en los automóviles de una empresa de transporte. Cada año, los
conductores que consideren que se requiere un cambio de pieza por desgaste
pedirán una revisión en el taller de mantenimiento de la flota. El encargado
del taller anotará la información relativa a las revisiones realizadas. De cada
revisión se anotará la fecha de revisión, la matrícula del automóvil y el
conjunto de piezas sustituídas. De cada pieza es necesario conocer su
código y coste. El sistema de control de revisiones debe disponer de un
método que permita calcular el coste total de todas las piezas de una
revisión. Además, el sistema debe tener en cuenta que, a efectos de
facturación, existen tres tipos de piezas: las importadas, las de fabricación
nacional y las de desguace. A las importadas hay que añadirles un porcentaje
por gastos de envío, específico para cada pieza. A las de fabricación nacional
el porcentaje de IVA fijo, y a las de desguace no se les añade ningún
porcentaje.

Se pide:

1. Dibujar un diagrama de clases con los atributos y métodos necesarios,


incluidos los métodos constructores. Justificar en qué clase o clases se
implementaría el o los métodos para calcular el coste final de UNA pieza. (5
puntos)
2. Implementar el método necesario para calcular el coste total de una
revisión. (3 puntos)
3. En un código aparte, escribir las instrucciones necesarias (creación de
objetos y llamadas a métodos) para (2 puntos):
a. Crear dos objetos que representen una revisión y una pieza de
importación nacional (con valores arbitrarios en sus atributos).
b. Incluir en la revisón la pieza instanciada.
c. Calcular el coste total de la revisión.
EJERCICIO 1:

Revisión
Pieza
private ArrayList <pieza>
private String código; piezas_sustituidas;
private int coste;
public Pieza(String codigo,
int coste); public Revisón();
/*Metodos get y set*/ public int calculaCosteTotal()
public int calculaCoste(int año) public void añadirPieza(Pieza p)

PiezaImportada Pieza_Imp_Nacional

private int gastos_envio; public static int iva;

public PiezaImportada( public PiezaImportada(


String codigo, String codigo,
int coste, int coste);
int gastos_envio); public int calculaCoste();
public int getGastos_envio();
public void setGastos_envio(int g);
public int calculaCoste();

COMENTARIOS DEL EQUIPO DOCENTE:

1.Dado que existen diferentes tipos de piezas con diferentes


atributos, como los gastos de envío o el IVA, y diferente
comportamiento en sus métodos, como el cálculo del coste, es
indispensable establecer una herencia entre clases para seguir
el paradigma de programación orientada a objetos. En caso de
implementar todos ellos en una sola clase Pieza, sería necesario
reimplementar el sistema para incluir en un futuro nuevos tipos
de piezas en el sistema. Sin embargo, aplicando herencia
bastaría con extender una nueva clase hija.

2.Siguiendo el paradigma de programación orientada a objetos es


importante que el proceso de cálculo de costes sea invisible
para la clase Revisón, de forma que no sea necesario
reimplementar esta clase para introducir nuevos tipos de piezas.
3.La clase Revisión se relaciona por composición con Pieza
mediante el atributo piezas_sustituidas. Éste es un Vector
dinámico (ArrayList) que contendrá objetos de la clase Pieza. No
debe ser un array, dado que no conocemos a priori el número de
piezas que conlleva una revisión.

4.No es estrictamente necesario implementar una clase hija para


las piezas de desguace si consideramos que encaja con el
comportamiento por defecto de la clase padre. Esto es posible
dado que las piezas de desguace no poseen atributos ni métodos
que no aparezcan en el resto de las clases hijas.

5.Para que el método calculaCoste de la clases tipo Pieza sea


accesible desde Revisión, debe implementarse para la clase padre
que es con la que se relaciona Revisión. Además, el método debe
reescribirse en las clases hijas, ya que en éstas el método va a
comportarse de diferente modo.

6.A diferencia del atributo gastos_envío, el IVA es un atributo


cuyo valor lo comparten todas las instancias (objetos) de la
clase Pieza_Imp_Nacional. Es decir, si se modifica el IVA para
una instancia de la clase, se modifica para todas. Esto se
implementa definiendo IVA como variable estatica.

EJERCICIO 2

public void calculaCosteTotal (){
  int coste=0;
  for (int i=0;i < this.piezas_sustituidas.size();i++){

coste=coste+this.piezas_sustituidas.get(i).calculaCoste();
}
return  coste;
}

EJERCICIO 3:

Revision r=new Revision();


Pieza p=new Pieza_Imp_Nacional(“qwe012”,”300”);
r.añadirPieza(p);
int coste=r.calcularCosteTotal();
FEBRERO 2008 Primera Semana

TIPO A NAC (elec)


• Para la nota del examen, el test vale el30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el
de la asignatura y el tipo de examen.
• Resuelva el Problema en la hoja del enunciado indicando su nombre y el Centro Asociado en el que ha
realizado la práctica y entregue el cuadernillo completo junto a la de lectura óptica.

Primera Parte: Test

l . La memoria virtual puede ser especialmente útil cuando dispararnos procesos que:
a) Operan con gran cantidad de datos.
b) Acceden frecuentemente a disco.
e) Acceden frecuentemente a la red.
d) No deben interrumpirse.

2. Indica cuál de las siguientes afirmaciones es correcta:


a) Un CD-ROM y un DVD son componentes Software porque permiten almacenar aplicaciones
que luego se pueden ejecutar.
b) Un CD-ROM y un DVD son componentes flsicos del ordenador.
e) Un CD-ROM es un componente Hardware de sólo lectura mientras que un DVD es un
componente Software de lectura y escritura.
d) Un DVD es un componente Hardware de sólo lectura mientras que un CD-ROM es un
componente Software de lectura y escritura.

3. El termino Software se define como:


a) El conjunto de programas necesarios para la realización de una tarea específica en un
ordenador.
b) Los componentes fisicos del sistema informático.
e) El conjunto de periféricos de un ordenador (pantalla, teclado, ratón, etc.)
d) El sistema operativo.

4. Indica cuál de las siguientes funciones no son propias del sistema operativo
a) Gestión de permisos y usuarios.
b) Gestión de la BIOS.
e) Administración de la memoria principal y secundaria.
d) Planificación de procesos.
5. ¿Cuál es la diferencia entre una instancia de una clase y un objeto de dicha clase?
a) La instancia de una clase es la generalización de los objetos de dicha cla<;e.
b) El objeto es la generalización de la instancia de una clase.
e) La instancia de una clase es la propia clase, que es a su vez la generalización de un objeto
concreto.
d) Instancia de una cla<;e y objeto son lo mismo.

6. ¿Que secuencia de valores imprimiría el siguiente código?

a) 1,1,2,2,1,2
b) 1,2,1,2,1,2
e) 1,2,1,1,2,2
d) 1,1, 2,2 , 1,1

7. ¿Puede una lista de objetos en JAVA almacenar instancias de clases definidas posteriormente?
a) No, dado que es necesario defmir la clase a la que pertenecen los objetos almacenados.
b) Sí, siempre que las clases se implementen dentro del mismo paquete.
e) No, dado que sólo se pueden almacenar atributos en una lista, no objetos.
d) Sí, siempre que las nuevas instancias pertenezcan a clases que hereden de aquellas para la que
se deílnió la lista.

8. Indica cuál de las siguientes afirmaciones es correcta:


a) Todas la<; cla<;es Java heredan de la clase Object.
b) Todas las clases Java heredan de la clase Object siempre que se indique mediante la expresión
exiends Object.
e) Todas las clases Java heredan de la clase Object siempre que se definan como privadas.
d) Todas las clases Java heredan de la clase Object siempre que se definan como estáticas.
9. La máquina virtual de JAVA:
a) Traduce el código introducido por el programador (java) a código máquina.
b) Traduce código intermedio (.class) a código máquina.
e) Gestiona la memoria virtual.
d) Es la misma para todos los procesadores.

10. En la práctica obligatoria, ¿en qué clases se implementa un mecanismo de herencia?


a) Entre las clases Guitarra y Catálogo.
b) Entre las clases Funda y Catálogo.
e) Entre las clases Funda y Soporte.
d) Entre las clases Funda y Accesorio.
Apellidos.. ...........Nombre.... ..........DNl ..........

unda Parte: Problema

Se desea diseftar una aplicación para la gestión de un supermercado on-line. Los productos del supermercado
pueden ser alimentos o ropa. Todo producto debe tener un nombre, un precio y un identificador. Los
productos que sean del tipo comida tendrán además una fecha de caducidad, mientras que la ropa tendrá
siempre una talla. De cada cliente de este supermercado deberá guardarse su nombre y apellidos, una
dirección y un identificador personaL Además, cada cliente podrá realizar una o varias compras que estarán
formadas a su vez por uno o varios ítems de diferentes productos. Cada compra estará identificada por un
valor numérico único y cada ítem estará formado por un producto y una cantidad.
Se pide:

l . Realizar el disefto de la aplicación, es decir, diseftar el esquema de clases con sus correspondientes
atributos y métodos, estableciendo las relaciones que sean necesarias. El diseño deberá cumplir con las
siguientes funcionalidades:
l . Se deberá poder "añadir" y "borrar" y "consultar" los ítems de una compra.
2. Se deberán poder "añadir", "borrar" y "consultar" los identificadores de las compras de un
cliente.
2. Escribir el código necesario para:
l . Instanciar un producto de la categoría comida y otro de la categoría ropa.
2. Instanciar una compra y añadir ítems con cantidades 2 y 3 de los productos anteriores.
3. Crees que este disefto se hace necesario el uso del polimorfismo. Justiíica tu respuesta en términos del
problema.

Solución test Febrero 2008 Primera Semana(Tipo A):


1-A, 2-B, 3-A, 4-B, 5-D, 6-C, 7-D, 8-A, 9-B, 10-D
FEBRERO 2008 Segunda Semana

TIPO A NAC-2$ (elec)


• Para la nota del examen, el test vale el30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el
de la asignatura y el tipo de examen.
• Resuelva el Problema en la hoja del enunciado indicando su nombre y el Centro Asociado en el que ha
realizado la práctica y entregue el cuadernillo completo junto a la de lectura óptica.

Primera Parte: Test

l . Indica cuál de las siguientes afirmaciones es correcta:


a) La memoria RAM es memoria volátil.
b) La memoria ROM es memoria volátil.
e) Tanto la memoria RAM como la ROM son memorias volátiles.
d) Ni la memoria RAM ni la ROM son memorias volátiles.

2. Un puerto USB:
a) Es más seguro que un puerto paralelo.
b) N o requiere una interfaz externa para conectar con el computador.
e) Conecta entre si los elementos de la placa madre.
d) Conecta la placa madre con el disco duro.

3. ¿Cuál de las siguientes funciones no la realiza el Sistema Operativo?


a) Control de la ejecución de programas.
b) Compilación y depuración de programas.
e) Administración de periféricos.
d) Control de concurrencia.

4. Indica cuál de las siguientes respuestas no es un paradigma de programación:


a) Imperativo.
b) Funcional.
e) Orientación a Objetos.
d) Multiplataforma.
5. ¿Que secuencia de valores imprimiría el siguiente código?

a) 1,1,2,2,1,2
b) 1 ,2,1,2, 1 ,2
e) 1 2 1 1,2,2
, , '

d) 1,1,2,1,1,1

6. ¿Cuáles de las siguientes características de Java permiten reutilizar código?


a) Java no permite la reutilización de código.
b) Composición y herencia.
e) La máquina virtual.
d) Las excepciones.

7. Dado el siguiente código:

Tras instanciar los objetos a y b, ¿qué sentencia sería incorrecta?


a) a.getPrecio();
b) b.getPrecio();
e) a.getDescripcion();
d) b.getDescripcion();
8. El mecanismo denominado composición en Programación Orientada a Objetos consiste en:
a) La utilización de objetos como atributos dentro de otros objetos.
b) La creación de una nueva clase como extensión de otra, aprovechando las características de ésta.
e) Diseñar un conjunto de clases para componer una aplicación.
d) Sobrescribir uno o más métodos de la clase base en la clase derivada.

9. Declarar atributos como privados es útil para:

a) Evitar que sean accedidos desde el código de otras clases.


b) Evitar que métodos no privados accedan a dichos atributos.
e) Fijar qué atributos son inicializados por el constructor.
d) Definir variables globales.

1 O.En la práctica de la asignatura las cla�es Funda y Soporte:

a) Heredan de la clase abstracta Accesorio.


b) Funda hereda de Soporte, ya que tienen atributos comunes.
e) No guardan relación.
d) Son derivadas mediante herencia de la clase base Accesorio.
Apellidos...... . . ..... Nombre... . ..........DNI....

unda Parte: Problema

Se quiere implementar un sistema en JAVA para gestionar las pruebas de neumáticos. Para cada modelo de
neumático, identificado mediante un código, se realiza un conjunto indeterminado de pruebas. En cada prueba
se somete un neumático a una fuerza de rozamiento F durante un tiempo T y se comprueba los centímetros de
desgaste. Existen dos tipos de prueba: las de alto rozamiento (F=lOO, T=S), y las de durabilidad
(F=l O, T=l 0000). Despues de cada prueba, el técnico introducirá los resultados en el sistema. El sistema debe
disponer de un método para calcular, dado un modelo, el desgaste promedio de las pruebas,
independientemente de su tipo.

Se pide:

l . Representar el esquema de clases con las clases, atributos y relaciones del sistema. Indicar el
mecanismo empleado para inicializar los valores de F y T.
2. Crear los objetos y hacer las llamadas necesarias para representar un modelo "m92873" e introducir
los resultados de tres pruebas de durabilidad (desgastes 5,4, y 6) y otra de alto rozamiento con
desgaste.
3. Explicar justificadamente en qué clase se implementarla el método que calcula el promedio de
desgaste de un modelo y qué operaciones realizarla sobre qué estructura de almacenamiento.

Solución test Febrero 2008 Segunda Semana(Tipo A):


1-A, 2-B, 3-B, 4-D, 5-C, 6-B, 7-C, 8-A, 9-A, 10-D
Septiembre 2008 tipo A (electrónica)

TIPO A ORIG (elec)


• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el
de la asignatura y el tipo de examen.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado
la práctica.
• Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.

Primera Parte: Test


1. ¿Cómo se llama la técnica que utiliza un área del disco duro para almacenar datos destinados a la
memoria RAM cuando no queda espacio libre en ésta?
a) Memoria física.
b) Memoria virtual.
c) Memoria estática.
d) Memoria caché.

2. Un puerto USB:
a) Evita el uso de tarjetas especializadas para cada periférico.
b) Establece una conexión directa entre los dispositivos periféricos.
c) Establece un nivel hardware entre el sistema operativo y el compilador.
d) Es un hub que interconecta conjuntos de máquinas.

3. Un lenguaje orientado a objetos frente a un ensamblador:


a) Permite un manejo más directo de los registros del computador.
b) Es más cercano al lenguaje natural.
c) Es más fiable ante caídas del sistema.
d) Evita la necesidad de compiladores complejos.

4. Cuál de las siguientes funciones no depende sistema operativo:


a) Gestión de ficheros.
b) Gestión del arranque del computador.
c) Gestión de la memoria.
d) Planificación de trabajos.

5. ¿Qué es una clase interna?


a) Una clase cuya definición está dentro de otra clase.
b) Una clase definida dentro de un paquete.
c) Una clase que hereda de otra.
d) Una clase que extiende a otra (utilizando el mecanismo de extensión).
6. ¿Que secuencia de valores imprimiría el siguiente código?

public class Prueba {


public static void main(String[] args) {
for (int i = 1; i < 3; i++) {
int j = 0;
do {
System.out.println(j);
j++;
} while (j <= 1);
System.out.println(i);
}
}
}

a) 0,1,2,0,1,2
b) 0,1,1,0,1,2
c) 0,1,1,0,1,1
d) 2,1,1,2,2,1

7. ¿Qué clases pueden acceder a un atributo declarado con el modificador 'protected'?


a) Sólo la propia clase.
b) Sólo las clases dentro del mismo paquete.
c) Las clases dentro del mismo paquete y los descendientes de la propia clase.
d) Sólo los descendientes de la propia clase.

8. Se tiene este código para un determinado método, ¿Qué salida daría por pantalla?

public void imprime(String Nombre) {


this.nombre=nombre;
nombre=this.nombrePila;
System.out.println(this.nombre);
}

a) El valor del atributo “nombre” de la clase.


b) El valor del parámetro de entrada “nombre”.
c) El valor de la variable “nombre” en el contexto del método.
d) El valor del atributo “nombrePila” de la clase.
9. Dado el siguiente código, sabiendo que la clase Alumno hereda de Persona, y que Persona dispone de
un método imprimirDNI se ejecutaría:
...
Alumno a = new Alumno(726382-L);
Persona b = a;
b.imprimirDNI();
...

a) El método imprimirDNI de la clase Persona.


b) Nada. Un error de compilación.
c) imprimirDNI pero sólo si está redefinido en la clase Alumno.
d) Nada. Aparecería un error de ejecución (Null pointer exception)

10. En la práctica obligatoria, el tipo de cuerda se representó mediante un tipo:


a) String.
b) Enumerado.
c) Object.
d) Se empleó una clase distinta para cada tipo de cuerda.
Apellidos……………………………………………..Nombre……………………..DNI………...……
Centro asociado ……………………………………………..

Segunda Parte: Problema

Se desea gestionar las citas en un hospital. El centro debe administrar su lista de citas con especialistas y de citas para
pruebas médicas. Tanto las citas con especialistas como las citas para pruebas medicas deben incluir su hora y día y
nombre del paciente. Las citas con especialistas incluyen además el nombre del especialista y su especialidad. Las citas
para pruebas incluyen el nombre de la prueba. El sistema debe de ser capaz de imprimir en pantalla todas las citas
existentes para un especialista concreto o para todos, y para una o todas las pruebas. Además, debe de ser posible crear
una nueva cita introduciendo los datos de la misma (strings). Antes de proceder al diseño leanse las tres cuestiones
siguientes:

Se pide:

1. (2 puntos) Dibujar un esquema con las clases necesarias para este programa, indicando los atributos y métodos
que tiene cada una (sólo indicarlos, sin escribir su código), aplicando los principios de la programación
orientada a objetos.

2. (1 punto) Implementar el método que permite imprimir las citas de un determinado especialista.

3. (2 puntos) Explicar justificadamente cómo se haría para, sin modificar el sistema existente y aplicando los
principios de la programación orientada a objetos, reutilizar el código para hacer un nuevo programa que
gestione otro hospital análogo que incluya además la posibilidad de modificar una cita. ¿Qué clases han de
extenderse y con qué nuevos métodos y atributos? ¿Qué métodos se reutilizan?

Solución al test septiembre 2008 tipo A (electrónica):


1-b, 2-a, 3-b, 4-b, 5-a, 6-b, 7-c, 8-a, 9-a, 10-b
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN
SEPTIEMBRE 2008, ESPECIALIDAD ELECTRÓNICA

Se desea gestionar las citas en un hospital. El centro debe administrar su lista


de citas con especialistas y de citas para pruebas médicas. Tanto las citas con
especialistas como las citas para pruebas medicas deben incluir su hora y día y
nombre del paciente. Las citas con especialistas incluyen además el nombre
del especialista y su especialidad. Las citas para pruebas incluyen el nombre
de la prueba. El sistema debe de ser capaz de imprimir en pantalla todas las
citas existentes para un especialista concreto o para todos, y para una o todas
las pruebas. Además, debe de ser posible crear una nueva cita introduciendo
los datos de la misma (strings). Antes de proceder al diseño leanse las tres
cuestiones siguientes:
Se pide:

1. (2 puntos) Dibujar un esquema con las clases necesarias para este


programa, indicando los atributos y métodos que tiene cada una (sólo
indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (1 punto) Implementar el método que permite imprimir las citas de un


determinado especialista.

3. (2 puntos) Explicar justificadamente cómo se haría para, sin modificar el


sistema existente y aplicando los principios de la programación orientada
a objetos, reutilizar el código para hacer un nuevo programa que
gestione otro hospital análogo que incluya además la posibilidad de
modificar una cita. ¿Qué clases han de extenderse y con qué nuevos
métodos y atributos? ¿Qué métodos se reutilizan?
EJERCICIO 1:

Hospital

protected List<CitaEspecialista> citasEspecialista;


protected List<CitaPrueba> citasPrueba;

public List<CitaEsp> imprimirCitasEspecialista(String nombre);


public List<CitaEsp> imprimirCitasEspecialista();
public List<CitaPruebas> imprimirCitasPruebas(String nombre);
public List<CitaPruebas> imprimirCitasPruebas();
public void CrearCitaEspecialista(String hora, String día, String
nombrePaciente, String nombreEspecialista, String especialidad);
public void CrearCitaPrueba(String hora, String día, String nombrePaciente,
String nombrePrueba);

abstract Cita

private String hora;


private String día;
private String nombrePaciente;

/*Métodos get y set*/

Cita Cita
CitaEspecialista CitaPruebas

private String nombreEspecialista; private String nombrePrueba


private String especialidad;

public CitaEspecialista( public CitaPrueba(


String hora, String hora,
String día, String día,
String nombrePaciente, String nombrePaciente,
String nombreEspecialista, String nombrePrueba);
String especialidad);

/*Métodos get y set*/ /*Métodos get y set*/


PRIMER PROBLEMA:

1. Dado que todas las citas son o de especialista o de prueba, la clase genérica
cita debe de ser abstracta.

2. Para poder imprimir conjuntos de citas es necesario crear una estructura de


composición mediante una lista sobre las clases CitaPrueba y
CitaEspecialista.

3. Dado que las listas de pruebas y citas de especialista se imprimen de manera


independiente, el parámetro de salida de los métodos “imprimir” debe de ser
una lista de pruebas o citas de especialistas, no de la clase genérica Cita,
que además es abstracta.

4. La creación de una nueva cita requiere dos métodos (dependiendo del tipo de
cita) en la clase Hospital que añada un elemento a su lista.

SEGUNDO PROBLEMA

El método debe recorrer la lista de citas de especialista, atributo de la clase


Hospital. Por cada elemento de la lista (variable c), el método debe comprobar
que el nombre de especialista se corresponda con el parámetro de entrada
nombreEspecialista, y si es así, imprimir los atributos de la cita. El código
sería el siguiente:

public void imprimirCitasEspecialista (String nombreEspecialista){


for (int i=0;i< this.citasEspecialista.size();i++){
CitaESpecialista c=(this.citasEspecialista.getElementAt(i));
if (c.getNombreEspecialista()=nombreEspecialista){
System.out.println(c.getNombreHora());
System.out.println(c.getNombreDia());
System.out.println(c.getNombreNombrePaciente());
}
}
}

TERCER PROBLEMA

Para modificar una cita sería necesario un nuevo método en la clase Hospital
análodo a “crearCitaEspecialista” o “crearCitaPrueba”. Podría crearse un método
o dos, cada uno de ellos especializado en cada tipo de cita. En general, no es
necesario reimplementar de nuevo el sistema. Bastaría con crear una clase hija
de Hospital en la que se implemente este nuevo método, reutilizando el resto de
métodos.

Si nos adentramos a más nivel de detalle, cabría decir que esto solo es posible
si los atributos citasEspecialista y citasPrueba están definidos como
“protected” y no como “private”, ya que como “private” no podrían ser
modificados por la clase hija. En general, esto no suele ser un problema en la
reutilización de código. Para los atributos “private”, las clases suelen incluir
todos los métodos necesarios para modificar el atributo. Por ejemplo, bastaría
un que hubiera de antemano un metodo “borrarCita”.
Septiembre 2008 tipo A (mecánica)

TIPO A ORIG (mec)


• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el
de la asignatura y el tipo de examen.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado
la práctica.
• Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo

Primera Parte: Test


1. ¿Cómo se llama la técnica que utiliza un área del disco duro para almacenar datos destinados a la
memoria RAM cuando no queda espacio libre en ésta?
a) Memoria física.
b) Memoria virtual.
c) Memoria estática.
d) Memoria caché.

2. Un puerto USB:
a) Evita el uso de tarjetas especializadas para cada periférico.
b) Establece una conexión directa entre los dispositivos periféricos.
c) Establece un nivel hardware entre el sistema operativo y el compilador.
d) Es un hub que interconecta conjuntos de máquinas.

3. Un lenguaje orientado a objeto, frente a un ensamblador:


a) Permite un manejo más directo de los registros del computador.
b) Es más cercano al lenguaje natural.
c) Es más fiable ante caídas del sistema.
d) Evita la necesidad de compiladores complejos.

4. Cuál de las siguientes funciones no depende sistema operativo:


a) Gestión de ficheros.
b) Gestión del arranque del computador.
c) Gestión de la memoria.
d) Planificación de trabajos.

5. ¿Qué es una clase interna?


a) Una clase cuya definición está dentro de otra clase.
b) Una clase definida dentro de un paquete.
c) Una clase que hereda de otra.
d) Una clase que extiende a otra (utilizando el mecanismo de extensión).
6. ¿Que secuencia de valores imprimiría el siguiente código?

public class Prueba {


public static void main(String[] args) {
for (int i = 1; i < 3; i++) {
int j = 0;
do {
System.out.println(j);
j++;
} while (j <= 1);
System.out.println(i);
}
}
}

a) 0,1,2,0,1,2.
b) 0,1,1,0,1,2.
c) 0,1,1,0,1,1.
d) 2,1,1,2,2,1.

7. ¿Qué clases pueden acceder a un atributo declarado con el modificador 'protected'?


a) Sólo la propia clase.
b) Sólo las clases dentro del mismo paquete.
c) Las clases dentro del mismo paquete y los descendientes de la propia clase.
d) Sólo los descendientes de la propia clase.

8. Se tiene este código para un determinado método, ¿Qué salida daría por pantalla?

public void imprime(String Nombre) {


this.nombre=nombre;
nombre=this.nombrePila;
System.out.println(this.nombre);
}

a) El valor del atributo “nombre” de la clase.


b) El valor del parámetro de entrada “nombre”.
c) El valor de la variable “nombre” en el contexto del método.
d) El valor del atributo “nombrePila” de la clase.
9. Dado el siguiente código, sabiendo que la clase Alumno hereda de Persona, y que Persona dispone de
un método imprimirDNI se ejecutaría:
...
Alumno a = new Alumno(726382­L);
Persona b = a;
b.imprimirDNI();
...

a) El método imprimirDNI de la clase Persona.


b) Nada. Un error de compilación.
c) El método imprimirDNI, pero sólo si está redefinido en la clase Alumno.
d) Nada. Aparecería un error de ejecución (Null pointer exception)

10. En la práctica obligatoria, el tipo de cuerda se representó mediante un tipo:


a) String.
b) Enumerado.
c) Object.
d) Se empleó una clase distinta para cada tipo de cuerda.
Apellidos……………………………………………..Nombre……………………..DNI………...……
Centro asociado ……………………………………………..

Segunda Parte: Problema

Se desea implementar un sistema JAVA para la gestión de una fábrica de vehículos donde se fabrican motores
de tres tipos: gasolina, diésel y eléctricos. De cada motor se tiene como información característica la relación
de compresión y su cilindrada, así como un identificador único de la marca y el modelo del motor.

En el caso de motores de gasolina y diesel se debe guardar información relativa a la resistencia que presenta el
combustible cuando es comprimido dentro del motor: el índice de octanaje en el caso de la gasolina y el índice
de cetano en los motores diésel. Los motores de gasolina pueden ser de inyección o de carburación. En el caso
de los motores de gasolina con carburador deberá guardarse también el tamaño de la cuba como información
característica, y para los motores diésel y los de gasolina de inyección, el tipo de inyeccion (directa o
indirecta) y el número de inyectores. De los motores eléctricos se desea almacenar la información relativa a la
corriente y el par de arranque.

Por último, y dado que la fábrica está preparada para la construcción de diferentes modelos de coches, se desea
que la aplicación a desarrollar sea capaz de recuperar, para un modelo de coche dado, el conjunto de motores
compatibles con su chásis.

Se pide:

− 2'5 puntos. ¿Cómo modelarías este problema para que la aplicación soporte todas la especificación
requerida? Realiza el diseño de clases correspondiente.
− 1'5 puntos. ¿Dónde definirías el método necesario para devover, dado un modelo de coche, el conjunto de
motores compatibles con su chásis? Razona tu respuesta.
− 1 puntos. Implementa el código necesario para instanciar un motor de gasolina de inyección directa.

Solución al test septiembre 2008 tipo A (mecánica):


1-b, 2-a, 3-b, 4-b, 5-a, 6-b, 7-c, 8-a, 9-a, 10-b
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN
SEPTIEMBRE 2008, ESPECIALIDAD MECÁNICA

Se desea implementar un sistema JAVA para la gestión de una fábrica de


vehículos donde se fabrican motores de tres tipos: gasolina, diésel y eléctricos.
De cada motor se tiene como información característica la relación de
compresión y su cilindrada, así como un identificador único de la marca y el
modelo del motor. En el caso de motores de gasolina y diesel se debe guardar
información relativa a la resistencia que presenta el combustible cuando es
comprimido dentro del motor: el índice de octanaje en el caso de la gasolina y
el índice de cetano en los motores diésel. Los motores de gasolina pueden ser
de inyección o de carburación. En el caso de los motores de gasolina con
carburador deberá guardarse también el tamaño de la cuba como información
característica, y para los motores diésel y los de gasolina de inyección, el tipo
de inyeccion (directa o indirecta) y el número de inyectores. De los motores
eléctricos se desea almacenar la información relativa a la corriente y el par de
arranque.

Por último, y dado que la fábrica está preparada para la construcción de


diferentes modelos de coches, se desea que la aplicación a desarrollar sea
capaz de recuperar, para un modelo de coche dado, el conjunto de motores
compatibles con su chásis.

Se pide:
1. (2'5 puntos). ¿Cómo modelarías este problema para que la aplicación
soporte todas la especificación requerida? Realiza el diseño de clases
correspondiente.

2. (1'5 puntos). ¿Dónde definirías el método necesario para devover, dado


un modelo de coche, el conjunto de motores compatibles con su chásis?
Razona tu respuesta.

3. (1 punto). Implementa el código necesario para instanciar un motor de


gasolina de inyección directa.
EJERCICIO 1:

abstract Motor GestionMotores

private String marca; private List <Motor> listaMotores;


private String modelo;
private Double relComp;

public compatibilidad (String chasis)


/*Métodos get y set*/ /*Métodos get y set*/

Cita Cita Cita


MotorGasolina MotorDiesel MotorElec

private Double resistencia; private Double resistencia; private Double corriente;


private Double indOct; Private String tipoIny; private Double parArranque;

public MotorGasolina( public MotorDiesel( public MotorElec(


String marca, String marca, String marca,
String Modelo, String Modelo, String Modelo,
Double relComp Double relComp
Double relComp
Double resistencia, Double corriente,
Double resistencia, Double parArranque);
String tipoIny);
Double indOct); /*Métodos get y set*/
/*Métodos get y set*/
/*Métodos get y set*/

Cita Cita
MotorGasolinaIny MotorGasolinaCarb

Private String tipoIny Private int tamCuba

public MotorGasolinaIny( public MotorGasolinaCarb(


String marca, String marca,
String Modelo, String Modelo,
Double relComp Double relComp
Double resistencia, Double resistencia,
Double indOct Double indOct
String tipoIny); int tamCuba);

/*Métodos get y set*/ /*Métodos get y set*/


PRIMERA PREGUNTA:

En general, la jerarquía viene dada por la tipología de


motores descrita en el enunciado. Sobre ésta, basta con situar
cada atributo en las clases correspondientes. Si un atributo es
compartido por todas las clases hijas, entonces se añade
únicamente en la clase padre.

Hemos introducido como parámetros de entrada en cada


constructor todos los atributos de la clase. Otra posibilidad es
contar con el constructor por defecto (sin parámetros de entrada)
e incluir métodos get y set para dar valor a los atributos del
objeto creado.

SEGUNDO PROBLEMA

En cuando al problema de la compatibilidad entre chasis y


motores, es necesario disponer de alguna lista de motores sobre la
que comprobar la compatibilidad y devolver la lista reducida que
se pide en el enunciado. Para incorporar esta lista de motores se
requiere una nueva clase “GestionMotores” (no tiene sentido que
una clase contenga una lista de elementos de su misma clase).
Basta entonces con incluir en dicha clase un método que recorra la
lista y compruebe la compatibilidad chasis-motor.

TERCER PROBLEMA

Dado que todos los atributos vienen dados como parámetros de


entrada en el constructor, basta con una línea de código en el que
se cree el objeto pedido mediante una llamada a su constructor.

MotorGasolinaIny motorEjemplo =
new MotorGasolinaIny(“Opel”,“Corsa”,0.5,0.2,0.3,”directa”);
Septiembre de 2008 tipo A (reserva)

TIPO A RES(elec/mec)
• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el
de la asignatura y el tipo de examen.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado
la práctica.
• Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.

Primera Parte: Test

1. Para mejorar la velocidad de procesamiento sobre un gran conjunto de datos necesitarías:


a) Más memoria ROM.
b) Más memoria RAM.
c) Más memoria en el disco duro.
d) Un sistema operativo multiusuario.

2. ¿Cuál es la función de un modem?


a) Convertir datos digitales a analógicos para permitir la comunicación entre ordenadores por medio de una
red de área local.
b) Convertir datos digitales a analógicos para permitir la comunicación entre ordenadores por medio de una
línea telefónica.
c) La compresión de datos digitales para permitir la comunicación entre ordenadores por medio de una red
de área local.
d) La compresión de datos analógicos para permitir la comunicación entre ordenadores por medio de una
línea telefónica.

3. El sistema operativo:
a) Gestiona los tiempos de CPU asignados a los procesos.
b) Se encarga de la compilación de todos los programas ejecutados en el computador.
c) Se encarga de interconectar los elementos de la placa madre.
d) Es el componente hardware principal del computador.

4. El software es:
a) El conjunto de componentes físicos del ordenador.
b) La placa madre y sus componentes.
c) El conjunto de programas que nos permiten hacer uso del ordenador.
d) El conjunto de programas instalados en el ordenador, salvo el sistema operativo.
5. ¿Que secuencia de valores imprimiría el siguiente código?

for (int i=0; i < 3; i++ ) {


if ( i == 0 ) {
i++;
}
System.out.println(i);
}

a) 0, 1, 2.
b) 1, 2.
c) 1, 2, 3.
d) 0, 1.

6. Al crear una clase ¿siempre debe implementarse al menos un constructor?


a) Sí, porque si no tiene constructores no se puede saber cómo inicializar los objetos.
b) Sí, de hecho debe tener al menos dos constructores: uno con parámetros y otro sin ellos.
c) No, es posible crear clases que no tengan implementado ningún constructor; en ese caso se ejecutará el
constructor por defecto.
d) No, porque siempre es posible instanciar un objeto sin ejecutar ningún constructor.

7. La palabra clave extends se usa para:


a) Declarar una superclase.
b) Declarar una subclase.
c) Componer un conjunto de objetos.
d) Componer un conjunto de clases.

8. Se tiene este código para un determinado método:

Public void suma(int a,b){


this.suma = this.suma+this.a;
this.suma = this.suma+this.b;
System.out.println(this.suma);
}

¿Qué salida daría por pantalla?


a) La suma de los parámetros de entrada “a” y “b”.
b) La suma de los parámetros de entrada “a” y “b” más el valor del atributo “suma” de la clase.
c) La suma de los atributos “a”, “b” y “suma” de la clase.
d) La suma de los objetos “a” y “b”.
9. Dado el siguiente código:

public class Pedido {


public Pedido(int cantidad) {
...
}
public static void main(String[] args) {
Pedido pedido = new Pedido();
}
}

a) El código es correcto.
b) La creación del objeto 'pedido' es incorrecta.
c) Un método static no permite la creación de objetos.
d) Falta declarar el tipo que devuelve el método 'Pedido'.

10.En la práctica obligatoria, ¿en qué clases aparece el método getPrecio() ?


a) Únicamente en la clase Guitarra.
b) Únicamente en la clase GuitarraOferta.
c) En la clase Catalogo.
d) En las clases Guitarra y GuitarraOferta.
Apellidos……………………………………………..Nombre……………………..DNI………...……
Centro asociado ……………………………………………..

Segunda Parte: Problema


Un proveedor distribuye distintos tipos de piezas a una serie de clientes. Cada cliente adquiere un número de
piezas determinado cada mes, información que pueden alterar en cualquier momento. Para ello el distribuidor
almacena la información relativa a los clientes en cuentas. Cada cuenta tiene un titular y un pedido. Cada
pedido se compone de un conjunto de piezas, cada una de las cuales tendrá un identificador y un precio, y un
método para calcular el precio total del pedido.

Se pide:

− 2'5 puntos. Diseñar el diagrama de clases para una aplicación que permita gestionar las cuentas de cliente
y los pedidos, teniendo en cuenta que se han de poder añadir, eliminar y modificar dichas cuentas y
pedidos.
− 1'5 puntos. Modificar el diseño para que en el conjunto de piezas se distingan dos tipos de piezas. El
primero de ellas, las bielas, contendrá información acerca del diámetro de sus dos agujeros, así como su
longitud. El segundo tipo, el cigüeñal, debe almacenar el número de apoyos que tenga dicho cigüeñal.
¿Qué mecanismo has utilizado para introducir la modificación solicitada en este apartado? ¿Por qué?
− 1 puntos. Escribe el código necesario para calcular el precio total de un pedido según el diseño resultante
del apartado anterior.

Solución al test de septiembre de 2008 tipo A (reserva):


1-b, 2-b, 3-a, 4-c, 5-b, 6-c, 7-b, 8-c, 9-b, 10-d
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN
DE RESERVA EN SEPTIEMBRE 2008,

Un proveedor distribuye distintos tipos de piezas a una serie de clientes. Cada


cliente adquiere un número de piezas determinado cada mes, información que
pueden alterar en cualquier momento. Para ello el distribuidor almacena la
información relativa a los clientes en cuentas. Cada cuenta tiene un titular y un
pedido. Cada pedido se compone de un conjunto de piezas, cada una de las
cuales tendrá un identificador y un precio, y un método para calcular el precio
total del pedido. Se pide:

1. 2'5 puntos. Diseñar el diagrama de clases para una aplicación que


permita gestionar las cuentas de cliente y los pedidos, teniendo en
cuenta que se han de poder añadir, eliminar y modificar dichas cuentas y
pedidos.

2. 1'5 puntos. Modificar el diseño para que en el conjunto de piezas se


distingan dos tipos de piezas. El primero de ellas, las bielas, contendrá
información acerca del diámetro de sus dos agujeros, así como su
longitud. El segundo tipo, el cigüeñal, debe almacenar el número de
apoyos que tenga dicho cigüeñal. ¿Qué mecanismo has utilizado para
introducir la modificación solicitada en este apartado? ¿Por qué?

3. 1 punto. Escribe el código necesario para calcular el precio total de un


pedido según el diseño resultante del apartado anterior.
EJERCICIO 1:

GestionCuentas

private List <Cuenta> listaCuentas;

public List<Cuenta> getCuentas();


public void removeCuenta(Cuenta c);
public void addCuenta(Cuenta c);

/*Métodos get y set*/

Cuenta

private String Cliente;


private List<Pieza> pedido;

public void Cuenta(String cliente);


public List<Pieza> getPedido();
public void removePieza(Pieza p);
public void addPieza(Pieza p);
public int calculaPrecioTotalPedido();

/*Métodos get y set*/

Pieza

Private String identificador;


Private int precio;

public void Pieza(


String identificador,
int precio);

/*Métodos get y set*/


PRIMERA PREGUNTA: DISEÑO DE CLASES

Para poder añadir o eliminar cuentas, es necesario una clase


que contenga al menos una lista de cuentas sobre las que poder
operar. Ésta es la clase “GestionCuentas”. Dado que existe un
único pedido por cada cuenta, ambos conceptos se pueden abstraer
como una única clase, siendo “pedido” un atributo tipo lista
dentro de la clase “Cuenta”. Otra opción consistiría en definir
dos clases independientes que mantengan una relación de
composición.

Para poder modificar pedidos, es necesario poder borrar o


añadir piezas de la lista “Pedidos”. Para ello, definimos los
métodos correspondientes en la clase “Cuenta”.

SEGUNDO PROBLEMA

Para añadir dos subtipos de “Pieza” no es necesario modificar


lo establecido en el esquema de clases anterior. Basta con añadir
dos nuevas clases que hereden de “Pieza”. Por la propiedad de
polimorfismo, las clases descritas en el esquema anterior que
operan sobre precios de piezas, seguirán comportándose de la misma
forma, independientemente del tipo de pieza a que corresponda cada
elemento de la lista “pedido”.

Pieza

private String identificador;


private int precio;

public void Pieza(


String identificador,
int precio);
/*Métodos get y set*/

Biela Cigüeñal

private int diametro;


private int longitud; private int puntosApoyo;

public void Pieza( public void Pieza(


String identificador, String identificador,
int precio, int precio,
int diametro, int puntosApoyo);
int longitud); /*Métodos get y set*/
/*Métodos get y set*/
TERCER PROBLEMA

Siendo cuentaEj un objeto “Cuenta” ya instanciado con elementos


dentro del atributo “pedido” bastaría con escribir:

int precioTotal = cuentaEj.calculaPrecioTotal();


FEBRERO 2009 Primera Semana

TIPO A mod I

• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de
carrera, el de la asignatura y el tipo de examen.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha
realizado la práctica.
• Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.

Primera Parte: Test

1. ¿Dónde se integran todos los componentes que proporcionan funcionalidad al


computador?
a) En la controladora USB.
b) En la BIOS.
c) En la placa base.
d) En las interfaces IDE.

2. Indique cuál de las siguientes afirmaciones NO es correcta.


La máquina virtual de java:
a) Permite ejecutar un mismo código en diferentes plataformas.
b) Se necesita una versión de la máquina virtual para cada sistema operativo (Windows, Linux,
MacOS, etc.).
c) Es el compilador de Java que transforma código fuente en código máquina.
d) Interpreta el bytecode (.class) de un programa Java y lo transforma en código máquina.

3. La memoria principal de un ordenador está compuesta por la combinación de:


a) Memoria RAM y memoria virtual .
b) Memorias ROM y RAM .
c) Discos duros, unidades extraibles .
d) Memoria caché de niveles 1 y 2 .
4. En la práctica realizada este año, ¿qué relación existe entre las clases Tren y Vagón?
a) Composición.
b) Herencia.
c) Abstracción.
d) Encapsulación.

5. En la práctica realizada este año, para dibujar la carga de un vagón en función de su peso
sería necesario modificar el método Draw de la clase:
a) Tren.
b) Vagón.
c) Figura.
d) Locomotora.

6. Indique cuál de las siguientes afirmaciones es correcta:


a) Pueden existir múltiples objetos a partir de una misma clase.
b) Pueden existir múltiples clases a partir de un mismo objeto.
c) Por cada clase puede existir un único objeto.
d) Los conceptos clase y objeto son equivalentes.

7. Se tiene un sistema informático en JAVA para la gestión de una tienda, compuesto por una
clase Tienda y otra clase Cliente de la que heredan dos: ClienteHabitual y
ClienteEsporádico. Si quisiéramos disponer de una lista de Clientes, ¿dónde sería correcto
incluirla?
a) En la clase cliente
b) En la clase Tienda
c) En cualquiera de las clases que heredan de Cliente
d) No sería posible la inclusión de listas con el diseño dado.

8. Si existe código duplicado en dos clases diferentes, indique el mecanismo que utilizaria en
Java para evitar el problema:
a) Composición de clases.
b) Polimorfismo.
c) Herencia.
d) Estructuras de control.
9. ¿Qué secuencia numérica imprimiría el siguiente código?

...
for (int i=0; i < 10; i=i+2) {
if ( i > 2 ) {
System.out.println(i);
}
}

a) 0, 2, 4, 6, 8.
b) 0, 2.
c) 4, 6, 8.
d) 4, 6, 8, 10.

10. La finalidad de los métodos de acceso (get) a campos (atributos) en una clase JAVA es:
a) Dar información sobre el estado del objeto a otras clases.
b) Modificar los campos de una clase.
c) Permitir que las clases hijas hereden los campos.
d) Redefinir el tipo de los campos.
Apellidos………………………………...……..Nombre……………………..DNI………...……

Segunda Parte: Problema

Partiendo del siguiente diagrama de clases:

Se desea diseñar un gestor para la compra de billetes de tren. Dicho gestor almacenará todos los
trenes disponibles en un momento dado y permitirá la adquisición de billetes para un tren dado su
destino. Cada tren se caracteriza por su destino y por los vagones que lo componen. Cada vagón
tiene un límite de plazas y un número de plazas libres. Cada billete tendrá asociados un nombre y un
DNI correspondientes a su comprador.

a) (1,5 Puntos) Dado el diagrama, completar la clase tren para que sea coherente con el diseño
y además proporcione métodos para saber el número de plazas totales en un tren, las
ocupadas, las libres y además incluya un método adquirirPlaza.
b) (1,5 Puntos) Extender el diagrama para incluir el Gestor de Billetes y los Billetes. Para
comprar un billete a través del gestor es necesario un método que permita especificar el
destino, de forma que se pueda identificar el tren correspondiente para comprobar si existen
plazas libres, y en su caso, adquirir una. Dicho método devolverá un objeto de la clase
Billete.
c) (1 Punto) Describa de forma ordenada cómo se buscaría un tren con un destino concreto
según su diseño, especificando la clase o clases dónde se realizaría dicha búsqueda y las
estructuras de control que sería necesario utilizar.
d) (1 Punto) Dado un tren concreto, describa de forma ordenada el proceso que llevará a cabo
el método adquirirPlaza (buscar una plaza libre en el tren y ocuparla), especificando las
estructuras de control necesarias en cada paso y las llamadas a métodos que serían
necesarias.
Solución febrero de 2009 - Primera semana (TIPO A):
1 c), 2 c), 3b), 4 a), 5b), 6a) -se admite también como
correcta 6 c)-, 7b), 8c), 9 c), 10 a)
FEBRERO 2009 Segunda Semana

TIPO A mod II

• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de
carrera, el de la asignatura y el tipo de examen.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha
realizado la práctica.
• Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.

Primera Parte: Test

1. ¿Qué elemento NO afecta a la velocidad a la que se ejecuta un programa?


a) La frecuencia de reloj de la placa madre.
b) La memoria caché.
c) La memoria RAM disponible.
d) La bios.

2. La máquina virtual de JAVA es:


a) Un traductor de codigo intermedio a codigo objeto.
b) Un sistema operativo independiente de plataforma.
c) Un gestor de memoria.
d) El mecanismo que permite la herencia.

3. Indica cuál de los siguientes programas de control no son componentes de un sistema


operativo :
a) Cargador de módulos (System Loader)
b) Traductores (compiladores e intérpretes)
c) Controlador de trabajo (Job Control)
d) Administración de memoria.
4. En la práctica realizada este año, ¿cuántos vagones puede llegar a tener un tren?
a) Un número ilimitado.
b) Un número constante.
c) Uno por cada tipo de carga.
d) Depende de la potencia de la locomotora.

5. En la práctica realizada este año, a los métodos de la clase Pizarra se accede desde las
clases hijas de:
a) Figura.
b) Vagón.
c) Locomotora.
d) Tren.

6. Considerando la instanciación c = new Casa(), y sabiendo que la clase Casa tiene un


método definido como public int getSuperficie(), indique cuál de las siguientes sentencias
devolvería la superficie de una casa concreta:
a) Casa.getSuperficie();
b) Casa().getSuperficie();
c) getSuperficie(c);
d) c.getSuperficie();

7. Cuando una clase tiene como atributo (campo) una lista de objetos de otra clase decimos
que entre ambas existe una relación de:
a) Herencia.
b) Abstracción.
c) No existe ninguna relación.
d) Composición
8. Cual de estas siguientes afirmaciones es FALSA. El mecanismo de herencia permite:
a) Reutilizar programas sin tocar su código (extensibilidad).
b) Reducir la cantidad de código redundante al diseñar un sistema.
c) Eliminar campos de una clase previamente implementada.
d) Crear una clase similar a otra previamente implementada pero con nuevos campos y métodos.

9. ¿Que secuencia de valores imprimiría el siguiente código?


...
int j = 0;
for (int i = 1; i < 3; i++) {
  do{
    int j = j + 3;
    System.out.println(j);
    } while (j < 10);
}

a) 3,6,9,12
b) 1,3,6,10,15
c) 0,1,3,6
d) 1,2,4,8

10. Una variable local es:


a) La que se define fuera de los métodos y no es visible desde otras clases.
b) La que se define en el encabezado del método.
c) La que se define dentro de un método.
d) La que se define fuera de los métodos y es visible desde otras clases.
Apellidos& & & & & & & & & & & & & & & & ..Nombre& & & & & & & & ..DNI& & & ...& &

Segunda Parte: Problema

Una empresa de logística quiere informatizar su actividad. Esta empresa se dedica a la organización 
y distribución de flujos de mercancías por vía terrestre, en particular, por ferrocarril.  
Se deberá poder tratar un conjunto de solicitudes de clientes, cada una de las cuales deberá tener un
identificador de cliente, un tipo de carga contratada y la cantidad que se quiere transportar.
A partir de cada solicitud, se deberá fletar un tren (en nuestro caso, esto es instanciar un objeto de la
clase Tren) para el transporte de esa mercancía, con un número de vagones que dependerá de la
cantidad y tipo de mercancía a transportar. Al igual que en la práctica de este año, cada tren está
formado por una locomotora y un conjunto de vagones.
Se pide:

1. (1,5 puntos)  A partir de la clase Tren mostrada en la figura, representar el diagrama de 
clases necesario para llevar a cabo las acciones descritas en el enunciado. No es necesario 
especificar las clases Locomotora y Vagón, ni sus métodos. Por tanto, deberán indicarse to­
dos los campos y métodos necesarios sólo en la clase o clases que se definan. 

2. (2 puntos) Explique en detalle cómo debería implementarse un método capaz de acceder al 
conjunto de solicitudes que se tengan almacenadas en un momento dado, e ir fletando trenes 
con las características requeridas en cada caso. 

3. (1'5 puntos) Crear los objetos y hacer las llamadas necesarias para instanciar dos solicitudes 
(Pepe quiere desplazar 5000kg de madera y Juan desea enviar 6000Kg de hierro), así como 
gestionlas, es decir, fletar trenes que puedan realizar ambos transportes.

Solución febrero de 2009 - Segunda semana (TIPO A):


1d), 2a), 3b), 4d), 5a), 6d), 7d), 8c), 9a), 10c)
NOTA: Se ha detectado una errata en la pregunta 9 del test.
A efectos de calificacion se ha considerado la opción a) como correcta,
pero cualquier otra opción NO se ha considerado como error.
FUNDAMENTOS DE INFORMÁTICA Elec_sem1_A

• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test utilizando la hoja de lectura óptica.
• No olvide indicar en la hoja de lectura óptica el tipo de examen (A,B o C)
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

TIPO A

Primera Parte: Test

l. ¿Cuál de las siguientes afirmaciones sobre la memoria virtual es cierta?


a) Es también conocida como memoria caché.
b) Es en realidad un área del disco duro.
e) El acceso a memoria virtual es más rápido que el acceso a memoria RAM.
d) No es compatible con la memoria RAM.

2. Según el nivel de abstracción los lenguajes de programación se clasifican en:


a) Lenguajes de programación imperativos, declarativos y orientados a objetos.
b) Lenguajes de programación ensamblados, compilados, interpretados y procesados.
e) Lenguajes de programación de bajo nivel y de alto nivel.
d) Lenguajes de programación científicos, de gestión y multipropósito.

3. ¿Cuál de estas afirmaciones es falsa? La herencia en JAVA sirve para:


a) poder reutilizar código ya implementado y añadir nuevas funcionalidades sin necesidad
de modificar el código anterior.
b) evitar redundancia en la implementación de clases que tienen atributos (campos)
comunes.
e) utilizar objetos dentro de otros objetos.
d) evitar redundancia en la implementación de clases que tienen métodos comunes.

4. Cuando utilizamos el mecanismo de extensión para crear una nueva clase:


a) La nueva clase heredara los métodos y campos (o atributos) de aquella a la que
extiende.
b) La clase original heredará los métodos y atributos de la nueva clase.
e) Ambas clases heredan los métodos y atributos de la otra.
d) La nueva clase contiene un objeto de la clase original.

5. Se dice que existe una "llamada a un método interno":


a) Cuando los métodos llaman a métodos de otra clase como parte de su implementación.
b) Cuando los métodos llaman a otros métodos de su clase como parte de su
implementación.
e) Cuando los métodos acceden a campos internos de su clase como parte de su
implementación.
d) Cuando los métodos acceden a campos internos a otra clase como parte de su
implementación.
6. La declaración de un método (o campo) como protected:
a) Únicamente permite el acceso directo desde las clases definidas dentro del mismo
paquete.
b) Permite un acceso protegido por clave desde las clases definidas dentro del mismo
programa.
e) Permite el acceso directo desde las subclases directas o indirectas.
d) Permite un acceso protegido por clave desde las subclases directas o indirectas.

7. En la práctica obligatoria la relación de herencia aparecía entre:


a) Las clases que representaban a un cliente y a un cliente VIP.
b) Las clases que representaban a un cliente y al gestor de clientes.
e) Las clases que representaban a un cliente VIP y al gestor de clientes.
d) Las clases que representaban a un cliente y al gestor de clientes Avanzado.

8. ¿Que secuencia de valores imprimiría el siguiente código?

Ec.n- Urn: i=l;i<3;i++) {


f r_; r j = 3;j > 1 ;j --) {
(ir: t
System.out.print(j);
System.out.print(i);

a) 132231
b) 31213222
e) 312213
d) 13122322

9. Indique cuál de las siguientes afirmaciones es correcta:


a) Un objeto es la instanciación de una clase.
b) Una clase es la instanciación de un objeto.
e) Un objeto es una referencia a una clase.
d) Una clase es una referencia a un objeto.

10. En Java, un bloque try/catch se emplea para:


a) El control de excepciones
b) Poder implementar ciclos for-each
e) Agrupar objetos en colecciones de tamaño flexible.
d) Implementar constructores por defecto.
Apellidos ...............................................Nombre..........................DNl..................

Segunda Parte: Problema

Una conocida marca de muebles montables sueca, necesita un sistema para el diseño de cocinas.
Para ello se ha de modelar el siguiente problema: Una cocina se compone de una serie de
estructuras. Existen dos tipos de estructuras: altas y bajas. Las altas miden 2 metros de alto por 60
cm de ancho. Las bajas miden 1 metro de alto por 120 cm de ancho. Se asume que un montaje de
cocina ocupa una pared. Una estructura alta puede contener o no una nevera. Una estructura baja
puede contener un horno, unos fuegos o ambas cosas. Se necesita una clase "Cocina" que permita
las siguientes funcionalidades:

l. Añadir una estructura alta a la cocina. Como parámetro de entrada se puede indicar si
contiene o no una nevera.
2. Añadir una estructura baja a la cocina. Como parámetros se puede indicar si contiene horno,
fuegos o ambos.
3. Comprobar que exista ya una nevera.
4. Comprobar que exista ya un horno.
5. Comprobar que existan ya fuegos.
6. Dada una cierta longitud (de pared), comprobar que la cocina que se está diseñando no
exceda dicha longitud.

Se pide (lea con atención todos los apartados antes de empezar a responder y asegúrese de que su
diseño cubra los aspectos requeridos):

a) (2 Puntos) Realizar el diagrama de clases indicando las clases, campos y relaciones


necesarias para modelar el problema, teniendo en cuenta que el conjunto de tipos de
estructuras puede ser ampliado.
b) (1 Punto) Asumiendo que el sistema descrito en el apartado anterior ya está implementado,
escribir una línea de código para cada una de las siguientes operaciones:
l. la creación de una estructura alta con nevera,
2. la creación de una nueva cocina
3. introducir la estructura en la cocina.
e) (2 Puntos) Escribir el código del método que recorre las estructuras para comprobar que la
longitud suma no exceda una longitud máxima dada.
FUNDAMENTOS DE INFORMÁTICA Elec sem2 A

•Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•Responda el test utilizando la hoja de lectura óptica.
•No olvide indicar en la hoja de lectura óptica el tipo de examen (A,B o C)
•Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

TIPO A

Primera Parte: Test

l. Indique cuál de los siguientes componentes NO forman parte de la placa madre:


a) Unidad Central de Proceso.
b) Disco duro.
e) Chipsets.
d) Controladores IDE.

2. El proceso en tiempo compartido (time-sharing) distribuye . . .


a) varios procesos en distintos slots de tiempo y un mísmo procesador.
b) varios procesos en distintos procesadores ejecutandose al mismo tiempo.
e) un mismo proceso en varios procesadores en paralelo.
d) Ninguna de las respuestas anteriores es correcta.

3. Para modelar relaciones padre, madre e hijos entre objetos de la clase "persona" en JAVA
aplicaría:
a) Técnica de la herencia.
b) Composición entre clases.
e) Definición de persona como tipo primitivo o clase predefinida.
d) Objetos tipo arreglo o matrices.

4. Indique la afirmación FALSA en el contexto de la programación orientada a objetos:


a) Una superclase es una clase a partir de la cual se crea otra clase mediante el mecanismo
de herencia.
b) Una subclase es una clase creada a partir de otra clase mediante el mecanismo de
herencia.
e) Una superclase hereda todos los campos y métodos de una subclase.
d) Una subclase hereda todos los campos y métodos de una superclase.

5. ¿Puede un método llamar a métodos de otros objetos?


a) Sí, usando la notación de punto sobre el nombre de la clase a la que pertenece el objeto.
b) Sí, usando la notación de punto sobre el nombre del objeto.
e) No, desde un método sólo se puede llamar a otros métodos del propio objeto.
d) No, desde un método nunca se puede llamar a otro.
6. ¡,Con cuántos parámetros puede llamarse al constructor de la siguiente clase?
public class A
{
private int x;
private int y;
public A(int x) { this.x=x; }
public A(int x, int y) { this.x=x; this.y=y; }
}
a) Sólo con uno, el segundo constructor queda anulado.
b) Sólo con dos, el primer constructor queda anulado.
e) Con uno o con dos.
d) El código es incorrecto dado que sólo puede haber un constructor en cada clase.

7. En la práctica obligatoria de este año, indique en qué clase se implementaba una estructura
de almacenamiento polimórfica.
a) En la clase que representa a un cliente.
b) En la clase que representa a un cliente vip.
e) En la clase que representa a un gestor.
d) En la clase que representa a un cliente avanzado.

8. ¿Que secuencia de valores imprimiría el siguiente código?

for( int i=O; i < 10; i=i+2 ) {


if ( i 1 2 != 1 ) {
System.out.println(i);

a) O, 4, 6, 8.
b) 2, 4, 6, 8.
e) O, 2 , 6, 8.
d) O, 4, 6, 8, 10.

9. Indique cuál de las siguientes afirmaciones es correcta:


a) Un objeto representa la simplificación formal de una clase.
b) Un objeto representa el estado de una clase a partir del valor que toman sus campos.
e) Un objeto representa una instancia de una clase.
d) En un objeto se implementan campos y métodos que han sido definidos previamente en
su clase.

10. Sabiendo que la clase Alumno posee un campo DNI no privado, ¿qué imprimiría el
siguiente fragmento de código?:
Alumno a = new Alumno();
a.DNI="1234567-L";
Alumno b = a;
a.DNI=�3748293-J";
System.out.printLn(b.DNI);

a) 1234567-L
a) Nada. Aparecería un error de ejecución (Null pointer exception)
b) 3748293-J
e) La sintaxis de este fragmento de código es errónea.
Apellidos...............................................Nombre..........................DNI................. .

Segunda Parte: Problema

Se desea diseñar un gestor de alquiler de pistas para un polideportivo privado. El polideportivo


tendrá socios y un conjunto de pistas que podrán ser alquiladas por esos socios. Un socio se
caracteriza por un número de socio, un nombre y unos apellidos. Una pista tendrá un número de
pista y un precio. Dicha pista podrá ser alquilada por un socio en un día y una hora determinados. El
polideportivo almacenará los socios y las pistas, además de las reservas de pista. El sistema debe
cubrir los siguientes aspectos:
Alta de nuevos socios.
Inclusión de nuevas pistas.
Reserva de una pista por parte de un socio, en un día y una fecha determinados. Una pista
previamente reservada no se puede volver a reservar.
Consulta del precio de una pista, dado su número de pista.
Consulta de la disponibilidad de una pista en un día y una hora determinados.

Para facilitar el diseño, se puede considerar lo siguiente:


Se dispone de una clase Date que representa una fecha y dispone de los métodos apropiados
para realizar comparaciones entre dos fechas.
Del mismo modo, se dispone de una clase Time que representa una hora, que cuenta con los
métodos necesarios para las comparaciones.

Se pide (lea con atención todos los apartados antes de empezar a responder y asegúrese de que su
diseño cubra los aspectos requeridos):

l. (3 puntos) Diseñar el sistema requerido representando el esquema de clases resultante, que


muestre las clases necesarias, sus campos y métodos, así como las relaciones entre las
clases.
2. (1 punto) Describa, detallando llamadas a métodos, especificando las acciones que se
llevarían a cabo en estos, así como la salida que presentaría el sistema (si la hubier, el
proceso que se seguiría cuando un socio reserva una pista que ha sido previamente
reservada.
3. (1 punto) Por motivos económicos, el polideportivo decide que usuarios que no son socios
también pueden alquilar pistas. Para ello, introducen la figura del visitante. Un visitante
tendrá las mismas características que un socio, salvo que su número de socio será siempre'-
1' y para identificarlo se almacenará su DNI. Describa la manera en que podría incluirse en
su diseño la figura del visitante sin necesidad de modificar las clases especificadas en el
apartado l. ¿Ha utilizado algún mecanismo propio de la programación orientada a objetos?.
Si lo ha hecho, explique por qué. Si no lo ha hecho, justifique su decisión.
FUNDAMENTOS DE INFORMÁTICA
Electricidad_grado_sept1 O

•Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•Responda el test utilizando la hoja de lectura óptica.
•No olvide indicar en la hoja de lectura óptica el tipo de examen (A,B o C)
•Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

Apellidos ...............................................Nombre ..........................DNI ...............

Primera Parte: Test

l. Indique la afirmación CORRECTA:


a) La memoria caché es volátil.
b) La memoria virtual no es volátil.
e) La memoria RAM no es volátil.
d) La memoria ROM es volátil.

2. El estado de un objeto:
a) está representado por su clase.
b) está representado por sus métodos estáticos.
e) está representado por los valores de sus campos.
d) está representado por el compilador.

3. Se desea que el atributo edad de la clase "Persona" sea coherente con el atributo "Fecha de
nacimiento". Para ello:
a) Declararíamos ambos atributos como privados para que sólo se pueda modificar desde
métodos de la clase.
b) Definiríamos ambos atributos como tipos predefinidos.
e) Crearíamos una relación de composición entre ambos atributos.
d) Definiríamos ambos atributos como constantes.

4. Un sistema que implementa todas las funcionalidades en el núcleo se denomina:


a) Estratificado.
b) Centralizado.
e) Monolítico.
d) Simétrico.

5. En la práctica de este año, el campo número de puntos acumulados se encuentra en la clase:


a) Persona
b) Gestor de clientes
e) Cliente VIP.
d) Ninguna de las anteriores
6. Dado el siguiente código:, la salida correcta sería:
'nt i = 2;
int j = 1 O;
w hile ( i < 15 ) {

S ystem.out. println(i);
System.out.printlnU);
i = i * 2;
lf ( j > 9) [

y--;
l
J

a) 2, 4, 8, 10, 9, 9.
b) 2, 9, 4, 9, 8, 9.
e) 2, 10, 4,9, 8, 8.
d) 2, 10, 4, 9, 8, 9.

7. En un repositorio se dipone de una clase (.class) "persona" con los atributos típicos
(nombre, dni, edad). Para reutilizar esta clase en un sistema que calcule estadísticas de edad
sobre una población es necesario:
a) Crear una subclase que herede de Persona.
b) Modificar el fichero compilado (.class).
e) No podemos reutilizar la clase por disponer solo del fichero compilado (.class)
d) Crear una clase que importe la clase Persona.

8. Un grupo consta de n alumnos no conocidos a priori. La forma correcta de modelado es:


a) Mediante una relación de herencia entre clases "grupo" y "alumno".
b) "Grupo" tendría que ser una clase abstracta.
e) Mediante una relación de composición entre clases "grupo" y "alumno" mediante una
estructura tipo ARRAYList.
d) "Grupo" contendría n atributos o campos de la clase "alumno".

9. En un programa JAVA, la lectura de un fichero de texto puede producir errores de tipo si el


fichero no está en un formato correcto. Para evitar que la ejecución se detenga en estos
casos:
a) Se usaría un bloque "try { ... } catch { ... } "
b) No se puede controlar este tipo de errores.
e) Se emplearía una clase abstracta.
d) Se crearía un objeto tipo fichero con atributos privados.
lü. Dado el siguiente método, el valor de salida para la llamada 'ealculate(2, 3, false)' sería:

)ublic static int calculate(int a, int b, boolean p) {


int e= a+ b;
if (p){
for (int i=O; i < 3; i++) {
e= e + i;
}
} else {
.e ( . " . .
)nt 1=.j; 1 ; 1--) Jl
'

lÜf 1>

e = e+ i;

}
retum e;

a) 10
b) 9
e) 8
d) 11
Apellidos...............................................Nombre..........................DNI..................

Segunda Parte: Problema

La Universidad a Distancia UaD ha decidido informatizar la gestión de sus centros asociados. Para
ello se pide diseñar una aplicación que permita guardar la siguiente información:

Los centros de que dispone la UaD, cada uno con su nombre, una lista de alumnos y otra de
tutores.
Tanto alumnos como tutores tendrán un nombre, unos apellidos y un NIF.
Los alumnos tendrán un número de expediente.
Los tutores tendrán las asignaturas que imparten (a priori se desconoce el número). Basta con
almacenar el nombre de las asignaturas.
Se deben poder añadir, borrar y listar centros, alumnos y tutores.
Se deben poder listar las asignaturas impartidas por un tutor.
Se debe poder obtener la lista de tutores que imparten una asignatura en todos los centros.
Se deben poder buscar tanto alumnos como tutores por NIF.
Se debe poder buscar un alumno por número de matrícula.
Para el caso de los listados y las búsquedas de alumnos y tutores, se ha de buscar en todos los
centros.

Por simplicidad asumimos que cada alumno sólo tiene un número de expediente y estará asociado a
un único centro, y que cada asignatura es tutorizada por un solo tutor en cada centro.

a) Diseñar el sistema requerido, representando el esquema de clases resultante, mostrando las clases
necesarias, sus campos y métodos, así como las relaciones entre las clases. (3 puntos)

b) Detalle el código necesario para (en cada punto se puede utilizar lo del anterior): (1 punto)
bl) Instanciar el sistema para empezar a trabajar con él.
b2) Añadir un centro con los siguientes datos: Nombre=Madrid.
b3) Añadir tutores y alumnos al centro de Madrid (un tutor y tres alumnos, por ejemplo)
b4) Buscar un alumno por número de expediente.

e) Describa detalladamente cómo funcionaría el método que permite obtener la lista de tutores que
imparten una asignatura en la UaD. Suponiendo que pueda haber más de un tutor para una misma
asignatura en un mismo centro, ¿Qué cambios habría que hacer en todo lo anterior? (1 punto)
FUNDAMENTOS DE INFORMÁTICA

res_electricidad_grado_sept10

•Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•Responda el test utilizando la hoja de lectura óptica.
•Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

Apellidos ...............................................Nombre ..........................DNI ...............

Primera Parte: Test

l. En la ejecución de un programa se ha generado un ARRA Y de más longitud que la que


permite la memoria RAM. Una solución es:
a) El uso de memoria virtual
b) Aumentar la capacidad de memoria del disco duro.
e) Trabajar con un sistema operativo con multiproceso.
d) Ampliar la memoria ROM.

2. La herramienta que nos permite obtener un programa objeto a partir de uno fuente se llama:
a) Depurador.
b) Compilador.
e) Intérprete.
d) Controlador.

3. El proceso en tiempo compartido (time-sharing) permite:


a) ejecutar varios procesos de forma intercalada.
b) reducir el tiempo total de ejecución de los procesos.
e) aumentar el número de intrucciones ejecutadas por la CPU por unidad de tiempo.
d) evita problemas de interdependencias entre procesos.
4. En la práctica de este año, el campo correspondiente al número de cliente en la clase Cliente
VIP es heredada de:
a) la clase Persona
b) la clase gestor de clientes
e) la clase Cliente.
d) ninguna de las anteriores

5. ¿Para qué sirve definir un atributo como privado (private)?


a) Para que sólo se pueda modificar a través de los métodos de la clase.
b) Para que sea heredado por las clases hijas.
e) Para que no pueda modificarse desde ningún método público de la clase.
d) Para indicar el propietario de la clase.
6. Dada una clase A con un campo de tipo lista que almacene objetos de la clase B, se dice que:
a) La clase B hereda de la clase A.
b) La clase A se compone de la clase B.
e) La clase A hereda de la clase B.
d) La clase B se compone de la clase A.

7. ¿Que secuencia de valores imprimiría el siguiente código?

f 1_; !:' ( i r: t. i=3; i > 1 ; i--){


fo.t: (ult j=l;j<3;j++){

System.out.print!il;

a) 3,1,2,1,1,3
b) 1,3,2,3,1,2,2,2
e) 1,3,1,2,3,1
d) 3,1,3,2,2,1,2,2
8. Las clases Automóvil, Coche y Camión tienen las tres un campo matrícula. Sólo la clase
Coche tiene un campo plazas y sólo la clase Camión tiene un campo carga. Asumiendo que
esto es todo lo que se desea modelar ¿Cuál es la forma más apropiada de modelarlas en
Java?
a) Con una clase Automóvil de la que heredan Coche y Camión.
b) Con tres clases sin relaciones entre ellas.
e) Con una clase Automóvil de la que herede Coche, de la que a su vez herede Camión.
d) Con una clase Coche de la que herede Camión.
9. Queremos que un objeto "Persona" pueda crearse asignandole un DNI o un DNI más el
nombre completo. ¿Cómo se podría hacer esto?
a) Creando dos constructores con el mismo nombre. Uno con un parámetro de entrada y
otro con dos.
b) Creando dos constructores con distinto nombre.
e) Creando dos clases independientes
d) No es posible.

lü.El uso de diagramas de clase es importante para:


a) Prever el solapamiento entre clases.
b) La detección de errores en tiempo de compilación.
e) La detección de errores en tiempo de ejecución.
d) El control de excepciones.
Apellidos...............................................Nombre..........................DNI..................

Segunda Parte: Problema


Una empresa tiene un conjunto de trabajadores. Cada trabajador tiene un nombre, una dirección y
una cuenta bancaria. Los trabajadores pueden ser:
l. Empleados, que tienen una nómina mensual, en función de un salario anual, con un número
de pagas y un tipo de retención de IRPF.
2. Consultores, que trabajan por horas a una determinada tarifa horaria.
La empresa desea generar mensualmente las transferencias bancarias a realizar para el conjunto de
sus trabajadores, en donde conste para cada trabajador, su nombre, su cuenta y la cantidad a
ingresar. Se pide:

a) (2.5 Puntos) Realizar el diagrama de clases indicando las clases, métodos, atributos o
campos y relaciones necesarias para modelar el problema.

b) (2.5 Puntos) Implementar los métodos (no las clases completas) implicados en la
generación de las transferencias.
TIPO A madi

• Para la nota del examen, el test vale el30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en la hoja de lectura óptica.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha
realizado la práctica.

Printera Parte: Test

l. ¿Qué es la tecnología ""plug-and-play"?

a) Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que
funcione sólo sería necesario enchufar el dispositivo e instalar los drivers adecuados que
vienen con dicho dispositivo. La asignación del número de intenupción asociada al
dispositivo se hace de forma automática.
b) Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que
funcione sólo se1ía necesario enchufar el dispositivo ya que los drivers los detecta de
forma automática. La asignación del número de interrupción asociada al dispositivo se
hace de forma manual.
e) Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que
funcione sólo sería necesario enchufar el dispositivo ya que los drivers los detecta de
fmma automática. La asignación del número de interrupción asociada al dispositivo se
hace de forma automática.
d) Un sistema que permite la instalación de nuevos dispositivos. Para que funcione se
tendría que enchufar el dispositivo además de instalar un conversor para que pueda
trabajar de analógico a digital.

2. Indica cuál de los siguientes programas NO es un programas de control de un sistema


operativo:
a) Cargador de módulos.
b) Controlador de tareas.
e) Administrador de memoria.
d) Compilador.

3. La herencia es un mecanismo muy útil para:

a) La reutilización de código en la implementación de nuevos sistemas.


b) Implementar estmcturas dinámicas de almacenamiento.
e) Generar código portable a otros sistemas operativos.
d) La implementación de bucles.
4. ¿Que secuencia de valores imprimiría el siguiente código?

for (int i=l;i<J;i++){


for (int j=l; j<J; j++) {
System.out.println(j);
}
System.out.println(i);
}

a) 1,1,2,2,1,2
b) 1,2,1,2,1,2
e) 1,2,1,1,2,2
d) 1,1,2,1,1,1

5. El mecanismo denominado composición en Programación Orientada a Objetos consiste en:


a) La utilización de objetos como atributos dentro de otros objetos.
b) La creación de una nueva clase como extensión de otra, aprovechando las características
de ésta.
e) Diseñar un conjunto de clases para componer una aplicación.
d) Sobrescribir uno o más métodos de la clase base en la clase derivada.

6. ¿Qué clases pueden acceder a un atributo declarado con el modificador 'protected'?


a) Sólo la propia clase.
b) Sólo las clases dentro del mismo paquete.
e) Las clases dentro del mismo paquete y los descendientes de la propia clase.
d) Sólo los descendientes de la propia clase.

7. Dado el siguiente código, sabiendo que la clase Alumno hereda de Persona, y que Persona
dispone de un método imprimir/JNI se ejecutaJía:

Alumno a = new Alumno(726382-L);


Persona b =a;
b.imprimirDNI();

a) El método imprimirDNJ de la clase Persona.


b) Nada. Un error de compilación.
e) imprimirDNI p ero sólo si está redefinido en la clase Alumno.
d) Nada. Aparecería un error de ejecución (Null pointer exception)

8. Al crear una clase ¿siempre debe implementarse al menos un constructor?


a) SÍ, porque si no tiene constructores no se puede saber cómo inicializar los objetos.
b) sl, de hecho debe tener al menos dos constructores: uno con parámetros y otro sin ellos.
e) No, es posible crear clases que no tengan implementado ningún constructor; en ese caso
se ejec utará e l co nstruc to r po r defe cto
.

d) No, porque siempre es posible instanciar un objeto sin ejecutar ningún constructor.
9. La f in alidad de los métodos de acceso (get) a campos (atributos) en una clase JAVA es:

a) Dar información sobre el estado del objeto a otras clases.


b) Modificar los campos de una clase.
e) Pennitir que las clases hijas hereden los campos.
d) Redefinir el tipo de los campos.

10. En la práctica obligatoria realizada este año, para implementar que una cuenta (un objeto de
la clase Cuenta) puede tener asociadas varias trujetas (varios objetos de la clase Tarjeta) se
ha utilizado

a) Herencia.
b) Composici ón .

e) Polimorfismo a nivel de método.


d) Polimorfismo.
Segunda Parte: Problema

Se desea desarrollar un programa informático que permita la gestión y control de la producción


eléctrica generada por medio de centrales térmicas y nucleares. El calor generado en ambos casos
(por combustión de combustibles fósiles o a partir de energía nuclear) se emplea a continuación en
un ciclo te1modinámico convencional para mover un alternador y producir la energía eléctrica.

Para modelar este problema habrá que tener en cuenta las siguientes consideraciones. Cada central
deberá tener un nombre, o identificador, y un valor en kWh producción eléctrica. En el caso de las
centrales térmicas, deberá especificarse el tipo de combustible empoleado: petróleo, gas natural o
carbón. En el caso de las centrales nucleares deberá especificarse el tipo de material físil
(fisionable) empleado de entre los siguientes: uranio, plutonio, neptunio, americio y curio.

La aplicación deberá ser capaz de:

Devolver la cantidad de producción eléctrica generada, tanto para el conjunto de centrales


térmicas como nucleares existentes.
Devolver la producción de una determinada central (independientemente del tipo que sea) a
partir de su nombre.
Devolver la cantidad total de kWh producidos por todas las centrales existentes,
independientemente del tipo que sean.

Cuestiones:

a) [2 puntos]. Realice un diagrama de clases capaz de cubrir el total de requisitos especificados


en el enunciado.
b) [1 ,5 puntos]. A partir del diagrama anterios, explique brevemente cómo se implementmía el
método capaz de devolver la cantidad de producción eléctrica generada por el conjunto de
centrales ténnicas existentes, detallando las clases, métodos y estructuras de control o
almacenamiento que usaría.
e) [1,5 puntos]. Sin modificar el diagrama realizado en a), se desea incluir un nuevo tipo de
centrales térmicas, las cenh·ales de ciclo combinado. La diferencia con el resto de contrales
térmicas es que en estas últimas el combustible es únicamente gas natural. ¿Qué habría que
modiificar en el diseño?
TIPO A mod 11

• Para la nota del examen, el test vale el30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para sup erarlo.
• Responda el test en la hoja de lectura óptica.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha
realizado la p ráctica
.

Printera Parte: Test

l. La memoria principal de un ordenador está compuesta por la combinación de:

a) Memoria RAM y memoria v i tual.r

b) Memorias ROM y RAM.


e) Discos duros, unidades extraíbles.
d) Memoria caché de niveles 1 y 2.

2. El software es:

a) El conjunto de componentes físicos del ordenador.


b) La placa madre y sus componentes.
e) El conjunto de programas que nos permiten hacer uso del ordenador.
d) El conjunto de programas instalados en el ordenador, salvo el sistema operativo.

3. Se tiene un sistema informático en JAVA para la gestión de una tienda, compuesto por una
clase Tienda y otra clase Cliente de la que heredan dos: ClienteHabitual y
ClienteEsporádico. Si quisiéramos disponer de una lista de Clientes, ¿dónde sería correcto
incluirla?

a) En la clase Cliente
b) En l a cl ase Tienda
e) En cualquiera de las clases que heredan de Cliente
d) No sería posible la incl usión de listas con el diseño dado.

4. Considerando la instanciación e= new Casa(), y sabiendo que la clase Casa tiene un método
definido como public int getSuperficie(), indique cuál de las siguientes sentencias devolvería
la superficie de una casa concreta:

a) Casa.getSuperficie();
b) Casa().getSuperficie();
e) getSuperficie(c);
d) c.getSuperficie();
5. Una variable local es:

a) La que se define fuera de los métodos y no es visible desde otras clases.


b) La que se define en el encabezado del método.
e) La que se define dentro de un método.
d) La que se define fuera de los métodos y es visible desde otras clases.

6. Declarar atributos como privados es útil para:

a) Evitar que sean accedidos desde el código de otras clases.


b) Evitar que métodos no privados accedan a dichos atributos.
e) Fijar qué atributos son inicializados por el constmctor.
d) Definir variables globales.

7. ¿Es conecto el siguiente código?

public class B{
private int b;
}
public class e extends B {
private int e;
}
public class D extends B {
private int d;
}

Dentro del método main se realizan las siguientes


sentencias:
D oD new D();
e oc = (C) oD;

a) Si, ya que al ser C y D clases hijas de la clase padre B por polimorfismo se puede
reconvertir un objeto de la clase D en otro de la clase C.
b) No, porque no se pueden crear dos clases hijas de una misma clase padre.
e) No, porque una clase hija no se puede reconvertir a otra clase hija por tanto hay
incompatibilidad de tipos.
d) No, porque no se ha creado previamente el objeto oC con la sentencia C oC= new C();.
Sin esta sentencia previa no se puede asignar otros objetos al objeto oC.

8. Suponiendo que "Persona" y "Alumno" son dos clases que mantienen una relación de
herencia ("Alumno" hereda de "Persona"), y que la clase "Alumno" dispone de un método
"imprime" (la clase "Persona" no) ¿Cuál es el error de compilación que presenta este
código y por qué?

Alumno a=new Alumno(); /*Linea l*/


Persona p=a; /*Linea 2*/
p. imprime(); /*Linea 3*/

a) Error en la línea 2, dado que el objeto "a" no puede ser asignado a la referencia "p" de la
clase "Persona".
b) Error en la línea 3, dado que la "p" es una referencia de Persona, que no dispone de un
método "imprime".
e) No hay ningún error
d) Error en la línea 2 dado que e l objeto "p" debe de instanciarse antes de serie asignado el
objeto "a".

9. Si tenemos el siguiente programa:

public class Arit{


public int sumar2(int surn){
return surn + 2;
}
public String surnar2(String surn){
return surn + 2;
}
public static void rnain (String[] args){
Arit x = new Arit();
System.out.println(x.sumar2("2"));

}
}

¿Qué mostraría el siguiente código?

a) Un error de compilación por sobrecarga.


b) 4
e) "22"
d) Un error de ejecución por no poder sumar un tipo string con el literal 2.

10. En la práctica obligatoria realizada este año, ¿qué podríamos hacer para crear un nuevo tipo
de trujeta que nos ingrese el 2% del dinero ingresado en la cuenta, cuando el ingreso sea
mayor que 10.000€ y no nos cobre comisión cuando realicemos un reintegro, sin modificar
las clases existentes?

a) Crear una nueva clase llamada por ejemplo Tmjetalngresos, tal que la clase Tarjeta
herede de ella.
b) Crear una nueva clase llamada por ejemplo Tmjetalngresos, que herede de la clase
Tarjeta y utilice un método polimórfico pm·a sobrescribir el método encargado de
realizar los ingresos.
e) Crear una nueva clase llamada por ejemplo Trujetalngresos, que herede de la clase
Ta1jetaCredito y utilice un método polimórfico para sobrescribir sólo el método
encargado de realizar los ingresos.
d) No es posible realizar esta taJjeta sin modificar las clases existentes.
Segunda Parte: Problema

Se desea diseñar una aplicación para la gestión de una tienda on-line. Los productos de la tienda
pueden ser dispositivos electrónicos o accesorios para dichos dispositivos.

Todo producto debe tener un un nombre, un precio y un identificador. Los productos que sean del
tipo dispositivo electrónico tendrán además una fecha de fabricación, mientras que los accesorios
tendrán siempre un dispositivo asociado. Todo cliente de esta tienda on-line deberá identificarse por
medio de un nombre y apellidos, una dirección y un identificador personal. Además, a cada cliente
se le podrá añadir una o varias compras, que estarán formadas a su vez por un conjunto de
productos. Cada compra estará identificada por un valor numerico único.

Nota: El alumno debe asumir la existencia de una clase Date con la funcionalidad que se necesite.

Se pide:

l. [3 puntos]. Realizar el diseño de la aplicación, es decir, diseñar el esquema de clases con sus
correspondientes atributos y métodos, estableciendo las relaciones que sean necesarias. El
diseño deberá cumplir con las siguientes funcionalidades:

l . S e deberá poder "añadir", "borrar" y "consultar" l a lista d e productos d e una compra.


2. Se deberá poder "añadir'', "borrar" y "consultar" la lista de compras de un cliente.

2. [2 puntos]. Escribir el código necesario para:

1. Instanciar un producto de la categoría dispositivo electrónico y otro de la categoría


accesorio.
2. Instanciar una compra y añadir uno de los productos anteriores a una compra.
3. Se desea tener un método que devuelva el conjunto total de productos comprados por un
cliente. ¿En qué clase debería hacerse y qué mecanismo (herencia, composición,
encapsulamiento, ...) habría que utilizar? Razona tu respuesta.
TIPO A modl

• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Responda el test en la hoja de lectura óptica.
• Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha
realizado la práctica.

Primera Parte: Test

l. Indicar cuál de las siguientes afirmaciones sobre memoria es errónea:

a) Hay tres tipos de memoria temporal: RAM, caché y virtual.


b) La memoria ROM es permanente y su contenido no se pierde al apagar el ordenador.
e) El acceso a la memoria virtual es más rápido que el acceso a RAM.
d) Se suele llamar memoria principal a la combinación de ROM y RAM

2. ¿En que se diferencia los ensambladores de los compiladores?

a) Los ensambladores traducen lenguaje del tipo java y los compiladores de alto nivel.
b) No hay ninguna diferencia, los dos traducen lenguajes de alto nivel.
e) Los ensambladores traducen lenguaje de alto nivel y los compiladores de bajo nivel.
d) Los ensambladores traducen lenguaje de bajo nivel y los compiladores de alto nivel.

3. ¿Cuál es el valor que se muestra por pantalla tras la ejecución de este código?

intj =O;
switch (j) {
case 0: j+=2;
case 1: j++;
case 2: j+=2;
case 3: j++;
default:j--;
}
System.out.println(j);

a) 2
b) 1
e) 5
d) 3
4. En relación a los atributos y métodos definidos como públicos...

a) pueden ser accedidos desde otra clase, pero del mismo paquete.
b) solo los métodos pueden ser accedidos desde cualquier otra clase.
e) solo pueden ser accedidos desde otro paquete los métodos, no los atributos.
d) ambos pueden ser accedidos desde otro paquete.

5. Cuál de las siguientes inicializaciones para un array es la correcta?

a) Array nombreArray3 = new int[20];


b) int [] nombreArray4 = new int[20];
e) int [] nombreArrayl = new Array(20);
d) Array nombreArray2 = new Array(20);

6. Si creamos un objeto sin parámetros con la sentencia: A objA = new A(); siendo la clase A la
siguiente:

public class A {
int nA;
public A(int nA){
this.nA = nA;
}
}

¿Qué pasaría a continuación?

a) Se crearía un objeto objA ya que se llamaría al constructor por defecto de la clase A.


b) Se crearía un objeto objA aunque al no tener parámetros se pasaría un valor nulo al
constructor public A(int nA){this.nA = nA;}
e) Daría un error de compilación debido a que si se declara un constructor en una clase el
constructor por defecto deja de ser accesible.
d) Daría un error de compilación por poner la palabra reservada new delante de la
expresión A O.

7. ¿Cuál de los siguientes tipos no es primitivo?

a) 1.32
b) false
e) 'b'
d) "mundo"
8. ¿Es correcta la implementación de la siguiente clase?

public class A {
private int x;
private int y;
public A(int x){
this.x=x;
}
public A(int x, int y){
this.x=x;this.y=y;}
}

a) No, ya que dentro de una clase sólo se puede implementar un constructor.


b) No, ya que no se ha implementado el constructor por defecto.
e) Sí, es correcta.
d) No, porque los parámetros d entrada a los constructores no se pueden llamar de la misma
forma que los atributos de la clase.

9. La composición entre clases sirve para

a) Establecer mecanismos de herencia entre clases.


b) Implementar constructores por defecto.
e) Definir atributos de una clase como instancias de otras clases.
d) Implementar una lista de enteros (int).

10. En la práctica obligatoria realizada este año, ¿cómo podemos modificar el límite diario que
nos fija el dinero máximo que podemos sacar con una tarjeta?

a) Mediante un atributo privado que modificamos desde fuera de la clase


b) Mediante la invocación de un método que modifica el valor del atributo limiteDiario
e) Es imposible modificar el límite diario de una tarjeta
d) No podemos modificar el límite diario puesto que es una constante
Segunda Parte: Problema

Se desea desarrollar un programa informático para una empresa editorial. Dicha editorial desea
gestionar su catálogo de publicaciones, formado por libros y números de revistas. Cada publicación
tiene un título y un código ISBN asociado, y en el caso de las revistas, además, un número de
volumen y un código ISSN que las identifica como publicaciones periódicas. Es importante
destacar que diferentes números de una revista tendrán diferente ISBN pero el mismo ISSN.

Los libros están formados por capítulos y las revistas por artículos. En ambos casos podrán haber
sido escritos por uno o varios autores, y deberán tener un título asociado y un número total de
páginas. De cada autor se debe almacenar su nombre y apellidos, así como un identificador que
permitirá a la editorial identificar todas las publicaciones de un determinado autor.

La aplicación deberá ser capaz de:

Devolver el catálogo completo de la editorial, es decir, el conjunto total de publicaciones.


Devolver el catálogo de la editorial correspondiente a un determinado autor, es decir, el
conjunto de publicaciones en las que haya paticipado un determinado autor.
Devolver el conjunto de artículos o capítulos de la editorial correspondiente a un
determinado autor, es decir, los artículos o capítulos en los que haya paticipado un
determinado autor.

Cuestiones:

a) [2 puntos]. Realice un diagrama de clases capaz de cubrir el total de requisitos especificados


en el enunciado.
b) [2 puntos]. A partir del diagrama anterior, explique brevemente cómo se implementaría el
método capaz de devolver el conjunto de artículos y capítulos de la editorial correspondiente
a un determinado autor.
e) [ 1 punto]. Si la editorial considerara de igual forma los capítulos de libro y los artículos en
revista ¿Habría que modificar tu diseño de clases? Explica razonadamente tu respuesta.
Res Sep

Para la nota del examen, el test vale el 30% y el Problema vale el 70%.

El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.

Responda el test utilizando la hoja de respuestas que le entregarán.

Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

PRIMERA PARTE: TEST

1) Los componentes hardware incluyen, entre otros . . .


a) unidad central de procesamiento, y monitor.
b) procesador central y compilador.
e) unidad central de procesamiento, periféricos y sistema operativo
d) periféricos, procesador central y procesador de textos

2) ¿Cómo se mide la velocidad de un equipo?


a) Mediante las vibraciones del reloj de la placa madre.
b) Contabilizando el tiempo que se tarda en abrir el windows.
e) Mediante la BIOS.
d) Contabilizando el número de programas que se puede ejecutar en paralelo.

3) Entre las funciones fundamentales del sistema operativo NO está:


a) El control de los procesos de entrada/salida.
b) La asignación de recursos a los procesos.
e) La gestión de ficheros.
d) Traducir código fuente a código objeto.

4) Indica cuál de los siguientes programas NO es un programa de control de un sistema operativo:


a) Cargador de módulos.
b) Controlador de tareas.
e) Administrador de memoria.
d) Compilador.

5) El método "main":
a) es llamado por el intérprete de java cuando ejecutamos un programa.
b) es llamado por todos los métodos contenidos en una clase.
e) define los atributos de una clase.
d) define las subclases de una clase.
6) Suponiendo que "Persona" y "Alumno" son dos clases que mantienen una relación de herencia
("alumno" hereda de "Persona"), y que la clase "Alumno" dispone de un método "imprime" (la
clase "Persona" no) ¿Cuál es el error de compilación que presenta este código y por qué?

Alumno a=new Alumno(); /*Linea 1 */

Persona p=a; /*Linea 2*/

p.imprime(); /*Linea 3*/

a) Error en la línea 2, dado que el objeto "a" no puede ser asignado a la referencia "p" de la
clase "Persona".
b) Error en la línea 3, dado que la "p" es una referencia de Persona, que no dispone de un
método "imprime".
e) No hay ningún error
d) Error en la línea 2 dado que el objeto "p" debe de instanciarse antes de serie asignado el
objeto "a".

7) ¿Cuáles de las siguientes características de Java permiten reutilizar código?


a) Java no permite la reutilización de código.
b) Composición y herencia.
e) La máquina virtual.
d) Las excepciones.

8) ¿Puede una lista de objetos en JAVA almacenar instancias de clases definidas posteriormente?
a) No, dado que es necesario definir la clase a la que pertenecen los objetos almacenados.
b) Sí, siempre que las clases se implementen dentro del mismo paquete.
e) No, dado que sólo se pueden almacenar atributos en una lista, no objetos.
d) Sí, siempre que las nuevas instancias pertenezcan a clases que hereden de aquellas para la
que se definió la lista.
9) Se tiene este código para un determinado método, ¿Qué salida daría por pantalla?
public void imprime(String nombre)

this.nombre=this.nombrePila;

System.out.println(nombre);

a) El valor del atributo "nombre" de la clase.


b) El valor del parámetro de entrada "nombre".
e) El valor del parámetro "nombrePila" en el contexto del método.
d) El valor del atributo "nombrePila" de la clase.

10) En la práctica obligatoria realizada este año, para conseguir que las tarjetas de crédito
funcionen como las tarjetas, excepto que nos cobran una comisión al sacar dinero, ¿qué
mecanismo hemos utilizado?
a) Ninguno, ya que no existe relación directa entre las clases.
b) Excepciones.
e) Herencia.
d) Composición.
SEGUNDA PARTE: PROBLEMA

La Empresa Nacional de Transportes (ENT) desea desarrollar un programa software que permita la
asignación de conductores a autobuses. Dicho software debe cumplir con los siguientes requisitos:

Producir el listado completo de autobuses de que disponen, así como la plantilla de
conductores.

Cada autobús debe tener asociada su matrícula y el conductor asignado.

Cada conductor tendrá un nombre y un identificador de la empresa.

Autobuses y conductores deben poder ser añadidos o eliminados del sistema.

El sistema debe permitir asignar un conductor de la plantilla a un autobús de la flota.

Se pide:
a) Realizar el diagrama de clases correspondiente. (2 Puntos)
b) Describir el proceso necesario para asignar un conductor a un autobús según su diseño,
detallando la creación de objetos, las llamadas a métodos y el funcionamiento interno de los
mismos. (1,5 puntos)
e) ¿Es posible según su diseño que un conductor sea asignado a más de un autobús? Explique su
respuesta de forma razonada y en caso afirmativo, indique cómo se podría conseguir que un
conductor sólo fuese asignado a un único autobús. (1,5 puntos)
FUNDAMENTOS DE INFORMÁTICA Junio 2012 - 1 IE_1s

•Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

TIPO A

Primera Parte: Test

1. Indique cuál de las siguientes afirmaciones, relativas a la BIOS de un PC, es


correcta:
a. Contiene el menú de selección de los sistemas operativos instalados en la máquina.
b. Es el componente hardware donde se guarda la información de las cuentas de usuario de la
máquina.
c. Contiene información sobre la configuración y arranque de la máquina.
d. Es el componente hardware donde los sistemas operativos guardan su configuración.

2. Tenemos varios programas ejecutando simultáneamente en una máquina. Queremos que una de
las ejecuciones tenga preferencia sobre la otra. Para ello, tendríamos que configurar:
a. el sistema operativo.
b. el compilador.
c. el ensamblador.
d. la BIOS.

3. Indica cuál de las siguientes afirmaciones es correcta:


a. En las llamadas Redes de Difusión (también llamadas Redes Multipunto) es necesario que se
fije qué camino seguirá la información para poder ser recibida en el punto de destino, ya que
para ir desde un nodo origen a un nodo destino existen múltiples caminos.
b. En las llamadas Redes de Conmutación de Circuitos (también llamadas Redes Punto a
Punto)
un equipo emisor manda la información a la red a través de su tarjeta
y, en este caso, se dispone de un único camino entre el origen y el destino .
c. En las llamadas Redes de Conmutación de Paquetes la información se divide en fragmentos
que se envían a la red, de modo que circulan por ella hasta que llega a su destino.
d. En las llamadas Redes de Difusión (también llamadas Redes Multipunto) la información se
divide en fragmentos que se envían a la red, de modo que circulan por ella hasta que llega a
su destino.

4. En la práctica obligatoria, ¿qué mecanismo se utiliza para que todos los tipos de notas
escriban sus características particulares (título, comentarios, etc.) por pantalla?
a. Composición.
b. Polimorfismo.
c. Excepciones.
d. Ninguno, lo hace únicamente la clase Nota.

5. ¿Qué tipos de acceso puede tener el atributo de una clase?


a. Public, associated, protected.
b. Public, private, associated.
c. Public, private, protected.
d. Private, protected, associated.
6. Indica cuál de las siguientes afirmaciones, relativas a la sobreescritura de métodos, es correcta:
a. Cuando se sobreescribe un método en Java, se ejecuta la definición más baja en la jerarquía
de herencia respecto al objeto al que pertenece el método.
b. Cuando se sobreescribe un método en Java, se ejecuta la definición más alta en la jerarquía
de herencia respecto al objeto al que pertenece el método.
c. Un método en Java no puede reescribirse.
d. Un método en Java sólo puede reescribirse si antes ha sido definido como final.

7. Indique cuál de las opciones siguientes se correspondería con la salida del siguiente código:
for (int i=1;i<3;i++){
for (int j=1; j<4;j++){
System.out.print(j);
}
System.out.print(i);
}
a. 11322333
b. 12112212
c. 12311232
d. 23134245

8. Si queremos añadir un nuevo dato "Fecha de término de contrato" a una clase "Empleados",
¿es necesario modificar las clases ya implementadas?
a Sí, si queremos asegurar la consistencia.
b No. Podríamos extender la clase "Empleado" con un nuevo atributo o campo.
c Sí, pero tendríamos que aplicar herencia.
d No. Siempre bastaría con modificar los parámetros de entrada.

9. Una variable polimórfica:


a. no puede ser accedida desde fuera de la clase.
b. puede contener objetos del tipo declarado o de cualquier subtipo de éste.
c. sólo puede ser accedida desde un método de la misma clase.
d. no puede ser accedida por más de una clase.

10. Indica cuál de las siguientes afirmaciones en Java es FALSA:


a. Una clase padre es una clase a partir de la cual se crea otra clase mediante el mecanismo de
herencia.
b. Una clase hija es una clase creada a partir de otra clase mediante el mecanismo de herencia.
c. Una clase padre asume los campos y métodos del conjunto de sus subclases.
d. Una clase hija hereda los campos y métodos de una superclase.
Apellidos………………………………...……..Nombre……………………..DNI………...……

Segunda Parte: Problema


Se desea implementar un gestor de pedidos para una fábrica de aceitunas y encurtidos. Esta fábrica
ofrece 2 productos: aceitunas negras y aceitunas verdes, donde las últimas pueden ser con sabor
anchoa o no. Cada producto de un pedido está formado por la cantidad de botes que se piden,
existiendo únicamente tres tipos de botes de 100gr., 500gr y 1 kg., respectivamente. Cada pedido
está identificado por la fecha en la que se realiza, un identificador de pedido (compuesto por un
número) y la lista de productos que se solicitan. Se requiere que el gestor sea capaz de:
1. Añadir un nuevo pedido.
2. Eliminar un pedido completo, para lo que necesitaremos el identificador del pedido.
3. Mostrar por pantalla los pedidos realizados en una determinada fecha.

NOTA: podemos asumir que existe una clase Fecha, cuyo constructor es
Fecha(String fecha), donde el parámetro representa la fecha como un String. Esta clase
contiene un método cuya signatura es boolean esIgual(Fecha fecha), que devuelve cierto
en caso de que las fechas sean iguales y falso en caso contrario.
Antes de comenzar a responder lea con atención todos los apartados. Se pide:
1. (4 puntos) Dibujar un esquema con las clases necesarias para realizar este gestor de pedidos,
indicando los atributos y métodos que tiene cada una de ellas (sólo indicarlos, sin escribir su
código), aplicando los principios de la programación orientada a objetos.
SOLUCIÓN

Pedido
GestorPedidos
private int id
private List<Pedido> pedidos
private Fecha fecha
private List<Producto> productos public void añadir(Pedido pedido)
public boolean eliminar(int id)
/* metodos set y get de los
public void mostrarPedidos(Fecha fecha)
atributos */

Producto «enumeration»
TipoEnvase
private TipoEnvase envase
private int cantidad 100gr
500gr
/* metodos set y get de los
1kg
atributos */

AceitunasVerdes AceitunasNegras
private boolean saborAnchoa
/* metodos set y get de los /* metodos set y get de
atributos */ los atributos */
2. (4 puntos) Supongamos ahora que la fábrica desea ampliar los productos que ofrece con uno
nuevo denominado Encurtidos, éste tiene las mismas características que el resto excepto que pueden
ser picantes o no. Explicar justificadamente qué debería realizarse para que, sin modificar el gestor,
se permita realizar pedidos que incluyan el nuevo producto ofrecido.

SOLUCIÓN

Pedido
GestorPedidos
private int id
private List<Pedido> pedidos
private Fecha fecha
private List<Producto> productos public void añadir(Pedido pedido)
public boolean eliminar(int id)
/* metodos set y get de los
public void mostrarPedidos(Fecha fecha)
atributos */

Producto «enumeration»
TipoEnvase
private TipoEnvase envase
private int cantidad 100gr
500gr
/* metodos set y get de los
1kg
atributos */

AceitunasVerdes AceitunasNegras Encurtido

private boolean saborAnchoa private boolean picante

/* metodos set y get de los /* metodos set y get de * metodos set y get de
atributos */ los atributos */ los atributos */

Para solucionar este apartado utilizaremos la herencia. De este modo, crearemos una nueva clase
Encurtido que al ser otro tipo de producto y, por tanto, compartir parte de sus atributos y
funcionalidad, heredará de la propia clase Producto.

3. (2 punto) Escribir el código del método que nos permite mostrar por pantalla todos los pedidos
de una determinada fecha.
SOLUCIÓN

public void mostrarPedidos(Fecha fecha) {


for (Pedido p : this.pedidos) {
if (p.getFecha().esIgual(fecha) {
System.out.println(p.toString());
}
}
}
FUNDAMENTOS DE INFORMÁTICA Junio 2012 - 2 IE_2s

•Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

TIPO A

Primera Parte: Test

1. La memoria caché funciona sobre el principio de:


a. una memoria de acceso rápido pero más pequeña para datos usados con frecuencia.
b. una memoria de acceso lento pero más grande para grandes tamaños de datos.
c. una memoria de acceso robusto ante fallos para procesos críticos.
d. una memoria con un sistema operativo independiente.

2. Indica cuál de las siguientes no es función del Sistema Operativo:


a. Control de errores
b. Control de concurrencia.
c. Control de seguridad
d. Control de depuración de programas.

3. La programación orientada a objetos se caracteriza porque:


a. no requiere proceso de compilación.
b. no requiere sistema operativo.
c. permite reutilizar código.
d. es la más rápida en tiempo de ejecución.

4. En la práctica obligatoria, la clase GestorLibretas:


a. hereda de la clase Libreta.
b. se compone de elementos de la clase Libreta.
c. se compone de elementos de la clase Nota.
d. es padre de la clase Libreta, es decir, Libreta hereda de ella.

5. Indique cuál de las siguientes afirmaciones es correcta:


a. El tipo de dato de los campos se define en los objetos.
b. Todos los objetos de una misma clase tendrán los mismos campos.
c. Todos los objetos de una misma clase tendrán los mismos valores en sus campos.
d. No todos los objetos de una clase tendrán los mismos métodos.

6. ¿Puede un método llamar a otro método de la misma clase?


a. Sólo si la clase está definida como "public".
b. Sólo si la clase está definida como "private".
c. Siempre puede llamarse a un método de la misma clase.
d. Siempre que se instancie un nuevo objeto de la misma clase.
7. El mecanismo denominado polimorfismo en un método en Programación Orientada a Objetos
permite:
a. el almacenamiento de objetos en otros objetos.
b. la creación de una nueva clase como extensión de otra.
c. que el mismo método pueda invocar en diferentes momentos diferentes métodos.
d. clases abstractas sin implementación.

8. Indique cuál de las opciones siguientes se correspondería con la salida del siguiente código
int
i=0;
while (i<3){
for (int j=0; j<3; j++){
System.out.print(i+j);
}
i++;
}

a. 123234345
b. 000102101
c. 001020011
d. 012123234

9. Teniendo en cuenta el siguiente código:


public class Animal {
private int patas;
private void setPatas(int p) {
patas = p;
}
}

public class Perro extends Animal {


public Perro(int p){
super.setPatas(p);
}
}

Indique cuál de las siguientes afirmaciones es correcta:


a. Todos los objetos que se creen de la clase Animal tendrán las mismas patas que los que se
creen de la clase Perro.
b. Todos los objetos de la clase Perro tendrán las mismas patas que los objetos de la clase
Animal.
c. El código es incorrecto porque no podemos acceder al método setPatas porque está declarado
como private.
d. El código es correcto porque el método setPatas está declarado como private y puede ser
accedido desde las clases que hereden de la clase Animal.

10. En el diseño de un programa JAVA relativo a vehículos, existen coches, motos y autobuses.
Todos ellos tienen algún atributo que no comparten con ningún otro vehículo. ¿Se puede aplicar
herencia?
a. No, dado que ninguno de los tres vehículos puede ser padre del resto.
b. No, dado que no se puede extender atributos de un vehículo a otro.
c. Sí, definiendo una clase abstracta como clase padre.
d. Sí, aplicando composición entre los vehículos.
Apellidos………………………………...……..Nombre……………………..DNI………...……

Segunda Parte: Problema

Se desea desarrollar un programa informático que permita la gestión y control de la compra-venta


de inmuebles. Cada inmueble tendrá un precio, un tamaño expresado en metros cuadrados y un
campo de texto asociado en el que se describan sus principales características.
Por cada inmueble se desea almacenar información relativa al vendedor y posibles compradores
(usuarios que manifiestan su interés por el inmueble). Deberá poderse guardar información relativa
a sus datos personales (nombre, apellidos y DNI).
La aplicación deberá ser capaz de:
1. Devolver los inmuebles que un determinado vendedor tiene a la venta, así como la de los
inmuebles que han sido objeto de interés por parte de un determinado comprador.
2. Devolver los inmuebles que han sido objeto de interés por parte del conjunto total de
compradores.

Antes de responder lea con atención todos los apartados. Se pide:

a)[4 puntos]. Realice un diagrama de clases capaz de cubrir el total de requisitos especificados en el
enunciado, indicando los atributos y métodos que tiene cada clase (sólo indicarlos, sin escribir su
código) y siguiendo los principios de la Programación Orientada a Objetos.

SOLUCIÓN

GestorInmuebles
Inmueble
private List<Inmueble> inmuebles
private int precio private List<Usuario> compradores
private int metros2 private List<Usuario> vendedores
private String caracteristicas
private Usuario vendedor public List<Inmueble> inmueblesComprador(Usuario comprador)
private List<Usuario> compradores public List<Inmueble> inmueblesVendedor(Usuario vendedor)
public List<Inmueble> inmueblesCompradores()
/* metodos set y get de los atributos */ /* necesitaría métodos para añadir inmuebles, compradores y
vendedores */

Usuario

private String nombre


private String apellidos
private String dni
/* metodos set y get de los
atributos */
b)[4 puntos]. Describa, sin implementar el código pero indicando las llamadas a métodos en cada
clase y su funcionalidad (incluyendo las estructuras de control necesarias, iteraciones sobre listas,
etc.), cómo se implementaría el método capaz de devolver la lista de inmuebles que han sido objeto
de interés por parte de algún comprador.

SOLUCIÓN
En primer lugar deberíamos invocar el correspondiente método de la clase GestorInmuebles.
Dicho método recorrerá la lista de inmuebles que tiene almacenada, para lo cual utilizará una
estructura for, recorriendo la lista completamente. Dentro del bucle for, obtendremos un objeto
inmueble concreto y mediante el uso de una estructura if comprobaremos si la lista de
compradores de dicho inmueble está vacía o no. Es decir, en la condición del if invocaremos el
método getCompradores de la clase inmueble y sobre la lista de compradores que nos devuelva
invocaremos el método size() para comprobar si su tamaño es distinto de cero.
En caso afirmativo, es decir, el tamaño de la lista es distinto de cero, quiere decir que existe algún
posible comprador y por tanto ese inmueble tenemos que almacenarlo en una lista auxiliar de
inmuebles que será la que al finalizar este método devolveremos.
En otro caso, si la lista de compradores es cero, no haremos nada y seguiremos comprobando el
siguiente inmueble.
Al finalizar el bucle for, tendremos todos los inmuebles que tienen algún comprador almacenados
en una lista que habremos creado al comienzo de la ejecución y en este punto ejecutaremos el
comando return devolviendo dicha lista de inmuebles.

c)[2 puntos]. Se desea incluir un nuevo tipo de inmuebles, los chalets. La diferencia es que en este
caso se dispone de una parcela. ¿Cómo habría que modificar el diseño para cubrir este nuevo tipo de
inmueble con el menor número de cambios posibles?

SOLUCIÓN

GestorInmuebles
Inmueble
private List<Inmueble> inmuebles
private int precio private List<Usuario> compradores
private int metros2 private List<Usuario> vendedores
private String caracteristicas
private Usuario vendedor public List<Inmueble> inmueblesComprador(Usuario comprador)
private List<Usuario> compradores public List<Inmueble> inmueblesVendedor(Usuario vendedor)
public List<Inmueble> inmueblesCompradores()
/* metodos set y get de los atributos */ /* necesitaría métodos para añadir inmuebles, compradores y
vendedores */

Usuario
Chalet
private String nombre
private int parcela
private String apellidos
/* metodos set y get de los private String dni
atributos */ /* metodos set y get de los
atributos */
Para solucionar este apartado utilizaremos la herencia. De este modo, crearemos una nueva clase
Chalet que al ser otro tipo de inmueble y, por tanto, compartir parte de sus atributos y
funcionalidad, heredará de la propia clase Inmueble inicial.
FUNDAMENTOS DE INFORMÁTICA 2012 Junio 1 A MEC IE_1s

•Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

TIPO A

Primera Parte: Test

1. Indique cuál de las siguientes afirmaciones es correcta:


a. La memoria SRAM (Static RAM) es más rápida que la memoria DRAM (Dynamic RAM)
b. La memoria DRAM (Dynamic RAM) es más rápida que la memoria SRAM (Static RAM)
c. La memoria virtual es más rápida que la memoria SRAM (Static RAM).
d. La memoria virtual es más rápida que la memoria DRAM (Dynamic RAM).

2. La máquina virtual de JAVA:


a. ejecuta código en JAVA.
b. ejecuta código intermedio (Bytecode).
c. ejecuta código máquina.
d. No ejecuta. Sólo compila.

3. Indicar cuál de las siguientes funciones NO es propia de un sistema operativo:


a. Control de la ejecución de programas.
b. Gestión de permisos y de usuarios.
c. Impresión y escaneado.
d. Administración de periféricos.

4. En la práctica obligatoria, la relación entre una libreta y las notas que contiene es de:
a. herencia.
b. composición.
c. polimorfismo.
d. sobrecarga.

5.¿Es correcto el siguiente código?

public class B {
private int total;

public int B() {


return total;
}
}

a. No, ya que un método no puede llamarse igual que la clase si no es el constructor.


b. Sí, es correcto.
c. No, ya que no está inicializado el campo total.
d. No, porque no podemos acceder al campo total en el método B ya que está declarado
como private.
6. La declaración de atributos de tipo privado sirve para:
a. evitar que éstos sean accedidos desde el código de otras clases.
b. evitar que métodos no privados accedan a ellos.
c. fijar qué atributos son inicializados por el constructor por defecto.
d. definir atributos de clase.

7. Si en la signatura de un método aparece la palabra void significa..


a. que el método no puede ser invocado desde otra clase.
b. que el método devuelve un tipo de datos desconocido.
c. que el método no devuelve ningún resultado.
d. que el método es estático.

8. Indique cuál de las opciones siguientes se correspondería con la salida del siguiente código:

int j=0;
for (int i=3;i<5;i++){
do{
System.out.print(i+j);
j++;
}while (j<3);
}

a. 345
b. 357
c. 3457
d. 345456

9. Indica, a partir de la siguiente definición, cuál de las siguientes afirmaciones es correcta:

public class A extends B

a. Las clases A y B son equivalentes


b. La clase A hereda de B
c. La clase B hereda de A
d. La clase A se compone de B.

10. Indica cuál de las siguientes afirmaciones es correcta:

a. El polimorfismo en Java permite manipular un objeto como si éste fuera de una clase más
general.
b. El polimorfismo en Java permite manipular un objeto como si éste fuera de una clase más
específica.
c. La composicion de objetos en Java permite manipular un objeto como si éste fuera de una
clase más general.
d. La composicion de objetos en Java permite manipular un objeto como si éste fuera de una
clase más específica.
Apellidos………………………………...……..Nombre……………………..DNI………...……

Segunda Parte: Problema


Se desea diseñar un sistema simplificado para gestionar los gastos de los clientes de un Hotel. El
cliente podrá realizar diferentes gastos que luego se incluirán en la factura final. Estos gastos se
pueden realizar en diferentes zonas del Hotel (restaurante, piscina, spa, etc.) cada una de las cuales
dispondrá de un terminal de venta (TPV) para registrar dichos gastos.
Para ello, se han de cubrir las siguientes funcionalidades:

1. Un cliente ha de poder reservar una habitación, momento en el cual se introducen sus datos
en el sistema.
2. Un Cliente tiene asociados su nombre, apellidos, DNI y número de habitación. En nuestro
sistema un Cliente sólo estará asociado a una habitación.
3. El Hotel tendrá diversos terminales de venta (llamados TPV). El sistema gestor debe
funcionar independientemente del número de TPVs que se utilicen.
4. Cada uno de los TPVs deberá almacenar una serie de gastos de los clientes.
5. Un Gasto asocia una cantidad de dinero con un Cliente del Hotel.
6. El Gestor debe poder acceder a todos los gastos del Cliente y presentar la cantidad total
adeudada por el cliente.

Lea atentamente el ejercicio completo antes de comenzar a contestar las preguntas. Se pide:
a) (4 Puntos) Realice el esquema de clases correspondiente al sistema que se desea implementar.
Indique claramente relaciones, atributos y métodos en cada clase.

SOLUCIÓN

GestorHotel
TPV
private List<TPV> tpvs
private String zona private boolean[] habitaciones
private List<Gasto> gastos private List<Cliente> clientes
public void añadirGasto(Gasto g) public GestorHotel(int habitaciones)
/* metodos set y get de los atributos */ public int gastosCliente(Cliente c)
public void imprimirEstadoHabitaciones()

Cliente
Gasto
private String nombre
private Cliente cliente private String apellidos
private int importe private String dni
private int habitacion
/* metodos set y get de los
atributos */ /* metodos set y get de los
atributos */
b) (3 Puntos) Describa, sin implementar el código, pero indicando las llamadas a métodos en cada
clase y su funcionalidad (incluyendo las estructuras de control necesarias, iteraciones sobre listas,
etc.), cómo se calcularían los gastos de un cliente cuando éste deja el Hotel. (1,5 puntos)

SOLUCIÓN
Para calcular los gastos de un cliente lo primero que debemos hacer es invocar el método
correspondiente de la clase GestorHotel (gastosCliente(Cliente c)).
En el cuerpo de este método recorreremos la lista de TPVs que tiene el hotel, para ello utilizaremos
un bucle for, ya que deseamos recorrer la lista entera.
Dentro del bucle debemos recorrer la lista de gastos que tiene almacenada cada TPV, para lo cual
utilizaremos otro bucle for anidado en el bucle anterior. De esta manera, comprobaremos
mediante el uso de una estructura if, si existe algún gasto en dicho TPV realizado por el cliente que
estamos comprobando.
En caso afirmativo, si en la lista de gastos existe un gasto de este cliente, obtendremos el importe
del gasto y lo almacenaremos en una variable auxiliar que nos permitirá guardar el total de todos
los gastos realizados por el cliente en todos los TPVs.
Al finalizar los dos bucles, que nos permiten recorrer los TPVs y los gastos de un TPV,
devolveremos el gasto total almacenado en la variable auxiliar, mediante la instrucción return.

c) (3 Puntos) Describa, sin implementar el código, pero indicando las llamadas a métodos en cada
clase y su funcionalidad (incluyendo las estructuras de control necesarias, iteraciones sobre listas,
etc.), cómo se podría obtener un listado de las habitaciones libres y ocupadas del Hotel. (1,5
puntos)

SOLUCIÓN
Esta funcionalidad se llevaría a cabo en el método imprimirEstadoHabitaciones() de la clase
GestorHotel.
Como podemos observer en la solución propuesta, hemos modelado la lista de habitaciones como
un array de boolean, cuyo tamaño será el número de habitaciones del hotel, que como podemos
observar se indica como parámetro del constructor de la propia clase.
Esta solución nos permite almacenar mediante un valor booleano el estado de cada habitación, por
ejemplo asignando un true en las habitaciones que están ocupadas. De esta forma, para obtener el
estado de las habitaciones, lo que deberíamos hacer es, primero recorrer mediante un bucle for
todo el array de habitaciones y, segundo, acceder al valor de cada una de las posiciones de dicho
array, que corresponderá con el número de habitación y en caso de tener almacenado el valor true
mostraremos por pantalla que la habitación está ocupada, o libre en caso de tener asignado en
dicha posición el valor false.
FUNDAMENTOS DE INFORMÁTICA Junio 2012 2 A MEC Elec_sem1_A

•Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

TIPO A

Primera Parte: Test

1. ¿Qué puerto permite transferir datos más rápidamente de un dispositivo externo al disco duro?
a. Puerto paralelo.
b. Puerto FireWire 800.
c. Puerto USB 2.
d. Puerto Serie.

2. Un programa tiene que realizar cálculos sobre una matriz de n*n números almacenados en el
disco duro. Vemos que se ralentiza cuando n es demasiado grande. Para solucionarlo podríamos:
a. aumentar la memoria del disco duro.
b. aumentar la memoria RAM.
c. aumentar la memoria ROM.
d. aumentar la memoria de la BIOS.

3. Indica cuál de las siguientes afirmaciones es correcta.


a. Un compilador de C es un proceso.
b. Un programa se compone de un código y un conjunto de datos, ambos cargados en la
memoria ejecutándose.
c. Un proceso es un programa en ejecución.
d. El término proceso se refiere al código fuente de un programa.

4. El planificador del sistema operativo:


a. planifica el uso de la memoria RAM.
b. planifica el uso de los periféricos.
c. planifica el uso de la información por parte de los usuarios.
d. planifica la ejecución de los procesos.

5. En la práctica obligatoria, una Alerta:


a. hereda de la clase Fecha.
b. hereda de la clase Libreta.
c. hereda de la clase Nota.
d. hereda de la clase Hora.
6. Indica cuál de las siguientes afirmaciones en Java es FALSA:
a. La composición permite que atributos tomen como valor instancias de otras clases.
b. La herencia permite extender clases con nuevos atributos.
c. Puede existir herencia entre una clase y ella misma.
d. Puede haber composición entre una clase y ella misma.

7. Indica, a partir de la siguiente declaración, la expresión correcta en Java (asumiendo que existe
un método public int getKm() en la clase:

Coche miCoche = new Coche();

a. Coche.getKm();
b. miCoche.getKm();
c. getKm(miCoche);
d. Coche.miCoche.getKm();

8. ¿Que secuencia de valores imprimiría el siguiente código?



for (int i=1;i<3;i++){
for (int j=1;j<=i;j++){
System.out.print(i);
System.out.print(j);
}
}

a. 11212
b. 12112
c. 11122
d. 11212

9. ¿Qué clases pueden acceder a un campo declarado como “protected”?


a. No se puede acceder a un campo declarado como protected.
b. Sólo la propia clase donde se declara.
c. Sólo las clases que heredan de la clase donde se declara.
d. Las clases dentro del mismo paquete y las clases que heredan de la propia clase
donde se define.

10. Teniendo en cuenta el siguiente código, y dada la clase Hombre que extiende la clase Persona a
través de herencia, indique cuál de las siguientes afirmaciones es correcta.

public class Persona {


private int edad;
}

a. Desde la clase Hombre se puede acceder al atributo edad para mostrar su valor.
b. Desde la clase Hombre se puede modificar el valor del atributo edad.
c. Desde la clase Hombre no se puede acceder al atributo edad.
d. No se puede extender la clase Persona porque no tiene constructor.
Apellidos………………………………...……..Nombre……………………..DNI………...……

Segunda Parte: Problema


Se desea implementar un sistema gestor encargado de la asignación de pistas de aterrizaje a los
distintos vuelos que aterrizan en un aeropuerto. Un aeropuerto se identifica por su nombre y una
lista de pistas de aterrizaje que tiene a su disposición. A su vez, cada pista de aterrizaje está
identificada por un número y tendrá una lista de vuelos asignados que realizarán el aterrizaje en
ella. Por otro lado, cada vuelo está identificado por un código (un número), tiene un origen, un
destino y una fecha de llegada (donde está incluida la hora). Existen 2 tipos de vuelos: comercial,
que además de las características previas, también está identificado por la aerolínea a la que
pertenece y vuelos privados, que en lugar de una aerolínea requieren el nombre de la empresa o
persona dueña del mismo. De esta manera, un aeropuerto debe permitir las siguientes
funcionalidades:
1. Añadir una pista de aterrizaje
2. Asignar una pista de aterrizaje a un vuelo
3. Mostrar los vuelos que van a aterrizar en una determinada pista en una fecha concreta.
NOTA: podemos asumir que existe una clase Fecha, cuyo constructor es Fecha(String fecha, String
hora), donde el primer parámetro representa la fecha como un String y el segundo la hora también
como un String. Un ejemplo de uso sería: new Fecha(“9/6/2012”, “10:00”)
Antes de responder lea con atención todos los apartados. Se pide:
a) (4 puntos) Diseñar el sistema especificado, representando el esquema de clases que muestre las
clases, atributos y métodos (sólo indicarlos, sin escribir su código), así como las relaciones entre las
propias clases, aplicando los principios de la programación orientada a objetos.
SOLUCIÓN
Aeropuerto
PistaAterrizaje
private String nombre
private int id
private List<PistaAterrizaje> pistas
private List<Vuelo> vuelos
public Aeropuerto(String nombre)
public PistaAterrizaje(int id)
public void añadir(PistaAterrizaje pista)
public boolean asignar(Vuelo vuelo)
public boolean asignarPista(vuelo Vuelo, int pista)
/* metodos set y get de los atributos */
public void mostrarVuelos(int pista, Fecha fecha)

Vuelo
private int codigo
private String origen
private String destino
private Fecha fechaLlegada
public Vuelo(int codigo)
/* metodos set y get de los
atributos */

Comercial Privado

private String aerolinea private String dueño


/* metodos set y get de los /* metodos set y get de
atributos */ los atributos */
b) (2 punto) Escribir el código necesario para crear un nuevo aeropuerto llamado “Barajas”, que
tiene 3 pistas de aterrizaje: pistas 1, 2 y 3. Además, escriba el código para crear un vuelo comercial
con código 12, de la aerolínea “IBERIA”, con origen “New York”, destino “Madrid” y fecha de
aterrizaje el 9/6/2012 a las 10:02 horas y asígnelo al aeropuerto “Barajas”, en su pista de aterrizaje
2.
SOLUCIÓN
Aeropuerto barajas = new Aeropuerto(“Barajas”);
PistaAterrizaje pista1 = new Pista(1);
PistaAterrizaje pista2 = new Pista(2);
PistaAterrizaje pista3 = new Pista(3);
barajas.añadir(pista1);
barajas.añadir(pista2);
barajas.añadir(pista3);
Comercial vuelo1 = new Comercial(12);
vuelo1.setAerolinea(“IBERIA”);
vuelo1.setOrigen(“New York”);
vuelo1.setDestino(“Madrid”);
vuelo1.setFechaLlegada(new Fecha(“9/6/2012”, “10:02”));
aeropuerto1.asignar(vuelo1, 2);

c) (4 puntos) Se desea ahorrar gastos, para lo que se ha decidido que los vuelos militares también
puedan aterrizar en los aeropuertos públicos. Estos vuelos tienen las mismas características que el
resto de vuelos, excepto que requieren el país al que pertenecen. Explicar justificadamente cómo
podría el sistema gestor asignar los vuelos militares a una pista de aterrizaje de un aeropuerto, sin
modificar las clases aeropuerto y pista de aterrizaje.

SOLUCIÓN

Aeropuerto
PistaAterrizaje
private String nombre
private int id
private List<PistaAterrizaje> pistas
private List<Vuelo> vuelos
public Aeropuerto(String nombre)
public PistaAterrizaje(int id)
public void añadir(PistaAterrizaje pista)
public boolean asignar(Vuelo vuelo)
public boolean asignarPista(vuelo Vuelo, int pista)
/* metodos set y get de los atributos */
public void mostrarVuelos(int pista, Fecha fecha)

Vuelo

private int codigo


private String origen
private String destino
private Fecha fechaLlegada
public Vuelo(int codigo)
/* metodos set y get de los
atributos */

Comercial Privado Militar


private String aerolinea private String dueño private String pais
/* metodos set y get de los /* metodos set y get de * metodos set y get de
atributos */ los atributos */ los atributos */
Para solucionar este apartado utilizaremos la herencia. De este modo, crearemos una nueva clase
Militar que representará a los vuelos militares y ya que comparte todas las características del resto
de tipos de vuelos, heredará de la propia clase Vuelo.
FUNDAMENTOS DE INFORMÁTICA Septiembre 2012 - 1 sept12-M1

• Para calcular la nota del examen, el test supone el 30% y el problema el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

Primera Parte: Test

1) Indique qué tipo de memoria permite un almacenamiento permanente:

a. La memoria RAM.
b. La memoria ROM.
c. La memoria SRAM.
d. La memoria DRAM.

2) ¿Qué es un hub?

a. Es un bus de comunicaciones que permite compartir una red de datos o la conexión de


varios periféricos.
b. Es un dispositivo de distribución de comunicaciones que permite compartir una red de
datos o la conexión de varios periféricos.
c. Es un protocolo de comunicación que permite compartir una red de datos o la conexión de
varios periféricos.
d. Es un sistema de comunicación unidireccional entre el computador y los periféricos
conectados a él.

3) La máquina virtual de JAVA se caracteriza por permitir la ejecución de:

a. código intermedio en diferentes sistemas operativos.


b. código fuente en diferentes sistemas operativos.
c. codigo objeto JAVA sobre memoria virtual.
d. código objeto JAVA en sistemas operativos multi-tarea.

4) ¿Cuál es la secuencia de pasos necesaria para la compilación de un programa desde un código


fuente a código objeto?

a. Análisis léxico, análisis semántico y generación del código.


b. Análisis léxico, análisis semántico y análisis sintáctico.
c. Análisis léxico, análisis semántico, análisis sintáctico y generación del código.
d. Análisis léxico, análisis sintáctico, análisis semántico y generación del código.
5) ¿Qué valor imprimiría el siguiente código?

int c=0;
for (int i=1;i<4;i++){
c=c+i;
}
System.out.println(c);

a. 3
b. 4
c. 5
d. 6

6) En la práctica obligatoria, la clase Nota:

a. hereda de la clase Libreta.


b. se compone de objetos de la clase Libreta.
c. se compone de Alerta, Libro, Película y Discos.
d. es la clase de la que heredan Alerta, Libro, Película y Disco.

7) Indique cuál de las siguientes afirmaciones es correcta:

a. Una clase puede tener más de un constructor, independientemente de sus parámetros.


b. Una clase nunca puede tener más de un constructor.
c. Una clase puede tener más de un constructor, siempre que sus parámetros sean distintos.
d. Sólo las clases abstractas pueden tener más de un constructor.

8) Dado el siguiente método:

public void suma(int a, int b){


this.a=a+b;
}

a. Actualiza el campo a de la clase a la que pertenece el método.


b. Modifica el parámetro de entrada a.
c. No compila por estar la misma variable a ambos lados del símbolo =.
d. Devuelve la suma de a y b a la clase que realiza la llamada al método.

9) Dos clases contienen algunos métodos y campos duplicados. Según la metodología de


orientación a objetos, lo más apropiado sería:

a. Eliminar una de las clases.


b. Establecer relaciones de herencia.
c. Establecer relaciones de composición.
d. Definir una clase como campo de la otra.

10) ¿Puede un método llamar a métodos de otros objetos?

a. Sí, usando la notación de punto sobre el nombre de la clase a la que pertenece el objeto.
b. Sí, usando la notación de punto sobre el nombre del objeto.
c. No, desde un método sólo se puede llamar a otros métodos del propio objeto.
d. No, desde un método nunca se puede llamar a otro método.
Segunda Parte: Problema

Una empresa que vende piscinas quiere desarrollar una aplicación informática para la gestión de sus
ventas y beneficios. Esta empresa vende dos tipos de piscinas: de obra y autoportantes. En el primer
caso la depuradora podrá ser de cloración salina o convencional (cloro), y empleará siempre filtros
de arena. En el caso de las autoportantes, la depuración siempre será por medio de cloro y, en
este caso, podrán emplearse filtros de arena o de papel. Todas las piscinas, independientemente del
tipo que sean, tienen una capacidad y un precio de compra. La empresa vende las piscinas
añadiendo el porcentaje siguiente al precio de compra inicial:

- Piscina de obra: 25%


- Piscina autoportante: 10%

Realizar el diseño de la aplicación de gestión de ventas para que, al menos, permita:

- Indicar el número total de piscinas vendidas.


- Listar el número total de piscinas autoportantes vendidas con filtro de arena.
- Calcular el total de ingresos obtenido por la venta de todas las piscinas, así como los beneficios
totales de la empresa obtenidos por la venta de las mismas.

Lea atentamente el ejercicio completo antes de comenzar a contestar las preguntas.

Se pide:

a) (4 puntos) Realice un diagrama de clases capaz de cubrir el total de requisitos especificados en el


enunciado, indicando los atributos y métodos que tiene cada clase (sólo indicarlos, sin escribir su
código) y siguiendo los principios de la Programación Orientada a Objetos.

SOLUCIÓN

Piscina GestorPiscinas
private int capacidad private List<Piscina> piscinasVendidas
private int precioCompra private List<PAutoportantes> piscinasAutoportantesVendidas
private static final int porcentaje = 25
protected TDepuracion depuracion public int totalPiscinasVendidas()
public void piscinasAutoportantesVendidasFiltroArena()
/* metodos set y get de los atributos */ public int calcularIngresos()
public int precioVenta() public int calcularBeneficios()

«enumeration»
TDepuracion
salina
cloro
PAutoportante

private static final int porcentaje = 10


protected static final TDepuracion depuracion = cloro
protected TFiltro filtro
/* metodos set y get de los atributos */
public int precioVenta()

«enumeration»
TFiltro
arena
papel
b) (3 puntos) Escriba cómo se implementaría un método capaz de devolver el total de beneficios
que ha obtenido la empresa por la venta de piscinas autoportantes.

SOLUCIÓN
public int beneficiosPisicinasAutoportantes() {
int beneficios = 0;
for (PAutoportantes p : this.piscinasAutoportantesVendidas) {
beneficios += (p.getPrecioCompra() * (p.getPorcentaje() / 100));
}
return beneficios;
}

c) (3 puntos). Si ahora la empresa quisiera modificar el porcentaje de beneficio de las piscinas


autoportantes con filtro de arena del 10% al 15%, ¿Cómo habría que modificar el diseño de la
aplicación para cubrir esta nueva situación? Razone su respuesta.

SOLUCIÓN

Piscina GestorPiscinas
private int capacidad private List<Piscina> piscinasVendidas
private int precioCompra private List<PAutoportantes> piscinasAutoportantesVendidas
private static final int porcentaje = 25
protected TDepuracion depuracion public int totalPiscinasVendidas()
public void piscinasAutoportantesVendidasFiltroArena()
/* metodos set y get de los atributos */ public int calcularIngresos()
public int precioVenta() public int calcularBeneficios()

«enumeration»
TDepuracion
salina
cloro
PAutoportante
private static final int porcentaje = 10
protected static final TDepuracion depuracion = cloro
protected TFiltro filtro
/* metodos set y get de los atributos */
public int precioVenta()

«enumeration»
TFiltro

PAutoportanteArena arena
papel
private static final int percentaje = 15
protected static final TFiltro filtro = arena
/* metodos set y get de los atributos */
public int precioVenta()

Para abordar los nuevos requisitos utilizaremos el mecanismo de herencia. Para ello crearemos
una nueva clase que representará a las piscinas autoportantes con filtro de arena que heredará de
la propia clase piscina autoportante (PAutoportante). En este caso redefiniremos su atributo filtro
para asignarle el valor arena, igualmente que el porcentaje de beneficios.
FUNDAMENTOS DE INFORMÁTICA spet12-M2

• Para calcular la nota del examen, el supone el 30% y el problema el 70%.


• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

Primera Parte: Test

1) ¿Con cuál de las siguientes memorias NO se pierde la información una vez se apaga un
ordenador?
a. Memoria caché.
b. Memoria ROM.
c. Memoria virtual.
d. Memoria RAM.

2) ¿Qué se entiende por dispositivos perifericos?


a. Programas auxiliares del sistema operativo.
b. Dispositivos independientes conectados a la CPU.
c. Puertos USB.
d. Componentes externos del compilador.

3) ¿Cuál de estas situaciones podemos descartar si se detiene la ejecución de un programa JAVA?


a. La memoria RAM no es suficiente.
b. El sistema operativo ha relegado el proceso frente a otras tareas.
c. Un error de compilación.
d. Un bucle sin condición de terminación.

4) ¿Qué parte del sistema operativo se encarga de organizar la información en archivos y


directorios?
a. El gestor de memoria.
b. El sistema de ficheros.
c. La memoria virtual.
d. El gestor de entrada/salida.

5) ¿Qué secuencia de valores imprimiría el siguiente código?


int n = 1;
for (int i=0; i<4; i++) {
System.out.print(i+n);
n++;
}
a. 0135
b. 1357
c. 1235
d. 1347
6) En la práctica obligatoria, el polimorfismo aparece en:
a. el método que permite crear una nueva Libreta.
b. el método que añade una Libreta al GestorLibretas.
c. el método que establece el ISBN de un Libro.
d. el método que escribe por pantalla una Nota.

7). Un método declarado como private:


a. sólo puede ser invocado desde la clase donde se define y sus hijas.
b. sólo puede ser invocado desde la clase donde se define.
c. sólo puede ser invocado desde las clases del paquete en el que está declarado.
d. sólo puede ser invocado desde el constructor de la clase donde está definido.

8) Sin más información a priori, ¿cuál sería la forma más apropiada de modelar los méritos
académicos en un currículum?
a. Por composición, definiendo un campo meritosAcademicos tipo Lista en la clase
Curriculum.
b. Por herencia, donde la clase MeritosAcademicos hereda de Curriculum.
c. Por composición, mediante un campo meritosAcademicos tipo Array de tamaño N.
d. Con un método curriculum en la clase MeritosAcademicos.

9) Dos métodos necesarios en una clase tienen parte de su código duplicado. Según la metodología
de orientación a objetos, lo más apropiado en este caso sería:
a. Eliminar los métodos y crear uno sólo que realice las funciones de los dos.
b. Añadir nuevos métodos que realicen las funciones solapadas.
c. Crear una clase hija para cada método.
d. Definir los métodos como privados.

10) Dadas las clases

public class A{
public int mult(int a,int b){
return a*b
}
}
public class B extends A {
public int mult(int a, int b, int c){
return mult(a,b)*c;
}
}
¿Qué devolvería el siguiente código?

B b = new B();
System.out.println(b.mult(2,2,3));

a. Error, el método mult ha sido sobreescrito y han de usarse 3 parámetros en la llamada.


b. Error, no pueden existir dos métodos con el mismo nombre y diferente número de
parámetros.
c. El código de la clase B provocaría la ejecución de un bucle infinito.
d. 12
Segunda Parte: Problema

Se desea implementar un simulador de una de una red P2P (peer-to-peer) para compartir ficheros.
Estas redes se caracterizan por estar compuestas por un conjunto de nodos, definidos por un
identificador formado por un número entero. Cada nodo, a su vez, dispone de un conjunto de
ficheros que desea compartir. Cada uno de los ficheros se identifica mediante un nombre y un
tamaño (expresado en megas). Cada uno de los nodos tiene una lista de vecinos, que almacena los
nodos a los que puede realizar una petición para descargarse un fichero. Teniendo en cuenta estos
requisitos, se desea que el simulador sea capaz de:

• Añadir un nuevo nodo.


• Eliminar un nodo, a partir de su identificador.
• Mostrar por pantalla el identificador de los nodos que hay en el simulador.

Antes de comenzar a responder lea con atención todos los apartados.

Se pide:

a) (4 puntos) Dibujar un esquema con las clases necesarias para realizar el simulador,
indicando los atributos y métodos que tiene cada una de ellas (sólo indicarlos, sin escribir su
código), aplicando los principios de la programación orientada a objetos.

SOLUCIÓN

Nodo
Simulador
private int id
private List<Nodo> nodos
private List<Fichero> ficheros
private List<Nodo> vecinos public void añadirNodo(Nodo n)
public boolean eliminarNodo(int id)
/* metodos set y get de los
public void mostrarNodos()
atributos */

Fichero
private String nombre
private int tamaño
/* metodos set y get de
los atributos */
b) (2 punto) Escribir el código del método que nos permite mostrar por pantalla el
identificador de los nodos que hay en el simulador.

SOLUCIÓN

public void mostrarNodos() {


for (Nodo n : this.nodos) {
System.out.println(n.getId())
}
}

c) (4 puntos) Supongamos que ahora deseamos ampliar el simulador. En concreto queremos


añadir el concepto de “mensaje”. Para ello, debemos tener en cuenta que los nodos envían
mensajes a sus vecinos; en concreto, pueden enviar dos tipos de mensajes distintos: mensajes
denominados Request (utilizados para pedir un fichero a sus vecinos) y mensajes denominados
Piece (utilizados para enviar un fichero). Todos los mensajes se caracterizan por: un
identificador formado por un número; un emisor, representado por un número que identifica al
nodo que envía el mensaje; y por un receptor, igualmente representado por un número que
identifica al nodo que recibirá el mensaje. Los mensajes Request están compuestos por el
nombre de un fichero que se desea solicitar, mientras que los mensajes Piece contienen el
fichero que se envía. Modifique el esquema de clases realizado en el apartado a) para tener en
cuenta esta nueva funcionalidad. Recuerde que deben aplicarse los principios de la
programación orientada a objetos.

SOLUCIÓN

Nodo
Simulador
private int id
private List<Nodo> nodos
private List<Fichero> ficheros
private List<Nodo> vecinos public void añadirNodo(Nodo n)
public boolean eliminarNodo(int id)
public void enviar(Nodo vecino, Mensaje msg)
public void mostrarNodos()
/* metodos set y get de los atributos */

envia «abstract»
Mensaje
Fichero
private int id
private String nombre private int emisor
private int tamaño private int receptor

/* metodos set y get de /* metodos set y get de


los atributos */ los atributos */

contiene

Piece Request

private Fichero fichero private String nombreFichero


/* metodos set y get de /* metodos set y get de los
los atributos */ atributos */
Como podemos observar, para solucionar este apartado hemos creado una clase abstracta
llamada Mensaje de la cual heredarán los dos tipos de mensajes que queremos tener en cuenta,
representados por las clases Piece y Request, respectivamente.
FUNDAMENTOS DE INFORMÁTICA sept12-M3-b

• Para calcular la nota del examen, el test supone el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
• Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI.

Primera Parte: Test

1) Indica cuál sería la salida del siguiente código:

int resultado = O;
int suma = 1;
while (suma <= 5) {
resultado+= suma;

System.out.print (resultado);

a. 1234
b. No imprimiría nada
c. o
d. 5

2) En la práctica obligatoria:

a. los discos heredan de los libros.


b. el sistema permite buscar una nota dado su título.
c. la notas pueden contener únicamente texto.
d. las alertas no son consideradas notas.

3) Dada la siguiente definición de la clase Coche:

public class Coche{


private int agnoFabricacion;
public Coche(int agnoFabricacion){
this.agnoFabricacion = agnoFabricacion;

public int getAgnoFabricacion(){


return this.agnoFabricacion;

¿Cuál sería la forma correcta de acceder al año de fabricación de un objeto a de la clase Coche
desde otra clase?

a. int X = Coche.getAgnoFabricacion(a);
b. int x = a.getAgnoFabricacion();
C. int x = Coche.agnoFabricacion;
d. int x = a.agnoFabricacion;
4) Si pepe es un objeto de la clase Persona, y Persona tiene el atributo o campo edad, ¿podría
ejecutarse la siguiente sentencia JAVA?

System.out.println(pepe.edad);

a. No. El código es incorrecto.


b. No, dado que edad tendría que ser una clase según esta sentencia.
c. Sí, siempre que la sentencia se encuentre en una clase diferente de Persona.
d. Sí, siempre que el atributo edad sea accesible desde donde se encuentra la sentencia.

5) Teniendo en cuenta el siguiente código:

public class Vehiculo {


private int ruedas;
protected void setRuedas(int ruedas) {

public class Moto extends Vehiculo {


public Moto(){
super.ruedas = 2;

Indique cuál de las siguientes afirmaciones es correcta sobre estas definiciones de clases:

a. Las definiciones no son correctas ya que no se puede acceder a un campo declarado como
private desde una subclase.
b. Las definiciones no son correctas ya que no se puede declarar un método como
protected en una superclase.
c. Al crear un objeto de la clase Moto tendrá 2 ruedas.
d. Para acceder a un campo de una superclase, definido como private, no es necesaria la
palabra super.

6) Se dispone únicamente del codigo intermedio y se desea añadir un campo (atributo) de clase al
sistema ¿Es esto posible?

a. No, sólo podrían añadirse clases reimplementando todos los atributos.


b. Sí, siempre que la clase esté definida como abstract.
c. No, dado que el código está ya compilado.
d, Sí, aplicando herencia sobre la clase en donde se encuentra el campo.

7) La CPU es el dispositivo hardware cuya principal función es:

a. La transmisión de datos.
b. La compilación.
c. El cómputo.
d. El almacenamiento.
8) ¿Qué es la memoria virtual?

a. Es la memoria que añadimos al computador mediante un dispositivo USB.


b. Es un tipo particular de memoria RAM.
c. Es una técnica para proporcionar un acceso más rápido a la memoria del computador.
d. Es una técnica para proporcionar un espacio de direcciones de memoria mucho mayor que
la memoria física del computador.

9) Indique cuál de las siguientes funciones NO es característica del sistema operativo:

a. Organizar la memoria de manera que no haya conflictos entre procesos.


b. La interacción con otros microprocesadores y datos, y la realización de operaciones
aritméticas y lógicas.
c. El control de los procesos de entrada/salida.
d. Decidir en cada momento qué procesos tienen que ejecutarse y qué procesos tienen que
esperar.

10) Indica cuál de las siguientes afirmaciones es correcta. Un sistema operativo multitarea es un
sistema que:

a. permite que se ejecuten varios procesos a la vez.


b. permite ejecutar procesos en tiempo real multiplexando la información.
c. permite que varios usuarios puedan trabajar simultáneamente.
d. permite gestionar a la vez dos o más procesadores.
Segunda Parte: Problema

Se desea implementar un sistema de votaciones. Existe en cada votación una única lista de votantes
y una única lista de candidatos identificados por su nombre. Cada votante tiene asignada una
papeleta con N casillas donde puede introducir por orden de prioridad hasta N candidatos elegidos
de la lista de candidatos.

Las funcionalidades que debe cubrir el sistema son:

FI: Crear una votación donde cada papeleta tiene N casillas.


F2: Añadir a la lista de candidatos un candidato con su nombre.
F3: Añadir a la lista de votantes un votante con su nombre.
F4: Añadir el candidato de nombre X a la papeleta del votante de nombre Y.
F5: Imprimir en pantalla los canditados votados por el votante de nombre Y.
F6: Calcular el candidato que aparece más veces en los primeros M puestos de las papeletas.
Si hay más de un ganador devuelve todos los ganadores.

Antes de comenzar a responder lea con atención todos los apartados.

Se pide:

a) (4 puntos) Dibujar el esquema de clases para este problema indicando clases, atributos o
campos, métodos y relaciones.

b) (3 puntos) Asumiendo que ya está implementado el sistema anterior, escribir las llamadas
necesanas para:
I) Crear una votación con papeletas de 2 casillas.
2) Introducir tres candidatos "CI", "C2", "C3" y tres votantes de nombres "VI", "V2" y
"V3".
3) Añadir el candidato "CI" a las papeletas de "VI" y "V2" y el candidato "C2" a la
papeleta de "V3".
4) Calcular el ganador o ganadores.

e) (3 puntos) Describir en 5 líneas cómo se procedería para, sin modificar el código ya


implementado, extenderlo para que acepte diferentes formas de calcular el ganador. Por
ejemplo, ganador es aquel que aparace en las primeras M posiciones en mas de un 50% de
las papeletas.
• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

Junio 2013 - 1 TIPO A


Primera Parte: Test

1. Un componente de almacenamiento permanente es aquél que mantiene la


información:

a. Durante la ejecución de un programa.


b. Durante la compilación de un programa.
c. Sin ser modificada en ningún momento.
d. Aunque el computador no esté funcionando.

2. Las funciones principales de un sistema operativo se pueden resumir en las


siguientes:

a. Control de la ejecución de programas, administración de periféricos,


gestión de permisos y de usuarios, control de concurrencia y de
errores, administración de memoria y control de seguridad.
b. Control de la ejecución de programas, administración de periféricos,
gestión de permisos y de usuarios, visualización de fotografías y
videos, administración de memoria y control de seguridad.
c. Control de la ejecución de programas, administración de periféricos,
gestión de permisos y de usuarios, realización de video-llamadas,
administración de memoria y control de seguridad.
d. Control de la ejecución de programas, administración de periféricos,
gestión de permisos y de usuarios, manejo de la agenda de
contactos, administración de memoria y control de seguridad.

3. En la práctica de este curso la clase GestorTiradas dispone de un


método que:

a. Permite modificar la ruta de acceso y el nombre del fichero asociado


a un cartel.
b. Permite modificar sólo la ruta de acceso al fichero.
c. Permite modificar sólo el nombre del fichero.
d. Ninguna de las anteriores.
4. En Java:

a. Está permitido definir varios métodos con el mismo nombre siempre


que tengan diferentes parámetros de entrada.
b. Está permitido definir varios métodos con el mismo nombre siempre
que éstos sean constructores y tengan diferentes parámetros de
entrada.
c. No está permitido definir varios métodos con el mismo nombre.
d. No está permitido definir varios métodos con el mismo nombre, salvo
que sean de tipo 'static' y tengan diferentes parámetros de
entrada.

5. ¿Qué secuencia imprimiría el siguiente código?

for (int i = 0; i < 3; i++) {


int j = 1;
do {
System.out.println(j);
j++;
} while (j <= 1);
System.out.println(i);
}

a. 101112
b. 202122
c. 021222
d. 021022

6. Si tenemos una clase A con un método m1, ¿cómo debemos definirlo para
que éste sólo pueda ser invocado desde la misma clase A y desde las
subclases de la misma?

a. No se puede hacer eso, ya que en Java no se permite la herencia


múltiple.
b. El método debe definirse con acceso protegido (protected).
c. El método debe definirse con acceso público (public).
d. El método debe definirse con acceso privado (private).
7. Nos descargamos de la red una clase ReservaEntradaTeatro en
formato .class con un método imprimeEntrada. Queremos reutilizar
dicha clase, pero modificando el formato de la entrada impresa. Para ello
podemos:

a. Aplicar herencia y sobreescritura de métodos.


b. Aplicar composición añadiendo un nuevo método en el
código .class original.
c. Crear una nueva instancia de la clase.
d. No es posible. Es necesario implementar la clase completa de nuevo.

8. ¿Cuál es la diferencia principal en Java entre listas (List) y arrays (o


arreglos)?:

a. En Java no existen las listas.


b. Que el tamaño de la lista está predefinido y no se pueden
redimensionar, mientras que los arrays sí.
c. Que el tamaño de los arrays está predefinido, mientras que las listas
no y, por tanto, pueden ser redimensionadas.
d. Un array sirve para almacenar tipos predefinidos, mientras que una
lista sirve para almacenar objetos.

9. Supongamos que reescribimos un método de la clase padre en la clase hija


con distinto número de parámetros de entrada. Entonces:

a. Tendremos siempre un error en tiempo de ejecución.


b. Se ejecutará el nuevo método cuando se le llame con los parámetros
de entrada correspondientes.
c. Es incorrecto. Sólo se puede reescribir un método de la clase hija en
la clase padre.
d. Es incorrecto, dado que la reescritura de métodos requiere una
relación de composición entre clases.

10. ¿Cómo debería definirse un método para que se pudiera acceder a él


desde una subclase de otro paquete?

a. Como 'public' o 'protected'


b. Como 'public' o 'static'
c. Como 'public' o 'private'
d. Como 'public' o 'default'
Apellidos………………………...……..Nombre…………………DNI….......……...
 
Segunda Parte: Problema

Una tienda de fotografía desea informatizar su negocio. En esta primera


versión desea realizar la gestión de sus pedidos on-line. En concreto, se
podrán realizar pedidos que incluyan dos tipos de producto: impresión de fotos
y cámaras fotográficas. Un pedido estará identificado por la fecha, el cliente, el
número de tarjeta de crédito y la lista de productos que se piden.

Por otro lado, cada producto está identificado por un número. Además, para el
caso particular de las impresiones, se desea almacenar si ésta es a color, el
ancho y el largo (en cm.) y la lista de fotos que se quieren imprimir. En cuanto a
las cámaras, están identificadas por la marca y el modelo.

Como ya hemos dicho anteriormente, en esta primera versión se desean


gestionar los pedidos, de manera que la aplicación permita:

• añadir nuevos pedidos;


• eliminar un pedido realizado por un cliente en una fecha concreta; y
• mostrar por pantalla todos los pedidos realizados por un cliente.

NOTA: Para resolver el problema se hará uso de una clase denominada Foto,
definida por un constructor Foto(String fichero) y un método print()
que muestra los datos de una foto.

Foto
public Foto(String fichero)
public void print()

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (5 puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del problema, indicando los atributos y métodos que tiene cada una
de ellas (sólo indicarlos, sin escribir su código), aplicando los principios de
la programación orientada a objetos.
SOLUCIÓN  
1.  y  3.  
Pedido
private int id GestorPedidos
private String cliente
private List<Pedido> pedidos
private String fecha
private int tarjeta public void añadir(Pedido pedido)
private List<Producto> productos public boolean eliminar(String cliente,
String fecha)
public void print()
public void mostrarPedidos(String cliente)
/* metodos set y get de los
atributos */

«abstract»
Producto
protected int id

public abstract void print()


/* metodos set y get de los
atributos */

ImpresionFotos Camara
private boolean color private String marca
Foto private int ancho private String modelo
private int largo
public Foto(String fichero) private List<Foto> fotos public void print()
public void print() /* metodos set y get de
public void print() los atributos */
/* metodos set y get de los
atributos */
 
 

2. (4 puntos) Escribir el código necesario (en las clases que sea necesario)
para mostrar por pantalla todos los pedidos realizados por un cliente. De
manera que se muestren siguiendo el siguiente formato (los datos de las
fotos de una solicitud de impresión se mostrarán utilizando el método
print() de la clase Foto):

Cliente: “Pepito”
Pedidos:
Fecha: “19/03/2013”
Tarjeta: 12345678910
Productos:
Id: 13
Impresión de fotos
Color: si
Ancho: 13 cm
Largo: 18 cm
Fotos: Foto1.jpg, Foto2.jpg
Id: 14
Cámara fotográfica
Marca: Nikon
Modelo: d5100
SOLUCIÓN  
 
GestorPedidos:  
public void mostrarPedidos(String cliente) {
System.out.println("Cliente: " + cliente);
for (Pedido p : this.pedidos) {
if (p.getCliente().equals(cliente)) {
p.print();
}
}
}
 
 
Pedido:  
public void print() {
System.out.println("Fecha: " + this.fecha);
System.out.println("Tarjeta: " + this.tarjeta);
System.out.println("Productos:");
for (Producto p : this.productos) {
p.print();
}
}  
Producto:  
public abstract void print();
 
ImpresiónFotos:  
/*
* (non-Javadoc)
* @see Producto#print()
*/
@Override
public void print() {
System.out.println("Id: " + this.id);
System.out.println("Revelado de fotos");
System.out.println("Color: " + this.color);
System.out.println("Ancho: " + this.ancho);
System.out.println("Ancho: " + this.largo);
System.out.print("Fotos: ");
for (Foto f : this.fotos) {
f.print();
System.out.print(" ");
}
}  
Cámara:  
/*
* (non-Javadoc)
* @see Producto#print()
*/
@Override
public void print() {
System.out.println("Id: " + this.id);
System.out.println("Camara fotogr√°fica");
System.out.println("Marca: " + this.marca);
System.out.println("Modelo: " + this.modelo);

}
3. (1 punto) Después de tener en funcionamiento la aplicación, se ha
detectado una importante limitación. Con los requisitos especificados no se
pueden distinguir entre potenciales pedidos realizados por el mismo cliente,
con los mismos productos, en la misma fecha. ¿Qué modificaciones se
podrían realizar para distinguir estos casos?

SOLUCIÓN  

Para realizar la solución más sencilla bastaría con añadir un nuevo atributo
a la clase Pedido, que permita identificar a cada uno de los pedidos. En
este caso se ha añadido un atributo denominado id de tipo entero.
• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

-XQLR- 2 TIPO A
Primera Parte: Test

1. Si accedemos a un sitio web por medio de un PC conectado a la red y nos


encontramos con un mensaje "error de ejecución en el servidor", esto
indicaría que:

a. Ha habido un fallo en la red.


b. Nuestro navegador no es compatible.
c. Nuestro sistema operativo no es compatible.
d. El programa en la máquina remota no ha podido ejecutarse
correctamente.

2. El software de sistema:

a. Permite la manipulación y tratamiento de fotografías.


b. Permite la edición de videos.
c. Permite aislar al usuario de los detalles del computador particular
(características de la memoria, dispositivos, etc.).
d. Permite al usuario llevar a cabo tareas específicas, como por ej. el
uso de aplicaciones ofimáticas.

3. En la práctica de este curso:

a. La clase Cartel tiene como atributo un objeto Tirada.


b. La clase Tirada tiene como atributo un objeto Cartel.
c. La clase Tirada tiene como atributo un conjunto de objetos Cartel.
d. La clase Cartel tiene como atributo una lista de objetos Tirada.
4. ¿Qué valores imprimiría el siguiente código?

int[] a = { 1, 2, 3, 4 };
for (int i = 1; i < a.length; i++) {
a[i - 1] = a[i];
}
System.out.print(a[0]);

a. 1,2
b. 2
c. 1
d. 3

5. Si un campo está definido como Private:

a. Es necesario que se ejecute uno de los métodos de su clase para


que sea modificado.
b. No se puede modificar una vez compilado el programa.
c. Requiere permisos para ser modificado.
d. Se puede acceder directamente desde cualquier subclase.

6. Indique cuál de las siguientes afirmaciones es correcta en la programación


orientada a objetos:

a. Los objetos definen el tipo de atributos dentro de una clase.


b. Las clases definen el tipo de objetos.
c. Las clases definen el estado actual de un objeto.
d. Los objetos definen el estado actual de una clase.

7. Teniendo en cuenta las siguientes definiciones de clases:

public class Persona {


}
public class Hombre extends Persona {
}
public class Mujer extends Persona {
}

¿Las siguientes instrucciones son correctas?

List<Persona> personas = new ArrayList<Persona>();


personas.add(new Hombre());
personas.add(new Mujer());
personas.add(new Persona());

a. No, ya que en una lista de la clase Persona no se podrían añadir


objetos de la clase Hombre y Mujer.
b. No, ya que la clase Persona no se puede instanciar.
c. Sí, ya que las clases Hombre y Mujer heredan de la clase Persona.
d. Sí, si quitamos la última instrucción (personas.add(new Persona());) ya
que la clase Persona no se puede instanciar.
8. ¿Cuál de estas afirmaciones es falsa? El tratamiento de errores mediante
excepciones en un objeto en Java permite capturar un error e imprimir un
mensaje indicando:

a. El tipo de error.
b. La zona del código donde se produjo el error.
c. En su caso, el nombre del fichero de lectura que ha producido el
error.
d. Los valores de los campos de todos los objetos instanciados en ese
momento.

9. Indique cuál de las siguientes afirmaciones es FALSA. En Java:

a. Por medio de la herencia es posible reutilizar código.


b. Por medio de la composición es posible reutilizar código.
c. En las clases abstractas no es posible acceder al valor de sus
campos desde objetos de otra clase.
d. No es posible instanciar objetos de una clase abstracta.

10. Un método polimórfico en Java, permite:

a. Que dicho método no devuelva ningún resultado.


b. Que el método sólo sea accesible desde la propia clase.
c. Java no admite polimorfismo a nivel de método.
d. Que se puedan invocar distintos métodos en diferentes momentos.
Apellidos………………………...……..Nombre……………………..DNI………...

Segunda Parte: Problema

De manera genérica, un sitio de opiniones está compuesto por un conjunto de


usuarios que vierten opiniones sobre distintos objetos. Un ejemplo de estos
sistemas es la famosa web TripAdvisor, donde los usuarios pueden expresar
sus opiniones sobre hoteles. En este problema se desea modelar este tipo de
sistemas.

En nuestro caso, un usuario estará caracterizado por su nombre o nick y por


las opiniones que ha realizado en el sistema. Al mismo tiempo, el sistema
estará compuesto por un conjunto de objetos sobre los que se puede opinar,
los propios usuarios y las opiniones que éstos han vertido en el sistema.

Por otro lado, una opinión estará definida por la fecha en la que se realizó, el
usuario que la realizó, el objeto sobre el que se está opinando, una valoración
representada por un número entero y un texto que almacena la justificación de
la propia opinión.

Nuestro sistema, internamente, agregará todas las opiniones vertidas sobre un


objeto concreto, calculando su valoración general. Del mismo modo, puede
devolver un ranking (una lista ordenada), de todos los objetos, en función de su
valoración global, de tal manera que el primer objeto de la lista es el mejor
valorado, etc.

Queremos modelar este problema, de modo que el sistema de opinión


contenga la funcionalidad explicada, es decir:

• Permita añadir nuevas opiniones expresadas por usuarios sobre objetos.


• Permita consultar la valoración global de un objeto concreto, expresada
como un número real.
• Permita obtener un ranking de objetos, proporcionando una lista con
todos los objetos sobre los que se ha opinado, ordenados en función de
su valoración global.

Antes de comenzar a responder lea con atención todos los apartados. Se pide:

1. (4 puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del problema, indicando los atributos y métodos que tiene cada una
de ellas (sólo indicarlos, sin escribir su código), aplicando los principios de
la programación orientada a objetos.

2. (2 puntos) Supongamos que queremos utilizar el sistema de opinión


modelado en el apartado anterior, para un sitio web donde los objetos a
valorar sean libros. Los libros estarán caracterizados por un título, un autor
y la editorial. Siguiendo los principios de la programación orientada a
objetos, ¿qué modificaciones habría que realizar en el diseño del apartado
1, para adaptar el diseño a este nuevo requisito? Razone su respuesta.

SOLUCIÓN  
1.  y  2.  
SistemaOpinion
Usuario private List<Usuario> usuarios
private List<Objetos> objectos
private String nombre
private List<Opinion> opiniones
private List<Opinion> opiniones
public void añadir(Usuario usuario)
public void añadir(Opinion op)
public void añadir(Objecto obj)
/* metodos set y get de los
public void añadir(Opinion op)
atributos */
public doble getValoracionGlobal(Objecto obj)
public List<Objeto> getRanking()

Opinion

private String fecha


private Usuario usuario Objeto
private Objeto objeto
private int valoracion private int id
private String justificacion /* metodos set y get de los
/* metodos set y get de los atributos */
atributos */

Libro

public String titulo


public String autor
public String editorial
/* metodos set y get de los
atributos */
 
 
Para resolver el apartado 2, utilizaremos herencia, creando una nueva
clase Libro que herede de la clase Objeto

3. (2 puntos) Escriba el código necesario para instanciar una opinión


expresada por el usuario con nombre “Pepito”, sobre el libro con título “El
guardián entre el centeno”, cuyo autor es “J.D. Salinger”, de la editorial
“Alianza”, identificado con el identificador 1, valorada con un 5, en la fecha
“19/03/2013” y cuya justificación textual dice: “Libro muy entretenido”. (Para
la fecha se puede utilizar el tipo de datos String). Añada la opinión al
sistema de opinión (suponga que éste ha sido previamente instanciado en
la variable “sistemaOpinion”) y, a continuación, consulte la valoración global
del mismo libro.
SOLUCIÓN  

// Creación del usuario


Usuario u = new Usuario(“Pepito”);
// Creación del objeto libro
Libro libro1 = new Libro(1);
libro1.setTitulo(“El guardián entre el centeno”);
libro1.setAutor(“J.D. Salinger”);
libro1.setEditorial(“Alianza”);
// Creación de la opinión
Opinion op1 = new Opinion();
op1.setUsuario(u);
op1.setObjeto(libro1);
op1.setValoracion(5);
op1.setFecha(“19/03/2013”);
op1.setTexto(“Libro muy entretenido”);
// Incorporación de la opinión en el sistema de reputación
sistemaOpinion.añadir(op1);
// Consulta de la reputación del libro
double valoracionGlobal = sistemaOpinion.getValoracionGlobal(libro1);
 

4. (2 puntos) Escriba el código de un nuevo método del sistema, que permita


mostrar por pantalla todas las opiniones expresadas por un usuario
concreto.

SOLUCIÓN  

public void mostrarOpiniones(Usuario u) {


// Recorremos las opiniones almacenadas
for (Opinion op : this.opiniones) {
if (op.getUsuario.getNombre().equals(u.getNombre())) {
System.out.println(“Opnion expresada por el usuario: “ +
u.getNombre() + “ en la fecha: “ + op.getFecha() + “sobre el
objeto: “ + op.getObjeto() + “ valorado con un: “ +
op.getValoracion() + “ y su justificación es: “ +
op.getJustificacion() );
}
}
}

Para la nota del examen, el test vale el 30% y el Problema vale el 70% .

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

TIPO A

Primera Parte: Test

1. Desde un punto de vista técnico, un puerto USB:

a. Es un bus de comunicación ya que, al igual que el puerto PCI, aporta


una simple interfaz de periféricos al computador.
b. Es un protocolo de comunicación que, como los puertos serie y paralelo,
requieren una interfaz externa para conectar periféricos con el
computador.
c. Proporciona una comunicación bi-direccional entre el computador y los
periféricos donde cada periférico se comunica como si tuviera su propia
línea de comunicación directa.
d. Transmite datos bit-a-bit en un proceso secuencial y, por lo tanto, es
ocho veces más rápido que la transmisión paralela de los datos que usa
el puerto paralelo.

2. Se desea ejecutar un proceso que requiere el almacenamiento temporal de


una gran cantidad de datos durante el proceso de cómputo, tanto que la
memoria volatil (principal) no es suficiente. Sin modificar físicamente el
computador, una posible solución a este problema sería:

a. Ampliar la memoria caché del computador.


b. Ampliar la memoria virtual del computador.
c. Ampliar la memoria principal.
d. No es posible.

3. La gestión de memoria del sistema operativo:

a. Se encarga de almacenar la información relacionada con las claves de


acceso al sistema, así como a los diferentes programas en los sistemas
operativos multiusuario.
b. Se encarga de la ordenación de los ficheros (o archivos) presentes en el
ordenador en directorios, así como de optimizar el tiempo de acceso a
los mismos desde la memoria principal y secundaria.
c. Es la encargada del funcionamiento inicial de la placa base desde
programas almacenados en la memoria principal, así como de realizar
las funciones básicas de manejo y configuración del ordenador en el
proceso de arranque.
d. Se encarga de gestionar qué zonas de memoria del sistema están
siendo utilizadas y qué zonas están libres, así como del intercambio de
datos entre la memoria principal y secundaria.
4. En la práctica del presente curso, una tirada con troquel tiene de manera
adicional, el siguiente campo:

a. Su número de divisiones.
b. Su tipo de troquelado.
c. Su tipo de tirada.
d. Su tipo de impresión.

5. Indique cuál de las opciones siguientes se correspondería con la salida del


siguiente código:

for (int i=O; i<3; i++) {


for (int j=O; j<3; j++) {
System.out.print(i);
}
}

a. 000111222
b. 001122
c. 012012012
d. 010203101112202122

6. ¿Cuál de las siguientes afirmaciones es correcta?

a. Todos los objetos de una clase tendrán los mismos atributos pero de
distinto tipo de datos.
b. Todos los objetos de una clase pueden tener distintos atributos pero
iguales métodos.
c. Todos los objetos de una clase tendrán los mismos atributos y métodos.
d. Todos los objetos de una clase tendrán los mismos métodos y los
mismos valores en sus atributos.

7. Si definimos un atributo de una clase como "static":

a. Su valor será constante.


b. Su valor será el mismo para todos los objetos de la clase.
c. Su valor sólo puede ser accedido por las clases del mismo paquete.
d. Su valor sólo es visible para las subclases de la clase donde está
definido.
8. ¿Cuántas instancias podemos asegurar que adquieren el valor "Pepe" en
su campo "nombre" según el siguiente código?

Persona p new Persona("Pepe");


=

this.nombre "Pepe";
=

a. Una. La instancia p creada en dicho código.


b. Dos, siempre que el constructor de la clase Persona tenga como
parámetro de entrada el valor a asignar al campo nombre.
c. Una. La instancia a la que pertenece dicho código.
d. Dos, en cualquier caso.

9. Indique cuál de las siguientes afirmaciones es correcta.

a. Una subclase puede sobrescribir la implementación de un método. Para


hacerlo, la subclase declara un método con la misma signatura que la
superclase pero con un cuerpo diferente. El método sobrescrito tiene
precedencia cuando se invoca sobre objetos de la subclase.
b. Una subclase puede sobrescribir la implementación de un método. Para
hacerlo, la subclase declara un método con diferente signatura que la
superclase. El método sobrescrito tiene precedencia cuando se invoca
sobre objetos de la subclase.
c. Una subclase puede sobrescribir la implementación de un método. Para
hacerlo, la subclase declara un método con la misma signatura que la
superclase pero con un cuerpo diferente. El método de la superclase
tiene precedencia cuando se invoca sobre objetos de la subclase.
d. Una subclase puede sobrescribir la implementación de un método. Para
hacerlo, la subclase declara un método con diferente signatura que la
superclase. El método de la superclase tiene precedencia cuando se
invoca sobre objetos de la subclase.

1O. Indique cuál de las siguientes afirmaciones es falsa:

a. Una definición de un método abstracto consiste en una signatura de


método sin un cuerpo, y se marca con la palabra clave abstract.
b. Una clase abstracta se crea como una superclase de otras clases y no
pueden contener, a su vez, métodos abstractos.
c. La herencia múltiple permite que una clase herede de más de una
superclase.
d. Una interfaz en java es la especificación de un tipo que no define
ninguna implementación para ningún método.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Una nueva cadena de televisión de pago quiere una aplicación informática para
la gestión de su negocio y, para ello, nos encarga desarrollar un software capaz
de cubrir las siguientes especificaciones. La cadena ofrece canales que
identificará por un nombre y por una frecuencia de emisión. Éstos deberán
poderse agrupar en paquetes prefijados para poder ofrecerlos después a sus
usuarios. De los usuarios se quiere almacenar su nombre y apellidos, su NIF y
su cuenta corriente para poder realizar los cobros, así como los paquetes que
el usuario quiera contratar.

Además, el sistema deberá permitir:


Dar de alta y de baja a usuarios en el sistema.

Dar de alta y de baja canales en el sistema.

Dar de alta y de baja paquetes, tanto en el sistema como en el contrato
de cada usuario.

Dar de alta y baja a canales dentro de cada paquete.

Generar una factura a cada cliente en función de los paquetes que tiene
contratados.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (5 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (3 Puntos) Escribir el código necesario para dar de alta un usuario en el


sistema con un paquete de deportes con los siguientes canales:
Fútboi_Champions (frecuencia 0003), NBA_Iive (frecuencia 0023), Golf_live
(frecuencia 0109) y Tenis_Grand-Siam (frecuencia 0051). Los datos del
usuario son los siguientes:

Nombre y Apellidos: Mariano Marianez de Mariano


NIF: 02132345-L
ce: 2056-1234-67-3000566534

3. (2 Puntos) Después de tener en funcionamiento la aplicación durante un


tiempo, la empresa desea ampliar la funcionalidad para incluir no sólo
clientes (personas físicas) sino también empresas. Se quiere que en el caso
de las empresas se aplique un 5% más en la factura por los permisos de
emisión pública. ¿Cómo debería ampliarse el diseño de la aplicación sin
modificar las clases ya existentes?

Para la nota del examen, el test vale el 30% y el Problema vale el 70% .

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

TIPOB

Primera Parte: Test

1. La gestión de memoria del sistema operativo:

a. Se encarga de la ordenación de los ficheros (o archivos) presentes en el


ordenador en directorios, así como de optimizar el tiempo de acceso a
los mismos desde la memoria principal y secundaria.
b. Se encarga de gestionar qué zonas de memoria del sistema están
siendo utilizadas y qué zonas están libres, así como del intercambio de
datos entre la memoria principal y secundaria.
c. Se encarga de almacenar la información relacionada con las claves de
acceso al sistema, así como a los diferentes programas en los sistemas
operativos multiusuario.
d. Es la encargada del funcionamiento inicial de la placa base desde
programas almacenados en la memoria principal, así como de realizar
las funciones básicas de manejo y configuración del ordenador en el
proceso de arranque.

2. Indique cuál de las opciones siguientes se correspondería con la salida del


siguiente código:

for (int i=O;i<3;i++) {


for (int j=O;j<3;j++) {
System.out.print(i);
}
}

a. 001122
b. 010203101112202122
c. 000111222
d. 012012012

3. Se desea ejecutar un proceso que requiere el almacenamiento temporal de


una gran cantidad de datos durante el proceso de cómputo, tanto que la
memoria volatil (principal) no es suficiente. Sin modificar físicamente el
computador, una posible solución a este problema sería:

a. Ampliar la memoria virtual del computador.


b. No es posible.
c. Ampliar la memoria caché del computador.
d. Ampliar la memoria principal.
4. Desde un punto de vista técnico, un puerto USB:

a. Es un protocolo de comunicación que, como los puertos serie y paralelo,


requieren una interfaz externa para conectar periféricos con el
computador.
b. Transmite datos bit-a-bit en un proceso secuencial y, por lo tanto, es
ocho veces más rápido que la transmisión paralela de los datos que usa
el puerto paralelo.
c. Es un bus de comunicación ya que, al igual que el puerto PCI, aporta
una simple interfaz de periféricos al computador.
d. Proporciona una comunicación bi-direccional entre el computador y los
periféricos donde cada periférico se comunica como si tuviera su propia
línea de comunicación directa.

5. Indique cuál de las siguientes afirmaciones es correcta.

a. Una subclase puede sobrescribir la implementación de un método. Para


hacerlo, la subclase declara un método con diferente signatura que la
superclase. El método sobrescrito tiene precedencia cuando se invoca
sobre objetos de la subclase.
b. Una subclase puede sobrescribir la implementación de un método. Para
hacerlo, la subclase declara un método con diferente signatura que la
superclase. El método de la superclase tiene precedencia cuando se
invoca sobre objetos de la subclase.
c. Una subclase puede sobrescribir la implementación de un método. Para
hacerlo, la subclase declara un método con la misma signatura que la
superclase pero con un cuerpo diferente. El método sobrescrito tiene
precedencia cuando se invoca sobre objetos de la subclase.
d. Una subclase puede sobrescribir la implementación de un método. Para
hacerlo, la subclase declara un método con la misma signatura que la
superclase pero con un cuerpo diferente. El método de la superclase
tiene precedencia cuando se invoca sobre objetos de la subclase.

6. En la práctica del presente curso, una tirada con troquel tiene de manera
adicional, el siguiente campo:

a. Su tipo de troquelado.
b. Su tipo de impresión.
c. Su número de divisiones.
d. Su tipo de tirada.
7. Indique cuál de las siguientes afirmaciones es falsa:

a. Una clase abstracta se crea como una superclase de otras clases y no


pueden contener, a su vez, métodos abstractos.
b. Una interfaz en java es la especificación de un tipo que no define
ninguna implementación para ningún método.
c. Una definición de un método abstracto consiste en una signatura de
método sin un cuerpo, y se marca con la palabra clave abstract.
d. La herencia múltiple permite que una clase herede de más de una
superclase.

8. ¿Cuál de las siguientes afirmaciones es correcta?

a. Todos los objetos de una clase pueden tener distintos atributos pero
iguales métodos.
b. Todos los objetos de una clase tendrán los mismos métodos y los
mismos valores en sus atributos.
c. Todos los objetos de una clase tendrán los mismos atributos pero de
distinto tipo de datos.
d. Todos los objetos de una clase tendrán los mismos atributos y métodos.

9. Si definimos un atributo de una clase como "static":

a. Su valor será el mismo para todos los objetos de la clase.


b. Su valor sólo es visible para las subclases de la clase donde está
definido.
c. Su valor será constante.
d. Su valor sólo puede ser accedido por las clases del mismo paquete.

1O. ¿Cuántas instancias podemos asegurar que adquieren el valor "Pepe" en


su campo "nombre" según el siguiente código?

Persona p new Persona("Pepe");


=

this.nombre "Pepe";
=

a. Dos, siempre que el constructor de la clase Persona tenga como


parámetro de entrada el valor a asignar al campo nombre.
b. Dos, en cualquier caso.
c. Una. La instancia p creada en dicho código.
d. Una. La instancia a la que pertenece dicho código.
Apellidos......................................Nombre..................... DNI...................

Segunda Parte: Problema

Una nueva cadena de televisión de pago quiere una aplicación informática para
la gestión de su negocio y, para ello, nos encarga desarrollar un software capaz
de cubrir las siguientes especificaciones. La cadena ofrece canales que
identificará por un nombre y por una frecuencia de emisión. Éstos deberán
poderse agrupar en paquetes prefijados para poder ofrecerlos después a sus
usuarios. De los usuarios se quiere almacenar su nombre y apellidos, su NIF y
su cuenta corriente para poder realizar los cobros, así como los paquetes que
el usuario quiera contratar.

Además, el sistema deberá permitir:


Dar de alta y de baja a usuarios en el sistema.

Dar de alta y de baja canales en el sistema.

Dar de alta y de baja paquetes, tanto en el sistema como en el contrato
de cada usuario.

Dar de alta y baja a canales dentro de cada paquete.

Generar una factura a cada cliente en función de los paquetes que tiene
contratados.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (5 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (3 Puntos) Escribir el código necesario para dar de alta un usuario en el


sistema con un paquete de deportes con los siguientes canales:
Fútboi_Champions (frecuencia 0003), NBA_Iive (frecuencia 0023), Golf_live
(frecuencia 0109) y Tenis_Grand-Siam (frecuencia 0051). Los datos del
usuario son los siguientes:

Nombre y Apellidos: Mariano Marianez de Mariano


NIF: 02132345-L
ce: 2056-1234-67-3000566534

3. (2 Puntos) Después de tener en funcionamiento la aplicación durante un


tiempo, la empresa desea ampliar la funcionalidad para incluir no sólo
clientes (personas físicas) sino también empresas. Se quiere que en el caso
de las empresas se aplique un 5% más en la factura por los permisos de
emisión pública. ¿Cómo debería ampliarse el diseño de la aplicación sin
modificar las clases ya existentes?
• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

TIPO A
Primera Parte: Test
1. ¿Qué es la placa base o madre de un computador?

a. Es el componente hardware donde se integran todos los


componentes que colectivamente proporcionan la funcionalidad
del computador.
b. Es el componente hardware del computador que permite realizar
operaciones aritméticas y lógicas.
c. Es el componente hardware donde se almacena la información de
manera permanente.
d. Es el componente hardware donde se almacena la información de
manera temporal.

2. Los requisitos de un sistema incluyen disponer de 8 GigaBytes de


memoria principal. ¿Cuál es la menor de estas memorias que satisface
dicho requisito?
a. 900 MegaBytes
b. 109 Bytes
c. 9*109 Kbytes
d. 9*109 Bytes

3. ¿Qué significa que un sistema operativo es multitarea?:

a. Que es capaz de atender las peticiones de múltiples usuarios al


mismo tiempo.
b. Que es capaz de ejecutar los programas secuencialmente.
c. Que es capaz de ejecutar varios programas a la vez.
d. Que es capaz de gestionar varios procesadores.

4. ¿Cuál es la secuencia correcta de un compilador?:

a. A partir del código objeto genera el código fuente, que a


continuación es interpretado.
b. A partir del lenguaje máquina genera un código fuente que es
ejecutado.
c. A partir de un código fuente genera un código objeto que, a
continuación, se traduce en código ejecutable.
d. Toma una instrucción del código fuente, la traduce a código
ejecutable, la ejecuta y repite la fase con las siguientes
instrucciones.
5. En la práctica del presente curso, ¿cuál de las siguientes
funcionalidades NO es cubierta por la clase Gestora?

a. Listar todas las tiradas e imágenes correspondientes, mostrando


la información relativa a cada tirada.
b. Devolver la ruta y acceso de un cartel dado un identificador.
c. Añadir un objeto de tipo Tirada a la lista.
d. Crear una copia de un cartel.

6. Indique qué se imprimiría por pantalla tras la ejecución del siguiente


código:

public static void main(String args[]){


int numero = 4557888;
int digitos = 0;
do {
numero = numero / 10;
digitos++;
} while ( numero > 0 );
System.out.println(digitos);
}

a. 6
b. 7
c. 8
d. Nada, porque se ejecutaría un bucle infinito.

7. En un programa orientado a objetos, cada persona tiene asociado dos


progenitores de la clase Persona. Varias personas pueden tener
asociado un mismo progenitor. Si modificamos el nombre de una
persona, ¿es necesario modificarlo en todos sus hijos?

a. Siempre es necesario.
b. No, porque hay una relación de herencia entre progenitores e
hijos.
c. No es necesario.
d. Sólo cuando no haya un campo identificador único del progenitor.

8. ¿Qué distingue a las diferentes instancias de una clase?

a. El conjunto de campos de los que dispone.


b. Los valores de sus campos.
c. La definición de los métodos.
d. La clase de la que hereda.
9. Indique cuál de las siguientes afirmaciones es falsa:

a. Todos los métodos deben devolver un tipo de valor. Si el método


no devuelve ningún valor, el tipo se define como void.
b. Todos los métodos deben de tener, al menos, un parámetro.
Éstos deberán ir entre paréntesis y separados por comas,
especificando para cada uno de ellos su tipo.
c. Todos los métodos en java pueden generar excepciones.
d. Un método puede devolver un tipo primitivo, un array o lista, un
String o un objeto.

10. Dadas las siguientes clases:

public class A {
public void escribir(String a) {
System.out.print(a);
}
}

public class B extends A {


public void escribir(String a) {
System.out.println(“El valor es: “ + a);
}
}

¿Qué devolvería el siguiente código?:


A a = new B();
a.escribir(“Hola”);

a. El valor es: Hola


b. Hola
c. No devolvería nada puesto que no podemos asignar un objeto de
clase A en una variable del tipo B.
d. No devolvería nada puesto que se produciría un error ya que no
se pueden sumar dos Strings.
Apellidos………………………...……..Nombre…………………DNI….......……...

Segunda Parte: Problema

Una empresa de paquetería quiere implantar un sistema para gestionar las


reclamaciones que le pueden realizar sus clientes como consecuencia de
posibles problemas en el servicio que ofrecen. La empresa tiene almacenados
a sus clientes con su dni, el nombre, los apellidos y una dirección de correo
electrónico. Éstos podrán poner una reclamación sobre un envío concreto,
identificado por un número y añadir un comentario donde explique el motivo de
su reclamación. Las reclamaciones interpuestas por los clientes serán
identificadas por un número y deben de ser almacenadas, para poder
gestionarlas. En concreto el sistema debe permitir:

1. Añadir una nueva reclamación.


2. Indicar todas las reclamaciones que un determinado cliente ha
interpuesto.
3. Eliminar una reclamación a partir de su número.
4. A partir de un número de reclamación y un texto que explique la solución
dada al cliente, cerrar una reclamación, añadiendo dicho texto como
contestación a la reclamación.

Lea atentamente el ejercicio completo antes de comenzar a contestar las


preguntas. Se pide:

1. (4 Puntos) Realice el esquema de clases correspondiente al sistema que


se desea implementar, indicando los atributos y métodos que tiene cada
una de las clases (sólo indicarlos, sin escribir su código), aplicando los
principios de la programación orientada a objetos.
SOLUCIÓN  
1.  y  3.  

Reclamacion GestorReclamaciones

private int numero private List<Reclamacion> reclamaciones


private Cliente cliente private List<Cliente> clientes
private int num_envio
private String comentario public void añadir(Reclamacion r)
private boolean cerrada public boolean eliminar(int num)
private String solucion public void getReclamaciones(String
cliente)
/* metodos set y get de los public void cerrarReclamacion(int num,
atributos */ String solucion)

Cliente
Sugerencia
private String DNI
private String Departamento
private String nombre
/* metodos set y get de los private String apellidos
atributos */ private String email
/* metodos set y get de
los atributos */

2. (4 Puntos) Escribir el código del método que realice la funcionalidad


número 4 (cerrar una reclamación añadiendo la solución proporcionada a
una reclamación).

SOLUCIÓN  

public void cerrarReclamacion(int num, String solucion) {


for (Reclamacion r : this.reclamaciones) {
if (r.getNumero() == num) {
r.setSolucion(solucion);
r.setCerrada(true);
}
}
}
3. (2 Puntos) Ampliar el diseño del primer apartado, sin modificar las clases
ya implementadas, para permitir que el sistema pueda gestionar también
sugerencias. Las sugerencias se caracterizan por estar puestas por un
cliente en relación a un envío concreto, tener un número identificativo, el
texto de la sugerencia y un destinatario donde se introduce el
departamento al que van referidas. Dichas sugerencias podrán ser
contestadas.

SOLUCIÓN  

Para resolver el apartado 3 utilizaremos herencia, crearemos una nueva clase


Sugerencia, heredando de la clase Reclamación, de manera que comparten
todos los atributos y, por tanto, sólo será necesario añadir el nuevo atributo
departamento de tipo String, que nos permita añadir el nombre del
departamento sobre el que se realiza la sugerencia.

Para la nota del examen, el test vale el 30% y el Problema vale el 70%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

TI POB
Primera Parte: Test

1. ¿Qué significa que un sistema operativo es multitarea?:

a. Que es capaz de ejecutar los programas secuencialmente.


b. Que es capaz de gestionar varios procesadores.
c. Que es capaz de atender las peticiones de múltiples usuarios al
mismo tiempo.
d. Que es capaz de ejecutar varios programas a la vez.

2. En la práctica del presente curso, ¿cuál de las siguientes


funcionalidades NO es cubierta por la clase Gestora?

a. Devolver la ruta y acceso de un cartel dado un identificador.


b. Crear una copia de un cartel.
c. Listar todas las tiradas e imágenes correspondientes, mostrando
la información relativa a cada tirada.
d. Añadir un objeto de tipo Tirada a la lista.

3. Los requisitos de un sistema incluyen disponer de 8 GigaBytes de


memoria principal. ¿Cuál es la menor de estas memorias que satisface
dicho requisito?

a. 109 Bytes
b. 9*109 Bytes
c. 900 MegaBytes
d. 9*109 Kbytes

4. ¿Qué es la placa base o madre de un computador?

a. Es el componente hardware del computador que permite realizar


operaciones aritméticas y lógicas.
b. Es el componente hardware donde se almacena la información de
manera temporal.
c. Es el componente hardware donde se integran todos los
componentes que colectivamente proporcionan la funcionalidad
del computador.
d. Es el componente hardware donde se almacena la información de
manera permanente.
5. Indique cuál de las siguientes afirmaciones es falsa:

a. Todos los métodos deben de tener, al menos, un parámetro.


Éstos deberán ir entre paréntesis y separados por comas,
especificando para cada uno de ellos su tipo.
b. Un método puede devolver un tipo primitivo, un array o lista, un
String o un objeto.
c. Todos los métodos deben devolver un tipo de valor. Si el método
no devuelve ningún valor, el tipo se define como void.
d. Todos los métodos en java pueden generar excepciones.

6. ¿Cuál es la secuencia correcta de un compilador?:

a. A partir del lenguaje máquina genera un código fuente que es


ejecutado.
b. Toma una instrucción del código fuente, la traduce a código
ejecutable, la ejecuta y repite la fase con las siguientes
instrucciones.
c. A partir del código objeto genera el código fuente, que a
continuación es interpretado.
d. A partir de un código fuente genera un código objeto que, a
continuación, se traduce en código ejecutable.

7. Dadas las siguientes clases:

public class A {
public voi d escribir(String a) {
System.out.print(a);

public class B exten ds A {


public voi d escribir(String a) {
System.out.println("El valor es: " + a);

¿Qué devolvería el siguiente código?:

A a = new B();
a.escribir("Hola");

a. Hola
b. No devolvería nada puesto que se produciría un error ya que no
se pueden sumar dos Strings.
c. El valor es: Hola
d. No devolvería nada puesto que no podemos asignar un objeto de
clase A en una variable del tipo B.
8. Indique qué se imprimiría por pantalla tras la ejecución del siguiente
código:

public static voi d main(String args[]) {


int numero = 4557888;
int digitos O;
do {
numero numero 1 lO;
digitos+ +;
while ( numero > O);
System.out.println( digitos);

a. 7
b. Nada, porque se ejecutaría un bucle infinito.
c. 6
d. 8

9. En un programa orientado a objetos, cada persona tiene asociado dos


progenitores de la clase Persona. Varias personas pueden tener
asociado un mismo progenitor. Si modificamos el nombre de una
persona, ¿es necesario modificarlo en todos sus hijos?

a. No, porque hay una relación de herencia entre progenitores e


hijos.
b. Sólo cuando no haya un campo identificador único del progenitor.
c. Siempre es necesario.
d. No es necesario.

1O. ¿Qué distingue a las diferentes instancias de una clase?

a. Los valores de sus campos.


b. La clase de la que hereda.
c. El conjunto de campos de los que dispone.
d. La definición de los métodos.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Una empresa de paquetería quiere implantar un sistema para gestionar las


reclamaciones que le pueden realizar sus clientes como consecuencia de
posibles problemas en el servicio que ofrecen. La empresa tiene almacenados
a sus clientes con su dni, el nombre, los apellidos y una dirección de correo
electrónico. Éstos podrán poner una reclamación sobre un envío concreto,
identificado por un número y añadir un comentario donde explique el motivo de
su reclamación. Las reclamaciones interpuestas por los clientes serán
identificadas por un número y deben de ser almacenadas, para poder
gestionarlas. En concreto el sistema debe permitir:

1. Añadir una nueva reclamación.

2. Indicar todas las reclamaciones que un determinado cliente ha


interpuesto.

3. Eliminar una reclamación a partir de su número.

4. A partir de un número de reclamación y un texto que explique la solución


dada al cliente, cerrar una reclamación, añadiendo dicho texto como
contestación a la reclamación.

Lea atentamente el ejercicio completo antes de comenzar a contestar las


preguntas. Se pide:

1. (4 Puntos) Realice el esquema de clases correspondiente al sistema que


se desea implementar, indicando los atributos y métodos que tiene cada
una de las clases (sólo indicarlos, sin escribir su código), aplicando los
principios de la programación orientada a objetos.

2. (4 Puntos) Escribir el código del método que realice la funcionalidad


número 4 (cerrar una reclamación añadiendo la solución proporcionada a
una reclamación).

3. (2 Puntos) Ampliar el diseño del primer apartado, sin modificar las clases
ya implementadas, para permitir que el sistema pueda gestionar también
sugerencias. Las sugerencias se caracterizan por estar puestas por un
cliente en relación a un envío concreto, tener un número identificativo, el
texto de la sugerencia y un destinatario donde se introduce el
departamento al que van referidas. Dichas sugerencias podrán ser
contestadas.

Para la nota del examen, el test vale el 30% y el Problema vale el 70%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. Un sistema de ficheros:

a. Es el conjunto de ficheros (o archivos) que se crean durante la


programación y ejecución de un programa informático.
b. Supone el mecanismo de almacenamiento de los programas y datos
dentro del ordenador, y está formado por una colección de ficheros (o
archivos) y una estructura de directorios.
c. Se compone de un conjunto de ficheros (o archivos) con un fin único,
como puede ser el arranque del sistema desde la BIOS o la
recuperación del sistema en modo fallos (modo seguro).
d. Se compone de los ficheros (o archivos) que permiten la compilación de
un programa a partir de su código fuente.

2. Si un usuario desea aumentar la capacidad de almacenamiento de su


ordenador, para guardar más ficheros de imágenes, deberá aumentar:

a. La memoria RAM.
b. La memoria ROM.
c. El disco duro.
d. La memoria virtual

3. En la práctica del presente curso, una instancia de la clase Cartel:

a. Se compone de un conjunto de ficheros.


b. Se compone de un conjunto de tiradas.
c. Tiene asociado una tirada.
d. Tiene asociado un fichero.

4. ¿Qué número imprimiría el siguiente código?

int[] a = { 1, 2, 3, 4 };
int resultado = 1;
for (int i = 1; i < a.length; i++) {
resultado = resultado + a[i];
}
System.out.print(resultado);

a. 11
b. 10
c. 1
d. 7
5. Indica cuál de las siguientes afirmaciones es falsa:

a. Los métodos definen la interfaz de una clase, sus capacidades y


comportamiento.
b. Los datos se encapsulan dentro de una clase declarando variables.
c. El elemento básico de la programación orientada a objetos es el objeto,
que define la forma y comportamiento de una clase.
d. Un constructor es un método que inicia un objeto inmediatamente
después de su creación, evitando tener que iniciar las variables
explícitamente para su iniciación.

6. Indica cuál de las siguientes afirmaciones es correcta:

a. Para crear un objeto, instancia de una clase, utilizamos el operador new.


b. Para crear una clase, instancia de un objeto, utilizamos el operador new.
c. Cuando se crea una clase se invoca a su constructor.
d. Cuando se crea un objeto se invoca al método main().

7. Si un método de una clase no tiene implementación y ésta será


proporcionada en las distintas subclases que hereden de dicha clase,
¿cómo debemos definirlo?

a. En Java no es posible definir métodos sin implementación.


b. El método debe ser definido como void.
c. El método debe ser definido como static.
d. El método debe ser definido como abstract.

8. Si tenemos una clase implementada que sólo dispone de la operación A


(método público), y no disponemos de su código original, ¿cómo podemos
reutilizar ésta con el mínimo de código adicional para una nueva operación
B que requiere del uso de A?

a. No es posible. Para heredar de una clase es necesario disponer de su


código original.
b. Creando una clase hija con un nuevo método B que llame al método A.
c. Creando una clase hija con nuevos métodos A y B.
d. Creando una clase hija con nuevos campos.

9. Si quisiéramos crear una clase Matriz con un número de filas y columnas


variables, ¿qué estructura deberíamos utilizar?

a. Arraylist unidimensional.
b. Arraylist bidimensional.
c. Array unidimensional.
d. Array bidimensional.
1 O. Una de las posibles funciones del manejo de excepciones en Java es:

a. Operar sobre enteros dado que son los únicos campos que no son
objetos.
b. Detectar errores en el proceso de compilación.
c. Crear colecciones de instancias de diferente clase.
d. Evitar que un error de lectura del disco duro detenga un proceso.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea implementar un programador para riegos. Un programador se


compone de un conjunto de fases. Cada fase, con su identificador asociado,
tendrá una frecuencia de riegos diarios y el tiempo de riego que se deberá
estimar de forma automática. Una fase puede ser de aspersión o de riego. En
el primer caso, tendremos un número de aspersores. En el segundo caso,
tendremos un número de puntos de goteo y una apertura del regulador de
presión. Tanto la frecuencia como el tiempo de riego y la apertura del regulador
de presión (en su caso) se calculan en base al tipo de fase y al número de
aspersores o de puntos de goteo.

Las funcionalidades del sistema incluyen:

1. Añadir una nueva fase, recibiendo como parámetro su identificador, si


es de goteo o aspersión, y su número de puntos de goteo o de
aspersores.
2. Calcular para cada fase su frecuencia y tiempo de riego, y en su caso,
su apertura de regulador de presión.
3. Imprimir una línea por fase indicando: su identificador, su frecuencia y
tiempo de riego, y en su caso, su apertura de regulador de presión.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (3 Puntos) Implementar el método encargado de la funcionalidad 3


especificada más arriba.

3. (3 Puntos) Se desea ampliar el sistema de forma que sea posible gestionar


todos los programadores de los jardines de un pueblo. Sin modificar el
código ya implementado, indique y razone qué mecanismos de la
programación orientada a objetos tendrían que aplicarse y sobre qué clases
para poder hacer esto.
• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

Primera Parte: Test


1-Un dispositivo de almacenamiento permanente es aquél:

a. que mantiene la información mientras se está ejecutando un programa.


b. que mantiene la información mientras se copian las instrucciones desde
la memoria principal a la CPU.
c. que mantiene la información más utilizada de manera permanente.
d. que mantiene la información aunque el PC esté apagado.

2-En qué paradigma de programación incluiría el lenguaje JAVA


a. Programación imperativa.
b. Programación declarativa.
c. Programación funcional.
d. Ninguno de los expresados en el resto de opciones.

3- En la práctica de este curso, ¿en qué clase debería de implementarse un


método para ordenar las ventas por cliente?

a. En la clase que modele un producto.


b. En la clase que modele un producto en stock.
c. En la clase que modele la tienda virtual.
d. En la clase que modele un carrito de la compra.

4- Las clases definen:


a. el valor de los atributos de los objetos.
b. el tipo de dato que devuelven los métodos de los objetos.
c. los atributos, pero no los métodos, de los objetos.
d. los métodos, pero no los atributos, de los objetos.

5- Para asegurar la consistencia entre dos campos de una clase (por ejemplo,
tieneCarnetConducir solo puede ser TRUE si edad>18) aunque ésta sea
reutilizada por otro desarrollador en otro sistema podemos:
a. Declarar los campos como estáticos.
b. Declarar los campos como privados y modificarlos desde los métodos de
la clase.
c. Declarar los campos como públicos, pero declarar como privados los
métodos que los modifican.
d. No es posible asegurar la consistencia entre dos campos.

6- Indique cuál de las siguientes afirmaciones es correcta:

a. El encapsulamiento reduce la cohesión.


b. El encapsulamiento reduce el acoplamiento.
c. El encapsulamiento incrementa la duplicación de código.
d. El encapsulamiento incrementa el acoplamiento.

7- ¿Cuantos elementos de la matriz i[] se recorrerán en este bucle?

int[] a = { 1, 2, 3,4,5,6,7};
int resultado = O;
int i=4;
while (resultado < 1 O) {
resultado = resultado + a[i];
i=i-1;
}
System.out.print(resultado);

a. Ninguno
b. 3
c. 4
d. todos

8- Siendo "Vehículo" y "Coche" dos clases que tienen una relación de herencia
padre-hijo. ¿Es correcto el siguiente código?

Vehiculo v·' /* Línea 1 */


Coche e; /* Línea 2 */
V = new Vehiculo(); /* Línea 3 */
e = v·' /* Línea 4 */

a. Sí, es correcto.
b. No es correcto, deberíamos modificar las siguientes líneas:
v = new Coche(); /* Línea 3 */
e = (Coche) v; /* Línea 4 */
c. No es correcto, deberíamos modificar la línea 3 por:
v = new Coche(); /* Línea 3 */
d. No es correcto, deberíamos modificar la línea 4 por:
e = new v; /* Línea 4 */

9-Si se tiene una clase con un campo de tipo lista se dice que:
a) Existe una relación de herencia entre clases.
b) Existe una relación de composición entre clases.
e) Existe polimorfismo entre clases.
d) Se está dando un mecanismo de sobrecarga entre clases.

10-¿Para qué se utiliza la palabra reservada "throw"?

a. Para devolver un valor en un método.


b. Para lanzar una excepción.
c. Para capturar una excepción.
d. Para invocar un método de clase.
Apellidos......................................Nombre..................... DNI. ..................

Segunda Parte: Problema

Un restaurante quiere automatizar la creación de pedidos por parte de


sus camareros cuando éstos toman nota a los clientes, de tal forma que
desde cocina se puedan ver los pedidos más fácilmente. Cada pedido
tendrá una mesa e incluirá los menús de sus comensales.

El restaurante ofrece tres tipos de menús diferentes: Menú infantil, Menú


estándar y Menú especial. Todo menú tendrá un precio e incluirá una
bebida a elegir entre "Agua sin gas" y "Vino", así como un postre a elegir
entre "Flan" y "Tiramisú". En el caso del menú infantil, éste se compone
únicamente de un plato combinado, que siempre deberá ser "Filete de
ternera con patatas y calamares" o "Hamburguesa con nachos". El menú
estándar se compone de dos platos, un primero y un segundo, a elegir
entre cuatro opciones para cada uno de ellos. Por último, se tiene un
menú especial que ofrece, además de los anteriores primeros y
segundos, un aperitivo de entrada que puede ser, o bien "Gulas" o bien
"Pastel de cabracho".

El sistema debe permitir crear y añadir pedidos del restaurante, así como
luego consultar cuál es el pedido completo de una mesa particular. Se
deberá tener en cuenta que los comensales de una mesa pueden realizar
varios pedidos y que, una vez pagada la cuenta, los pedidos de esa
mesa serán eliminados.

A continuación se presenta un ejemplo de lo que debería mostrar la


aplicación cuando se consulta el pedido de la mesa 8:

Pedido correspondiente a la mesa 8:

Primer plato: Lasaña


Segundo plato: Ternera en salsa
Postre: Flan
Bebida: Agua sin gas
PRECIO: 9 Euros

Aperitivo del menú especial: Pastel de Cabracho


Primer plato: Pasta Carbonara
Segundo plato: Lubina al horno
Postre: Tiramisú
Bebida: Vino
PRECIO: 12 Euros

Antes de comenzar a responder lea con atención todos los apartados.


Se pide:

1. (4 puntos) Dibujar un esquema con las clases necesarias para


realizar el modelado del problema, indicando los atributos y
métodos que tiene cada una de ellas (sólo indicarlos, sin
escribir su código), aplicando los principios de la programación
orientada a objetos.
2. (1 puntos) Escriba el código necesario para crear un pedido
como el del ejemplo anterior.
3. (2 puntos) Escriba el código necesario para consultar e
imprimir por pantalla todos los pedidos de una mesa en
particular.
4. (3 puntos) Supongamos que ahora el restaurante quiere
introducir un nuevo menú Ught en su carta y, a! igual que con
los menús anteriores, se deberá permitir imprimir un pedido que
contenga este nuevo tipo de menú. ¿Qué mecanismos de la
Programación Orientada a Objetos utilizaría para no tener que
modificar el código ya existente?
• Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

Primera Parte: Test

1- Se requiere una memoria portátil para almacenar un software que ocupa


1500 megabytes. Necesitará, como mínimo:
a) Una memoria flash de medio gigabyte.
b) Una memoria flash de un gigabyte.
e) Un disco duro de medio Terabyte.
d) Un disco duro de un Terabyte.

2-EI software se puede caracterizar como:


a) Los programas y datos almacenados en un computador
b) El conjunto formado por el microprocesador y el sistema operativo.
e) Los programas que se ejecutan sobre el sistema operativo.
d) Los programas de usuario y el compilador.

3-Según el enunciado de la práctica de este curso, ¿es adecuado definir alguna


clase de tipo enumerado?
a) No es necesario.
b) Sí, la clase correspondiente a los diferentes tipos de productos.
e) Sí, la clase correspondiente con las formas de pago permitidas.
d) Sí, la clase correspondiente a los productos en stock.

4- Si el concepto de empresa se modela como una clase, y se desea modelar


los múltiples acuerdos entre empresas, ¿de que forma sería incorrecto hacerlo
según el paradigma de orientación a objetos?:

a) Como un campo de la clase "empresa".


b) Como una clase.
e) Como una relación de composición entre empresas.
d) Como una superclase de la clase "empresa".

5-Un método declarado como private sólo es accesible desde: o


a) La clase en la que se crea.
b) El paquete en el que se encuentra la clase.
e) En cualquier clase siempre que se escriba: nombreübjeto.metodo()
d) En cualquier clase dentro del paquete al que pertenezca la clase
siempre que se escriba: nombreObjeto.metodo()

6-¿Qué sucede cuando en un método se pasa un objeto como parámetro?

a. Que los cambios que se producen sobre el parámetro, dentro del


método, no permanecen cuando se termina su ejecución.
b. No es posible pasar objetos como parámetros de un método.
c. Que los cambios que se producen sobre el parámetro, dentro del
método, permanecen cuando se termina su ejecución.
d. Que el objeto no puede ser modificado dentro del método.

7- ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int resultado = O;
int total = 1;
while (total < 3 ) {
resultado = resultado + total;

System.out.println(resultado);

a. O
b. 2
c. 1
d. No imprimiría nada

S-Indica cuál de las siguientes afirmaciones sobre Java es FALSA:

a. La herencia es un mecanismo que permite la definición de una clase a partir


de la definición de otra ya existente.
b. La herencia está fuertemente ligada a la reutilización del código en Java.
c. La clase padre de cualquier clase es conocida como su superclase y la
clase hija de una superclase es llamada una subclase.
d. Una superclase puede tener cualquier número de subclases y una subclase
puede tener cualquier número de superclases.

9- El mecanismo de composición entre clases :

a. Permite extender funcionalidades de una clase a otra.


b. Permite tener métodos con igual nombre pero distintos parámetros.
c. Se expresa mediante la definición de campos de una clase como
instancias de otras clases
d. Permite restringir la invocación de los métodos de una clase.

10- Cuál de estas afirmaciones sobre criterios de diseño es incorrecta:

a. Cada clase debe ser altamente independiente


b. Cada clase debe ser responsable de una tarea bien definida.
c. Conviene maximizar el acoplamiento entre clases para asegurar la
coherencia del sistema.
d. Es recomendable el uso de campos privados y su acceso mediante
métodos públicos.
Apellidos......................................Nombre..................... DNI. . . ........ . . . . ... .

Segunda Parte: Problema

Se desea informatizar la gestión de citas de una clínica dental. La clínica


tiene una lista de clientes dados de alta con su nombre, número de teléfono e
historial. La clínica tendrá también información sobre las citas, cada una de
ellas con su fecha, hora, cliente y servicio solicitado (por ejemplo, "limpieza
dental"). Hay un número limitado y predefinido de servicios posibles. El
historial de un cliente consiste en las consultas realizadas por el cliente hasta
el momento. La clase principal deberá disponer de los métodos necesarios
para:

1) Dar de alta un cliente.


2) Para ver la disponibilidad del odontólogo, mostrar en pantalla la
información relativa a todas las citas pendientes de todos los clientes en un
día concreto.
3) Añadir una nueva cita.
4) Dado un nombre de cliente, hora y fecha, comprobar que tiene cita y
actualizar el historial del cliente una vez que haya asistido a la consulta.

Se pide
(4 puntos) Dibujar un esquema con las clases necesarias para realizar el
diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.
(1 puntos) Escribir el código necesario para dar de alta un cliente llamado
"Federico García" y de número 63862382. Generar una nueva cita de
limpieza bucal para el día 4 de julio del 2014 a las 13:00.
(3 puntos) Implementar el o los métodos responsables de la confirmación
de que un cliente que se presenta tiene cita y actualizar su historial una vez
atendido.
(2 punto) Después de tener en funcionamiento la aplicación durante un
tiempo, se decide extender el sistema para mostrar la duración estimada de
cada cita. Ésta depende de los servicios a realizar. Indique cómo se incluiría
esta funcionalidad sin modificar el código ya implementado.
FUNDAMENTOS DE INFORMÁTICA

·Para la nota del examen, el test vale el 30% y el problema vale el 70%.
·El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
·Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. ¿Qué es una unidad central de procesamiento?


a. Un componente hardware del computador.
b. Un conjunto de computadores interconectados, ejecutando en paralelo.
c. Un servidor destinado a operaciones de cálculo.
d. La memoria principal del computador.

2. Un sistema de computación está formado por:


a. El hardware, el sistema operativo, el software, los usuarios.
b. El hardware, los periféricos, el software, los usuarios.
c. El hardware, el software, los datos, los usuarios.
d. El software, los periféricos, los datos, los usuarios.

3. En la práctica de este curso, ¿qué clase o clases sería conveniente que


tuvieran como atributo una lista de objetos de la clase Componente (o
Producto)?:

a. Las clases que modelen un producto en stock y venta.


b. Las clases que modelen el carrito de la compra y una venta.
c. Las clases que modelen un producto en stock y carrito de la compra.
d. Las clases que modelen la forma de pago y el carrito de la compra.

4. El ciclo de procesamiento de datos incluye:


a. Entrada, procesamiento, salida y almacenamiento.
b. Entrada, salida, conexión de datos y almacenamiento.
c. Entrada, procesamiento, conexión de datos y salida.
d. Entrada, procesamiento, conexión de datos y salida.

5. El sistema operativo Linux:


a. Sólo se puede instalar en servidores.
b. Sólo se puede instalar en computadores Macintosh.
c. Funciona sobre Windows.
d. Funciona sobre más de 20 plataformas hardware.
6. ¿Qué número imprimiría el siguiente código?
int[] a = { 1, 2, 3, 4 } ;
for (int i = 1; i < a.length; i + + )
a[i - 1 ] = a[i - 1 ] + a[i];
}
System.out.print(a[O]);

a. 1
b. 2
c. 3
d. 4

7. Indique, a partir de la siguiente declaración, asumiendo que Gato es una


subclase de Mamifero, con un campo público nombre que se establece en el
constructor, ¿cuál sería la respuesta del siguiente código?:
Mamifero juan = new Gato("JUAN");
System.out.println(juan.nombre);

a. Un valor nulo, dado que no se puede acceder directamente al campo.


b. juan
c. JUAN
d. Daría error de compilación ya que no se puede instanciar Gato como
Mamifero.

8. Si queremos definir un método de una clase para que éste no devuelva ningún
resultado, ¿qué utilizaremos?
a. En Java no es posible definir métodos que no devuelvan ningún resultado.
b. Utilizaremos la palabra reservada void.
c. Utilizaremos la palabra reservada static.
d. En Java sólo los constructores pueden no devolver ningún resultado.

9. Dadas las siguientes clases:


public class A {
public int suma(int a, int b) {
return a + b;

public class B extends A


public int suma(int a, int b) {
return a * b;

¿Qué devolvería el siguiente código?:


B a = new A();
System.out.println(a.suma(2, 5));

a. 7
b. 2*5
c. Un error de compilación.
d. 10

1 O. Una variable polimórfica:

a. Tiene el mismo valor en todos los objetos de la clase donde está definida.
b. Puede contener objetos del tipo declarado o de cualquier subtipo de éste.
c. No devuelve ningún resultado.
d. Sólo puede ser accedida por las clases del mismo paquete en el que esté
definida.

Apellidos......................................Nombre.......................... DNl. . . . . . . . . .... . . . . .


Segunda Parte: Problema

Una empresa de robots cuentacuentos necesita un software para que los niños
puedan pedir a sus robots un cuento. Los robots están conectados a un sistema
central al que le solicitan el texto del cuento dado su título. El sistema informático
debe de tener un registro de todos los cuentos, de los que almacenará el título y
el texto correspondiente. El sistema debe gestionar todos los robots vendidos a
los que puede atender. Un robot se caracteriza por su IP, modelo y zona de venta.
Además, para el pago de derechos de autor, se desea mantener un registro de
todos los robots a los que se ha transmitido cada cuento.

Para el desarrollo de este software, se cuenta de antemano con una clase


abstracta StringMatching, que contiene un método que toma como entrada dos
strings y devuelve true o false dependiendo si tienen el mismo significado o no
(por ejemplo, StringMatching.match( "Pinoccio", "Pinocho") devolvería
el valor true).

El sistema en su clase principal debe de tener un método que realice las


siguientes acciones:
1. Dada un título representado por un objeto tipo String y el identificador del
Robot, buscar dicho cuento en su lista. Se permite que los títulos no
coincidan exactamente con el título original. Emplear la clase abstracta
descrita anteriormente.
2. Si el cuento ha sido encontrado, registrar que dicho cuento ha sido
transmitido al robot correspondiente y devolver el texto correspondiente.
3. En caso contrario, devolver "CUENTO NO ENCONTRADO"

Lea atentamente el ejercicio completo antes de comenzar a contestar las


preguntas. Se pide:
1. (4 Puntos) Realice el esquema de clases correspondiente al sistema que se
desea implementar. Indique claramente relaciones, atributos y métodos en
cada clase.
2. (4 Puntos) Implemente el método de la clase principal encargado de realizar
las cuatro acciones descritas. No es necesario implementar los métodos de las
otras clases de las que ésta hace uso.
3. (2 Puntos) Ampliar el diseño sin modificar las clases ya implementadas para
poder registrar en una lista los títulos solicitados que no han sido
encontrados.

Para la nota del examen, el test vale el 30% y el Problema vale el 70%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

Primera Parte: Test


1. Indica cuál de las siguientes funciones NO es propia de la Unidad de control:

a) Leer e interpretar instrucciones de programa.


b) Realizar computaciones aritmético-lógicas.
e) Controlar el flujo de programa y los datos de entrada y salida en la RAM.
d) Dirigir la operación de los componentes de procesado interno.

2. Indica cuál de los siguientes tipos de código es un archivo binario


directamente inteligible por la computadora:

a) El código fuente.
b) El código objeto.
e) El código ejecutable.
d) El código intermedio

3. En la práctica de este año, y ateniéndonos a las buenas prácticas de la


programación orientada a objetos, indica si alguna de las siguientes clases era
susceptible de ser definida como de tipo enumerado:

a) Los productos dentro del carrito de la compra.


b) Los productos en stock.
e) Las diferentes formas de pago.
d) Los diferentes tipos de productos

4. A partir del siguiente fragmento de código:

Ordenador sobremesa = new Ordenador();


sobremesa.setPrecio(900);
Ordenador portatil = new Ordenador();
portatil.setPrecio(1100 );
portatil = sobremesa;
sobremesa = null;

¿Qué afirmación es cierta?

a) Al final sólo queda un objeto accesible de tipo Ordenador con precio 900
b) Al final sólo queda un objeto accesible de tipo Ordenador con precio 1100
e) Al final tanto el objeto sobremesa como el objeto portátil apuntan a null
d) Al final hay dos objetos accesibles de tipo Ordenador, uno con precio 900 y
otro con precio 1100
5. Indica cuál de las siguientes afirmaciones sobre modificadores de acceso a
métodos es correcta:

a) Un método private solo puede ser accedido desde la misma clase u otra
clase dentro del mismo paquete.
b) Un método protected solo puede ser accedido desde la misma clase u otra
clase dentro del mismo paquete.
e) Un método private solo puede ser accedido desde la misma clase.
d) Un método protected solo puede ser accedido desde la misma clase.

6. La sobrecarga de métodos permite tener mas de un método con el mismo


nombre, siempre que..

a) .. sus argumentos sean los mismos.


b) .. sus argumentos no sean los mismos.
e) .. sus argumentos sean los mismos y devuelvan un mismo tipo de dato.
d) .. sus argumentos no sean los mismos y no devuelvan un mismo tipo de
dato.

7. Indica qué devolvería por pantalla el siguiente fragmento de código:

int x;
x=1;

do{
x = x + 1;
}while (x <= 5);

if (x == 5) {
X= X+ 2;
}

System.out.println(x);

a) 5
b) 6
e) 4
d) 7

8. Si se tiene una clase B que hereda de A, indica cuál de las siguientes


afirmaciones es FALSA:

a) B b= new A(); daría un error porque el objeto no pertenece a la clase B.


b) A a= new B(); no daría ningún error de compilación.
e) A a= new A();
B b=(B)a; no daría ningún error de compilación en compilación, pero
sí en tiempo de ejecución.
d) A a= new A();
B b=(B)a; no daría ningún error de compilación en compilación ni en
tiempo de ejecución.
9. A partir del siguiente código, indica cuál de las siguientes afirmaciones es
correcta:

MiCiase [] miArray = new MiCiase[1 O];

a) miArray permite únicamente almacenar objetos de la clase MiCiase.


b) miArray permite únicamente almacenar objetos de la clase MiCiase y todas
sus subclases.
e) miArray permite almacenar objetos de cualquier clase porque no se ha
especificado ningún tipo en la parte izquierda de la expresión.
d) Nos daría un error de compilación porque no se ha especificado ningún tipo
en la parte izquierda de la expresión.

1 O. Indica cuál de las siguientes afirmaciones sobre excepciones es FALSA:

a) Las excepciones son clases que heredan de la clase Exception y podemos


programar nuestras propias excepciones.
b) Un método que lanza una excepción debe declarar que lo hace mediante
una clausula throws.
e) Un método puede lanzar más de una excepción, pero debe declarar que lo
hace enumerándolas en la clausula throws.
d) Una excepción lanzada desde un constructor tiene precedencia sobre una
excepción lanzada desde un método.
Apellidos Nombre DNI.. . . . . . . .

PROBlEMA - SISTEMA ElECTORAl

En un pequeño pueblo de los Pirineos se van a celebrar las elecciones


municipales. Para ello se quiere desarrollar un sistema informático que
sea capaz de manejar un censo y una lista de opciones, ir registrando los
votos, asf como llevar un registro de los votantes que han ejercido su
derecho.

El procedimiento de votación es el siguiente:


Cuando una persona llega al salón del Ayuntamiento para votar,
lo primero que hace es identificarse, proporcionando su nombre y
DNI. Estos datos son necesarios para comprobar que en dicha
jornada electoral este votante puede votar y aún no lo ha hecho. En
caso de que el votante ya hubiera ejercido su derecho a voto no se le
permitirá volver a hacerlo.

Una vez realizadas las comprobaciones anteriores, el votante
accede a un habitáculo en el que se encuentra un ordenador con
nuestro sistema informático, que le permitirá elegir su opción política
entre las diferentes candidaturas presentadas o votar en blanco. El
sistema registra la hora en la que se ha votado y la opción elegida, de
modo que en un futuro se pudieran realizar estudios estadísticos a
partir de estos datos.
.. Al final de la jornada, cuando todos los electores hayan votado
o se haya llegado a la hora de cierre del colegio electoral, se hace un
recuento automático de los votos, de tal forma que es posible ver la
cantidad de votos que ha recibido cada opción y cuál ha sido la opción
ganadora.

El sistema debe permitir llevar a cabo toda la gestión de una jornada


electoral tal y como se ha descrito anteriormente.

Antes de comenzar a res.Qonder lea con atención todos los


apartados.

Se pide:

1. (3 puntos) Dibujar un esquema con las ciases necesarias para


realizar el diseño del problema, indicando los atributos y
métodos que tiene cada una de ellas (sólo indicarlos, sin
escribir su código), aplicando los principios de la programación
orientada a objetos.

2. (3 puntos) Escriba el código necesario para consultar e


imprimir por pantalla el grado de participación y el número de
votos en blanco. Un ejemplo de salida de este código es el
siguiente:

RECUENTO FINAL:

El grado de participación ha sido del 68%


El número de votos en blanco ha sido 56

3. (2 puntos) Supongamos que ahora quiere exportarse este sistema


electoral a nivel nacional, de modo que el sistema permita el
recuento automático de votos para el conjunto de municipios del
Estado. Describa razonadamente qué mecanismo de la
Programación Orientada a Objetos se tendría que aplicar.

4. (2 puntos) Si además ahora se quiere contemplar la posibilidad de


la opción del "voto nulo", describa razonadamente qué mecanismo
de la Programación Orientada a Objetos se tendría que aplicar.

Para la nota del examen, el test vale el 30% y el Problema vale el 70%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

Primera Parte: Test

1. La BIOS de un computador:

a) Es un puerto de salida que permite conectar periféricos a la máquina.


b) Contiene información fundamental sobre la configuración y arranque de
la máquina.
e) Es un puerto de entrada que permite introducir instrucciones a la
máquina.
d) Es un canal de comunicaciones entre las tarjetas periféricas y la
máquina.

2. La dirección IP de un ordenador:

a) Define el tipo de transmisión de nivel físico y los formatos de paquetes


de una red de área local.
b) Es un identificador que debe ser único entre las máquinas conectadas al
mismo router, pero que puede repetirse dentro de la misma red y
permite localizar y situar, de manera única.
e) Es un identificador que debe ser único dentro de la misma red y permite
localizar y situar, de manera única, una máquina concreta dentro de la
misma red.
d) Define un conjunto de estándares para redes inalámbricas basado en las
especificaciones IEEE802.11.

3. En la práctica de este año, indica entre qué dos clases debía


establecerse un mecanismo de herencia:

a) Producto y Producto en Stock.


b) Producto y Placa Base.
e) Tienda Online y Carrito de la compra.
d) Venta y Producto.

4. Dada la siguiente definición de una clase C:

public class e {
private int n;
public e (int _n) {
this.n n;
=

}
}
¿Qué pasaría si realizamos la siguiente llamada: e e = new e ()?

a) Se crearía el objeto e ya que se llamaría al constructor por defecto de la


clase C.
b) Daría un error de compilación ya que al declararse un constructor en la
clase C, el constructor por defecto deja de ser accesible.
e) Daría un error de compilación por utilizar la palabra reservada this dentro
de un constructor.
d) Se crearía el objeto e asignando al atributo n un cero, al no pasar ningún
parámetro en la llamada al constructor.

5. Cuando se define una clase ¿ es obligatorio definir al menos un


constructor?

a) Sí, para poder instanciar objetos de dicha clase.


b) No, porque los constructores son métodos optativos que permiten
acceder al valor de los atributos.
e) Sí, es obligatorio definir siempre un constructor sin parámetros.
d) No, ya que si no se define ningún constructor, el constructor por defecto
será accesible.

6. ¿Qué significa que un método esté definido como static?

a) Que dicho método no tendrá implementación en la clase en la que está


definido.
b) Que la clase en la que está definido, no puede ser instanciada.
e) Que dicho método puede ser invocado sin necesidad de crear un objeto.
d) Los métodos no pueden definirse como static, sólo los atributos de una
clase.

7. ¿Qué sucede cuando un método es definido como private?

a) Que éste sólo puede ser invocado desde la propia clase donde está
definido.
b) Que éste sólo puede ser invocado desde la propia clase donde está
definido y todas sus subclases.
e) Daría un error de compilación, ya que los métodos no pueden ser
definidos como private.
d) Que dicho método debería ser sobre-escrito obligatoriamente en todas
las subclases.

8. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int total = 1;
do {
total = total + (total * 2);
System.out.print(total);
}
while (total < 8);
a) 139
b) 13
e) 39
d) No imprimiría nada

9. Siendo C1 una clase con 4 atributos y 4 métodos y C2 otra clase con 3


atributos y 4 métodos. Sabiendo que 3 de los 4 atributos de C1 son iguales
que los de C2 y que los 4 métodos de C1 y C2 tienen la misma signatura
pero distinta implementación. ¿Cuál de las siguientes afirmaciones es
CORRECTA?

a) No puede existir ningún tipo de herencia entre las clases C1 y C2 por


tener los mismos métodos con distinta implementación.
b) No puede existir ningún tipo de herencia entre las clases C1 y C2 por
compartir algunos atributos.
e) C2 puede ser una subclase (hereda) de C1.
d) C1 puede ser una subclase (hereda) de C2.

1O. ¿Cuál de las siguientes construcciones de un array bidimensional (o


matriz) es correcta? Asuma que la clase "Celda" está definida
correctamente.

a) Celda[][] matriz new Celda[3][3];


b) Celda[][] matriz new Array[3][3] ;
e) Celda[][] matriz new Celda(3,3);
d) Celda[][] matriz new Array(3,3);
Apellidos......................................Nombre..................... DNI...................

Segunda Parte: Problema

Se desea implementar una aplicación para gestionar la alimentación de los


animales en un pequeño zoo local. Cada animal pertenece a una especie y
tiene un nombre propio, una fecha de entrada y lugar de procedencia. Sólo se
contempla un número limitado de especies en el zoo. Por simplicidad,
consideraremos tres: lobos grises, águilas y osos ibéricos. Todos los
ejemplares de una misma especie tienen la misma dieta, consistente en un
nombre de alimento y cantidad. Los lobos y los osos comen carne (2 y 4 kg
respectivamente) y las águilas 0,3 kg de pienso de ave. Ademas, el zoo tiene
50 recintos numerados. Cada recinto contiene un conjunto de animales de la
misma o de distintas especies. El sistema debe ser capaz de a) introducir un
ejemplar en el sistema asignándolo a una celda y b) listar la cantidad de cada
alimento asignada a cada una de los recintos.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1 (4 Puntos) Dibujar un esquema con las clases necesarias para realizar


el diseño del sistema, indicando los atributos y métodos que tiene cada
una de ellas (sólo indicarlos, sin escribir su código), aplicando los
principios de la programación orientada a objetos.

2 (2 Puntos) Escribir las llamadas a constructores y a métodos


necesarias para:

c. Crear un ejemplar de oso ibérico llamado "Federico" entrado en


enero de 2014 procedente de Asturias.

d. Añadir el oso a la celda 24 a una instancia de zoo a la que apunta


la variable z.

3 (2 Puntos) Escribir el segmento de código correspondiente al bucle


encargado de recorrer todos los recintos del zoo para la funcionalidad b)
descrita en el enunciado, e indicar en qué clase y método se encuentra.

4 (2 Puntos) Después de tener en funcionamiento la aplicación durante un


tiempo, el zoo decide incorporar una nueva especie. Explicar el proceso
que ha de llevarse a cabo sin necesidad de modificar el código existente.
(Este apartado se puntuará en función de la claridad y detalle de la
explicación).

Para la nota del examen, el test vale el 30% y el Problema vale el 70%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DNI.

Primera Parte: Test


1. En cada pulsación del reloj de la placa madre se completa típicamente:

a) Una operación sobre la memoria principal.


b) La ejecución de un proceso para dar paso al siguiente.
e) Un ciclo iterativo en un programa.
d) La ejecución de una instrucción de un lenguaje de alto nivel.

2. ¿Qué elemento software es responsable de gestionar el sistema de ficheros?

a) Administrador de memoria.
b) El compilador.
e) Sistema de entrada/salida.
d) El sistema operativo

3. En la práctica de este año, indica entre qué dos clases NO debía


establecerse un mecanismo de composición:

a) Producto y Producto en Stock.


b) Producto y Placa Base.
e) Tienda Online y Carrito de la compra.
d) Venta y Producto.

4. ¿Puede modelarse el concepto de "compra" como una clase de objetos?

a) No, dado que se trata de una acción, luego debe representarse como un
método.
b) Sí. Podría tener como atributos el comprador y vendedor.
e) Sí, pero no podría tener atributos, sólo métodos dado que se trata de una
acción.
d) No, dado que es una relación entre comprador y vendedor. No un objeto.

5. El cálculo del factoriai(N) es N*factoriai(N-1 ). ¿Puede implementarse de


esta forma el método del calculo del factorial?

a) No, porque un método no puede llamarse a sí mismo.


b) Sí, siempre que el método sea estático.
e) Sí, mediante una llamada al propio método.
d) No, porque un número natural no puede ser parámetro de entrada.

6. Cuál de las siguientes opciones es correcta. Un método:


a) Permite modificar los valores de los atributos de la clase.
b) Es específico del objeto de la clase.
e) No puede devolver dos objetos.
d) Tiene un nombre único en su clase.

7. ¿Qué secuencia de números escribiría el siguiente código?

for (int i=O;i<3;i++){


for (int j=O;j<i;j++){
system.Out.printlnU);
}
}

a) 012012012
b) 001
e) 001012
d) 00100 2

8. ¿Es posible integrar el código objeto de una clase ya implementada en un


nuevo programa?

a) Sí. Podemos importar la clase e instanciar objetos, siempre que no sea


abstracta.
b) Sí. Podemos importar la clase, aunque nunca podremos instanciar objetos.
e) Sí, siempre que se trate de una clase abstracta.
d) No. Es necesario crear una clase hija para poder integrarla en el nuevo
sistema.

9. Un agente tiene asignado un número indeterminado de clientes. Tanto los


clientes como los agentes son clases que heredan de la clase "persona".
¿Cómo se podría modelar la relación entre agentes y clientes?

a) Agente contiene como atributo un array de clientes.


b) Agente contiene como atributo un enumerado de clientes.
e) Agente contiene como atributo un arraylist de clientes.
d) Un arraylist en la clase cliente.

10: ¿Cuál de estas afirmaciones es falsa? La programación orientada objetos


es un paradigma diseñado para:
a) Reducir el acoplamiento
b) Facilitar el proceso de desarrollo de sistemas.
e) Facilitar la reutilización de código.
d) Mejorar la velocidad de ejecución de los sistemas..
Apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Nombre . . . . . . . . . . . . . . . . . . . . . DNI. . . ...... . . . . . . . . . .

Segunda Parte: Problema

La Universidad Internacional de Educación a Distancia (U!ND) quiere


desarrollar una aplicación informática para la gestión de su información
académica. Dicha aplicación deberá almacenar toda la información
relativa a los profesores y tutores de las diferentes asignaturas, los
Centros Asociados de los que dispone esta universidad, así como el
conjunto de asignaturas impartidas y de alumnos matriculados.

Más específicamente, se desea guardar !a siguiente información para


cada uno de los casos anteriores:

8
De los profesores: nombre y asignaturas que imparte.

De los tutores: nombre, DNI, Centro Asociado al que pertenece y
asignaturas que imparte.

De los Centros Asociados: nombre, tutores que imparten ciase en
dicho centro, asignaturas impartidas y alumnos matriculados.
8
De los alumnos: nombre, DNI y asignaturas en las que está
matriculado.
e De cada asignatura: nombre, código único, Equipo Docente
(profesores que imparten dicha asignatura).

Antes de comenzar a responder lea con atención todos los


apartados.

Se pide:

1. (3 puntos) Dibujar un esquema con las clases necesarias para


realizar el diseño del problema, indicando los atributos y métodos
que tiene cada una de ellas (sólo indicarlos, sin escribir su código),
aplicando los principios de la programación orientada a objetos.
2. (3 puntos) Escriba el código necesario para proporcionar a un
determinado tutor la lista de alumnos matriculados en una de sus
asignaturas.
3. (2 puntos) Supongamos que ahora quiere introducirse la figura de
los "Campus Nacionales" para englobar los Centros Asociados de
diferentes países. ¿Cómo debería modificar su diseño anterior
para contemplar este cambio?
4. (2 puntos) Sí ahora se quisiera permitir que un tutor pudiera
impartir clase en más de un Centro Asociado, ¿cómo tendría que
modificarse el diseño de la aplicación?
Fundamentos de Informática Ing. Eléctrica 1ª Semana 2015

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. Indique cuál de las siguientes afirmaciones sobre la práctica obligatoria de


este curso es correcta:

a. La cartelera de un cine está compuesta por un conjunto de sesiones.


b. Cada cine almacena un conjunto de carteleras.
c. La cartelera de un cine está compuesta por un conjunto de películas.
d. No existe ningún tipo de relación entre el cine y la cartelera.

2 . Indique cuál de las siguientes afirmaciones es correcta:

a. La memoria ROM y la memoria caché forman parte del


almacenamiento permanente de un ordenador.
b. La memoria ROM y la BIOS forman parte del almacenamiento
temporal de un ordenador.
c. La memoria virtual y la memoria caché forman parte del
almacenamiento temporal de un ordenador.
d. La BIOS y la memoria virtual forman parte del almacenamiento
permanente de un ordenador.

3. Linux NO es:

a. Un sistema operativo multitarea.


b. Un sistema operativo software libre.
c. Un sistema operativo monolítico.
d. Un sistema operativo multiusuario.

4. ¿Qué elementos definen a un objeto?

a. Su cardinalidad y su tipo.
b. Sus atributos y sus métodos.
c. La forma en que establece comunicación e intercambia mensajes.
d. Su interfaz y los eventos asociados.

5. Un método publico de una clase:

a. Sólo puede acceder a los valores de los atributos públicos de la clase.


b. No puede acceder a ninguno de los valores de los atributos privados
de la clase.
c. Puede acceder a cualquiera de los valores de los atributos de la
propia clase.
d. Puede acceder a los valores de los atributos de la propia clase
siempre que se trate de un constructor.
6. ¿Qué significa sobrecargar un método?

a. Editarlo para modificar su comportamiento.


b. Cambiar su nombre dejándolo con la misma funcionalidad.
c. Crear un método con el mismo nombre pero diferentes argumentos.
d. Añadir funcionalidades a un método.

7. ¿Qué se imprime al ejecutar el siguiente fragmento de código?


int tot a l = O ;
for ( int i = O ; i< l O ; i=i+2 ) {
tot a l = tot a l + i ;
}
System . out . print ( total ) ;

a. O
b. 8
c. 18
d. 20

8. Siendo Entrada y EntradaDíaEspectador dos clases que tienen una


relación de herencia padre-hijo. ¿Es correcto el siguiente código?

Entrada e ; 1* Línea 1 *1
EntradaDíaEspectador d ; 1* Línea 2 *1
e = new EntradaDíaEspectador ( ) ; 1* Línea 3 *1
d = e; 1* Línea 4 *1

a. Sí, es correcto.
b. No es correcto, deberíamos eliminar o comentar la línea 4.
c. No es correcto, deberíamos eliminar o comentar la línea 3.
d. No es correcto, deberíamos modificar la línea 3 por:
d = new EntradaDíaEspectador ( ) ; / * Línea 3 * 1

9. Un aula se compone siempre de 30 alumnos, y estos no son siempre los


mismos. La manera más apropiada de definirlo sería:

a. Un tipo enumerado con 30 valores posibles.


b. Un Arraylist de objetos de la clase Alumno.
c. Un array de tamaño fijo (30 ) de objetos de la clase Alumno.
d. Un array de enteros conteniendo los identificadores (dni) de los
alumnos.

1 O. Indique cuál de las siguientes afirmaciones sobre el mecanismo de


composición es correcta:

a. Nos permite extender funcionalidades de una clase a otra.


b. Nos permite definir más de un constructor para una misma clase.
c. Nos permite definir campos de una clase como instancias de otras
clases.
d. Nos permite tener métodos con igual nombre pero distintos
parámetros.
Plantilla soluciones
1C, 2C, 3C, 4B, 5C, 6C, 7D, 8B, 9C, 10C
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Dentro de las políticas de Medio Ambiente de la Unión Europea (UE) se plantea


el desarrollo de un sistema informático para el control de variables atmosféricas
a nivel europeo; es decir, se quiere desarrollar una aplicación que permita
controlar los valores de temperatura (T), precipitaciones (P) y velocidad del
viento (V) en diferentes puntos fijos del territorio europeo.

Estos puntos fijos de medición se caracterizan por tener una localización,


expresada por medio de coordenadas GPS, que a su vez son expresadas por
medio de dos coordenadas angulares: latitud y longitud. En estos puntos fijos
disponen de un número indeterminado de instrumentos de medición de
temperatura (termómetro), precipitaciones (pluviómetro) y velocidad del viento
(anemómetro), que son capaces de medir y registrar valores de T, P y V,
respectivamente. Todos los instrumentos se configuran para establecer el
intervalo de medición y registro.

El sistema debe permitir:



Devolver la secuencia de los últimos 'n' valores registrados de
temperatura, precipitaciones y velocidad del viento registrados en
cualquier punto fijo.

Calcular la media de las últimas 'n' mediciones de T, P o V en un punto
fijo a partir de sus coordenadas GPS.

Antes de responder lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibuje un esquema con las clases necesarias para este


programa, indicando y comentando brevemente los atributos, métodos y
relaciones entre clases (sólo indicarlos, sin escribir código).

2. (1 Punto) Escriba el código necesario para crear un punto fijo de medición


con unas coordenadas GPS correspondientes a una latitud 39,3° y longitud
76,6°, y añadirle como instrumentos de medida un termómetro y un
pluviómetro, configurados cada uno de ellos para medir y registrar valores
cada 3 minutos.

3. (3,5 Puntos) Escriba el código necesario de los métodos involucrados en la


funcionalidad encargada de calcular la media de las últimas 'n' mediciones
de T, P o V en un punto fijo a partir de sus coordenadas GPS.

4. (1 ,5 Puntos) Modifique y explique cómo cambiaría el diagrama del


apartado 1 para disponer además de sistemas de control medioambiental
por país; es decir, que cada país dentro de la UE tenga su propio sistema
de control de variables medioambientales. ¿Qué mecanismo/s de la
programación orientada a objetos utilizaría? Razone su respuesta.
Fundamentos de Informática Ing. Eléctrica 2ª Semana 2015

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. Indique cuál de las siguientes afirmaciones sobre la práctica obligatoria de


este curso es correcta:

a. Una entrada permite el acceso (está relacionada) a una sala.


b. Una entrada permite el acceso (está relacionada) a una película.
c. No existe el concepto de entrada en la práctica de este curso.
d. Una entrada permite el acceso (está relacionada) a una sesión.

2. Un microprocesador que tiene un ciclo de reloj de 1,8 M Hz significa que


puede realizar:

a. 1800 instrucciones por segundo.


b. 1,8 millones de instrucciones por minuto.
c. 1,8 millones de instrucciones por segundo.
d. 1800 instrucciones por minuto.

3. Las redes WIFI son:

a. Un conjunto de estándares para la conexión a internet desde


computadores independientes.
b. Un conjunto de estándares para redes locales inalámbricas.
c. Un tipo de conexión Bluetooth para portátiles.
d. Un estándar global de comunicación inalámbrica para la transmisión de
voz y datos entre diferentes equipos mediante un enlace por radio­
frecuencia.

4. Dos objetos de la misma clase tienen los mismos atributos siempre que:

a. Los atributos sean privados.


b. Los atributos sean públicos.
c. Los atributos sean protected.
d. En cualquier caso.

5. Indique cuál de las siguientes afirmaciones es correcta:


a. Para que la llamada a un método sea correcta debe coincidir tanto el
nombre del método como su lista de parámetros.
b. Los métodos pueden llamar a métodos de otros objetos directamente,
sin utilizar la notación de punto.
c. Los métodos pueden llamar a otros métodos de la misma clase siempre
que se utilice la notación del punto.
d. Los métodos pueden llamar a otros métodos de otros objetos siempre
que estén definidos como prívate.
6. ¿Qué es una excepción?

a. Un mecanismo para el manejo de errores.


b. Un objeto que no puede ser instanciado.
c. Un bucle que no finaliza.
d. Un tipo de evento poco utilizado para crear interfaces.

7. Indique qué secuencia imprimiría el siguiente código:


for (int i = O; i < 3; i++) {
int j = 2;
do {
System.out.print(i) ;
j++;
} while (j <= 1) ;
System.out.print(j) ;
}

a. 012
b. 222
c. 20 21 2 2
d. 031323

8. Si una clase C tiene relaciones de composición con otras clases, al generar


una clase hija de C:

a. Se generará una clase hija de las clases con las que tiene relación de
composición.
b. Heredará los atributos y por tanto también las relaciones de composición.
c. Dará error de compilación.
d. Sólo podrá generarse la clase hija como clase abstracta.

9. Tras lanzarse una excepción en JAVA, la ejecución del programa:

a. Finaliza a no ser que la excepción sea capturada.


b. Finaliza en cualquier caso.
c. Entra en un bucle hasta que la excepción sea resuelta.
d. El objeto que ha lanzado dicha excepción desaparece de memoria.

1 O. Siendo e studiantes una variable de tipo ArrayList<Estudiante> y


a s i gnaturas otra variable de tipo ArrayList<Asignatura> ¿cuál de las
siguientes afirmaciones es correcta?
a. La siguiente asignación es correcta:
estudiantes = asignaturas
para modelar la asignación de estudiantes a asignaturas.
b. La siguiente asignación es correcta:
asignaturas = estudiantes
para modelar la asignación de estudiantes a asignaturas.
c. Ambas variables pueden contener un número indeterminado de objetos
de tipo Estudiante y As ignatura, respectivamente.
d. A la hora de instanciar ambas variables es obligatorio definir el tamaño
máximo de elementos que pueden contener.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Una Federación Municipal de deporte base quiere gestionar competiciones


infantiles de fútbol sala, y para ello nos pide desarrollar una aplicación capaz de
gestionar competiciones, guardando enfrentamientos, resultados y goleadores.
Cada competición tiene un identificador, está constituida por un máximo de 20
equipos con nombre diferente, y formados por un máximo de 12 jugadores y un
entrenador. Cada jugador tiene un nombre, un DNI y un dorsal fijo, mientras
que del entrenador simplemente se pide el nombre y DNI. Además, cada
jugador solo puede jugar en un equipo. Para cada enfrentamiento se guardan
los equipos, local y visitante, el resultado final y los goleadores.

Se debe permitir:

Calcular los puntos de un determinado equipo en una competición,
asumiendo el siguiente reparto de puntos por partido:

Ganar: 3 puntos, Empatar: 1 punto, Perder: O puntos


Calcular los goles de un determinado jugador en una competición.

Antes de responder lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibuje un esquema con las clases necesarias para este


programa, indicando y comentando brevemente los atributos, métodos y
relaciones entre clases (sólo indicarlos, sin escribir código).

2. (3,5 Puntos) ¿Qué métodos y clases están involucrados en el cálculo de


los goles que ha marcado un jugador en una competición.? Razone su
respuesta. A continuación, implemente los métodos involucrados.

3. (1 Punto) Escribir el código necesario para crear un enfrentamiento entre


los equipos "C.P. Bias de Otero" y "C.P. Miguel de Cervantes" con un
resultado de 1-0 con gol del jugador "Martín González Rico," con DNI
123456789L y dorsal número 1 O.

Nota: El alumno deberá aportar los datos de ejemplo necesarios y que no


estén especificados en el enunciado Uugadores, equipos, entrenadores,
etc.).

4. (1 ,5 Puntos) Ahora queremos contemplar el hecho de que un partido tiene


un árbitro y que éste debe generar un acta en la que anote información
relacionada con el enfrentamiento que está arbitrando (por simplicidad
puede asumir que el acta es un texto sin estructura). Explique cómo
cambiaría el diagrama de clases del apartado 1. ¿Qué mecanismo/s de la
Programación Orientada a Objetos se estaría/n aplicando? Razone su
respuesta.
Fundamentos de Informática Ing. Mecánica 1ª Semana 2015

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. Indique cuál de las siguientes afirmaciones sobre la práctica obligatoria de


este curso es correcta:

a. La cartelera de un cine está compuesta por un conjunto de sesiones.


b. Cada cine almacena un conjunto de carteleras.
c. La cartelera de un cine está compuesta por un conjunto de películas.
d. No existe ningún tipo de relación entre el cine y la cartelera.

2. Al ejecutar un programa (secuencia de instrucciones), la primera de esas


instrucciones se transfiere:

a. de la BIOS a la unidad de control, donde se decodifica.


b. de la memoria RAM a la unidad de control, donde se decodifica.
c. de la memoria ROM a la unidad de control, donde se decodifica.
d. de la memoria virtual a la unidad de control, donde se decodifica.

3. Si se desea reservar más espacio de memoria para un determinado


proceso que lo requiere es necesario configurar:

a. La CPU
b. El sistema operativo.
c. El sistema de ficheros.
d. La memoria caché.

4. ¿Cuál de las siguientes afirmaciones es correcta?


a. Una clase es una instancia de un objeto que tendrá los mismos
valores en sus atributos que el resto de instancias de la misma clase.
b. Un objeto es una instancia de una clase que tendrá siempre los
mismos valores en sus atributos que el resto de instancias de la
misma clase.
c. Un objeto es una instancia de una clase que tendrá los mismos
atributos que el resto de instancias de la misma clase.
d. Un objeto es una instancia de una clase que tendrá distintos métodos
que el resto de instancias de la misma clase.

5. ¿Cuál de las siguientes afirmaciones es correcta?

a. Los objetos pueden crear otros objetos pero no pueden invocar sus
métodos.
b. Los objetos pueden crear otros objetos e invocar sus métodos.
c. Sólo las clases pueden crear otros objetos.
d. Los métodos de los objetos sólo pueden ser invocados por clases.
6. Desde el código de otra clase se puede modificar el valor de un atributo
privado de un objeto:

a. Mediante un método público del objeto


b. Mediante un método privado del objeto.
c. Mediante la notación punto añadido al nombre del objeto.
d. No es posible modificar el atributo del objeto.

7. Un método definido como "private":

a. Puede ser invocado desde la clase donde está definido y desde las
clases del mismo paquete.
b. Un método declarado como private no puede ser invocado.
c. Puede ser invocado desde la clase donde está definido y desde las
clases que heredan de la misma.
d. Puede ser invocado sólo desde la clase donde está definido.

8. Indique qué secuencia imprimiría el siguiente código:

int [ ] numeras { 1, 2, 3, 4, 5, 6 } ;
=

for (int i O; i < numeros.length; i++)


= {
System.out.print(i) ;
}

a. 2 3456
b. 1 2 3456
c. 012345
d. 1 2 3456

9. ¿Qué código de los siguientes tiene que ver con la herencia?

a. public class Componente implements Producto


b. public class Componente inherits Producto
c. public class Componente belongs to Producto
d. public class Componente extends Producto

1 O. Por medio del polimorfismo es posible:

a. incluir objetos de una clase y sus subclases dentro de un mismo


Arraylist.
b. modificar en tiempo de ejecución la clase de un objeto dado.
c. tener dos métodos con el mismo nombre y diferentes argumentos.
d. que una clase contenga como atributos objetos de otra clase.
Plantilla soluciones
1C, 2B, 3B, 4C, 5B, 6A, 7D, 8C, 9D, 10A
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea implementar una aplicación para la gestión de una tienda de venta de


muebles. El objetivo de dicha aplicación es facilitar a la tienda la gestión del
catálogo de muebles y los pedidos. La tienda está especializada en salones y,
por tanto, el catálogo que maneja se compone de mesas, sillones, sillas y
muebles de salón. Todos los muebles están identificados por un número de
referencia. A su vez, de las mesas se necesita almacenar el ancho, alto y largo
en centímetros y el material (madera o lacado). De los sillones, el ancho, largo,
número de plazas y material (tela o cuero). De las sillas, el ancho, largo y
material (madera o metal). Por último, de los muebles del salón el ancho, largo,
alto y el material (madera o lacado). De todos los muebles se desea almacenar
una foto de la que se guarda la ruta del fichero. Además, todos los muebles se
deben poder imprimir, mostrando cada uno su información particular.

El gestor de la tienda de muebles va a manejar un catálogo que permita añadir


nuevos muebles al mismo, así como eliminar un mueble a partir de su
referencia.

Por otro lado, la aplicación también debe manejar los pedidos de la tienda.
Cada pedido se caracteriza por un número de pedido, el nombre y apellidos del
cliente, la fecha de compra y los muebles que lo componen. Al igual que en el
caso del catálogo, cada pedido se debe poder imprimir, mostrando su
información. Además, en un pedido se debe poder añadir un mueble nuevo y
eliminar uno a partir de su referencia.

Además de lo mencionado, la aplicación deberá permitir:



Añadir un nuevo pedido

Eliminar un pedido a partir del nombre, apellido del cliente y de la fecha
de compra

Imprimir todos los pedidos de un cliente, a partir de su nombre y
apellidos
Imprimir el catálogo

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar el catálogo de la


tienda y añadir: un mueble de salón de medidas 150cmx60cmx200cm de
largo, ancho y alto, lacado, cuya referencia es la 1 y su imagen se
encuentra en el fichero "C:/Fotos/Salon1.jpg"; y un sillón de medidas
150cmx75cm de largo y ancho, de 3 plazas y de tela, cuya referencia es 2 y
su imagen está en el fichero "C:/Fotos/Sillon2.jpg". Además, añada el
catálogo a la aplicación e invoque el método para imprimir el catálogo.

3. (2 Puntos) Escriba el código del método del sistema que imprime (por
pantalla) todos los pedidos de un cliente, a partir de su nombre y apellidos.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos ha utilizado para recoger el requisito que señala que todos los
muebles se deben poder imprimir, mostrando cada uno su información
particular.
Fundamentos de Informática Ing. Mecánica 2ª Semana 2015

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. Indique qué tipo de relación existe en la práctica obligatoria de este curso


entre las clases Entrada y EntradaDiaEspectador:

a. Una relación de composición: una entrada puede estar compuesta


por varias entradas del día del espectador.
b. Una relación de uso: una entrada invoca métodos de una entrada del
día del espectador.
c. No existe ningún tipo de relación entre ellas.
d. Una relación de herencia: una entrada del día del espectador hereda
de una entrada.

2 . Indique cuál de las siguientes afirmaciones es correcta:

a. La memoria ROM es una memoria de lectura y escritura.


b. La memoria ROM es una memoria de solo escritura.
c. La memoria RAM es una memoria de lectura y escritura.
d. La memoria RAM es una memoria de solo lectura.

3. ¿Qué relación existe entre un programa y el sistema operativo?:

a. Todos los programas forman parte del sistema operativo.


b. El sistema operativo gestiona la memoria y tiempo de CPU disponible
para la ejecución del programa.
c. El sistema operativo es el componente hardware sobre el que se
ejecuta el programa.
d. El sistema operativo es el encargado de traducir el programa a
código máquina.

4. Indique cuál de las siguientes afirmaciones es correcta dentro de la


Programación Orientada a Objetos:

a. Las clases definen el comportamiento de los objetos


b. Los objetos definen el comportamiento de una clase
c. Una clase define el estado actual de un objeto
d. Un objeto define el estado actual de una clase

5. Dos objetos de la misma clase tienen los mismos métodos siempre que:

a. que los métodos sean privados.


b. que los métodos sean públicos.
c. que los métodos sean estáticos.
d. En cualquier caso.
6. ¿Qué sucede cuando en un método se pasa un objeto como parámetro?

a. Que los cambios que se producen sobre el parámetro, dentro del


método, no permanecen cuando se termina su ejecución.
b. No es posible pasar objetos como parámetros de un método.
c. Que los cambios que se producen sobre el parámetro, dentro del
método, permanecen cuando se termina su ejecución.
d. Que el objeto no puede ser modificado dentro del método.

7. Si se añade un método sin parámetros a una clase con el mismo nombre


que otro previo que tiene parámetros, el nuevo método:

a. Tomará los parámetros del método original.


b. Se ejecutará de manera independiente del método original.
c. Dará error de compilación.
d. Generará una nueva instancia de la clase.

8. ¿Qué se imprime al ejecutar el siguiente fragmento de código?


int re s u ltado = O ;
int tot a l = O ;
whi l e ( total <= re s u ltado ) {
re s u ltado = re s u ltado + tota l ;
System . out . print l n ( re s u ltado ) ;
}
re s u l t ado++

a. Los números enteros desde uno a infinito.


b. Los números enteros desde cero a infinito.
c. Una serie infinita de ceros.
d. Nunca llegaría a imprimir nada

9. Al crear una clase hija a partir de otra clase base se hereda:

a. Solo los métodos.


b. Solo los atributos.
c. Atributos y métodos.
d. El valor de todos los atributos.

1 O. Indique cuál de las siguientes afirmaciones es correcta, siendo Calendario


una clase y el siguiente código correcto:

int dias = C a lendario . getNumeroDiasMe sActua l ( ) ;

a. El código no es correcto, ya que Calendario debería ser un objeto


para invocar el método.
b. El método getNumeroDiasMesActual() es un método definido como
protected.
c. El método getNumeroDiasMesActual() es un método definido como
private.
d. El método getNumeroDiasMesActual() es un método de clase
definido como static.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea implementar un sistema encargado del mantenimiento de los


ordenadores personales en una gran empresa. Cada ordenador tiene asignado
un usuario empleado de la empresa. Un empleado se caracteriza por su
nombre, DNI, cargo y un lugar de trabajo (edificio) que puede variar.

Cuando se produce una avería en un ordenador, ésta se registra con un


identificador de avería, el ordenador afectado y una descripción del problema.
Una avería se encuentra en cierto estado en cada momento: pendiente o
resuelta. A cada avería se le asigna uno de los técnicos de entre los que
trabajen en el mismo edificio, que son a su vez también empleados de la
empresa.

Las funcionalidades del sistema deben cubrir:

1. Añadir una avería.

2. Asignar un técnico a una avería.

3. Actualizar el estado de una avería cuando quede resuelta.

4. Dado un técnico, imprimir el identificador y descripción de las averías


resueltas por éste y las que tiene pendientes.

Antes de responder lea con atención todos los apartados. Se pide:

1. (4 puntos) Diseñar el sistema especificado, representando el esquema de


clases que muestre las clases, atributos y métodos (sólo indicarlos, sin
escribir su código), así como las relaciones entre las propias clases,
aplicando los principios de la programación orientada a objetos.

2. (4 punto) Implementar el código del método encargado de asignar un


técnico del mismo edificio a una avería.

3. (2 puntos) Indicar en el esquema y explicar los cambios m1n1mos


necesarios en el diseño (sin modificar el código de las clases anteriores)
para añadir más información a las averías, como la fecha en la que se
produjo la avería o los componentes afectados. Una vez modificado el
diseño, escriba el código necesario (instanciación y llamadas a métodos)
para incluir una nueva avería en el sistema con esa nueva información.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test


1. La cantidad mínima de información que podemos representar en un
ordenador se denomina:

a. Binario.
b. Byte.
c. Bit.
d. Megabyte.

2 . La frecuencia de reloj es el único factor que determina:

a. La velocidad de transmisión de datos por los puertos de salida.


b. El número de operaciones por unidad de tiempo que puede
realizar la CPU.
c. El tiempo de acceso al disco duro.
d. El tiempo de ejecución de un programa.

3. En el enunciado de la práctica obligatoria de este curso se distinguen:

a. Dos tipos de entrada.


b. Dos tipos de sesiones.
c. Dos tipos de salas.
d. Dos tipos de cines.

4. ¿Cuál de las siguientes afirmaciones es correcta?

a. Cada objeto define el nombre de sus atributos, así como su tipo.


b. Cada objeto define el nombre de sus atributos, pero no el tipo.
c. Una clase define el nombre de sus atributos, pero no el tipo.
d. Una clase define el nombre de sus atributos, así como su tipo.

5. Qué motivo NO ha sido determinante en la popularidad del lenguaje


Java:

a. La posibilidad de reutilizar código ya compilado.


b. La capacidad de modelar conceptos del problema en términos de
clases.
c. La velocidad de ejecución de los programas.
d. La posibilidad de compilar sobre diferentes plataformas.
6. La composición es un mecanismo que nos permite:

a. Establecer relaciones de herencia o especialización entre clases.


b. La composición es un mecanismo que no está permitido en Java.
c. Definir atributos de una clase como instancias de otras clases.
d. Implementar constructores por defecto.

7. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int [ ] a = { O , 2 , 4 , 6 } ;
for ( int i= l ; i<a . length ; i++ ) {
a[i] = a[i] + i;
}
System . out . print ( a [ O ] ) ;

a. 2
b. o
c. 1
d. 3

8. Dadas las siguientes definiciones de clases:

class ClasePadre { }
class ClaseHij a l extends ClasePadre { }
class ClaseHija2 extends ClasePadre { }

y las siguientes instanciaciones:

Clase Padre varO new ClasePadre() ;


ClaseHij a l var l new ClaseHij a l () ;
ClaseHija2 var2 new ClaseHija2() ;
Clase Padre var 3 new ClaseHij a l () ;
Clase Padre var 4 new ClaseHija2() ;

¿Cuál de las asignaciones es válida?

a. varO = var1;
b. var2 = (CiaseHija2 ) var1;
c. var2 = var4;
d. var1 = var2;

9. ¿Qué significa sobreescribir un método?

a. Sobrecargar un método.
b. Cambiarle el nombre dejándolo con la misma funcionalidad.
c. Modificarlo para los objetos de una subclase.
d. Crear un método con el mismo nombre pero diferentes
argumentos.
1 O. Cuál es la forma correcta de declarar el método main?

a. public void main (String[] args)


b. static public void main (String[] args)
c. static public String main (String args[])
d. public static void main (String args[])
Apellidos......................................Nombre..................... DNI ...................
Segunda Parte: Problema

Una empresa local de transporte quiere implantar una aplicación para la


gestión de su único centro logístico. Dicho centro se encarga de repartir los
paquetes cuyo destino es alguna de las zonas que gestiona. Cada zona se
identifica por un número y el conjunto de calles que la componen.
Para realizar las entregas la empresa tiene contratados una serie de
repartidores, de los que se desea guardar en la aplicación su nombre, sus
apellidos, la zona en la que reparten (cada repartidor se ocupa de una zona) y
los paquetes que tienen asignados para repartir.
Cada uno de los paquetes que gestiona la empresa se identifica por un número
de envío, el remitente (identificado sólo por un alias) y el destinatario del envío.
De cada destinatario se necesita saber su nombre, sus apellidos, la calle y el
número. Cada paquete va pasando por distintos estados, según avanza en el
proceso, pudiendo éstos ser: registrado (cuando se da de alta en el sistema),
en reparto (cuando se asigna a un repartidor) y entregado (cuando se entrega
al destinatario).
Además de lo mencionado, la aplicación deberá permitir:

Almacenar todos los envíos que ha gestionado o está gestionando.

Registrar un nuevo paquete en el centro logístico para realizar su envío.

Asignar un paquete al repartidor encargado de la zona donde va dirigido
el envío.

Consultar el estado de un paquete a partir de su número de envío.

Imprimir todos los paquetes enviados por un remitente, a partir de su
alias.

Marcar un paquete como entregado por un determinado repartidor.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2,5 Puntos) Escribir el código del método del centro logístico que asigna
un paquete al repartidor encargado de la zona donde va dirigido el envío.
Tenga en cuenta que el estado del paquete debe cambiarse a "en reparto"
al realizar la asignación.

3. (2,5 Puntos) Escribir el código del método que permite marcar un paquete
como entregado. Además, el paquete debe de dejar de estar asignado al
repartidor que ha realizado la entrega.

4. (1 Puntos) La empresa desea extenderse, instalando más centros


logísticos para gestionar más zonas, y permitiendo un tipo especial de envío,
donde los paquetes se envíen de manera urgente. Explique qué
mecanismo(-s) de la programación orientada a objetos utilizaría para
recoger estos nuevos requisitos. Justifique su respuesta.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1 . El término software hace referencia a cualquier programa que se ejecute en


un ordenador pero, ¿cuál de los siguientes tipos de software es
imprescindible para el funcionamiento de un ordenador?

a. Software de desarrollo.
b. Software de aplicación.
c. Software de sistema.
d. Software de compilación

2 . ¿Qué factor determina la resolución del interfaz gráfico?

a. La resolución del monitor.


b. Las características de la tarjeta gráfica.
c. El sistema operativo.
d. La cantidad de memoria RAM disponible.

3. Indique cuál de las siguientes afirmaciones sobre la práctica obligatoria de


este curso es correcta:

a. La cartelera está formada por el conjunto de sesiones del cine.


b. La cartelera es común para todos los cines.
c. La cartelera está definida por las salas donde se proyecta cada
película.
d. La cartelera está formada por el conjunto de películas que se
proyectan en un cine.

4. Indique qué elementos son los que definen a un objeto:

a. Su cardinalidad y su tipo.
b. Sus atributos y sus métodos.
c. La forma en que establece comunicación e intercambia mensajes.
d. Su interfaz y los eventos asociados.
5. ¿Qué podemos decir de las siguientes instrucciones, sabiendo que MiCiase
es una clase correctamente definida y el método main está definido en una
clase llamada A?:

public static void main(String[] args) {


MiC l a s e e = new MiC l a se ( ) ;
}

a. El código no es correcto, ya que un método no puede tener al


mismo tiempo las palabras reservadas static y void.
b. El método main puede ser invocado únicamente desde la clase A.
c. El código es correcto, creándose un objeto de la clase MiCiase,
cuando se ejecute la aplicación.
d. El código no es correcto, ya que faltan los parámetros del mismo.

6. Indique cuál de las siguientes declaraciones es correcta:

a. <Track> tracks = new Arraylist();


b. Arraylist<Track> tracks = new Arraylist<Track>();
c. <Track> tracks = new Arraylist<Track>();
d. Arraylist tracks = new Arraylist;

7. Indique qué secuencia imprimiría el siguiente código:

int l 1;
int J 5;
do {
System. o u t.print ] + " ") ;

J
; - -

System. o u t.print l + " ") ;


while (j >i) ;

a. 5, 1, 4, 1,
b. 5, 1 ' 2, 1 '
c. 5, 1 ' 1 ' 1 '
d. 5, 1 ' 3, 1 '
8. Teniendo en cuenta las siguientes definiciones de clases:

pub l ic c l a s s A {
}
pub l ic c l a s s B extends A {
}
pub l ic c l a s s e extends A {
}

¿Son correctas las siguientes instrucciones?

L i s t<B> l i sta = new ArrayLi s t<B> ( ) ; 1* Línea 1 */


l i sta . add ( new A( ) ) ; 1* Línea 2 *1
l i sta . add ( new B( ) ) ; 1* Línea 3 *1
l i sta . add ( new C( ) ) ; 1* Línea 4 */

a. Sí, es correcto.
b. No es correcto, deberíamos eliminar o comentar las líneas 2 y 4.
c. No es correcto, deberíamos eliminar o comentar la línea 4.
d. No es correcto, deberíamos modificar la línea 4 por:
l i sta . add ( new A ( ) ) ; / * Línea 4 * /

9. Cuál de estas afirmaciones es FALSA. Un método:

a. Puede modificar el estado de una clase.


b. Puede modificar el estado de un objeto.
c. Puede acceder a atributos o campos privados de la clase a la que
pertenece.
d. Posee el mismo código para cualquier objeto de la misma clase.

1 O. Un método realiza una operación que toma como entrada bien un String o
bien un entero. La forma más apropiada de implementar este caso es:

a. Mediante sobrecarga de métodos.


b. Definiendo dos métodos de distinto nombre.
c. Definiendo una subclase para uno de los métodos.
d. Implementando un método con dos parámetros de entrada.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Un restaurante desea informatizar el proceso de reserva de mesas. El


restaurante dispone de un número de mesas determinado. Básicamente el
sistema consiste en una agenda. Cada día se caracteriza por su fecha y tres
turnos de comidas: almuerzo, cena temprana y cena tardía. Para cada turno de
cada día, habrá una serie de reservas. Cada reserva viene identificada por un
nombre y apellidos y número de comensales. Cada mesa individual permite
atender a 4 comensales. Juntando dos mesas, a 6 comensales, juntando tres
mesas a 8 comensales, y así sucesivamente. El sistema debe ofrecer las
siguientes funcionalidades:

1. Añadir una nueva reserva para un día y turno con los datos
correspondientes comprobando que haya sitio en dicho turno. Si es la
primera reserva que se hace para ese día, el sistema debe incorporar
dicho día en el registro, con los tres turnos correspondientes.
2. Anular una reserva dado un día, un turno y el nombre.
3. Listar las reservas de un día y un turno, indicando por cada reserva el
nombre y el número de comensales.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1 . (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (3 Puntos) Escribir el código de los métodos implicados en la funcionalidad


3 (listar las reservas).

3. (1 Puntos) Escribir el código necesario para instanciar desde un main el


sistema y añadir una reserva con los datos que se considere.

4. (2 Puntos) Ampliar el esquema del sistema con el fin de gestionar una


cadena de restaurantes de forma centralizada, y para incorporar
restaurantes con otro tipo de mesas que admiten otras disposiciones de
comensales. Indicar en el esquema las nuevas clases, métodos y campos
que fueran necesarios.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1 . Indique cuál es el elemento lógico del sistema de cómputo

a. Software.
b. Firmware.
c. Hardware.
d. Malware.

2 . ¿En dónde NO puede estar físicamente la memoria caché?

a. En la CPU.
b. Fuera de la CPU, en una tarjeta de memoria en la placa madre.
c. Formando parte de la memoria RAM.
d. En el disco duro.

3. Indique cuál de las siguientes afirmaciones sobre la práctica obligatoria de


este curso es correcta:

a. Las entradas permiten el acceso a una sala del cine.


b. Las entradas permiten el acceso a una película del cine.
c. Las entradas permiten el acceso a una sesión del cine.
d. Cada tipo de entrada permite el acceso a una sesión o una sala.

4. Dada la siguiente definición de clase, ¿cuál sería el contenido más


adecuado a implementar en el constructor?

class Test {
int var ;
Test (int var) { CONTEN I DO C ONSTRUC T OR }

a. var=var;
b. int var=var;
c. this.var=var;
d. No se puede llamar igual el parámetro del constructor que el
atributo de la clase.
5. ¿Qué condiciones son necesarias para crear una instancia de una clase?

a. Estar dentro del método main.


b. Que la primera sea una clase predefinida, del mismo paquete o de
un paquete previamente importado.
c. Que el método donde se instancia sea público.
d. No es posible realizar dicha acción.

6. Indique cuál de las siguientes afirmaciones es correcta. Un Arraylist se


declara indicando:

a. su tamaño.
b. el tipo de objetos que puede contener y el tamaño fijo.
c. el tipo de objetos que puede contener.
d. el tipo de objetos que puede contener y un tamaño variable dentro
de un intervalo de posibles valores.

7. Indique qué secuencia imprimiría el siguiente código:


int i = 1;
int j = 5;
while (j >i)
System. o u t.print J + " ") ;

J -- ;
System. o u t.print l + " ") ;

a. 5, 1, 4, 1,
b. 5, 1 ' 2, 1 '
c. 5, 1 ' 1 ' 1 '
d. 5, 1 ' 3, 1 '

8. Indica cuál de las siguientes afirmaciones correcta:

a. Todas las clases en Java heredan de una misma clase.


b. Dos clases en Java no pueden heredar de una misma clase.
c. Una clase en Java solo puede heredar de otra si ésta es abstracta.
d. Dos clases que hereden de una misma clase representan
instancias de un mismo objeto.

9. ¿Qué significa sobrecargar un método?

a. Editarlo para modificar su comportamiento.


b. Crear un método con el mismo nombre pero diferentes
argumentos.
c. Cambiarle el nombre dejándolo con la misma funcionalidad.
d. Extender el código de un método.
10. Si tenemos una clase con un método m, ¿cómo debemos definirlo para que
éste únicamente pueda ser invocado desde la propia clase y desde las
clases que heredan de la misma?:

a. El método debe definirse con acceso protegido (protected).


b. No se puede hacer eso, ya que en Java no está permitida la
herencia múltiple.
c. El método debe definirse con acceso privado (private).
d. No se puede hacer eso, ya que todo método que se pueda
invocar por las subclases de la clase donde está definido, es a su
vez accesible para cualquier clase.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea desarrollar una aplicación para gestionar el préstamo de los


documentos de una biblioteca. Existen dos tipos de usuarios de la biblioteca:
los socios y los visitantes ocasionales. Los socios pueden tener hasta 20
documentos en préstamo como máximo, mientras que los clientes ocasionales
solo pueden tener dos. Los datos que componen la ficha de un usuario son su
DNI, su nombre y su dirección.

La biblioteca puede prestar dos tipos de documentos: libros y revistas. La ficha


de un documento se compone de un código alfanumérico, que permite
identificar el documento, así como su título. Además, la ficha de un libro tiene
un campo más, correspondiente a su año de publicación, mientras que la
revista tiene un campo correspondiente al número.

La duración máxima de préstamo de los libros a los socios es de 30 días,


mientras que para los usuarios ocasionales es de 15 días. La duración máxima
del préstamo de una revista a un usuario es un tercio de la duración máxima
del préstamo de un libro a ese mismo tipo de usuario.

Además de lo mencionado, la aplicación deberá permitir:


Buscar un documento por su título y código dentro de la biblioteca.

Prestar un documento a un usuario y posteriormente devolverlo.

Generar un informe de préstamos, mostrándose por pantalla la
información relativa a los documentos prestados: título, año de
publicación (si es un libro), código, plazo de préstamo, día de préstamo y
DNI del usuario al que se la ha prestado. El formato debe ser
exactamente el mostrado a continuación:

I n f o rme de p r é s t am o s :

"El l e ngua j e de p r o g r a mama c i ó n Java ( 2 0 0 0 ) " ( C ó d i go : P0 1 )


Plaz o : 30 días
P r e s t a do el día : Mon May 25 11 : 33 : 34 CEST 2015
P r e s t a do al usuario con id : 1 2 3 4 5 6 7 8 9A

" P r o g r ama c i ó n o r i e ntada a ob j e t o s con Java : una i n t r o du c c i ó n


prácti ca u s a nb do B l u e J " ( C ó d i go : P0 4 )
P r e s t a do el día : Fri May 22 10 : 03 : 04 CEST 2015
Plaz o : 15 días
P r e s t a do al usuario con id : 1 1 2 2 33 4 4 5G

Ayuda. Con el siguiente código se puede obtener la fecha del sistema:

Date fe cha = new Date ( ) ;


S y s t e m . o u t . p r i n t l n ( f e ch a ) ;
Antes de comenzar a responder, lea con atención todos los apartados.

Se pide:

1 . (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.
2. (2,5 Puntos) Escribir el código de la clase correspondiente al cliente
ocasional.
3. (2 Puntos) Escribir el código del método encargado de generar el informe
de préstamos tal como se indica en el enunciado.
4. ( 1 ,5 Puntos) La biblioteca desea ahora también realizar préstamos de CDs
y OVOs con una duración máxima de una quinta parte del préstamo de los
libros. Explique cómo ampliaría su diseño para cubrir esta nueva
funcionalidad sin modificar las clases ya existentes. ¿Qué mecanismo(-s) de
la programación orientada a objetos le permitiría(-n) hacerlo? Justifique su
respuesta.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1 . Indique cuál de las siguientes no son funciones del sistema operativo:

a. La gestión de recursos hardware.


b. La gestión de ficheros.
c. La gestión de usuarios.
d. La gestión de la compilación de un código fuente.

2. Las impresoras laser:

a. Emplean electricidad estática.


b. Disparan el laser directamente sobre el papel.
c. Emplean cristal líquido.
d. Emplean diodos luminosos.

3. Indique cuál de las siguientes afirmaciones sobre la implementación de la


práctica obligatoria de este curso es correcta:

a. Entre la clase Entrada y la clase EntradaDiaEspectador no existe ningún


tipo de relación.
b. El método encargado de devolver el precio de cualquier entrada del cine
es polimórfico.
c. Entre la clase Entrada y la clase EntradaDiaEspectador existe una
relación de composición.
d. Sólo existe un tipo de entrada en el sistema desarrollado en la práctica
obligatoria.

4. Indique cuál de las siguientes afirmaciones es FALSA.

a. No es posible heredar de una clase abstracta.


b. Una clase abstracta no se puede instanciar.
c. Toda clase abstracta hereda de la clase Object.
d. Una clase abstracta es una clase que puede contener métodos
abstractos.
5. Indica cuál de las siguientes afirmaciones es correcta.

a. Dos objetos de la misma clase no pueden tener el mismo número de


métodos.
b. Dos objetos de la misma clase deben tener los mismos métodos y
valores en sus campos.
c. Tener dos objetos de la misma clase supone tener duplicada la misma
información aunque se use en diferente parte del código.
d. Dos objetos de la misma clase siempre tendrán los mismos métodos y
campos.

6. Dada una lista de objetos tipo "Persona", con un campo "DNI", al modificar
dicho campo de una de las personas de la lista, el elemento de la lista:

a. Apuntaría a otro objeto con el DNI correspondiente.


b. Apuntaría al mismo objeto, sólo que con un valor distinto en el campo.
c. Se crearía una copia del objeto.
d. No es posible modificar un atributo de un objeto que pertenece a una
lista.

7. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int tot a l = 3 ;
for ( int i= l ; i<tota l ; i=i+2 ) {
System . out . print ( i ) ;
System . out . print ( total ) ;
tot a l = tot a l + 1 ;

a. 13 34
b. 13 3455
c. 11 33
d. 11 3355

8. Se desea hacer uso de una clase ya compilada (.class) llamada "Libro" para
implementar una nueva clase llamada "Biblioteca". ¿Qué mecanismo habría
que aplicar para no tener que implementar de nuevo la clase "libro"?

a. Herencia, definiendo "Biblioteca" como clase hija de "libro".


b. Es necesario implementar de nuevo la clase "Libro", dado que ya está
compilada.
c. Composición, introduciendo "Libro" en los campos de la clase
"Biblioteca".
d. Sobrecarga de métodos, sobrescribiendo los métodos de "Libro" en la
nueva clase "Biblioteca".
9. ¿Podemos definir un método de una clase de manera que éste no devuelva
ningún resultado?

a. No, todos los métodos de una clase deben devolver algún resultado.
b. Sí, utilizando la palabra reservada static para definir el método.
c. Sí, utilizando la palabra reservada void para definir el método.
d. No, todos los métodos de una clase deben devolver algún resultado, o
en su defecto modificar algún objeto.

1 O. Indica cuál de las siguientes afirmaciones es FALSA:

a. Un método definido como pri va t e solo es accesible desde su clase.


b. Un método definido como pro t e c t e d es accesible desde su clase,
clases hijas y clases del mismo paquete.
c. Un método definido como p ubl i c es accesible desde cualquier clase
definida como p ubl i c.
d. Un método definido como res tri c t e d no es accesible más que desde
una clase definida como pro t e c t e d.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea implementar un sistema de maquetación automática de una pequeña


revista de música. Es decir, la idea es que el sistema automáticamente genere
un documento editable con una versión previa de todas las secciones del
número de la revista de forma que los editores sólo tengan que retocar el
resultado
Cada número de la revista tendrá un número, fecha y título general, y se
compone de secciones. Todas las secciones tienen un título, cuerpo de texto, y
lista de imágenes, que se caracterizarán por un path con el nombre del archivo
jpeg correspondiente. No se sabe a priori cuántas secciones tiene cada
número, pero sabemos que hay de tres tipos: entrevista, crítica musical, o
anuncio de evento. Cada uno de estos tipos se maquetará de forma distinta.
Además los anuncios de eventos tienen algunos atributos extra como fecha o
lugar del evento.
El sistema deberá disponer de las funcionalidades necesarias para:

1. Añadir o eliminar una sección al numero de revista.


2. Maquetar la revista completa teniendo en cuenta que cada sección tiene
sus propios criterios de maquetación.

Antes de responder lea con atención todos los apartados. Se pide:

1. (4 puntos) Diseñar el sistema especificado, representando el esquema


de clases que muestre las clases, atributos y métodos (sólo indicarlos,
sin escribir su código), así como las relaciones entre las propias clases,
aplicando los principios de la programación orientada a objetos.
2. (2 puntos) Eligiendo libremente los valores de los atributos no
especificados en este enunciado, escribir el código necesario
(instanciación y llamadas a métodos) para crear un número de revista,
una sección de entrevista, una sección de crítica musical, añadir las
secciones al número de revista y maquetar.
3. (2 puntos) Escribir el código del método encargado de maquetar un
numero de revista.
4. (2 puntos) Indicar los cambios mínimos necesarios en el diseño, sin
modificar las clases existentes, para añadir un método que genere un
documento en un formato distinto.
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. La pantalla y la impresora son:

a. Periféricos de entrada.
b. Tarjetas de expansión del ordenador.
c. Periféricos de salida.
d. Son puertos USB.

2. Indique cuál de las siguientes NO son funciones del Sistema Operativo:

a. Control de concurrencia de procesos.


b. Gestión de la BIOS.
c. Administración de memoria.
d. Control de la ejecución de los programas.

3. Cuál de estas afirmaciones es FALSA. En la práctica del presente curso para


un alumno que asista a una materia se emite una factura distinta
dependiendo de:

a. Si es de familia numerosa.
b. Si está empadronado.
c. Del número de horas a las que esté apuntado en dicha materia.
d. Del precio asociado a la materia.

4. ¿Qué significa instanciar una clase?

a. Duplicar una clase.


b. Crear un objeto a partir de una clase.
c. Eliminar una clase.
d. Relacionar dos clases entre sí.

5. ¿Qué significa sobrecargar un método?

a. Editarlo para modificar su comportamiento.


b. Cambiarle el nombre dejándolo con la misma funcionalidad.
c. Crear un método con el mismo nombre pero diferentes argumentos.
d. Añadirle funcionalidades.
6. ¿Por qué los métodos, por ejemplo de la clase Math, se pueden invocar sin
llamar previamente a la instrucción new para crear una instancia de la
misma?

a. Porque siempre se crea una instancia de esa clase al arrancar el


programa.
b. Porque sus métodos son estáticos.
c. No es cierto; siempre hay que crear un objeto con new antes de
poder usar los métodos.
d. Porque sus métodos están declarados como públicos.

7. ¿Qué se imprime al ejecutar el siguiente fragmento de código?


i. nt total = 100;
for (i.nt i=0; i<3; i++){
total = total * i;
}
System.out.print(total);
a. O
b. 100
c. 10000
d. 1000000

8. ¿Qué clases son siempre accesibles desde otras clases, bien sea de forma
directa o por herencia?

a. Final.
b. Abstract.
c. Priva te.
d. Static.

9. Siendo CPadre una clase padre de CHija, ambas con el atributo nombre
tipo String declarado como público, ¿qué imprimiría el siguiente código?:
CPadre p=new CPadre();
CHija h=new CHija();
h.nombre="Juan";
p.nombre="Pepe";
System.out.println(h.nombre);

a. Pepe
b. Juan
c. Una excepción
d. null

1O. Indique cuál de las siguientes instanciaciones es correcta:

a. int vector[] = new int(1 O);


b. int vector[] = new int[1 O];
c. int vector[1 O] = new int[];
d. int vector = new int[1 O];
Segunda Parte: Problema
Se desea implementar una aplicación para la gestión de los radares de
tráfico. Esta aplicación deberá ser capaz de almacenar y gestionar la
información de todos los radares de los que dispone la DGT,
independientemente de su tipo. La DGT dispone de tres tipos de radares:
radares fijos, situados en un determinado punto kilométrico (P.K) y que
determinan si un vehículo pasa a más velocidad de la permitida; radares de
tramo, situados entre un P.K. inicial y otro final, y que comprueban que la
velocidad media entre esos dos puntos no supera la máxima permitida; y
radares móviles, instalados en coches de la Guardia Civil identificados con
una determinada matrícula. Todos los radares tienen un identificador y además
tienen especificada una velocidad máxima permitida, a partir de la cual realizan
fotografías que almacenan para la tramitación posterior de denuncias. Estas
fotografías, además de la ruta del archivo de imagen, guardan la fecha y hora
de la infracción y la velocidad detectada al vehículo.
Se considera que cada tipo de radar dispone de un método que dispara
automáticamente una fotografía cuando detecta que un vehículo supera la
velocidad fijada al pasar por un sensor, y que dispone además de métodos
para saber el instante en el que se ha realizado una foto (fecha y hora), así
como la velocidad exacta detectada.
Además de almacenar todos los radares instalados, esta aplicación
informática deberá permitir las siguientes funcionalidades:
a) Ver por pantalla todas las imágenes almacenadas en todos los radares
de un determinado tipo con su información asociada.
b) A partir de un identificador de radar, ver por pantalla la información
asociada a todas las infracciones almacenadas en dicho radar.
Antes de comenzar a responder, lea con atención todos los apartados. Se pide:
1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el
diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos. lndíquense en qué clase y qué deberían
devolver los métodos que disparan automáticamente una fotografía cuando
detectan que un vehículo supera la velocidad fijada al pasar por un sensor,
así como los métodos que devuelven el instante en el que se ha realizado
una foto (fecha y hora) y la velocidad exacta detectada.
2. (1 ,5 Puntos) Escribir el código necesario para instanciar un radar fijo con id:
02024, una velocidad máxima permitida de 120Km/h en el P.K. 5,800 de la
A-5, así como de un radar de tramo con id:83736, velocidad máxima
permitida de 50Km/h, y P.K.inicial: 235,800 de la A-4 y 239,800 de la A-4. A
continuación añadirlos al sistema.
3. (2,5 Puntos) Escriba la implementación del método (incluyendo su
cabecera) que cubre la funcionalidad b).
4. (2 Puntos) Explique razonadamente qué mecanismo(-s) de la programación
orientada a objetos utilizaría para ampliar el sistema incorporando un nuevo
tipo de radar llamado radar de foto-rojo, y que no miden la velocidad, por lo
que no deberán tener una velocidad máxima asociada, sino que toman fotos
a aquellos vehículos que se saltan un semáforo en rojo.
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test


1. La/El _ _ _ _ es un dispositivo de almacenamiento temporal.
a. CD.
b. Memoria RAM.
c. Disco duro.
d. OVO.

2. Bluetooth es la norma que define un estándar global de comunicación


inalámbrica que posibilita la transmisión de voz y datos entre diferentes
equipos mediante un enlace por:
a. infrarrojos.
b. ultrasonidos.
c. radiofrecuencia.
d. Wi-Fi.

3. En la práctica del presente curso, ¿qué clase o clases están implicadas en


un mecanismo de herencia?
a. La clase Factura.
b. La clase Materia.
c. Las clases Factura y Materia.
d. Ninguna de las dos.

4. Indica cuál de las siguientes características NO son propias de los Sistemas


Operativos Linux:
a. Permite personalizar el funcionamiento y auditar la seguridad y
privacidad de los datos tratados.
b. Cada una de sus distribuciones depende de un proveedor de
hardware encargado de su mantenimiento.
c. Ofrece escalabilidad permitiendo crear clusters de cientos de
ordenadores
d. Tiene una comunidad muy activa de desarrollo a su alrededor y
abundante documentación relativa a sus procedimientos.

5. ¿Cuál es la descripción que define mejor el concepto 'clase' dentro de la


programación orientada a objetos?
a. Es un concepto similar al de 'array'.
b. Es un tipo particular de variable.
c. Es un modelo o plantilla a partir de la cual creamos objetos.
d. Es una categoría de datos ordenada secuencialmente.
6. Indicar cuál de estas afirmaciones es correcta: Un método de acceso
(get/set) permite modificar el valor de un atributo desde otra clase
perteneciente a otro paquete, siempre que:
a. el atributo esté definido como público.
b. el método de acceso esté definido como publico.
c. el método de acceso sea estático.
d. el atributo esté definido como privado.

7. ¿Cuál de los siguientes mecanismos nos permite crear varios métodos con
el mismo nombre en la misma clase?
a. La abstracción.
b. El polimorfismo.
c. La herencia.
d. La sobrecarga.

8. Indique qué secuencia imprimiría el siguiente código:


int [] numeras = {1, 2, 3, 4, 5, 6};
for (int 1 = 1; i<numeros.length; i++) {
System.out.print(numeros[i]);}

a. 123456
b. 23456
c. 12345
d. 23456

9. ¿Qué código de los siguientes tiene que ver con la herencia?


a. public class Componente extends Producto
b. public class Componente inherit Producto
c. public class Componente implements Producto
d. public class Componente belongTo Producto

1O. ¿Qué mostraría por pantalla el siguiente fragmento de código, asumiendo


que edad es un atributo público tipo entero de la clase Persona?
int x=30;
Persona pedro = new Persona();
pedro.edad = x;
X = 20;
System.out.print(pedro.edad-1);

a. 30
b. 20
c. 29
d. 19
Segunda Parte: Problema
Se desea implementar una aplicación para su uso dentro de una empresa de
venta de bicicletas. Esta empresa permite configurar sus productos al gusto de
sus clientes, y para ello necesita una aplicación informática que le permita
automatizar el proceso de configuración del producto.
Toda bicicleta deberá tener la siguiente configuración a elegir por el cliente:
un cuadro, un manillar, ruedas delantera y trasera, y opcionalmente puede
añadir un conjunto de complementos.
En primer lugar se deberá elegir un cuadro que podrá ser de aluminio o fibra
de carbono y un manillar, que podrá o no tener reposabrazos, y que podrá ser
de tipo multiposición o de triatlón. En el caso de que sea un manillar
multiposición deberá indicarse si es de longitud ajustable, y si es de triatlón si
permite fijación de mandos. A continuación deberá seleccionarse el tipo de
ruedas que tendrá la bicicleta (delantera y trasera), indicando si tendrán o no
freno de disco, y si la cubierta es lisa o de tacos. En el caso de la rueda trasera
habrá que indicar el número de piñones. Por último, el usuario podrá añadir los
complementos que desee a la bicicleta configurada, y que podrán ser bidones
para el agua (medianos o grandes), portaequipajes, luces (ledo reflectores).
Todos los componente con los que se configura una bicicleta, así como todos
sus complementos, tienen un precio y un código de referencia asociado.
Además de permitir la configuración de una bicicleta a partir de lo
mencionado anteriormente, esta aplicación informática deberá permitir las
siguientes funcionalidades:
a) Ver por pantalla la información de la configuración final del producto
indicando los códigos de referencia de cada componente y cada
complemento añadido.
b) Calcular el precio de la bicicleta considerando la suma de todos los
elementos y complementos que la conforman, y aplicando un 20% de
descuento a los complementos añadidos.
Antes de comenzar a responder, lea con atención todos los apartados. Se pide:
1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar esta
aplicación, indicando los atributos y métodos que tiene cada una de ellas
(sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.
2. (2 Puntos) Escribir el código necesario para instanciar una nueva bicicleta.
Se deja a la elección del alumno la selección de componentes y
complementos, pero deberá cubrirse la especificación mínima indicada en el
enunciado.
3. (2,5 Puntos) Escriba la implementación del método (incluyendo la
cabecera) que devuelve el precio total de la bicicleta.
4. (1,5 Puntos) Explique razonadamente qué mecanismo(s) de la
programación orientada a objetos están involucrados en el método
expresado en la funcionalidad a).
• Para la nota del examen, el test vale el 20% yel Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (maximo 2 caras), indicando su
nombre y ON I.

Primera Parte: Test


1. La memoria _ _ _ es volatil.
a. ROM.
b. PROM.
c. Disco Duro.
d. RAM.

2. Senale cual es el orden correcto de un nivel superior a un inferior en la


arquitectura de protocolo TCP/lP:
a. Capa de aplicacion, capa de transporte de servidor a servidor, capa
de internet y capa de interfaz de red
b. Capa de transporte de servidor a servidor, capa de aplicacion, capa
de internet y capa de interfaz de red
c. Capa de transporte de servidor a servidor, capas de internet, capa de
aplicacion y capa de interfaz de red
d. Capa de aplicacion, capa de internet, capa de transporte de servidor
a servidor y capa de interfaz de red

3. En la practica del presente curso, el atributo familia numerosa:


a. produce una diferenciacion entre clases hijas de Alumno.
b. produce una diferenciacion entre clases hijas de Factura.
c. es un atributo de Alumno.
d. es un atributo de la Familia a la que pertenece el alumno.

4. LCual de las siguientes afirmaciones es FALSA? Un atributo puede


definirse como:
a. un objeto de otra clase.
b. un conjunto de objetos de otra clase.
c. un objeto de la misma clase.
d. un paquete de clases.
5. Dada la siguiente definicion de clase:
public class A {
public String A() {
}

public void escribir(String a){


System.out.println(a);
}
}

GQue habrfa que modificar para que fuera carrecta?


a. Nada. El codigo es carrecto.
b. Eliminar la palabra "String"
c. Sustitu ir la palabra "St ri ng" par "p ri vate"
d. Sustituir "public String A()" par "public static void A
(String args[])"

6. Cual de estas afirmaciones es FALSA. Un metodo puede ser invocado:


a. desde otra clase.
b. desde una clase de otro paquete.
c. desde la misma clase.
d. desde la signatura de otro metodo.

7. GQue hay que hacer en Java para crear una variable polimorfica?
a. Utilizar la palabra reservada polimorphic.
b. Declarar una variable como referencia a un objeto de una clase
determinada y posteriormente asignar a esa variable referencias a
objetos de otras clases de otro paquete.
c. Declarar una variable como referencia a un objeto de una clase
determinada que tenga clases derivadas y asf posteriormente se
podran asignar a esa variable referencias a objetos de subclases de
la clase inicial.
d. En Java no es posible el polimorfismo.

8. Dado el siguiente fragmento de codigo, indique que es 10 que se imprimirfa


par pantalia:
int cont=0;
while (cont<4){
cont++;
System.out.print(cont);
System.out.print(cont);}

a. 01122334
b. 11223344
c. 00112233
d. 44
9. Siendo CPadre una clase padre de CHija, ambos con el atributo nombre
tipo String declarado como publico, Lque imprimirfa el siguiente codigo?:
CPadre p=new CPadre();
CHija h=new CHija();
h=p;
h.nombre="Juan";
p.nombre="Pepe";
System.out.prinln(p.nombre);

a. Pe pe
b. Juan
c. null
d. Una excepcion.

10. Oado el array:


int j[] = {I, 2, 3, 4, 5, 6};

Lcual es el elemento en la posicion j [ 3 ] ?

a. 2.
b. 4.
c. 3.
d. La inicializacion del array es incorrecta.
Segunda Parte: Problema
Se desea implementar una aplicacion para la gestion de los alquileres de una
empresa de coches de alquiler. Esta empresa desea mantener la informacion
de sus clientes, en concreto quiere almacenar su nombre, apellidos, fecha de
nacimiento y fecha de su carnet de conducir. Tambien necesita guardar
informacion sobre la flota de coches que tiene. Los coches los tiene
catalogados en tres tipos: coches pequenos, medianos y grandes. De todos
ellos necesita almacenar su matrfcula, si esta alquilado y el precio base por dfa
que cobra por su alquiler. Este precio es comun para todos los coches y, a
cada uno de los tres tipos les aplica un porcentaje de incremento sobre el
precio base, siendo este de 10%, 15% Y 20%, respectivamente. Ademas,
tambien quiere gestionar y almacenar los alquileres que se producen. Para
cada alquiler quiere guardar el cliente que 10 realizo, el coche que se alquilo y
el numero de dfas de alquiler. El precio se calcula en base a los dfas de alquiler
y el coste del coche.
El sistema debera permitir anadir, modificar y borrar clientes, coches y
alquileres que se realicen. Ademas de 10 mencionado anteriormente, la
aplicacion debera permitir:
• Ver por pantalla la informacion de todos los alquileres realizados por un
cliente, a partir de su nombre y apellidos.
• Ver por pantalla la matricula de todos los coches que estan alquilados.

Antes de comenzar a responder, lea con atencion todos los apartados. Se pide:
1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el
diseno del sistema, indicando los atributos y metodos que tiene cada una de
ellas (solo indicarlos, sin escribir su codigo), aplicando los principios de la
programacion orientada a objetos.
2. (2 Puntos) Escribir el codigo necesario para instanciar un nuevo coche
pequeno de matrfcula 1234ABC y un coche mediano de matrfcula 4321 CBA.
Anadir ambos coches a la flota de la empresa, asumiendo que existe una
instancia de la clase Empresa almacenada en la variable denominada
"empresa". Ademas, instancie un nuevo cliente Pepe Flores, nacido el
12/11/1981 Y con fecha de carnet de conducir 5/1/2001. Anada este cliente
como nuevo cliente de la empresa. Despues de esto debemos pedir a la
empresa que muestre la matrfcula de todos los coches que estan alquilados
(no se pide implementar el metodo).
3. (2 Puntos) Escriba la implementacion del metodo del sistema que imprime
(por pantalla) la matrfcula de los coches de la flota que estan alquilados.
4. (2 Puntos) Explique que mecanismo(-s) de la programacion orientada a
objetos utilizarfa para recoger el requisito que nos permita calcular el precio
de cada coche, independientemente del tipo de coche que sea.
SOLUCIÓN

1.

Cliente
private String nombre
private String apellido
private Date fechaNacimiento
private Date fechaCarnet
/* metodos set y get de los atributos */

EmpresaAlquileresCoche
Alquiler
private List<Coche> flota
private Cliente cliente private List<Cliente> clientes
private Coche coche private List<Alquiler> alquileres
private Date fechaInicio
private Date fechaFin public void añadirCoche/Cliente/Alquiler( )
public boolean eliminarCoche/Cliente/Alquiler( )
public int calcularPrecio() public boolean modificarCoche/Cliente/Alquiler( )
/* metodos set y get de los atributos */ public void mostrarAlquileres(String cliente, String apellidos)
public void mostrarCochesAlquilados()

«abstract»
Coche

protected String matricula


protected int precioBase
public abstract void getPrecio()
/* metodos set y get de los
atributos */

CochePequeño CocheMediano CocheGrande


private int incremento=10 private int incremento=15 private int incremento=20

public void getPrecio() public void getPrecio() public void getPrecio()


/* metodos set y get de /* metodos set y get de /* metodos set y get de
los atributos */ los atributos */ los atributos */

2.

//Crear coche peqeño y mediano
CochePequeño c1 = new CochePequeño(“1234ABC”);
CocheMediano c2 = new CocheMediano(“4321CBA”);

//Añadimos los coches a la empresa


empresa.añadirCoche(c1);
empresa.añadirCoche(c2);

//Crea y añadimos el nuevo cliente


Cliente c = new Cliente(“Pepe”, “Flores”, new Date(12/11/1981), new
Date(5/1/2001));
empresa.añadirCliente(c);

//Mostramos los coches alquilados


empresa.mostrarCochesAlquilados();

3.

public void mostrarCochesAlquilados() {
for (Coches c : this.getCoches()) {
if (c.estaAlquilado())
System.out.println(c.getMatricula());
}
}

También se puede solucionar recorriendo la lista de alquileres y cogiendo el coche
de cada uno y comprobando si está alquilado.

4. Se hace uso de la herencia para generar los tipos de coches que heredan de la
clase abstracta Coche y mediante polimorfismo y la abstracción creamos el
método abstracto getPrecio() que será implementado en cada una de las clases
hijas (tipos de coche), calculando el precio en función del precio base y el
porcentaje de incremento de cada tipo.
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test


1. La memoria _ _ _ es NO volátil.

a. RAM.
b. Caché.
c. ROM.
d. No existen memorias no volátiles.

2. Cuál de los siguientes Sistemas Operativos puede ejecutarse en menos


plataformas diferentes de hardware:

a. MS Windows.
b. MacOS.
c. Linux.
d. Todos ellos pueden ejecutarse en cualquier tipo de hardware.

3. En la práctica del presente curso, cuál de las siguientes especificaciones es


correcta:

a. Se imparten materias a un grupo en distintas aulas.


b. Se imparte una materia a un grupo en un aula.
c. Varios profesores imparten clase a un mismo grupo.
d. Varias materias son impartidas a un mismo grupo.

4. ¿Qué elementos definen a un objeto?

a. Su cardinalidad y su tipo.
b. Sus atributos y sus métodos.
c. La forma en que establece comunicación e intercambia mensajes.
d. Su interfaz y los eventos asociados.

5. ¿Cuál de los siguientes mecanismos permite que el mismo método pueda


invocar en diferentes momentos diferentes métodos dependiendo del tipo
dinámico de la variable usada para hacer la invocación?

a. La abstracción.
b. La herencia.
c. El polimorfismo.
d. La sobrecarga.
6. ¿Se pueden crear objetos de una clase con métodos abstractos?

a. Sí, siempre.
b. No, nunca.
c. Sí, siempre que tengamos el código fuente de la clase.
d. No, ya que no existen los métodos abstractos.

7. Dado el siguiente fragmento de código, indique qué es lo que se imprimiría


por pantalla:

i.nt cont;
for (cont=9; cont>3; cont--)
System.out.pri.nt(cont);
System.out.pri.nt(cont);

a. 998877665544
b. 98765432
c. 99887766554433
d. 9876543

8. ¿Qué es una excepción?:

a. Un objeto que no puede ser instanciado.


b. Un error que lanza un método cuando algo va mal.
c. Un bucle que no finaliza.
d. Un tipo de mecanismo que permite la sobreescritura de métodos.

9. Dadas las siguientes definiciones de clases:

class ClasePadre { ... }


class ClaseHi.jal extends ClasePadre { ... }
class ClaseHi.jaZ extends ClasePadre { ... }

Y las siguientes instanciaciones:

Clase Padre var0 new ClasePadre();


ClaseHi.jal varl new ClaseHi.jal();
ClaseHi.jaZ varZ new ClaseHi.jaZ();
Clase Padre var3 new ClaseHi.jal();
Clase Padre var4 new ClaseHi.jaZ();

¿Cuál de las asignaciones es válida?

a. varO = var1;
b. var2 = (CiaseHija2) var1;
c. var2 = var4;
d. var1 = var2;
1O. ¿Qué mostraría por pantalla el siguiente fragmento de código, asumiendo
que edad es un atributo público tipo entero de la clase Persona?

Persona pedro = new Persona();


Persona juan = new Persona();
pedro.edad = 20;
juan.edad=30;
pedro.edad=juan.edad;
System.out.print(pedro.edad-1);

a. 30
b. 20
c. 29
d. 19

Segunda Parte: Problema

Se desea implementar una aplicación "Mi_música" para la reproducción de


canciones en ordenadores personales, según las apetencias del usuario
seleccionando por nacionalidad, estilo y época. El usuario tendrá organizada su
colección por artistas. Cada artista tiene un nombre, una nacionalidad, y una
discografía. Cada disco tiene un nombre, una fecha y una lista de canciones.
Cada canción, además de su título, tendrá un estilo, que puede ser "Rumba",
"Rock", "Disco" o "Tradicional". Además, cada canción tendrá asociado un
fichero de audio con su ruta de acceso. Los ficheros pueden estar en formato
mp3 o wav. En el caso de los mp3, cada canción tiene un cierto nivel de
compresión que hay que anotar. El sistema debe de cubrir las siguientes
funcionalidades:

1) Dada una nacionalidad, un intervalo de tiempo (año de inicio y año de


fin), y un estilo, generar una lista con cada una de las canciones
incluidas en la colección del usuario que cumplan dichos requisitos.
2) Añadir a la colección un interprete, un disco a un intérprete, o una
canción a un disco de un intérprete.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar "Mi_música" y


añadir: un intérprete con un disco de dos canciones. Los valores de los
atributos serán de libre elección.

3. (4 Puntos) Escriba el código del/de los método(s) implicados en la


funcionalidad 1) e indicar en qué clases se encuentra/n (no es necesario
implementar el método que reproduce cada canción).

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una h oja aparte (máximo 2 caras)

Primera Parte: Test Septiembre 2016

1. Sabiendo que A y B son dos clases bien definidas y dado el siguiente


fragmento de código:

public static void main(String [ ] args) {


A a = new A(); /** línea 1 **/
B b = new B(); /** línea 2 **/
}

¿Cuál de las siguientes afirmaciones es correcta?

a. En las variables a y b tendremos dos objetos de las clases A y B,


respectivamente.
b. El código es incorrecto ya que no podemos instanciar clases mediante
constructores sin parámetros.
c. En las variables A y B tendremos dos instancias de las clases A y B.
d. El código es incorrecto, h abría que modificar las líneas 1 y 2 por:
A a : = A( ) ; y B b : = B ( ) ; respectivamente.

2. Dada las siguientes definiciones de clase:


public class A {
public void a() {
1** implementación 1 **/
}
}
public class B extends A {
public void a() {
1** implementación 2 **/
}
}

¿Cuál de las siguientes afirmaciones es correcta?

a. Las definiciones son incorrectas, ya que una clase h ija no puede


redefinir un método de la clase padre.
b. Las definiciones son correctas y el método a es polimórfico.
c. Las definiciones son correctas siempre que la implementación 1 y 2 sean
iguales.
d. Las definiciones son incorrectas ya que los métodos siempre se h eredan
y, por tanto, no h ay que volver a definirlos en la clase h ija.
3. El acceso a la memoria __ es el más lento de entre los diferentes tipos
de memoria:

a. ROM.
b. RAM.
c. Cach é.
d. Virtual.

4. Indica cuál de las siguientes opciones NO es una de las características de


un sistema operativo de red:

a. Conectar físicamente los equipos y periféricos.


b. Coordinar las funciones de todos los periféricos y equipos.
c. Proporcionar seguridad controlando el acceso a los datos y periféricos.
d. Se instala tanto en los clientes como en los servidores.

5. Dada una clase Persona con un atributo nombre, y dado el siguiente


fragmento de código perteneciente a un método de la clase Persona, ¿qué
imprimiría el siguiente código?

Persona p new Persona();


=

this.nombre 11Juan";
=

System.out.print(p.nombre);

a. "Juan" en cualquier caso.


b. Depende del estado de p.
c. No puede ejecutarse. La tercera expresión es incorrecta.
d. "Juan", pero sólo si la clase en la que se encuentra el código h ereda de
Persona.

6. Cuál de estas afirmaciones es FALSA. En la práctica del presente curso,


cada materia:

a. tiene una cuota asignada.


b. puede requerir medios audiovisuales o no.
c. tiene asignado uno o varios grupos.
d. tiene asignado un profesor.
7. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int i O;=

int j 6;=

while (i < O) {
i++;
j++;
}
System.out.println(j);

a. 7
b. o
c. 6
d. 5

8. Indica cuál de las siguientes afirmaciones es FALSA:

a. Todas las clases en Java tienen una superclase.


b. Para que una clase en Java tenga una superclase h ay que definirla con
extends.
c. Es posible declarar variables polimórficas que pueden contener cualquier
objeto.
d. Los valores de los tipos primitivos en Java como int, boolean y char
son instancias de la clase Object.

9. A partir del siguiente código, indica cuál de las siguientes condiciones


devolvería true:

int [ ] edad = { 1, 2, 3, 4} ;

a. edad. 1==1
b. edad[1]==2
c. edad[1]==1
d. edad. 1==2

1O. Al producirse una excepción cuando se ejecuta el código del try:

a. Deja de ejecutarse, saltando al catch


b. Se ejecuta completamente y después salta al catch .
c. Deja o no de ejecutarse dependiendo de cómo se h aya definido la
excepción.
d. El programa completo se detiene.
Segunda Parte: Problema
Se desea implantar un sistema de préstamo de bicicletas en una ciudad. Para
ello, se requiere una aplicación que permita gestionar toda la información
involucrada en el sistema. En concreto, este sistema requiere de una serie de
estaciones repartidas por la ciudad, identificadas por un número. Dich as
estaciones tienen un número de plazas donde pueden aparearse las bicis y,
para llevar la gestión de las mismas, es necesario conocer cuántas de estas
plazas están libres, o lo que es lo mismo, cuántas bicicletas están aparcadas
en cada una de las estaciones. Cada una de las bicis, de las que dispone el
sistema, se identifica mediante un número y se quiere poder conocer su
estado, pudiendo éste ser: disponible o prestada, además de la estación en la
que está aparcada en un momento dado.

Los socios que se den de alta en el sistema de préstamos, podrán coger en


préstamo dos tipos de bicis, una convencional y una eléctrica. De la última es
necesario almacenar su nivel de carga de la batería. De todos los socios se
necesita almacenar su nombre, sus apellidos, el dni y si están sancionados o
no, por incumplir alguna de las normas.

Para realizar la gestión de los préstamos se requiere almacenar la fech a en la


que se realiza un préstamo (fech a y h ora incluida), así como la estación origen
donde se coge la bici y la estación destino donde se termina el préstamo y la
fech a de finalización (fech a y h ora).

El sistema permite dos tipos de socios, uno denominado vip, que permite
realizar préstamos de los dos tipos de bicis (convencional y eléctricas) y otro
tipo denominado socio convencional, que únicamente permite realizar
préstamos de bicis convencionales, pudiendo el sistema realizar la gestión de
ambos tipos de préstamos (convencionales y eléctricos).

Teniendo en cuenta estos aspectos, el sistema deberá permitir dar de alta y


baja: socios, estaciones y bicis. Además, en relación a los préstamos, el
sistema deberá permitir:


Registrar un nuevo préstamo cuando un socio coge una bici de una
estación, almacenando la fech a y h ora de inicio del préstamo, así como
el socio y la bici que coge, cambiando el estado de la bici a prestada.

Realizar la devolución de un préstamo activo, registrando la fecha, h ora
y estación donde el socio devuelve la bici, modificando, además, el
estado de la bici a disponible.

NOTA: Para las fechas y h ora puede asumir que existe una clase denominada
Date, que permite almacenar tanto h oras, como fech as.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar una nueva bici


convencional, identificada por el número 123, la cual estará disponible e
inicialmente aparcada en la estación identificada con el número 1O. Del
mismo modo, debe escribir el código que permita instanciar un nuevo socio
llamado Pepe Sánch ez, con dni 123456789-J, que sólo puede realizar
préstamos de bicis convencionales. Asumiendo que existe una instancia de
la clase Empresa almacenada en la variable denominada "empresa", añada
el nuevo socio y la nueva bici creadas y registre en la empresa que el nuevo
socio coge en préstamo la nueva bici, el día 5/9/2016 a las 12:00h en la
estación 1O (tenga en cuenta que no se pide implementar el método).

3. (2 Puntos) Escriba la implementación del método del sistema que permite


realizar la devolución de un préstamo activo, registrando la fech a, h ora y
estación donde el socio devuelve la bici, modificando el estado de la misma
a disponible.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos (polimorfismo, h erencia, composición y abstracción) y porqué los h a
utilizado, para solucionar el apartado 1.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras)

Primera Parte: Test

1. Indica cuál de los siguientes tipos de información NO está contenido en el


chip BIOS:

a. Las unidades de disco instaladas en el ordenador.


b. El tipo y cantidad de memoria RAM disponible en el ordenador.
c. El sistema o sistemas operativos instalados en el ordenador.
d. Las características del procesador.

2. Indica qué arquitectura de red es la que se emplea en Internet:

a. OSI
b. TCP-IP
c. POP3
d. http

3. Dado el siguiente fragmento de código:

public class A { 1** línea 1 ** 1


private int a; 1** línea 2 ** 1

public A(int x) { 1** línea 3 ** 1


this.a = x; 1** línea 4 ** 1
}
}

¿Cuál de las siguientes afirmaciones es correcta?

a. Después de ejecutar la instrucción A a = new A(3); tendríamos una


instancia de la clase A en la variable a.
b. La definición es incorrecta porque no puede existir un método cuyo
nombre es el mismo que el de la clase.
c. La definición es incorrecta porque la palabra reservada this de la línea
4 sólo se puede utilizar en clases abstractas.
d. Debería modificarse la línea 2 por private int A; para que la
definición fuese correcta.
4. Dado el siguiente fragmento de código:
public class A {

public static void a() { 1** línea 1 **/


}

public static void main(String[] args) {


A.a(); /** línea 2 **/
}
}

¿Cuál de las siguientes afirmaciones es correcta?

a. La definición de la línea 1 es incorrecta, ya que un método no puede


tener la palabra reservada static.
b. La línea 2 es incorrecta ya que no podemos invocar un método de una
clase sin haber instanciado previamente dicha clase.
c. El código es correcto ya que el método a es estático y, por tanto, un
método de clase y se puede invocar sin llamar previamente a la
instrucción new para crear una instancia de la clase.
d. El código es correcto eliminando la palabra static de la línea 1.

5. Teniendo en cuenta que A es una clase bien definida. ¿Cuál de los


siguientes métodos e invocaciones del mismo, imprimiría la siguiente
salida ?

1
22
333
4444

a. La definición:
public static void metodo(int altura) {
for (int n = 1; n <= altura; n++) {
for (int i = O; i < n; i++) {
System.out.print(n);
}
System.out.println("");
}
}
La invocación: A. metodo ( 4) ;

b. La definición:
public static void metodo(int altura) {
for (int n = 2; n <= altura; n++) {
for (int i = O; i < n; i++) {
System.out.print(n);
}
Systemooutoprintln("");
}
}
La invocación: Aometodo ( 4) ;

c. La definición:
pub1ic static void metodo(int altura) {
for (int n = 1; n <= altura; n++) {
for (int i = O; i < n; i++) {
Systemooutoprint(n);
}
Systemooutoprintln("");
}
}
La invocación: Aometodo ( 5) ;

d. La definición:
pub1ic static void metodo(int altura) {
for (int n = 1; n <= altura; n++) {
for (int i = O; i <= n; i++) {
Systemooutoprint(n);
}
Systemooutoprintln("");
}
}
La invocación: Aometodo ( 4) ;

6. Cuál de estas afirmaciones es FALSA. En la práctica del presente


curso, uno de los atributos de la clase Materia es:

a. Cuota.
b. Aula.
c. Medios audiovisuales.
d. Grupos

7. ¿Podría ser correcto el siguiente código?

thisocalculaMinimo(2 ,3,49);
thisocalculaMinimo(4,3);
thisocalculaMinimo(5,3,2 );

a. Sí, por sobrecarga de métodos.


b. Sólo si el método pertenece a una clase abstracta.
c. Sólo si el código se encuentra en el método main.
d. No, dado que se llama al mismo método con diferente número de
parámetros de entrada.
8. Sabiendo que la clase Coche es hija de Vehiculo, y a partir del siguiente
código:

Vehiculo v;
Coche a = new coche();

Indica cuál de las siguientes expresiones NO es correcta en tiempo de


ejecución:

a. v=a;
b. a=v;
c. v=(Coche) a;
d. v=new Coche();

9. Dado el siguiente código:

ArrayList<Persona> lista new ArrayList<Persona>();


Persona p=new Persona();
lista.add(p);
p.nombre="Juan";
¿Se modificaría el valor del campo nombre del objeto introducido en la lista?

a. Únicamente si el código se encuentre dentro del método main().


b. Sí, tomaría el valor "Juan".
c. No se vería afectado el objeto dentro de la lista.
d. No es posible cambiar el valor de un campo de un objeto almacenado en
una lista.

1 O. ¿Pueden capturarse errores de compilación en el propio código mediante


excepciones?
a. Sí, siempre que la excepción se encuentre en el mismo método que el
error.
b. Sí, siempre que la excepción se encuentre en la misma clase que el error.
c. Sí, siempre que la excepción se encuentre en la misma clase que el error
o en una clase hija.
d. No, en ningún caso.
Segunda Parte: Problema

Se desea informatizar una empresa de mudanzas. La empresa tiene varios


equipos de mudanzas que puede cubrir varias ciudades. Una ciudad puede ser
cubierta por varios equipos. En el caso de se trate de una mudanza entre
ciudades, se considera la ciudad de la dirección de origen. De cada equipo se
desea guardar su identificador, las ciudades que cubren, la carga máxima que
el equipo puede transportar y las mudanzas asignadas. Cada mudanza se
identifica por la dirección de origen, de destino, la fecha de la mudanza y la
carga que se desea transportar. En cada momento, una mudanza puede estar
en uno de los tres estados: "registrada", "asignada" o "realizada". La aplicación
deberá permitir:


Almacenar todas las mudanzas que se han gestionado o se están
gestionando.

Añadir un nuevo equipo al sistema.

Registrar una nueva mudanza, mostrando en pantalla los identificadores
de los equipos que cubran la ciudad correspondiente, que su vehículo
acepte la carga de la mudanza y que estén disponibles en ese día.

Asignar una mudanza un equipo. En ese momento la mudanza pasa de
"registrada" a "asignada".

Consultar o actualizar el estado de una mudanza a partir de su
identificador.

Imprimir todas las mudanzas realizadas por un equipo hasta el momento.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 puntos) Partiendo del diseño, realizar las llamadas a métodos


necesarias para instanciar una mudanza, un equipo y la empresa. Añadir el
equipo al sistema, comprobar si el equipo puede aceptar la mudanza y
asignar la mudanza al equipo. Los atributos pueden ser elegidos libremente.

3. (3 Puntos)Escribir el código del método que imprime el estado de una


mudanza dado su identificador.

4. (1 Puntos) La empresa desea extenderse, permitiendo un tipo especial de


mudanza, para objetos frágiles donde no se puede superar un 50% de la
carga máxima del vehículo. Explique qué mecanismo(-s) de la
programación orientada a objetos utilizaría para recoger estos nuevos
requisitos. Justifique su respuesta.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras)
Primera Parte: Test Septiembre 2016
1. La memoria virtual utiliza parte de para permitir que un sistema
operativo saque más provecho del hardware que tiene instalado.

a. La memoria RAM.
b. La memoria ROM.
c. El disco duro.
d. La memoria caché.

2. Dado el siguiente fragmento de código:


public class A {
private int a;

public A(int x) {
this.a x; =

public static void main(String[] args) {


A b new A();
=

}
}

¿Cuál de las siguientes afirmaciones es correcta?

a. En la variable b tendremos una instancia de la clase A.


b. El código es incorrecto. Tendríamos que añadir un número entero como
parámetro en la invocación del constructor. Por ej. A b = new A(3);
c. En la variable b tendremos una instancia del objeto A.
d. La clase A tiene un método llamado a.

3. En la práctica del presente curso, cuál de estos campos no pertenece a la


clase Grupo:

a. Identificador.
b. Horario.
c. Alumnos.
d. Precio.
4. Dado el siguiente fragmento de código:
public class A {

public void a() {


}

public void a(int x) {


}
}

¿Cuál de las siguientes afirmaciones es correcta?

a. El método a es polimórfico.
b. El código es incorrecto porque una clase no puede tener dos métodos
con el mismo identificador.
c. El método a está sobrecargado.
d. El método a está siendo sobreescrito, modificando su cuerpo.

5. Dada una clase Coche con un método getMatricula() para acceder al valor
de un campo matricula, ¿cuál sería el resultado del siguiente fragmento de
código, perteneciente a un método de la clase coche?

Coche e = new Coche(n8928JKS");


System.out.print(this.getMatricula());

a. Imprimir el valor "8928JKS"


b. No hay información suficiente en el código mostrado para saber qué se
imprimiría.
c. No podría imprimirse nada dado que no hay parámetros en la llamada
getMatricula().
d. No podría imprimirse nada dado que el fragmento de código es
incorrecto.

6. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

List<String> lista = new ArrayList<String>();


lista.add("Juan");
lista.add("Pepe");
lista.add("Antonio");
for (String n : lista)
System.out.print(n + " ");

a. Juan Juan Juan


b. Antonio Pepe Juan
c. Juan Pepe Antonio
d. Error, el bucle for está mal escrito.
7. Dada una clase Poligono de la que heredan una clase Rectangulo y
otra Triangulo, y las siguientes declaraciones de variable:

Rectangulo r = new Rectangulo();


Poligono p;

Indica cuál de las siguientes expresiones no daría error en ejecución:

a. Poligono p = r;
b. Triangulo t = (Triangulo) r;
c. Triangulo t = (Triangulo) p;
d. r = ( Poligono) p;

8. Un Arraylist de objetos de una clase determinada permite únicamente:

a. Añadir objetos de esa misma clase.


b. Añadir objetos de esa misma clase y de sus clases hijas.
c. Añadir objetos de esa misma clase y de cualquier clase estática.
d. Añadir objetos de cualquier clase estática.

9. Cuál de estas afirmaciones es FALSA: Estructurar el diseño de un sistema


en clases en vez de en una sola clase:

a. Facilita la reutilización de código.


b. Disminuye la cantidad de código redundante.
c. Facilita la depuración (detección de errores) del sistema.
d. Disminuye el acoplamiento.

1 O. Indica cuál de las siguientes NO son funciones propias de un sistema


operativo:

a. Administración de memoria.
b. Control de concurrencia.
c. Carga en memoria del disco de arranque.
d. Control de ejecución de programas.
Apellidos......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea implementar una aplicación para su uso en una empresa que trabaja
en el campo de la robótica educativa. Esta empresa necesita configurar robots
que contengan diferente número y tipo de sensores para su posterior
comercialización.

Todo sensor tendrá un fabricante y un modelo, y además podrá ser de los


siguientes tipos: sensores LDR, que mayoritariamente se aplican para detectar
si es de día o de noche y encender el sistema de iluminación del robot,
pudiendo tener dos niveles de sensibilidad (baja y alta), y pudiéndose instalar
únicamente uno por robot; sensores de presión, que se utilizan como
medidores de fuerza; sensores de ultrasonido, que permiten calcular la
distancia entre un robot y un objeto, y que tienen un valor de alcance máximo
expresado en metros; sensores de infrarrojos, empleados también para el
cálculo de distancias y con un alcance máximo expresado en centímetros;
sensores CCD, para la realización de capturas de imágenes y caracterizados
por tener una resolución máxima en puntos por pulgada (ppp); y, por último,
sensores de detección de obstáculos, que podrán ser de sensibilidad baja,
media o alta.

Cada robot tiene un identificador único, una descripción, y puede configurarse


añadiendo sensores a demanda, pero cumpliéndose la restricción de que solo
se puede incluir un sensor L DR por robot y que si se instala un sensor de
ultrasonido no podrá instalarse otro de infrarrojos, y viceversa. Además, podrán
configurarse pedidos en los que se incluya más de un robot, que podrán tener o
no una misma configuración. Un pedido deberá contener una dirección de
destino y el organismo o empresa que lo encarga.

A la hora de permitir la configuración del robot, esta aplicación informática


deberá permitir las siguientes funcionalidades:

a) Añadir y eliminar un nuevo sensor a un robot siempre que sea posible,


dependiendo de los que ya tenga instalados.
b) Ver por pantalla la información de la configuración final de robot,
indicando los tipos de sensores instalados y los valores característicos
de cada uno de ellos.
e) Indicar el tipo de sensores que aún se pueden añadir a un robot.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (3,5 Puntos) Dibujar un esquema con las clases necesarias para realizar
esta aplicación, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos. Debe considerarse que el tipo de
sensores a montar en un robot puede aumentar y que el diseño debe estar
preparado para ello; por tanto, no deberían de tener que modificarse las
clases ya existentes cuando se considere un nuevo tipo de sensor.

2. (2 Puntos) Escribir el código necesario para crear un nuevo robot


humanoide y añadirle los siguientes sensores: 6 sensores de presión para
los dedos (tiene dos manos de tres dedos), un sensor L DR de sensibilidad
alta, un sensor de infrarrojos con alcance máximo de 90 cm y un sensor
eco con resolución de 300 ppp.

3. (3 Puntos) Escriba la implementación del método (incluyendo su cabecera)


que permite añadir un sensor a un robot.

4. (1,5 Puntos) Explique razonadamente qué mecanismo(-s) de la


programación orientada a objetos están involucrados en el método
expresado en la funcionalidad a) y qué habría que modificar en el diseño
para considerarse un nuevo tipo de sensor.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras)

Primera Parte: Test

1. El acceso a la memoria __ es el más rápido de entre los diferentes tipos


de memoria.

a. ROM
b. Caché
c. RAM
d. Virtual

2. Sabiendo que A y B son dos clases bien definidas y dado el siguiente


fragmento de código:

public static void main(String[] args) {


A a = new A(); /** línea 1 **/
B b = new B(a); /** línea 2 **/
}

¿Cuál de las siguientes afirmaciones es correcta?

a. El código es incorrecto, habría que modificar la línea 2 por:


B b = new B(); .
b. El código es correcto siempre queB sea una clase abstracta.
c. El código es incorrecto ya que una clase no puede tener un constructor
que tenga como parámetro un objeto.
d. El código es correcto siempre que la clase B tenga definido un
constructor que reciba como parámetro un objeto de la clase A, y la
clase A acepte una llamada al constructor sin parámetros.

3. ¿Quién lleva a cabo la labor de gestión de los recursos de hardware?

a. LaBIOS.
b. La Unidad Central de Procesos.
c. El Sistema Operativo.
d. El bus de memoria.
4. Dado el siguiente código:

pub1ic c1ass A {
private void a() {
}
}
¿Cuál de las siguientes afirmaciones es correcta?

a. El código es incorrecto ya que un método nunca puede ser definido


como privado.
b. El código es correcto aunque no tenga implementación el método a.
c. El código es correcto si se añade una implementación al método a,
donde haya una instrucción return para devolver algún valor.
d. El código es incorrecto porque todos los métodos de clase, como es el
método a, deben devolver algún valor.

5. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int j = 1;
for (int i = -13; i <= -10; i++) {
j++;
}
System.out.println(j);

a. 4
b. 3
c. 5
d. -13

6. En la práctica del presente curso, se emite una factura independiente:

a. Para cada grupo.


b. Para cada alumno.
c. Para cada alumno y materia.
d. Para cada alumno y grupo.

7. Si se inicializa el campo edad en el constructor de una clase Persona con


el valor 18, el campo tomara dicho valor:

a. al instanciarse cualquier objeto de la clase.


b. al instanciarse cualquier objeto de la clase y de todas las clases hijas.
c. al instanciarse cualquier objeto de la clase o de su paquete.
d. No es posible inicializar campos en el constructor.

8. Un Arraylist de objetos de una clase determinada permite únicamente:

a. Añadir objetos de esa misma clase.


b. Añadir objetos de esa misma clase y de sus clases hijas.
c. Añadir objetos de esa misma clase y de cualquier clase estática.
d. Añadir objetos de cualquier clase estática.
9. A partir del siguiente código, indica cuál de las siguiente opciones es
correcta:

Ob ject[ ] lista = new Ob ject[4];

a. lista tiene un número fijo de elementos únicamente de la clase Object.


b. lista es una colección con un número no fijo de elementos únicamente
de la clase Object.
c. lista tiene un número fijo de elementos, pudiendo ser de cualquier
clase.
d. lista es una colección con un número no fijo de elementos, pudiendo
ser cualquier clase.

1O. A partir de la siguiente declaración indica cuál de las siguientes


afirmaciones es correcta:

ArrayList<int> miLista = new ArrayList<int>();

a. En la variable miLista se podrán almacenar tanto objetos de tipo


lnteger como variables del tipo primitivo int.
b. En la variable miLista se podrán almacenar únicamente objetos de tipo
lnteger.
c. En la variable miLista se podrán almacenar únicamente variables del
tipo primitivo int.
d. No es posible definir un Arraylist de tipos primitivos.
Segunda Parte: Problema

Se desea implementar una aplicación para su uso en una empresa que trabaja
en el ámbito del ferrocarril. Esta empresa necesita configurar rutas y asignar
convoyes de trenes en función de las necesidades del servicio ferroviario, y
para ello necesita una aplicación informática que le permita automatizar este
proceso.

Un convoy está formado por un conjunto de vagones tirados por una máquina
de cabecera (también llamada locomotora), que a su vez es un tipo especial de
vagón y que, por tanto, puede formar parte del convoy sin ejercer su función de
arrastre. Dependiendo de la potencia de esta locomotora el número de vagones
arrastrados en el convoy variará, pudiendo ser de un máximo de 1O vagones en
el caso de locomotoras "grandes" (con potencia de 10. 000 KW), 7 vagones en
locomotoras "medias" (con potencia de 7.000 KW) y de 5 en el caso de ser
arrastrados por locomotoras "pequeñas" (con potencia de 5.000 KW). Además,
hay otros tipos especiales de vagones, los correspondientes al coche-bar, los
vagones de transporte de mercancía y los vagones de pasajeros. Cada convoy
se asigna a una ruta que tendrá una estación de salida y otra de llegada.
A la hora de permitir la configuración de un convoy, a partir de lo mencionado
anteriormente, esta aplicación informática deberá permitir las siguientes
funcionalidades:

a) Añadir un vagón a un convoy siempre que sea posible, dependiendo del


tipo de la máquina de cabecera que se tenga.
b) Ver por pantalla la información de la configuración final del convoy,
indicando los tipos de vagones que lo constituyen y especificando el tipo
de locomotora empleada.
e) Indicar el número de vagones que aún se pueden añadir a un convoy.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar esta
aplicación, indicando los atributos y métodos que tiene cada una de ellas
(sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para crear una nueva ruta y añadir
un convoy con 5 vagones tirado por una locomotora pequeña. Se deja a la
elección del alumno la selección de los tipos de vagón y las estaciones de
salida y llegada.

3. (2.5 Puntos) Escriba la implementación del método (incluyendo la cabecera


del mismo) que permite añadir un vagón a un convoy.

4. (1,5 Puntos) Explique razonadamente qué mecanismo(-s) de la


programación orientada a objetos están involucrados en el método
expresado en la funcionalidad a).

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras)

Primera Parte: Test

1. Un sistema de computación está formado por:

a. El hardware, el software, los programas y los periféricos.


b. El hardware, el software, los datos y los usuarios.
c. El disco duro, la memoria, la CPU y los usuarios.
d. Los periféricos, el software, los datos y los administradores.

2 . En el enunciado de la práctica de este año se ofrecían dos alternativas


para extender la funcionalidad de la aplicación en relación a:

a. El modelado de la clase Pedido.


b. El modo de aplicación del beneficio sobre el precio de fábrica de un
sensor.
c. La aplicación de restricciones a la hora de permitir incluir sensores a un
robot.
d. El modelado de la clase Sensor.

3. Indique cuál de las siguientes expresiones es correcta.


______ define/n a un objeto.

a. Sus atributos y sus métodos.


b. Su cardinalidad y sus eventos asociados.
c. La forma en la que intercambia sus mensajes.
d. Su interfaz.

4. Cuando se instancia una clase se crea un objeto:


a. Con todos sus campos vacíos.
b. Ejecutándose uno de sus constructores.
c. El valor de sus campos se determina por los parámetros de entrada del
constructor.
d. Siempre con los mismos valores en sus campos

5. La finalidad de los métodos de acceso get () en una clase Java es:

a. modificar los atributos de una clase.


b. redefinir el tipo de los atributos de una clase.
c. permitir que las clases hijas de una clase hereden los atributos.
d. dar información a otras clases sobre el estado del objeto.
6. Indique desde qué clases se puede acceder a un método declarado con el
modfficadorprotected:

a. Sólo desde la propia clase.


b. Sólo desde la propia clase, las clases dentro del mismo paquete y los
descendientes de la propia clase.
c. Sólo las clases dentro del mismo paquete.
d. Sólo los descendientes de la propia clase.

7 . Un método de las clase Contabilidad tiene como parámetro de entrada


un objeto de tipo Factura. ¿Podría invocarse el método introduciendo
como parámetro un objeto de una clase hija de Factura?

a. Sí, siempre que se cree una clase hija de Cuentas.


b. Sí, siempre que la clase Cuentas sea abstracta.
c. Sí, en cualquier caso.
d. Sí, siempre que no haya sobrecarga de métodos.

8. Para capturar una excepción utilizaremos:

a. Las sentencias try y throws.


b. Las sentencias try y cate h.
c. Las sentencias try y finally.
d. Las sentencias try y static.

9. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int[] m = new int[lO];


for (int i = O; i < 20; i++)
m[i] = i;
for (int i = O; i < m.length; i = i+2)
System.out.print(m[i] + " ");

a. O 2 4 6 8
b. 13 579
c. 1 3 5 7 9 11
d. Nada. Se lanzaría una excepción.

1O. Dado el array:

int v[] = {1, 2, 3, 4, 5, 6};

Indique cuál de las siguientes afirmaciones es correcta.

a. Invocando la siguiente instrucción: v[2 J; obtendremos un 2


b. Invocando la siguiente instrucción: v[2 J; obtendremos un 3
c. El tamaño máximo del array es de 5, pero se puede ampliar en ejecución.
d. El tamaño máximo del array es de 6, pero se puede ampliar en ejecución.

Segunda Parte: Problema

Se desea implementar una aplicación para su uso dentro de un estudio de


grabación musical. Esta aplicación deberá permitir al técnico de sonido del
estudio crear un proyecto musical formado por canciones para un artista que lo
contrate. Las canciones se identificarán con un nombre y tendrán una duración
y un conjunto de pistas. Cada pista tendrá un identificador único, el instrumento
que suena en esa pista, y la ruta al archivo de audio donde se almacena.

Por simplicidad, el conjunto de instrumentos que se consideran es el siguiente:

• Cuerda, pudiendo ser guitarras o bajos. En el caso de guitarras se tiene


el número de pastillas y si es activo o pasivo, y en el caso de los bajos,
el número de cuerdas y de trastes, así como si también activo o pasivo.
• Viento, pudiendo ser flautas o saxos. En el caso de las flautas, éstas
pueden ser traveseras o piccolo. En el caso de los saxos: soprano, alto,
tenor o bajo.

Además de permitir el manejo de canciones, esta aplicación deberá:

a) Mostrar por pantalla toda la información de un proyecto, con las


características de cada una de las canciones e instrumentos grabados
en cada pista.
b) Permitir silenciar una pista, es decir, hacer que ésta no suene en la
mezcla final de la canción.

Antes de comenzar a responder, lea con atención todos los apartados.

Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar esta
aplicación, indicando los atributos y métodos que tiene cada una de ellas
(sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar una nueva canción.


Se deja a la elección del alumno el número de pistas y la selección y
características de los instrumentos, pero siempre con un mínimo de 4 pistas.

3. (2,5 Puntos) Escriba la implementación del método (incluyendo la


cabecera) que permite silenciar una pista en una canción, dado el
identificador de la pista.

4. (1,5 Puntos) Explique razonadamente qué mecanismo(-s) de la


programación orientada a objetos está(-n) involucrados en el método
expresado en el apartado 3.

SOLUCIÓN

1.



2.

// Instanciación de una nueva canción

// Instanciamos 4 instrumentos
guitarra = new Guitarra(2);
bajo = new Bajo(2,24);
saxo1 = new Saxo(“ALTO”);
saxo2 = new Saxo(“TENOR”);

// Instanciamos 4 pistas para los instrumentos anteriores


pista1 = new Pista(1,guitarra,”/home/alumno/Music/guitar1.mp3”);
pista2 = new Pista(2,bajo,”/home/alumno/Music/bajo1.mp3”);
pista3 = new Pista(3,saxo1,”/home/alumno/Music/saxo1.mp3”);
pista4 = new Pista(4,saxo2,”/home/alumno/Music/saxo2.mp3”);

// Instanciamos una canción y añadimos las pistas creadas


cancion1 = new Cancion(“miCancion”);
cancion1.addPista(pista1);
cancion1.addPista(pista2);
cancion1.addPista(pista3);
cancion1.addPista(pista4);


3. Deberá haberse definido un método en la clase Cancion que tome por parámetro
el id de una pista, recorra la lista de pistas de la canción, seleccione la pista
correspondiente, y modifique su parámetro/campo mute a true.

public void SilenciarPista(int id) {

Iterator<Pista> it = this.pistas.iterator();
while(it.hasNext()){
Pista p = it.next();
if (p.mismaPista(id) {
p.activarMute();
}

}
}

4. El mecanismo involucrado es la composición, dado que el método del apartado 3
debe recorrer una lista de objetos Pista dentro de un objeto de una clase Cancion.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras).

Primera Parte: Test


1. Cuál de las siguientes afirmaciones es correcta. Cualquier sistema
operativo:
a. opera sobre una plataforma hardware específica.
b. puede modificar los datos de la memoria ROM.
c. es responsable de la creación y destrucción de procesos.
d. es responsable de controlar la velocidad del reloj de la CPU.

2. Indica en qué etapa de la práctica se pedía modelar la clase Cliente:


a. En ninguna etapa era necesario el modelado de una clase Cliente.
b. Etapa 1.
c. Etapa 2 .
d. Etapa 3.

3. Cuál de estas afirmaciones es FALSA. Un atributo o campo perteneciente a


una clase puede definirse:
a. como un conjunto de atributos de la misma clase.
b. como un número entero.
c. como un objeto de la misma clase.
d. como un objeto de otra clase.

4 . Cuando se crea una clase, ¿debe implementarse siempre al menos un


constructor?
a. Sí, de hecho deben implementarse dos: uno con parámetros y otro sin
ellos.
b. Sí, porque si no existe constructor no pueden inicializarse los objetos.
c. No, siempre es posible instanciar un objeto sin ejecutar ningún
constructor.
d. No, es posible crear clases que no tengan ningún constructor
implementado.

5. Indique cuál de las siguientes afirmaciones es correcta, sabiendo que el


método m () es un método abstracto:
a. podemos crear objetos de la clase donde está definido ese método.
b. nunca podremos crear objetos de la clase donde está definido ese
método.
c. podemos crear objetos de la clase donde está definido ese método sólo
si invocamos su constructor.
d. en java no existen los métodos abstractos.
6. ¿Pueden definirse dos métodos con el mismo nombre en una clase?
a. Sí, en cualquier caso.
b. No. Es necesario asignarles nombres distintos.
c. Sí, siempre que no tengan los mismos parámetros de entrada.
d. Depende de si se trata de una clase abstracta o no.

7. Indique cuál de las siguientes afirmaciones en Java es FALSA:


a. una clase padre es una clase a partir de la cual se crea otra clase
mediante el mecanismo de herencia.
b. una clase hija es una clase creada a partir de otra clase mediante el
mecanismo de herencia.
c. una clase padre asume los atributos y métodos del conjunto de sus
subclases.
d. una clase hija hereda los atributos y métodos de una superclase.

8. ¿Qué podemos decir del siguiente conjunto de instrucciones?

int numerador, denominador;


float division;
try {
division = numerador 1 denominador; //línea 4
}
catch (ArithmeticException ex) {
division = O;
System.out.println( "Error " + ex.getMessage());
}

a. Es erróneo debido a que nunca se va a producir una excepción en esas


instrucciones.
b. Es correcto, cuando se produzca una excepción en la instrucción de la
línea 4 la variable división tendrá el valor O y se mostrará un mensaje por
la pantalla.
c. Es correcto, cuando se produzca una excepción en la instrucción de la
línea 4 , la variable división tendrá el valor de la división del numerador y
el denominador.
d. Es errónea, ya que faltaría la parte finally del bloque para capturar
excepciones.

9. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int[] m = new int[S];


for (int i = O; i < m.length; i++)
m[i] = i;
int i = O;
while (m[O] > 1) {
System.out.print(m[i]);
i = i + 1;
m[i] = i;
}
System.out.println(m[2]);
a. O12 34
b. Error, saltaría una excepción en el bucle while
c. 1
d. 2

1O. Suponiendo una clase Alumno con el atributo público nombre, de tipo
string, ¿Qué se imprime al ejecutar el siguiente fragmento de código?

ArrayList<String> pList = new ArrayList<String>();


String p;
p = " Juan";
pList.add(p);
p = "Pepe";
pList.add(p);
System.out.print(pList.get(O));
System.out.print(pList.get(l));

a. "Pepe" y "Pepe".
b. "Juan", y "Pepe".
c. "Juan".
d. "Pepe".
Segunda Parte: Problema
En los hoteles es común pedir a recepción que llamen a la habitación a una
determinada hora, a modo de despertador. Por otro lado, sería interesante que
un cliente pudiera también fijar la hora a partir de la cual el servicio debe pasar
a limpiar la habitación o pedir que no se pase un determinado día.

Se desea implementar una aplicación para la gestión de estos dos tipos de


avisos. Deberá guardarse el número de habitación, el cliente, y el día y la hora
a la que éste desea que se le avise, en el caso de avisos de llamada telefónica;
o la hora a partir de la cual pueden pasar a limpiar la habitación, en el otro caso
(también puede indicar que no quiere que pasen a limpiar la habitación). Del
cliente habrá que almacenar el DNI, su nombre y apellidos, así como el día y
hora de entrada y salida del hotel, de forma que el sistema no permita gestionar
avisos fuera del periodo de estancia del cliente en el hotel. El sistema también
deberá registrar el empleado que recoge e introduce el aviso en el sistema.

Además de gestionar los avisos, esta aplicación deberá permitir:

a) Mostrar por pantalla los avisos de llamada telefónica registrados en el


sistema entre dos fechas (considerando el día y la hora) dadas.
b) Mostrar por pantalla los números de habitaciones que el servicio debe
pasar a limpiar en un día y a partir de una hora dada.
e) Mostrar por pantalla los números de habitaciones que el servicio no debe
pasar a limpiar un determinado día.
d) Modificar el aviso de un cliente, ya sea de un tipo u otro.
e) Anular todos los avisos registrados para un determinado cliente en caso
de que éste abandone el hotel.

NOTA: Se asume una clase Dia que dispone de un método compareTo(Dia


d) que devuelve valores -1, o ó 1 dependiendo de si la fecha es anterior, igual
o posterior a la fecha que se da como parámetro. Análogamente, se dispone a
su vez de una clase Hora con un método compareTo(Hora h) que devuelve
valores -1, o ó 1 dependiendo de si la hora es anterior, igual o posterior a la
que se pasa como parámetro.

Antes de comenzar a responder, lea con atención todos los apartados.

Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar esta
aplicación, indicando los atributos y métodos que tiene cada una de ellas
(sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar un aviso de cada


tipo. Se deja a la elección del alumno los detalles relativos a las fechas y a
los datos del empleado y del usuario que solicita el servicio.
3. (3 Puntos) Escriba la implementación del método (incluyendo la cabecera)
que permite anular todos los avisos registrados para un determinado cliente
y explique razonadamente qué mecanismo(-s) de la programación orientada
a objetos está(-n) involucrados en el método.

4. (1 punto) Indique cómo modificaría el diseño de la aplicación para incluir


avisos de averías, pudiendo ser éstos de electricidad, fontanería, persianas
u otros. Indique qué mecanismo(-s) de la programación orientada a objetos
estaría(-n) involucrados.

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. La velocidad de un equipo o computador personal viene determinada por:

a. El software de usuario.
b. La cantidad de accesos a memoria por segundo.
c. El diseño del sistema operativo.
d. El tipo de puerto de entrada y salida.

2 . Indique cuál de estas afirmaciones es correcta. En la práctica del presente


curso, los tipos de sensor incompatibles a la hora de ser incluidos en un
robot son:

a. Sensores LDR y CCD.


b. Sensores de presión y de detección de obstáculos.
c. Sensores de infrarrojos y ultrasonido.
d. Sensores de sensibilidad alta y baja.

3. -----
es instanciar dicha clase.

a. Heredar un objeto a partir de una clase.


b. Crear un objeto a partir de una clase.
c. Eliminar un objeto de una clase.
d. Relacionar una clase con otra.

4. ¿Qué elementos definen el estado de un objeto? :

a. Los valores de sus atributos.


b. La definición de sus atributos.
c. Los métodos.
d. Su interfaz.

5. Indique cuál de las siguientes afirmaciones es correcta. Una variable local. .

a. . . es la que se define fuera de los métodos y no es visible desde otras


clases.
b. . . es la que se define fuera de los métodos y es visible desde otras
clases.
c. . . es la que se define en la signatura de un método.
d. . . es la que se define dentro de un método.
6. Dada la siguiente definición de la clase Camion:

public class Camion {


private int matricula;
public Camion (int matricula)
this.matricula = matricula;

public int getMatricula() {


return this.matricula;

¿Cuál sería la forma correcta de acceder a la matrícula de un objeto a de la


clase Camion desde otra clase?

a. int X = Camion.getMatricula(a);
b. int X = a.getMatricula();
c. int a = Camion.matricula;
d. int X = a.getMatricula;

7. Se ha definido la clase PERSONA, de la cual heredan las clases HOMBRE y


MUJER. Se definen las variables p, h y m de tipo PERSONA, HOMBRE y MUJER,
respectivamente. ¿Qué se puede decir acerca de la corrección de las
siguientes asignaciones? :

p h;
p m;
h m;

a. Son todas correctas.


b. La segunda es errónea, las otras dos correctas.
c. La primera y la segunda son correctas, la tercera errónea.
d. Depende de los objetos almacenados en las variables en tiempo de
ejecución.

8. Indica cuál de las siguientes afirmaciones es FALSA:

a. Las excepciones en Java son clases que heredan de la clase Exception,


pudiendo además programar nuestras propias excepciones.
b. Una excepción lanzada desde un método public tiene precedencia
sobre las lanzadas desde métodos private o protected.
c. Un método que lanza una excepción debe declarar que lo hace
mediante la claúsula throws.
d. Un método puede lanzar más de una excepción, pero debe declarar que
lo hace enumerándolas en la claúsula throws.
9. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int[] m = new int[S];


for (int i = O; i < m.length; i++)
m[i] = i;
for (int i = m.length - 1; i < = O; l i--)
m[i] = i;
System.out.println(m[2]);

a. O12 34
b. 432 1o
c. 1
d. 2

1O. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int j [] = {1, 2, 3, 4, 5, 6};


System.out.print(j [1]);

a. 1.
b. 2.
c. 3.
d. El código es incorrecto.
Segunda Parte: Problema

Se desea implementar una aplicación que permita gestionar la limpieza de


cristales de edificios. La empresa dispone de un conjunto de equipos de
limpieza de los que se conoce su identificador y el conjunto de días ya
reservados para ese equipo. Un servicio de limpieza tiene asignado un
identificador, un equipo, y está asociado a un edificio, del que es necesario
conocer la dirección, número de plantas y área acristalada por planta. Hay dos
tipos de servicios de limpieza: el estandar y el especializado. En ambos casos,
el cálculo de presupuesto depende del área total acristalada, pero el coste se
calcula de distinta forma. Además, en el caso del servicio especializado es
necesario anotar el nombre del responsable de seguridad laboral durante el
servicio realizado (este responsable no pertenece al equipo).

El sistema debe cubrir las siguientes funcionalidades:

1. Añadir un nuevo servicio al sistema.


2 . Calcular el presupuesto de limpieza de un servicio dado su identificador.
3. Asignar un equipo de limpieza a un servicio dados sus respectivos
identificadores.
4 . Encontrar los equipos de limpieza que tengan libre un cierto día.
5. Imprimir en pantalla los datos relativos a los servicios de limpieza
realizados en una dirección, incluyendo: Identificador del servicio,
identificador del equipo, y en su caso, nombre del responsable de
seguridad.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Asumiendo que el sistema está ya implementado, escribir el


código necesario para instanciar el sistema gestor, un equipo especialista,
un edificio, un servicio de limpieza para ese edificio, añadirlos al sistema, y
buscar los servicios asociados a una cierta dirección. Elegir los valores de
campos libremente. IMPORTANTE: se pide instanciar objetos y llamar a
métodos, no implementar métodos.

3. (2 Puntos) Escriba la implementación del método con el bucle que recorre


los equipos de limpieza para la búsqueda en la funcionalidad 4 . Describir el
comportamiento de los métodos a los que éste llame y en qué clase se
encuentran.

4. (2 Puntos) Extender el esquema para incluir un nuevo tipo de servicio de


limpieza para edificios singulares que requieran varios equipos de limpieza.
Describir los nuevos atributos o campos y el comportamiento de los nuevos
métodos.
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras).

Primera Parte: Test


1. El/La se expresa en términos de la frecuencia del reloj de
la placa madre.

a. La capacidad de almacenamiento.
b. El tamaño y tipo de monitor.
c. La velocidad del equipo.
d. Los tipos de las tarjetas gráficas y de audio.

2. Indique cuál de estas afirmaciones es correcta:
En la práctica de este año, entre las clases Robot y Sensor se establecían
los siguientes mecanismos de la Programación Orientada a Objetos:

a. Composición y polimorfismo.
b. Herencia y composición.
c. Herencia.
d. Composición.

3. ¿Qué significa instanciar una clase?

a.
Duplicar una clase.
b.
Crear un objeto a partir de una clase.
c.
Eliminar una clase.
d.
Relacionar dos clases entre sí.

4. Indique cuál de las siguientes instrucciones permiten instanciar un objeto
de una clase A:

a. A a = new A();
b. a.new();
c. A = a new A();
d. A = new a();

5. Los parámetros de entrada de un método:



a. Son siempre atributos o campos de la propia clase.
b. Pueden ser objetos de cualquier clase.
c. Pueden ser bien enteros o bien de tipo String.
d. Son siempre atributos o campos de la propia clase o de su clase padre.




6. Indica cuál de las siguientes afirmaciones es correcta en relación al
mecanismo de sobreescritura de métodos:

a. Un método Java no puede reescribirse salvo que sea definido como
void.
b. Al sobreescribir un método en Java se ejecuta la definición más baja en
la jerarquía de herencia respecto al objeto al que pertenece el método.
c. Un método en Java solo puede reescribirse si ha sido definido como
final.
d. Al sobreescribir un método en Java se ejecuta la definición más alta en
la jerarquía de herencia respecto al objeto al que pertenece el método.

7. A partir del siguiente código Java indique cuál de las siguientes


afirmaciones es correcta:

public class Persona {


private String nombre;
protected void setNombre (String nombre) {

}
}

public class Profesor extends Persona {


public Profesor () {
super.nombre = “Markus”;
}
}

a. Las definiciones anteriores no son correctas ya que no es posible


acceder a un atributo de tipo private desde una subclase.
b. Las definiciones anteriores no son correctas ya que no es posible
declarar un método como protected en una superclase.
c. Al crear un objeto de la clase Profesor tendrá un atributo nombre con
valor Markus.
d. Para acceder a un atributo definido como private en una superclase
no es necesaria la palabra super.

8. Las excepciones en JAVA son un mecanismo para manejar:

a. errores de compilación en tiempo de ejecución.


b. problemas en tiempo de ejecución de códigos que han compilado
correctamente.
c. fallos en el sistema operativo.
d. fallos en tiempo de compilación.
9. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

for (int i=0; i < 4; i++){


for (int j=i; j > 0; j--){
System.out.print(j + " ");
}
}

a. 0102103210
b. 010210
c. 1213214321
d. 121321

10. Dada la siguiente instrucción:

ArrayList<Integer> lista = new ArrayList<Integer>(3);

Indique cuál de las siguientes afirmaciones es correcta.

a. En la variable lista únicamente podemos almacenar 3 enteros.


b. En la variable lista podemos almacenar un número indeterminado de
enteros.
c. En la variable lista tendremos almacenado un único entero que será el 3.
d. La instanciación es errónea, ya que no se puede inicializar el tamaño de
un ArrayList.
Segunda Parte: Problema

Se desea implementar una aplicación que permita realizar la gestión de perfiles


de investigadores. En concreto se desea almacenar su nombre, apellido,
institución en la que trabajan y email. También se necesita guardar el puesto
que desempeña, pudiendo ser éste: ayudante, titular o catedrático. Además, se
desea guardar una lista de palabras claves que definan la investigación de
cada autor, y también un conjunto de publicaciones. Cada publicación está
caracterizada por tener un título, el año en el que se publica, y la lista de
autores (investigadores). Se desean distinguir dos tipos de publicaciones: los
artículos en revista, que requieren almacenar el nombre de la revista, así como
el número y el volumen. Por otro lado, están los artículos de congreso, que
también son publicaciones de las que únicamente se necesita almacenar el
nombre del congreso. Para todas las publicaciones se quiere poder imprimir
por pantalla su información, siendo ésta diferente dependiendo del tipo de
publicación que sea.

El sistema deberá permitir añadir y eliminar investigadores, así como añadir


una publicación a un investigador existente. Además de lo mencionado
anteriormente, la aplicación deberá permitir:


Mostrar por pantalla todas las publicaciones de un investigador, a partir
de su nombre, apellido e institución.

Mostrar por pantalla todos los artículos de revista de un investigador, a
partir de su nombre, apellido e institución.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar un nuevo


investigador llamado José López, que ocupa el puesto de ayudante en la
UNED, cuyo email es jlopez@uned. es. Sus líneas de investigación están
descritas por las palabras clave: "procesamiento de texto", "recuperación de
información" y "aprendizaje automático". Realizar las invocaciones
necesarias para añadir este investigador a la aplicación, asumiendo que
existe una instancia de la misma almacenada en la variable
"appGestionlnvestigadores". A continuación, el investigador José López ha
publicado un artículo titulado "Nuevo mecanismo para la extracción de
información" en el congreso: "Congreso de la Sociedad Española del
Procesamiento del Lenguaje Natural" en este año 2017, siendo él el único
autor. Cree un objeto que represente estos datos y añádalo a la misma
aplicación como una publicación de dicho investigador. Por último, realice
las invocaciones necesarias para imprimir por pantalla todas las
publicaciones de este investigador. Tenga en cuenta que no se pide
implementar el método.
3. (2 Puntos) Escriba la implementación del método del sistema que imprime
(por pantalla) todos los artículos de revista de un investigador concreto.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos utilizaría y por qué, para:
i) recoger el requisito que nos permite imprimir por pantalla la
información particular de cada tipo de publicación y;
ii) ampliar la funcionalidad para añadir un nuevo tipo de publicación
que represente los libros publicados por un investigador, de los
cuales se quiere almacenar tu editorial, aparte del título, el año de
publicación y la lista de autores.

Para la nota del examen, el test vale el 20% y el problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte.

Primera Parte: Test

1. Los buses de control, ¿qué función realizan?:

a. Controlan qué instrucción se carga en la Unidad de Control para ser


ejecutada.
b. Comunican los periféricos con el procesador (CPU).
c. Llevan los datos de la RAM al procesador.
d. Llevan los datos, que han sido procesados por la CPU, de la RAM al
disco duro.

2. Indique cuál de las siguientes opciones representa una instancia correcta de


un objeto:

ao Animal a new Animal ();


=

bo Animal =new Animal (a);


eo Animal a new (Animal);
=

do Animal a new Animal ();


==

3. ¿Podemos definir un método de una clase de manera que éste no devuelva


ningún resultado?

a. No, todos los métodos de una clase deben devolver algún resultado.
b. Sí, utilizando la palabra reservada static para definir el método.
c. Sí, utilizando la palabra reservada void para definir el método.
d. No, todos los métodos de una clase deben devolver algún resultado, o
en su defecto modificar algún objeto.

4. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int i O;
=

int j 5;
=

while (i > j) {
Systemooutoprint (i);
i i + 1;
=

j j= 1;
-

}
Systemooutoprint (i + j);
a. O 1 2 5
b. o 1 2
c. No se imprime nada por pantalla porque se entra en un bucle infinito.
d. 5

5. ¿Para qué se utiliza la palabra reservada try?

a. Para devolver el valor de un método.


b. Para lanzar una excepción.
c. Para capturar una excepción.
d. Para invocar un método de clase.

6. Dadas las siguientes clases:

public class A {
public void escribir(String a) {
System.out.print(a);
}
}

public class B extends A {


public void escribir(String a) {
System.out.println(nEl valor es: n + a);
}
}

¿Qué devolvería el siguiente código?:

A a new B();
=

a.escribir (nHola");

a. Hola
b. No devolvería nada puesto que no podemos asignar un objeto de
clase A en una variable del tipo B.
e . El valor es: Hola

d. No devolvería nada puesto que se produciría un error ya que no se


pueden sumar dos Strings.

7. Indica cuál de las siguientes afirmaciones es correcta.

En la práctica de este año había:

a. Diferentes clases de sensores y de robots.


b. Diferentes clases de sensores y de clientes.
c. Diferentes clases de robots y de pedidos.
d. Diferentes clases de robots y de clientes.
8. ¿Es correcta la siguiente sentencia?

int i = -9;
System.out.println("l" + i + "1 es " + Math.abs(i));

a. No es correcta porque no se puede invocar un método de la clase


Math sin haberse instanciado previamente un objeto de esa clase.
b. Es correcta porque el método abs ( ) de la clase Math es estático y
no requiere que se instancie ningún objeto.
c. No es correcta porque no se pueden concatenar variables de tipo
String como entrada al método println ().
d. No es correcta porque una variable de tipo int no puede tomar un
valor negativo.

9. ¿Qué imprimiría el siguiente código?

int[ ] edad ={1,2,3,4,5,7,9};


System.out.println(edad[4+2]-2);

a. 7
b. 5
e. 4
d. null

1 O. ¿En cuál de estas instrucciones en lenguaje JAVA se puede crear un


objeto?
a. int a;
b. int a=l;
c. A.a=l;
d. a=new A ( 1);
Apellidos......................................Nombre..................... DNI ...................
Segunda Parte: Problema

Se desea implementar una aplicación que permita gestionar las solicitudes de


guarderías en una determinada localidad. En concreto, se desea almacenar el
nombre y la dirección de cada guardería. Además, cada una de las guarderías
ofrece un conjunto de cursos, cada uno de ellos caracterizado por un nivel
(edad del niño) y un número de plazas.

Por otro lado, se quiere almacenar los datos de las personas que realizan las
solicitudes (solicitantes), en concreto: su nombre, apellido, email, el nombre del
niño o niña para el que se pide la solicitud y el conjunto de solicitudes
realizadas. Cada solicitud debe contener un número identificativo, referencia a
la persona que la realiza, el niño o niña para el que se solicita, el curso y el
conjunto de guarderías para el que solicita plaza.

El sistema deberá permitir añadir y eliminar solicitantes, guarderías y


solicitudes. Además de lo mencionado anteriormente, la aplicación deberá
permitir:

1. Mostrar por pantalla todas las solicitudes de un solicitante, imprimiendo


el nombre de las guarderías incluidas en cada solicitud, dado el nombre
y apellido del solicitante y el alumno para el que se solicita la plaza.
2. Mostrar por pantalla el nombre y la dirección de todas las guarderías
almacenadas en el sistema.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar una nueva guardería


llamada "Platero", localizada en la calle Juan del rosal 16. Esta guardería
tiene 3 cursos, en los cuales tiene las siguientes plazas respectivamente:
curso 1, 16 plazas; curso 2, 24 plazas; y curso 3, 30 plazas. Realizar las
invocaciones necesarias para añadir esta guardería a la aplicación,
asumiendo que existe una instancia de la misma almacenada en la variable
"appGestionSolicitudes". A continuación, la persona José López ha
realizado una solicitud para su hijo Manuel López, para la guardería
"Platero", para el curso 1. Cree un objeto que represente estos datos y
añádalo a la misma aplicación como una nueva solicitud. Por último, realice
las invocaciones necesarias para imprimir por pantalla todas las solicitudes
realizadas por José López para su hijo Manuel. Tenga en cuenta que no se
pide implementar el método.
3. (2 Puntos) Escriba la implementación del método del sistema que imprime
(por pantalla) el nombre de las guarderías incluidas en las solicitudes
realizadas por una persona para un alumno (funcionalidad 1 ).

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos utilizaría y por qué, para:
i) ampliar la funcionalidad que permita gestionar también las
solicitudes para guarderías concertadas, las cuales se diferencian
de las guarderías utilizadas hasta el momento porque es
necesario almacenar la subvención que recibe cada guardería
concertada por parte del estado.
ii) Imprimir el nombre y la dirección de los dos tipos de guarderías
que gestionará ahora el sistema.

Para la nota del examen, el test vale el 20% y el problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

R esuelva el problema en una hoja aparte.

Primera Parte: Test

1. Indicar cuál de las siguientes afirmaciones sobre memoria es FALSA.

a. Hay tres tipos de memoria: R AM, caché y virtual.


b. La memoria ROM es permanente y su contenido no se pierde al apagar
el ordenador.
c. El acceso a la memoria virtual es más rápido que el acceso a R AM.
d. Se suele llamar memoria principal a la combinación de ROM y R AM.

2. Indique cuál de las siguientes opciones representa una definición correcta


de clase:

a. public class A(){}


b. class public A{}
c. public class A{}
d. class public A(){}

3. A partir de las siguientes definiciones:

public class Alumno {


private int edad;

public int darEdad(){


return this.edad;
}

public Alumno(int edad){


this.edad=edad;
}
}

¿Cuál de las siguientes opciones representa la forma correcta de acceder a


la edad de un objeto a de tipo Alumno desde otra clase?:

a. int x = Alumno.edad;
b. int x = a.darEdad();
c. int x = a.edad;
d. int x = Alumno.darEdad(a);
4. Indique qué resultado mostraría por pantalla el siguiente fragmento de
código:

Integer[] array new Integer[2];


=

array.length 2; =

int sum O; =

for (int i O; i < array.length; i++) {


=

sum sum + 1;
=

}
System.out.println(sum);

a. O.
b. 5
c. 2
d. Error de compilación. No es posible modificar el tamaño de un array en
tiempo de ejecución.

5. Indique cuál de las siguientes afirmaciones es correcta.


En la práctica de este año:

a. Un pedido estaba formado por un conjunto de sensores.


b. Un pedido estaba formado por un conjunto de clientes.
c. Un pedido estaba formado por un conjunto de robots.
d. No era necesario el modelado de ninguna clase Pedido.

6. ¿En qué punto comienza la ejecución de un programa en Java?

a. En el constructor de la clase .java que se lance.


b. En el método estático main de la clase que se lance.
c. En el método estático start de la clase que se lance.
d. En el constructor de la clase .class que se lance.

7. ¿Qué valores imprimiría el siguiente código?

int[] a = {0, 1, 2, 3 };
for (int l = 1; i < a.length; i++) {
a[i - 1] = a[i];
}
System.out.print(a[1]);:

a. O
b. 1
c. 2
d. 3
8. Dos objetos de una misma clase no comparten necesariamente:

a. Los mismos atributos.


b. Los mismos valores de atributos.
c. Los mismos métodos.
d. Los mismos atributos de clase.

9. Teniendo en cuenta las siguientes definiciones de clases:

public class A {
}
public class B extends A{
}
public class e extends B {
}

¿Cuál de las siguientes instrucciones es necesariamente incorrecta?

a. A a = newB();
b. A a = new C();
c. B b = newB();
d. e e = newB();

1 O. Sabiendo que B hereda de A, y que pr y pu son dos atributos tipo int de


A definidos como private y public, respectivamente, ¿En qué líneas del
siguiente código tendríamos un error de compilación?

A a:::new A(); /*Linea 1*/


a.pu=l( /*Linea 2 */
a.pr=l; /*Linea 3*/
B b::::ne\v B(); /*Linea 4*/
b.pr:::cl; /*Linea 5*1
b.pu:::cl; /*Linea 6*1

a. En la 3 y la 5.
b. En la 5.
c. En la 2,3,5 y 6.
d. En la 3.
Apellidos..................................... Nombre.................. O NI...................

Segunda Parte: Problema

Se desea implementar una aplicación que permita gestionar Trabajos Fin de


Grado (TFG) dentro de una universidad. Un TFG está asociado a un grado,
debe tener un título y realizarse por un único alumno, identificado por su
nombre y apellidos, DNI, su número de expediente, y del que hay que guardar
información acerca del grado o grados que está cursando en la universidad. A
su vez, el TFG debe ser dirigido por uno o dos profesores, identificado cada
uno de ellos por su nombre y apellidos, DNI, su número de registro de
personal, y del que hay que guardar información acerca del grado o grados que
está impartiendo en la universidad. Además, para que un TFG pueda incluirse
en el sistema, el grado cursado por el alumno y uno de los grados impartido por
alguno de los directores debe coincidir.

El sistema de gestión de TFG deberá permitir almacenar toda la información


anterior relativa a los TFG realizados en la universidad, así como un acta con la
nota final obtenida en cada uno de ellos.

Además de lo mencionado anteriormente, la aplicación deberá permitir:

l. Almacenar actas de defensas de TFG; es decir, almacenar toda la


información de un TFG junto con la nota obtenida y el día en que se
realizó su defensa. Un acta se almacenará se haya o no superado la
defensa del TFG.
2. Mostrar por pantalla el título, autor, director (o directores) y la nota
obtenida en un TFG a partir del DNI de un alumno. En el caso en que el
alumno haya realizado varias defensas (bien sea porque no aprobó
alguna de ellas, o bien porque el alumno cursa o ha cursado más de un
grado), el sistema tendra que mostrar la información de cada una de
ellas.
3. Dado el DNI de un profesor, mostrar por pantalla el título y el autor de
todos los TFG que ha dirigido y ya hayan sido defendidos.

Antes de comenzar a responder, lea con atención todos los apartados. S e pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar los objetos


correspondientes a: un TFG con título "Detección de plagio basada en n­
gramas", realizado por el alumno "Javier Martínez Hoce", del grado en
"Tecnologías de la Información" y dirigido por el profesor "Daniel Guzmán
Yepes", que imparte los grados en "Tecnologías de la Información" e
"Ingeniería Informática". S e deja a vuestra elección establecer el resto de
información relativa al alumno y al profesor: DNI, número de expediente,
número de registro personal. Tenga en cuenta que no se pide implementar
los métodos.

3. (2 Puntos) Escriba la implementación del método (siguiendo tu diseño)


donde se establece la condición de que el grado del TFG coincide con uno
de los grados cursados por el alumno y uno de los grados impartido por
alguno de los directores.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos utilizaría y por qué, para:

i) Ampliar la funcionalidad para permitir gestionar también TFG


donde exista un tutor, aparte del director o directores que ya
teníamos.
ii) Imprimir el número de TFG dirigidos por un profesor, dada la
funcionalidad añadida en el punto i) de este ejercicio.
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras).

Primera Parte: Test

1. ¿Cuál de estos códigos es más comprensible para un humano en


programación orientada a objetos?:

a. Código fuente.
b. Código objeto.
c. Código máquina.
d. Código ejecutable.


2. Teniendo en cuenta la siguiente definición de un atributo de una clase:
private static int TOTAL = 10;

Indique cuál de las siguientes afirmaciones es CORRECTA:

a. Su valor será constante.


b. Su valor será el mismo para todos los objetos de dicha clase.
c. Su valor sólo puede ser accedido por las clases del mismo paquete.
d. Su valor sólo es visible para las subclases de la clase donde está
definido.

3. Asumiendo que existen las clases A y B: ¿En cuál de estos códigos en


lenguaje JAVA se crean dos objetos?

a. A a=new A(); A b=a;
b. A a=new A(); A b;
c. A a=new A(); B b;
d. A a=new A(); A b=new A();

4. ¿Cuál de estas instrucciones JAVA NO puede ser una llamada a un
método m de la clase A?:

a. a.m(b);
b. A.m(b);
c. m.a(b);
d. A b = a; b.m();

5. Indique cuál de las siguientes afirmaciones es correcta. En Java:

a. Está permitido definir varios métodos con el mismo nombre siempre que
éstos sean constructores y tengan diferentes parámetros de entrada.
b. Está permitido siempre definir varios métodos con el mismo nombre si
éstos tienen diferentes parámetros de entrada.
c. No está permitido definir más de un método con el mismo nombre.
d. No está permitido definir más de un método con el mismo nombre, salvo
que sean de tipo 'static'.

6. ¿Qué se imprime al ejecutar el siguiente código?:

int resultado = 0;
int total = 1;
while(total < 4) {
resultado = resultado + total;
}
System.out.println(resultado);

a. 1
b. 3
c. 0
d. No imprimiría nada.

7. Indique qué resultado mostraría por pantalla el siguiente fragmento de


código:

public class A {
protected int numeroA;
public void setNumeroA(int num){ numeroA = num;}
public int suma(int num){return numeroA+num; }
}

public class B extends A {


private int numeroB;
public void setNumeroB(int num){ numeroB = num;}
public int suma(int num){return numeroB+numeroA+num;}

public static void main (String [] args) {


B objB = new B();
objB.setNumeroA(10);
objB.setNumeroB(5);
A objA = objB;
System.out.println(objA.suma(3));
}
}

a. 10
b. Error de compilación, no se pueden realizar asignaciones con distinto
tipo.
c. 18
d. 13

8. Teniendo en cuenta la siguiente definición:

List<ClaseA> a = new ArrayList<ClaseA>();


Indique cuál de las siguientes afirmaciones es FALSA.

a. En el objeto a podemos almacenar un número arbitrario de objetos de


la clase ClaseA
b. En el objeto a podemos almacenar un número fijo como máximo de
objetos de la clase ClaseA
c. En el objeto a podemos almacenar un número arbitrario de objetos de
la clase ClaseA y de subclases de ésta.
d. En el objeto a podemos almacenar objetos de la clase ClaseA
mediante su método add.

9. ¿Qué imprimiría el siguiente código?

int a = 1;
int b = 2;
a = b;
System.out.print(a);
System.out.print(b);

a. 12
b. 22
c. 11
d. 21

10. Indica cuál de las siguientes afirmaciones es correcta.


En la práctica de este año:

a. Era necesario el uso de dos tipos de enumerados para modelar los
niveles de sensibilidad de los sensores.
b. Era necesario el uso de un tipo de enumerado para modelar los
niveles de sensibilidad de los sensores.
c. No era necesario el uso de ningún tipo de enumerado para modelar
los niveles de sensibilidad de los sensores.
d. No era necesario modelar los niveles de sensibilidad de los sensores.
Apellidos ......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea implementar un sistema para la gestión de multas de aparcamiento


en una ciudad. El sistema debe gestionar las multas almacenando un
identificador por multa, el conductor, la matrícula del vehículo y hora. Además,
debe anotarse si la multa ya ha sido pagada. Cada conductor se caracteriza
por sus datos personales: DNI, nombre, apellidos y domicilio.

Solo hay tres tipos de multas: por exceso de tiempo, aparcamiento indebido y
no haber sacado el tique de establecimiento regulado. El importe de las multas
depende del tipo y del tiempo que ha pasado desde la infracción.

Además, el sistema debe permitir:

1. Añadir una multa, de cualquiera de los tres tipos, con todos los datos
asociados.
2. Anotar una multa como pagada dado el identificador de la multa.
3. Sumar el importe total de las multas no pagadas de un conductor dado
su DNI.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (3 Puntos) Dibujar un esquema con las clases necesarias para realizar


el diseño del sistema, indicando los atributos y métodos que tiene cada
una de ellas (sólo indicarlos, sin escribir su código), aplicando los
principios de la programación orientada a objetos.
2. (2 Puntos) Escribir el código del método encargado de calcular el
importe total de las multas de un conductor. IMPORTANTE: No es
necesario implementar el método que calcula el importe de una multa
concreta.
3. (2 Puntos) Asumiendo que el sistema ya está implementado, escribir las
instrucciones necesarias para instanciar dos multas a un mismo
conductor y sumar los importes de dichas multas. Se deja a la elección
de alumno el establecimiento de los valores de los campos que sean
necesario.
4. (3 Puntos) Sin modificar ninguna de las clases ya implementadas,
ampliar el diagrama de clases para que el sistema sea aplicable a toda
la región, pudiéndose sumar las multas de un infractor en una ciudad
determinada, dado un nombre de ciudad y DNI del infractor. Justificar las
decisiones de diseño tomadas.

Para la nota del examen, el test vale el 20% y el problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte.

Primera Parte: Test

1. Teniendo en cuenta la siguiente definición de un atributo de una clase:


protected int total;

Indique cuál de las siguientes afirmaciones es CORRECTA:

a. Su valor sólo puede ser accedido por la propia clase, sus subclases y
las clases que estén en el mismo paquete que ella.
b. Su valor sólo puede ser accedido por la propia clase y sus subclases.
c. La definición es incorrecta ya que los atributos no pueden ser
definidos como protected.
d. El atributo total es un atributo de clase, compartido por todos los
objetos.

2. Dada la siguiente definición:

public static void main(String[] args) {


Pedido pedido = new Pedido();
}

Indique cuál de las siguientes afirmaciones es FALSA:

a. El método main es un método de clase y, por tanto, no necesitamos


instanciar un objeto para invocarlo.
b. El método main es incorrecto ya que siempre debe devolver un valor.
c. El método main es el primer método invocado al iniciar una
aplicación Java fuera del entorno BlueJ.
d. Este método siempre debe ser público para que pueda ser invocado
desde el exterior de la clase.

3. Un "gigabyte" es equivalente a:

a. 1024 bits.
b. 1024 bytes.
c. 1024 Kilobytes
d. 1024 Megabytes
4. En programación orientada a objetos, un objeto se crea cuando:

a. Se ejecuta un programa
b. Se crea el código objeto de su clase.
c. Se crea el código fuente de su clase.
d. Finaliza la ejecución de un programa.

5. Si un método se define como private:

a. Sólo se puede acceder a él directamente desde cualquiera de sus


subclases.
b. No se puede acceder directamente a él más que desde una subclase
definida también como private.
c. Es necesario que se ejecute un método de su clase para poder
acceder a él.
d. A diferencia de si se define como public, requiere permisos para que
podamos acceder a él.

6. Un método no devuelve ningún valor cuando:

a. la salida del método está definido como void.


b. el método pertenece a una clase heredada.
c. el método es invocado desde la propia clase.
d. el método está definido como protected.

7. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int j=O;
for (int i=l; i<S; i=i+2) {
j = j + i;
}
System.out.print(j);

a. 10
b. 4
c. 5
d. 3

8. Suponiendo que la clase B hereda de A, y que A contiene el atributo id de


tipo String, ¿qué imprimiría el siguiente código?

A a = new A();
B b = new B();
a.id = 11j23";
System.out.prinln(b.id)
a. j23
b. Nada. El atributo id de b no puede tener asignado ningún valor.
c. null dado que se ejecuta el constructor por defecto.
d. Depende de cómo esté definida la clase B.

9. Indique cuál de las siguientes afirmaciones es correcta, para cumplir con el


enunciado de la práctica de este año:

a. No era necesario definir métodos printlnfo() en los diferentes tipos de


sensores porque ya existía un método con esa función en la clase
padre Sensor.
b. Era necesario definir métodos printlnfo() en los diferentes tipos de
sensores aunque ya existiera un método con esa función en la clase
padre Sensor.
c. No era necesario definir métodos printlnfo() en ningún tipo de sensor,
solo en la clasePedido.
d. Era necesario definir métodos printlnfo() solo en la clasePedido y en
sus clases hijas.

1O. Dado el siguiente código y asumiendo que es correcto:

A a:::new A();
B b:::new B ();
e c:::ne\v e ( ) ;
b.c::::a;

¿Entre qué clases podemos asegurar que hay una relación de


composición?

a. Entre By e
b. Entre A y e
c. Entre By A
d. No hay relación de composición en ningún caso.
Apellidos ......................................Nombre..................... DNI ...................

Segunda Parte: Problema

Se desea implementar un sistema para una tienda mayorista de tulipanes. Los


tulipanes llegan en paquetes desde la zona de cultivo. Cada vez que llega un
paquete, un experto anota el identificador de paquete, número de tulipanes que
contiene, la fecha de llegada y el estado de conservación en que se encuentra
(de 1 a 10). Algunos paquetes son de alta calidad y permiten una mejor
conservación de la flor. La fecha de caducidad es calculada automáticamente
por el sistema, y depende de si el paquete es de alta calidad o no, de la fecha
de llegada y del estado de conservación anotado por el experto.

La mercancía se vende a floristerías por paquetes, y cada vez que se entrega


un paquete a un cliente éste se anota como vendido. El sistema debe permitir:

1. Añadir un nuevo paquete.


2. Anotar un paquete como vendido dado su identificador.
3. Dada una fecha, calcular la cantidad de tulipanes en stock que no vayan
a caducar antes de dicha fecha. Asumimos una clase Date con un
método afterThan (Date d) que devuelve un true si la fecha es
posterior al parámetro de entrada.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar


el diseño del sistema, indicando los atributos y métodos que tiene cada
una de ellas (sólo indicarlos, sin escribir su código), aplicando los
principios de la programación orientada a objetos.
2. (2 Puntos) Escribir el código del método que implemente la
funcionalidad 3 del enunciado: No es necesario implementar el método
que calcula la fecha de caducidad de un paquete concreto.
3. (2 Puntos) Asumiendo que el sistema ya está implementado, escribir las
instrucciones necesarias para:
a. Añadir un paquete con los valores que se considere.
b. Imprimir los tulipanes disponibles en una fecha.
4. (2 Puntos) Sin modificar ninguna de las clases ya implementadas,
ampliar el diagrama de clases para gestionar varias tiendas mayoristas.
El nuevo sistema debe ser capaz de, dada una fecha, imprimir los
nombres de aquellas tiendas donde todo el stock vaya a caducar antes
de dicha fecha.

Para la nota del examen el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte indicando su nombre y DNI
(máximo 2 caras)

Primera Parte: Test

1. Las tarjetas gráficas:

a. Convierten representaciones gráficas en señales que pueda interpretar


un monitor.
b. Son una extensión de la memoria ROM para el tratamiento de imágenes.
c. Son puertos para la conexión de cualquier tipo de dispositivo externo.
d. Es un hardware específico para programas de diseño gráfico.

2. Indique cuál de las siguientes instrucciones representa la definición de una


cabecera de un método de una clase en Java:

a. public getSuma(){. . . }
b. public void getSuma(){. . . }
c. int private getSuma(){ . . . }
d. protegido int getSuma(){. . . }

3. Indique cuál de las siguientes afirmaciones es correcta:

a. Todos los objetos de una misma clase tendrán los mismos campos.
b. El tipo de dato de los campos se define en los objetos.
c. Todos los objetos de una misma clase tendrán los mismos valores en
sus campos.
d. No todos los objetos de una clase tendrán los mismos métodos.

4. Indique cuál de las siguientes instrucciones representa una llamada a un


método externo en Java:

a. obj =dameSuma(5,6);
b. obj.dameSuma(int 5, int 6);
c. int.dameSuma(5,6);
d. obj.dameSuma(5,6);

5. En java el método main():

a. Es un método de clase que nos permite iniciar una aplicación.


b. Define que una clase no devuelve ningún resultado.
c. Define que un objeto es ejecutable.
d. Permite invocar objetos solo de la clase en la que está definido.
6. ¿Qué tipo de datos es el más apropiado para definir el atributo que permite
almacenar el puesto de un investigador en la práctica obligatoria de este
curso?

a. Definir una clase Puesto que contenga un atributo de tipo String donde
se almacene el puesto concreto.
b. Definirlo como una lista de objetos de tipo String, donde cada objeto
almacena un tipo de puesto.
c. Definirlo de tipo String para almacenar el nombre del puesto.
d. Definir un tipo enumerado con los valores que representen al conjunto
de puestos definidos en el enunciado.

7. Dadas las siguientes definiciones de clase:

public class A {
public void a() {
1** implementación 1 **/
}
}
public class B extends A {
public void a() {
1** implementación 2 **/
}
}

¿Cuál de las siguientes afirmaciones es correcta?

a. Las definiciones son incorrectas, ya que una clase hija no puede


redefinir un método de la clase padre.
b. Las definiciones son correctas y el método que se ejecuta depende de la
clase del objeto del método invocado.
c. Las definiciones son incorrectas dado que los métodos no devuelven
nada ni tienen parámetros de entrada.
d. Las definiciones son correctas y el método que se ejecuta depende de la
implementación de éstos.

8. Qué imprimiría el siguiente código:

int[ ] edad { 1, 2, 3, 4} ;
=

System.out.println(edad[1+1]+1);

a. 2
b. 3
c. 4
d. 5
9. ¿Qué es una excepción?:

a. Un objeto que no pertenece a ninguna clase.


b. Un mecanismo para el manejo de errores.
c. Una estructura de datos.
d. El mecanismo que permite que se ejecute el main().

1 O. Indique qué se imprimiría por pantalla tras la ejecución del siguiente


código:

int opcion = (int)(Math.random() * 10);


while (opcion != 5) {
opcion = (int)(Math.random() * 10);
}
System.out.println(opcion);

a. Se imprimiría un número seleccionado aleatoriamente.


b. 5
c. 50
d. No imprimiría nada porque la ejecución se quedaría en un bucle infinito.

Segunda Parte: Problema

Se desea implementar un sistema informático (simplificado) de gestión


hospitalaria que permita gestionar los ingresos y altas de los pacientes de un
hospital. Un hospital se identifica por un nombre y se estructura en salas, que
se asocian con diferentes especialidades que, por simplicidad, restringimos a
las siguientes: "Traumatología", "Pediatría" y "Neurología". Cada sala dispone
de diferentes habitaciones individuales.

Cuando se realiza un ingreso se registra la fecha en que tiene lugar, y se debe


asignar un paciente a una habitación dentro de una sala. Las habitaciones se
identifican por un numero y las salas por un nombre. Del paciente se recoge su
nombre, DNI y número de historia clínica.

Este sistema informático debe permitir almacenar toda la información anterior,


así como cumplir los siguientes requisitos:

1. Registrar el ingreso de un paciente, guardando la fecha en que tiene


lugar, así como la sala y habitación.
2. Registrar el alta de un paciente ingresado en el hospital dado su nombre.
3. Dado el nombre de un paciente mostrar por pantalla la siguiente
información en caso de que ese paciente esté en ese momento
ingresado en el hospital:
Paciente: Martín Martínez
Num.historia: 9838936
DNI: 12345678
Especialidad: traumatología
Sala: Santa Isabel
Habitacion: 3

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar un hospital, y añadir


una sala con dos habitaciones. Instanciar el ingreso de un paciente. Se deja
a la elección del estudiante establecer el resto de información relativa a los
nombres de salas, habitación y hospital, así como los datos del paciente y el
servicio en el que ingresa.

3. (2 Puntos) Escriba la cabecera e implementación del método (siguiendo su


diseño) descrito en el punto 3 de requisitos del enunciado.

4. (2 Puntos) Explique razonadamente qué mecanismo(-s) de la programación


orientada a objetos utilizaría para permitir la gestión de diferentes hospitales
donde cada uno puede tener diferentes tamaños de habitaciones. ¿Qué
modificaría de su diseño para permitir que un hospital pudiera realizar hasta
dos ingresos por habitación?

1A, 2B, 3A, 4D, 5A, 6D, 7B, 8C, 9B, 10B

Para la nota del examen, el test vale el 20% y el Problema vale el 80%.

El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.

Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. Indique cuál de las siguientes afirmaciones es correcta:

a. Un programa es un proceso en ejecución.


b. Un programa se compone de un código que se ejecuta y un conjunto de
datos asociados a ese código.
c. Un compilador de C ejecutándose es un programa para el sistema
operativo.
d. Un proceso es un programa en ejecución.

2. Dada una clase Persona con un atributo edad tipo entero, y dado el
siguiente fragmento de código perteneciente a un método de la clase
Persona, ¿qué imprimiría?

Persona p new Persona();


= 11 Línea 1
this.edad nlü";
= 11 Línea 2
System.out.print(p.edad); 11 Línea 3

a. "1O" en cualquier caso.


b. Depende del estado de p.
c. No puede ejecutarse. La expresión de la línea 2 es incorrecta.
d. No puede ejecutarse, dado que no puede instanciarse una clase dentro
de sí misma.

3. Indique cuál de las siguientes instrucciones representa la definición de la


cabecera de una clase en Java:

a. public class A{ ... }


b. class public A{ ... }
c. public class A(){ ... }
d. public void class A{ ... }

4. El código de un método privado se ejecuta siempre que:

a. Se invoque desde otro método privado.


b. Se invoque desde la propia clase.
c. La clase desde la que se invoque sea privada.
d. El paquete desde el que se invoque sea privado.
5. Un método polimórfico en Java, permite:
a. Que un método pueda devolver diferentes tipos de datos.
b. Que un método no devuelva ningún resultado.
c. Que se pueda usar la implementación de un método redefinido en una
clase o el correspondiente en su superclase.
d. Que en tiempo de compilación se pueda elegir y fijar la implementación
de un método redefinido en una clase o el correspondiente en su
superclase.

6. ¿Qué tipo de relación hay entre las clases Investigador y Publicación en la


práctica de este curso?
a. Herencia.
b. Polimorfismo.
c. Abstracción.
d. Composición

7. Una variable polimórfica:


a. Puede contener objetos de la clase declarada o de cualquier subclase
de ésta.
b. Puede ser accedida desde una clase polimórfica o alguna de las
subclases de ésta.
c. Mantiene el estado para todas las instancias de una clase.
d. Debe ser accedida por medio de métodos polimórficos de su clase o de
cualquier subclase de ésta.

8. ¿Qué número imprimiría el siguiente código?

int[] a { 1, 2, 3, 4 };
=

for (int i 1; i < a.length; i++){


=

a[i - 1] a[i - 1] + a[i];


=

}
System.out.print(a[O]);

a. 1
b. 2
c. 3
d. 4

9. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int i O; =

int j 6; =

while ((i -- O) 11(j<lO)) {


j++;
}
System.out.println(j);

a. 10
b. No imprimiría nada.
c. 9
d. 1
1O. Indique qué se entiende por excepción en Java:
a. Un mecanismo para el manejo de errores.
b. Una clase que no puede ser instanciada.
c. Un bucle que no finaliza.
d. Un objeto que no puede ser instanciado.

Segunda Parte: Problema


Se desea implementar un sistema que permita gestionar los serv1c1os de
recogida de enseres de una gran ciudad. El ayuntamiento dispone de un
conjunto de camiones de recogida de los que se conoce su matrícula, teléfono
de contacto, y una lista con las recogidas asignadas a cada camión. Las
recogidas son por tipo de material, (a) enseres: muebles, productos textiles,
electrodomésticos; y (b) restos vegetales. Hay dos tipos de camiones, los que
recogen restos vegetales, y los que pueden recoger los otros materiales, que
permiten recoger hasta un valor máximo de kilos. Cada recogida tendrá un
identificador, la dirección de recogida, el tipo de recogida y el peso en caso de
que no sea restos vegetales. En un escenario típico, los pasos a seguir por el
encargado de la empresa son: (1) llega una nueva solicitud de recogida, (2) se
estudia qué camiones son más apropiados para esa recogida, (3) se asigna la
recogida a un camión. Para facilitar este proceso, el sistema debe cubrir las
siguientes funcionalidades:

1. Añadir o dar de baja un camión al sistema.


2. Dada una "recogida", imprimir la matrícula y el teléfono de contacto de
aquellos camiones que permitan esa recogida específica.
3. Asignar una "recogida" a un camión (dada una recogida y la matrícula
del camión).

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para diseñar el


sistema, indicando los atributos y métodos que tiene cada una de ellas (sólo
indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Asumiendo que el sistema está ya implementado, escribir el


código necesario para instanciar un camión de recogida de restos vegetales,
un camión de recogida de enseres con capacidad 1000 kg, una recogida
restos vegetales y asignar la recogida a un camión. IMPORTANTE: se pide
instanciar objetos y llamar a métodos, no implementar métodos.

3. (2 Puntos) Escriba la implementación de los métodos implicados en la


funcionalidad 2

4. (2 Puntos) Describir cómo se ampliaría el sistema sin modificar el código


ya existente, detallando los mecanismos de programación orientada a
objetos necesarios, para gestionar la recogida en varias ciudades, teniendo
un conjunto de camiones independiente para cada ciudad.
• Para la nota del examen el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte indicando su nombre y DNI
(máximo 2 caras)
Primera Parte: Test
1. En el contexto de los sistemas operativos:

a. Un compilador es un proceso.
b. Un proceso es un programa en ejecución.
c. Un proceso se compone del código que se ejecuta y de los datos
asociados.
d. El sistema operativo controla la asignación de variables dentro de los
procesos.

2. Indique cuál de las siguientes instrucciones representa una definición de un


atributo de una clase en Java:

a. int suma= O;
b. suma int;
c. suma int= O;
d. int suma= new lnt();

3. Indique cuál de las siguientes afirmaciones es correcta en la programación


orientada a objetos:

a. Los objetos definen el tipo de los atributos dentro de una clase.


b. Las clases definen el tipo de objetos.
c. Las clases definen el estado actual de un objeto.
d. Los objetos definen los métodos de una clase.

4. Indique cuál de las siguientes instrucciones representa la cabecera de un


método constructor de una clase llamada A en Java:

a. constructor A(){ . . . }
b. public constructor A(){ . . . }
c. public A(){ . . . }
d. public void A(){ . . . }

5. En Java:

a. Está permitido definir más de un método con el mismo nombre siempre


que tengan diferentes parámetros de entrada.
b. Está permitido definir más de un método con el mismo nombre siempre
que éstos sean constructores y tengan diferentes parámetros de entrada.
c. No está permitido definir más de un método con el mismo nombre.
d. No está permitido definir más de un método con el mismo nombre, salvo
que éstos sean de tipo 'static' y tengan diferentes parámetros de entrada.
6. Indique cuál de las siguientes definiciones es correcta según el enunciado
de la práctica obligatoria del presente curso:

a. private class Articulo Revista extends Publicacion { . . . }


b. private class Articulo Revista extends lnstitucion { . . . }
c. public class Articulo Revista extends lnstitucion { . . . }
d. public class Articulo Revista extends Publicacion { . . . }

7. Dada las siguientes definiciones de clase:

public class A {
public void a() {
1** implementación 1 **/
}
}
public class B extends A {
public void a(String s) {
1** implementación 2 **/
}
}

¿Cuál de las siguientes afirmaciones es correcta?

a. Las definiciones son incorrectas, ya que una clase hija no puede


redefinir un método de la clase padre.
b. Las definiciones son incorrectas, ya que la clase hija no puede tener un
método con el mismo nombre.
c. Las definiciones son correctas y el método de la clase B se ejecuta solo
si el objeto invocado pertenece a esta clase y la llamada tiene un
parámetro de entrada de tipo String.
d. Las definiciones son correctas, pero el método de la clase B nunca
podrá ser ejecutado.

8. ¿Qué imprimiría el siguiente código?

String[] filaPersonas= { "Juan", "José", "Miguel",


"Antonio"} ;
filaPersonas[O] ="Luis";
System.out.println(filaPersonas[l] );

a. Luis
b. Juan
c. José
d. Miguel

9. Indique qué se imprimiría por pantalla tras la ejecución del siguiente código:
public static void main(String args[]){
int numero= 4557888;
int digitos= O;
do {
numero= numero 1 1O;
digitos++;
} while ( numero> O );
System.out. println(digitos);
}

a. 6
b. 7
c. 8
d. Nada, porque se ejecutaría un bucle infinito.

1O. ¿Qué ocurriría al ejecutarse el siguiente código, asumiendo que la clase B


está correctamente definida y el main se encuentra dentro de la clase A?:

public static void main(String[] args){


B b new B();
=

a. Se crea una instancia de la clase B


b. Error de ejecución, debido a que un método no puede tener al mismo
tiempo las palabras reservadas static y void.
c. Error de ejecución debido a que el main debe contener una excepción
para poder ejecutarse.
d. Error de ejecución, debido a que un main no puede encontrarse dentro
de una clase.

Segunda Parte: Problema

Se desea implementar una aplicación que permita realizar la gestión de planes


de entrenamiento para corredores. Para ello, es necesario almacenar el
nombre, apellidos y el plan de entrenamiento que tiene asignado cada corredor.
Un plan de entrenamiento está definido por un identificador y el conjunto de
sesiones que lo componen. Cada sesión tiene una fecha y una hora de
realización. Existen tres tipos de sesiones: una donde se corre a ritmo
constante, otra que incluye cambios de ritmos y una tercera que incluye correr
una tirada larga de kilómetros. Para la sesión de ritmo constante se necesita
poder definir el ritmo por km (en minutos/km) y la duración de la sesión en
minutos. Para la sesión con cambios de ritmo, se necesita definir el número de
cambios a realizar, el ritmo (en minutos/km) de la fase de ritmo fuerte y de ritmo
suave, así como la duración (en minutos) de cada fase: fuerte y suave. Por
último, para definir una sesión de tirada larga necesitamos únicamente el
número de kms a realizar en la sesión.
Para todas las sesiones se quiere poder imprimir por pantalla su información
concreta.

El sistema, además de lo mencionado, deberá permitir añadir y eliminar


corredores, así como asignar un único plan de entrenamiento a un corredor
concreto, dado su nombre y apellido. Del mismo modo, debe mostrar por
pantalla el nombre y apellido de todos los corredores que no tengan una sesión
planificada para una fecha concreta.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar un nuevo plan de


entrenamiento llamado "plan3" compuesto por 3 sesiones de entrenamiento
en las fechas 22/5/2018, 24/5/2018 y 26/5/2018, todas comenzando a las
9:00h. La primera es de ritmo constante, donde se debe correr a 5.15
min/km durante 45 minutos. La segunda de tipo cambios de ritmo, donde
hay que hacer 3 cambios, donde se debe correr 1O minutos fuerte a ritmo
4.30 min/km y 3 minutos a 6 min/km. Por último, una sesión de tirada larga,
donde se deben correr 15 kms. Realizar las invocaciones necesarias para
asignar este plan de entrenamiento a un corredor llamado "Pepe Runner",
asumiendo que existe una instancia de la aplicación almacenada en la
variable "appGestionEntrenamientos". Para las fechas puede asumir que
existe una clase denominada "Date(String fecha)" que permite trabajar con
fechas a partir de un String que almacene fechas del estilo "dd/mm/aaaa",
donde dd es el día con 2 dígitos, mm el número de mes y aaaa el año. El
mismo constructor se puede utilizar para trabajar con horas del estilo
"hh:mm" donde hh son las horas con dos dígitos y mm los minutos.

3. (2 Puntos) Escriba la implementación del método del sistema que imprime


(por pantalla) el nombre y apellidos de todos los corredores almacenados
en el sistema que no tienen una sesión planificada para una fecha concreta.
Para ello, puede utilizar el método de clase Date.comparar(Date fecha1,
Date fecha2) que devuelve un 1 si las fechas son iguales o O en caso
contrario.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos están involucrados en:
i) recoger el requisito que nos permite imprimir por pantalla la
información particular de cada sesión de entrenamiento y;
ii) La relación entre el plan de entrenamiento y las sesiones.
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su
nombre y DN l.

Primera Parte: Test

1. ¿Qué indica la frecuencia del reloj de la placa base?

a. La velocidad del equipo.


b. La velocidad de conexión a Internet.
c. La velocidad a la que el equipo realiza copias de seguridad.
d. El rango acústico del equipo.

2. Sabiendo que A es una clase bien definida y dado el siguiente fragmento de


código:

public static void main(String[] args) {


A a = new A(); /** línea 1 **/
A b = new A(); /** línea 2 **/
}

¿Cuál de las siguientes afirmaciones es correcta?

a. En las variables a y b tendremos dos clases asociadas al mismo objeto.


b. El código es incorrecto ya que no podemos instanciar clases mediante
constructores sin parámetros.
c. El código es incorrecto ya que no podemos instanciar una misma clase
en dos variables distintas.
d. En las variables a y b tendremos dos objetos de la misma clase.

3. Sabiendo que A y B son dos clases bien definidas: ¿es correcto el siguiente
fragmento de código?

public static void main(String[] args) {


A a = new A();
B b = new B();
a.setNombre("a");
b.setNombre("b");

a. No, dado que dos clases no pueden tener métodos con el mismo
nombre.
b. Sí, podría ejecutarse.
c. No, porque las instanciaciones son incorrectas.
d. No, porque en un método main no pueden instanciarse objetos.
4. Indique cuál de las siguientes instrucciones puede representar una
invocación correcta a un método estático o de clase:

a. static.metodo();
b. System.out. println("A");
c. class.metodo();
d. System.out. println(String A);

5. ¿Qué significa sobrecargar un método?

a. Modificar su implementación para que incluya la funcionalidad de otro


método y reducir así el número de llamadas a métodos en nuestro
código.
b. Modificar la implementación de un método aumentando su coste
computacional.
c. Crear otro método con el mismo nombre pero con diferentes parámetros.
d. Añadir funcionalidad adicional a un método previamente creado.

6. ¿Entre qué dos clases existe una relación de herencia en la práctica de este
curso?

a. Entre ArtículoDeRevista y ArtículoDeCongreso.


b. Entre Investigador y AplicaciónGestiónlnvestigadores.
c. Entre Universidad y CentroDelnvestigación.
d. Entre Institución y Universidad

7. Teniendo en cuenta las siguientes definiciones e instrucciones, se puede


decir que:

public class A { }
public class B extends A { }
public class e extends B { }
public static void main(String[] args) {
A a new A();
=

B b new A();
=

a = new e ();
}

a. Son todas correctas.


b. La asignación a new e ( ) ; es errónea.
=

c. La asignación B b new A(); es errónea.


=

d. Depende de los objetos almacenados en las variables en tiempo de


ejecución.
8. ¿Cuál es la diferencia principal en Java entre un array ([ ]) y un Arraylist?:

a. En Java no existen la clase Arraylist.


b. Que el tamaño del array ([ ]) está predefinido y no se puede
redimensionar, mientras que los Arraylist sí.
c. Que el tamaño del Arraylist está predefinido y no se puede
redimensionar, mientras que los arrays sí.
d. No hay diferencia; array y Arraylist son equivalentes.

9. ¿Qué se imprime al ejecutar el siguiente fragmento de código?

int i = O;
int j = 6;
while ((i -- 0) && (j<lO)) {
j++;
}
System.out.println(j);

a. Nada.
b. 9
c. 11
d. 10

1O. Indique cuál de las siguientes afirmaciones es correcta.


La depuración:

a. es la actividad consistente en reestructurar un diseño existente cuando


se modifica la aplicación.
b. es la tarea de localizar y corregir el origen de un error.
c. es el proceso que nos permite simplificar un problema, identificando
componentes discretos que puedan contemplarse como un todo, sin
preocuparnos por sus detalles.
d. describe la interconexión de las clases.

Segunda Parte: Problema

Se desea implementar una aplicación que permita gestionar carreras de


"running". Una carrera está definida por un nombre, por la fecha y hora de
realización, el número máximo de participantes, el conjunto de corredores
inscritos y la clasificación, es decir, la lista con el orden de llegada de los
corredores participantes. De cada corredor en una carrera, se necesita
almacenar su nombre, apellidos, el dni y el dorsal que tendrá asignado en la
misma.
En esta aplicación se desea poder gestionar tres tipos de carrera: carreras de
1Okms, de 21kms o medio maratón y de 42kms o maratón. La diferencia entre
ellas es el número de avituallamientos que tiene cada una. En la de 1Okms
únicamente se tiene uno, en la de 21kms hay tres, mientras que en el maratón
hay 8 avituallamientos.
Cada avituallamiento está definido por el punto kilométrico donde se sitúa, así
como el conjunto de alimentos y/o bebidas que se ofrecen. En concreto se
puede tener: agua, isotónico o gel. Por tanto, en cada avituallamiento podemos
tener cualquier combinación de éstos.

Además de lo mencionado, la aplicación deberá permitir:


Añadir una carrera al sistema.

Eliminar una carrera a partir de su nombre, fecha y hora.

Añadir un corredor a una carrera, como inscrito.

Imprimir por pantalla la información de los avituallamientos de una
carrera.

Asignar los dorsales a los corredores inscritos en una carrera, dado el
nombre de la carrera y su fecha y hora.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar una carrera de


21kms llamada "Medio Maraton Madrid 2018", cuya celebración es el
8/4/2018 a las 9:00, con un número de participantes máximo de 20.000
corredores. Esta carrera tendrá los siguientes avituallamientos: en el km 5
agua; en el km 1O agua e isotónico y; en el km 14.6 tendrá agua y gel.
Asumiendo que existe una instancia de la aplicación en una variable
denominada "appGestionCarreras", realice las llamadas necesarias para
añadir la carrera al sistema y que se visualice por pantalla la información de
los avituallamientos (no se pide la implementación de los métodos).

3. (2 Puntos) Escriba la implementación del método de la aplicación que


permite asignar los dorsales a los corredores inscritos en una carrera. Los
dorsales se asignarán de manera consecutiva, empezando en el dorsal 1,
para todos los corredores inscritos en la misma.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos están involucrados en:
i) recoger el requisito que nos permite imprimir por pantalla la
información de los avituallamientos de cada carrera y;
ii) recoger el requisito que permite gestionar tres tipos distintos de
carreras.

1A, 2D, 3B, 4B, 5C, 6D, 7C, 8B, 9D, 10B
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras).
Primera Parte: Test
1. Indique cuál de los siguientes tipos de memoria NO es memoria volátil:

a. RAM.
b. ROM.
c. Caché.
d. Virtual.

2. Suponga que queremos modelar una simulación de tráfico, donde uno de


los tipos de entidad con los que tendremos que tratar son los vehículos.
¿Cómo modelaremos la entidad vehículo en nuestro contexto?:

a. Como una clase


b. Como un objeto
c. Como un método
d. Como un atributo.

3. Dada la siguiente definición de clase,


class Test {
private int var;
Test (int var) { this.var=var; }

¿qué imprimiría el siguiente código?

Test t=new Test(l);


System.out.println(t.var)

a. 1;
b. null;
c. Daría error de compilación.
d. El programa finalizaría sin imprimir nada.

4. Dado el siguiente método de una clase CuentaBancaria, indique cuál de las


siguientes afirmaciones es cierta asumiendo que el método no dé
errores al ejecutarse:

public void ingresarDinero(int cantidad) {


this.saldo=this.saldo+cantidad;

a. cantidad es un atributo tipo booleano.


b. saldo se modifica según el valor del atributo cantidad de la clase.
c. el método devuelve un valor entero.
d. saldo es un atributo de la clase.
5. ¿Qué significa sobrecargar un método?

a. Hacer llamadas a un método desde todas las clases del sistema.


b. Tener más de un método en una clase con el mismo nombre pero
diferentes argumentos.
c. No definir el constructor de una clase para que así se ejecute el
constructor por defecto cuando se instancie un objeto.
d. Invocar métodos de la misma clase desde un objeto.

6. Teniendo en cuenta la siguiente jerarquía de clases. Indique cuál de las


siguientes instrucciones es ERRONEA:

............ i............ )
�············ ............ ,

Ir�::;;��:
::.:�

a. Mamifero m= new Perro();


b. Animal a= new Gato();
c. Gallina g= new Ave();
d. Ave a= new Gorrion();

7. Indique cuál de las siguientes definiciones es correcta según el enunciado


de la práctica obligatoria del presente curso:

a. public class Articulo Revista extends Articulo{. . . }


b. public class ArticuloCongreso extends Articulo{ . . . }
c. public class Articulo Revista extends Investigador{. . . }
d. public class Libro extends Publicacion{. . . }

8. Indique cuál de las siguientes afirmaciones es correcta.


Una excepción. . . .

a. es un método que cambia el estado de un objeto.


b. es un objeto que representa los detalles de un fallo del programa.
c. define la sección del código fuente desde la que se puede acceder a una
variable.
d. es un conjunto de objetos en un estado definido que sirven como base
para realizar pruebas de unidad.
9. Indique qué secuencia imprimiría el siguiente código:
int i = 1;
int j = 1;
while (j>=i)
System.out.print J + " ");
i=i+1;
System.out.print l + " ");

a. 1,2,
b. 1' 2, 3,4,
c. 2,1'
d. 1,2,1, 3,1,4,

1O. Indique cuál de las siguientes afirmaciones es FALSA. Un conjunto es una


colección que:

a. almacena cada elemento individual como máximo una vez. No mantiene


ningún orden específico.
b. permite almacenar cada elemento más de una vez. No mantiene ningún
orden específico.
c. almacena cada elemento individual como máximo una vez. Se mantiene
orden específico en el que se ha creado.
d. permite almacenar cada elemento más de una vez. Se mantiene orden
específico en el que se ha creado.

Segunda Parte: Problema

Un distribuidor mayorista desea informatizar su negocio empezando por los


pedidos. Se podrán realizar pedidos que incluyan dos tipos de productos:
perecederos y no perecederos. Un pedido estará identificado por la fecha, el
nombre del cliente, el número de tarjeta de crédito y la lista de productos que
se piden.

Por otro lado, cada producto está identificado por un número y un nombre.
Además, para el caso particular de los productos perecederos, se desea
almacenar su grupo dentro de alguno de estos cuatro tipos: "leche y derivados",
"carne, pescado y huevo", "cereales, legumbres y patatas", "Frutas y verduras".
También debe guardase su fecha de caducidad y su forma de conservación,
que podrá ser "congelador", "nevera" o "a temperatura ambiente". En cuanto a
los productos no perecederos, incluyen también una marca.

Se desean gestionar los pedidos de manera que la aplicación permita:

• añadir nuevos pedidos;


• eliminar un pedido realizado por un cliente en una fecha concreta; y
• mostrar por pantalla todos los pedidos realizados por un cliente.
Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 puntos) Dibujar un esquema con las clases necesarias para realizar


el diseño del problema, indicando los atributos y métodos que tiene cada
una de ellas (sólo indicarlos, sin escribir su código), aplicando los
principios de la programación orientada a objetos.

2. (3,5 puntos) Escribir el código necesario (indicando en las clase en la


que se incluye) para mostrar por pantalla todos los pedidos realizados
por un cliente de manera que se muestren siguiendo el siguiente formato
(los datos de los métodos de conservación de un producto perecedero
se mostrarán utilizando el método print() de la clase
MetodosDeConservacion):

Cliente: "Antonio Garcia"


Pedido:
Fecha: "18/04/2018"
Tarjeta: 987 654 3210
Productos:
Id: 143
Nombre: Leche "MiVaca"
Caducidad: 31/12/2019
Grupo: leche y derivados
Forma de conservación: nevera

Id: 421
Nombre: Vino tinto
Marca: Pesquera

3. (2,5 puntos) Al cabo de un tiempo de uso de la aplicación se ha


detectado una importante limitación, y es que hay que incluir en el
pedido tantas veces un producto como unidades se deseen.

a. ¿Qué modificaciones habría que realizar en el diseño para poder


indicar para cada producto el número de unidades que desea el
cliente? Justifica tu respuesta.

b. ¿Qué mecanismo (o mecanismos) de la Programación Orientada


a Objetos está (o están) involucrados en la modificación
efectuada?
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras).

Primera Parte: Test

1. Indica cuál de las siguientes NO son funciones del Sistema Operativo:


a. Control de concurrencia de procesos.
b. Administración de memoria.
c. Gestión de laBIOS.
d. Control de ejecución de procesos.

2. Cuál de los siguientes elementos puede variar durante la ejecución de un


programa:

a. Los métodos de una clase.


b. El número de instancias de una clase.
c. Las relaciones de herencia entre clases.
d. La definición publico priva te de un atributo.

3. Indique cuál de las siguientes afirmaciones es FALSA:

a. Las variables con un tipo de objeto almacenan referencias a objetos.


b. Desde los objetos se pueden crear otros objetos utilizando el operador
new.
c. Los métodos de una clase permiten la modificación de objetos pero no
su instanciación.
d. Los métodos pueden invocar a otros métodos de la misma clase dentro
de su implementación.

4. Indique cuál de las siguientes afirmaciones es correcta. Los métodos


mutadores/modificadores:

a. Permiten cambiar el estado de un objeto.


b. Son denominados a menudo métodos "get".
c. Devuelven información acerca del estado de un objeto.
d. Siempre devuelven algún valor.

5. Un método de una clase puede modificar:

a. El constructor por defecto de una clase.


b. El tipo con el que están definidos los atributos de la clase.
c. El número de atributos de la clase.
d. El valor de un atributo definido como estático.
6. Teniendo en cuenta la siguiente jerarquía de clases. Indique cuál de las
siguientes instrucciones es CORRECTA:

Personal
Universitario
· ...

______________ L_ __ ________________ ! ----------------,

Personal
Docente 1¡1 1 �����=:
Ad ivo

'::: : : : : L: : : : : : : : �
•"""""""'"'("""""'""·; ---""""""""' """"""""'·

•1 - -T-u-o
t _r_ � j1 JefeSeccion ' - mmTecnico :]
'--
a. Profesor p = new Tutor();
b. JefeSeccion js = new PersonaiAdministrativo();
c. PersonaiUniversitario pu = new Profesor();
d. PersonaiDocente pd = new PersonaiUniversitario();

7. ¿Qué tipo de relación hay entre las clases Investigador e Institución en la


práctica de este curso?

a. Herencia.
b. Composición.
c. Polimorfismo.
d. Abstracción.

8. Cuál de estas afirmaciones es FALSA. Estructurar el diseño en clases y


subclases:
a. Evita duplicación de código.
b. Facilita las modificaciones.
c. Permite la reusabilidad.
d. Aumenta el acoplamiento.

9. ¿Qué se imprime al ejecutar el siguiente fragmento de código?


int total = O;
for (int i=O; i<lO; i=i+3) {
total = total + i;

System.out.print(total);

a. 20
b. 18
c. 12
d. No se imprimiría nada.
1O. ¿Cuántos objetos String se crean mediante la siguiente declaración?
S tring [ ] etiquetas = new String[20];

a. Ninguno, dado que se crea un Array, pero ningún String.


b. 1.
c. 20.
d. Ninguno, dado que el código es incorrecto.

Segunda Parte: Problema

Se desea implementar una aplicación que permita a una fábrica envasadora de


encurtidos la gestión interna de los pedidos que envasa.
Cada pedido está caracterizado por un identificador numérico, la fecha en la
que se ha realizado, el cliente que lo ha realizado (del que únicamente se
quiere almacenar su nombre) y los lotes que componen el pedido. Cada lote
está definido por la cantidad de envases y el envase, donde cada envase se
identifica por el tipo de producto que lleva (aceitunas, pepinillos o banderillas),
la fecha de envasado y la fecha de caducidad.
Esta fábrica trabaja con dos tipos de envases: uno de 250grs y otro de 500grs.
Para el caso de 250grs se debe elegir el tipo de material, si es de cristal o de
metal. Para el caso de 500grs los envases siempre son de metal, pero pueden
tener forma cilíndrica o rectangular.

Además de modelar los requisitos mencionados anteriormente, la aplicación


deberá permitir:

• Dar de alta un nuevo pedido.


• Eliminar un pedido de la aplicación, a partir del identificador numérico.
• Visualizar por pantalla la información de los pedidos de una determinada
fecha.
• Visualizar por pantalla la información de los pedidos de una determinada
fecha y realizados por un cliente concreto.

NOTA: Para las fechas puede asumir que existe una clase denominada
"Date(String fecha)" que permite trabajar con fechas a partir de un String que
almacene fechas del estilo "dd/mm/aaaa", donde dd es el día con 2 dígitos, mm
el número de mes y aaaa el año.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.
2. (2 Puntos) Escribir el código necesario para instanciar un nuevo pedido,
formado al menos por dos lotes de distinto tipo de envase (queda a la
elección del estudiante el valor de los distintos atributos necesarios).
Realizar las invocaciones necesarias para dar de alta en el sistema el
pedido creado previamente, asumiendo que existe una instancia de la
aplicación almacenada en la variable "aplicacionFabricaEncurtidos". Por
último, realice las invocaciones necesarias para visualizar por pantalla los
datos del pedido creado y dado de alta en el sistema, teniendo en cuenta su
fecha.

3. (2 Puntos) Escriba la implementación del método de la aplicación que


permite mostrar la información de los pedidos realizados en una
determinada fecha por un cliente concreto. De cada pedido se debe
mostrar su identificador y los lotes que lo componen, mostrando de cada
lote el número de envases y la información concreta del tipo de envase.
Para ello, puede utilizar el método de clase Date.eslguai(Date fecha1, Date
fecha2) que devuelve true en caso de que las dos fechas sean iguales o
fa/se en caso contrario.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos ha utilizado en su diseño para:

i) Imprimir por pantalla la información concreta de cada tipo de


envase, junto a la común de todos los envases.
ii) Modelar la relación entre un pedido y los lotes.
• Para la nota del examen, el test vale el 20% y el Problema vale el 80%.
• El test es eliminatorio y se necesitan 7 respuestas correctas para
superarlo.
• Resuelva el problema en una hoja aparte (máximo 2 caras).

Primera Parte: Test


1. La memoria virtual:

a. Acelera la velocidad de la C PU.


b. Se gestiona desde el sistema operativo.
c. Se gestiona directamente desde software de aplicación.
d. Incrementa la capacidad de la BIOS.

2. Teniendo en cuenta la siguiente definición, indique cuál de las siguientes


afirmaciones es correcta:
public class A {
private int a;
public int a() {
return a;

public void setA(int a) {


this.a=a}

a. Podemos definir muchos tipos distintos de clases, instanciando A.


b. Podemos instanciar objetos que representan instancias de una clase A,
teniendo todos ellos el mismo valor entero en a.
c. Podemos instanciar objetos que representan instancias de una clase A,
y todos ellos siempre devolverán el mismo valor al invocar su método a().
d. Podemos instanciar objetos que representan instancias de una clase A,
pudiendo tener distintos valores en un atributo a.

3. Indique cuál de las siguientes afirmaciones es FA LSA:

a. En Java no es posible crear múltiples instancias de una clase.


b. Los objetos pueden comunicarse entre sí invocando a los métodos de
otros objetos.
c. Los parámetros tienen tipo. El tipo define qué clase de valores puede
tomar un parámetro.
d. Los objetos tienen un estado. El estado se representa almacenando
valores en campos.

4. Indique cuál de las siguientes afirmaciones es correcta. Los métodos


selectores:

a. Permiten cambiar el estado de un objeto.


b. Son denominados a menudo métodos "set".
c. Devuelven información acerca del estado de un objeto.
d. Siempre devuelven un número entero.
5. Un método definido como "private":

a. Puede ser invocado desde la clase donde está definido y desde las
clases del mismo paquete.
b. Sólo puede ser invocado desde la clase donde está definido.
c. No puede ser invocado.
d. Puede ser invocado desde la clase donde está definido y desde
subclases de la misma.

6. En relación con el concepto de herencia en programación orientada a


objetos, las variables pueden contener objetos:

a. Del tipo declarado o de cualquier subtipo del tipo declarado.


b. Solo del tipo declarado.
c. Del tipo declarado y de cualquier tipo primitivo.
d. Las variables no pueden contener referencias a objetos.

7. Indique cuál de las siguientes definiciones es correcta según el enunciado


de la práctica obligatoria del presente curso:

a. public class lnstitucion extends Universidad {. . . }


b. public class lnstitucion extends Centrolnvestigacion {. . . }
c. public class Universidad extends lnstitucion {. . . }
d. public class Investigador extends lnstitucion {. . . }

8. Indique cuál de los siguientes no es un símbolo clave especial en javadoc:

a. @version
b. @author
c. @return
d. @class

9. Indique qué secuencia imprimiría el siguiente código:


int i = 1;
int j = 1;
while (j<3)
System.out.print J + " ") ;
j=j+i;
System.out.print l + " ") ;

a. 1 , 1 ,2, 1 ,
b. 1 ' 2,2, 1 '
c. 1 ' 1 ' 2,2,
d. 1 ' 2,3, 4,

1 O. ¿Sería correcto el siguiente código en Java?

String [ ] numeros = { " l", " 2 " , " 3 "} ;


a. No,ya que el array numeros debería ser de tipo int.
b. Sí,se creará un array con tres elementos: " 1 ", "2" y "3".
c. Sí,se creará un array con el contenido concatenado " 1 23".
d. No,porque la primera posición de todo array debe ser "0".

Segunda Parte: Problema

Se desea implementar una aplicación que permita realizar la gestión de pólizas


de salud de una aseguradora. Para ello, es necesario almacenar el nombre,
apellidos, DNI y código IBAN de cada asegurado.

Cada asegurado puede tener varias pólizas de salud contratadas, teniendo


éstas una fecha de inicio y el tipo de cobertura que tienen (total o parcial).

Esta aseguradora trabaja con dos tipos de pólizas de salud: una nacional, que
se paga en una prima anual y se necesita saber si la renovación es automática
o no; y otra dedicada para los viajes al extranjero. Esta última se caracteriza
por el país al que se viaja y la fecha de fin de vigencia.
Para todas las pólizas se quiere poder visualizar por pantalla su información
concreta.

El sistema, además de lo mencionado, deberá permitir las siguientes


funcionalidades:

i) dar de alta un nuevo asegurado;


ii) eliminar del sistema un asegurado,dado su dni;
iii) contratar una nueva póliza de salud a un asegurado existente, dado
su DNI;
iv) visualizar por pantalla los asegurados que tienen una póliza de viaje
vigente en una determinada fecha.

NOTA: Para las fechas puede asumir que existe una clase denominada
"Date(String fecha)" que permite trabajar con fechas a partir de un String que
almacene fechas del estilo "dd/mm/aaaa", donde dd es el día con 2 dígitos, mm
el número de mes y aaaa el año.

Antes de comenzar a responder, lea con atención todos los apartados. Se pide:

1. (4 Puntos) Dibujar un esquema con las clases necesarias para realizar el


diseño del sistema, indicando los atributos y métodos que tiene cada una de
ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la
programación orientada a objetos.

2. (2 Puntos) Escribir el código necesario para instanciar un nuevo asegurado


(queda a la elección del estudiante el valor de los distintos atributos
necesarios). Realizar las invocaciones necesarias para dar de alta el
asegurado en el sistema, asumiendo que existe una instancia de la
aplicación almacenada en la variable "aplicacionAseguradora". Instanciar
una nueva póliza de salud nacional (queda a la elección del estudiante el
valor de los atributos necesarios) y realizar las invocaciones necesarias al
sistema para contratar dicha póliza por el asegurado dado de alta
anteriormente.

3. (2 Puntos) Escriba la implementación del método del sistema que permite


implementar la funcionalidad iv) (visualizar por pantalla los asegurados que
tienen una póliza de viaje vigente en una determinada fecha). Se debe
mostrar el nombre, apellidos y DNI. Para ello, puede utilizar los métodos de
clase Date.esMayor(Date fecha 1 , Date fecha2) que devuelve true si la
fecha 1 es mayor que la fecha2 o false en caso contrario y el método:
Date.esMenor(Date fecha 1 , Date fecha2) que devuelve true si la fecha 1 es
menor que la fecha2 o false en caso contrario.

4. (2 Puntos) Explique qué mecanismo(-s) de la programación orientada a


objetos ha utilizado en su diseño para:

i) Imprimir por pantalla la información particular de cada tipo de


póliza y;
ii) Modelar la relación existente entre un asegurado y las pólizas que
tiene contratadas.

You might also like