Sie sind auf Seite 1von 6

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 (mximo 2 caras), indicando su
nombre y DNI.

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 ejecucin en el servidor", esto
indicara 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 mquina remota no ha podido ejecutarse
correctamente.

2. El software de sistema:

a. Permite la manipulacin y tratamiento de fotografas.


b. Permite la edicin de videos.
c. Permite aislar al usuario de los detalles del computador particular
(caractersticas de la memoria, dispositivos, etc.).
d. Permite al usuario llevar a cabo tareas especficas, como por ej. el
uso de aplicaciones ofimticas.

3. En la prctica 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 imprimira el siguiente cdigo?

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 mtodos 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 cul de las siguientes afirmaciones es correcta en la programacin


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 podran aadir


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 instruccin (personas.add(new Persona());) ya
que la clase Persona no se puede instanciar.
8. Cul 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 cdigo 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 cul de las siguientes afirmaciones es FALSA. En Java:

a. Por medio de la herencia es posible reutilizar cdigo.


b. Por medio de la composicin es posible reutilizar cdigo.
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 mtodo polimrfico en Java, permite:

a. Que dicho mtodo no devuelva ningn resultado.


b. Que el mtodo slo sea accesible desde la propia clase.
c. Java no admite polimorfismo a nivel de mtodo.
d. Que se puedan invocar distintos mtodos en diferentes momentos.
Apellidos.....Nombre..DNI...

Segunda Parte: Problema

De manera genrica, 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 opinin estar definida por la fecha en la que se realiz, el
usuario que la realiz, el objeto sobre el que se est opinando, una valoracin
representada por un nmero entero y un texto que almacena la justificacin de
la propia opinin.

Nuestro sistema, internamente, agregar todas las opiniones vertidas sobre un


objeto concreto, calculando su valoracin general. Del mismo modo, puede
devolver un ranking (una lista ordenada), de todos los objetos, en funcin de su
valoracin 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 opinin


contenga la funcionalidad explicada, es decir:

Permita aadir nuevas opiniones expresadas por usuarios sobre objetos.


Permita consultar la valoracin global de un objeto concreto, expresada
como un nmero real.
Permita obtener un ranking de objetos, proporcionando una lista con
todos los objetos sobre los que se ha opinado, ordenados en funcin de
su valoracin global.

Antes de comenzar a responder lea con atencin todos los apartados. Se pide:

1. (4 puntos) Dibujar un esquema con las clases necesarias para realizar el


diseo del problema, indicando los atributos y mtodos que tiene cada una
de ellas (slo indicarlos, sin escribir su cdigo), aplicando los principios de
la programacin orientada a objetos.

2. (2 puntos) Supongamos que queremos utilizar el sistema de opinin


modelado en el apartado anterior, para un sitio web donde los objetos a
valorar sean libros. Los libros estarn caracterizados por un ttulo, un autor
y la editorial. Siguiendo los principios de la programacin orientada a
objetos, qu modificaciones habra que realizar en el diseo del apartado
1, para adaptar el diseo a este nuevo requisito? Razone su respuesta.

SOLUCIN
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 aadir(Usuario usuario)
public void aadir(Opinion op)
public void aadir(Objecto obj)
/* metodos set y get de los
public void aadir(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 cdigo necesario para instanciar una opinin


expresada por el usuario con nombre Pepito, sobre el libro con ttulo El
guardin 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 justificacin textual dice: Libro muy entretenido. (Para
la fecha se puede utilizar el tipo de datos String). Aada la opinin al
sistema de opinin (suponga que ste ha sido previamente instanciado en
la variable sistemaOpinion) y, a continuacin, consulte la valoracin global
del mismo libro.
SOLUCIN

// Creacin del usuario


Usuario u = new Usuario(Pepito);
// Creacin del objeto libro
Libro libro1 = new Libro(1);
libro1.setTitulo(El guardin entre el centeno);
libro1.setAutor(J.D. Salinger);
libro1.setEditorial(Alianza);
// Creacin de la opinin
Opinion op1 = new Opinion();
op1.setUsuario(u);
op1.setObjeto(libro1);
op1.setValoracion(5);
op1.setFecha(19/03/2013);
op1.setTexto(Libro muy entretenido);
// Incorporacin de la opinin en el sistema de reputacin
sistemaOpinion.aadir(op1);
// Consulta de la reputacin del libro
double valoracionGlobal = sistemaOpinion.getValoracionGlobal(libro1);

4. (2 puntos) Escriba el cdigo de un nuevo mtodo del sistema, que permita


mostrar por pantalla todas las opiniones expresadas por un usuario
concreto.

SOLUCIN

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 justificacin es: +
op.getJustificacion() );
}
}
}