Você está na página 1de 192

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA- ESCUELA TÉCNICA SUPERIOR DE INGENIERIA INFORMÁTICA

71901072 -PROGRAMACIÓN ORIENTADA A OBJETOS GRADO EN INGENIERIA INFORMÁTICA/ lEC NOLOGIAS DE LA INFORMACIÓN)
JUNIO 2011 -MODELO A- LLI!I.•�;..w.&:�,alUI.lll!O.!II.':Ls:�L!i:llü.!.;.J.
� L

PARTE TEÓRICA- TEST [2,5 PUNTOS]:


Sólo una de las respuestas es válida. Las respuestas correctas se puntuarán con +1.0, mientras que las respondidas de
manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Pregunta 1: Sobre los objetos, se puede decir (índica la respuesta fa lsa )


a. Los objetos son especificados por las clases.
b. Los objetos representan instancias de las clases.
c. Los objetos se comunican con las clases con métodos.
d. Una clase puede manejar objetos.

Pregunta 2: Dado este fragmento de código, ¿cuál sería el resultado de compilar/ejecutar el código?
Número de Línea Código
4 public static void main(String[] arg s) {
5 int valor = 5;
6 cambiarValor (valor);
7 System.out.println(valor);
8
9 public static void cambiarValor(int valor) {
10 private int valor = valor * 2;
11
a. 5
b. 10
c. Error en la línea 10
d. Error en la línea 6

Pregunta 3: Dado el siguiente código, ¿cuál será su salida?


Número de Línea Código
4 class Cantante { public static String cantar () { return "la"; } }
5 public class Tenor extends Cantante {
6 public static String cantar ( ) { return 11 fa11;
7 public static void main (String[] args)
8 Tenor t = new Tenor();
9 Cantante s = new Tenor();
10 System.out.println(t.canta r () + 11 11 + s.cantar());
11
12
a. fa fa
b. fa la
c. la la
d. la fa

Pregunta 4: ¿Cuál de los siguientes condicionales compilaría sin errores?


int[] array = new int[l5] ;
11 EL CÓ D IGO IRÍA AQUÍ
array[j] = j;

a. for (int j =O ; j<array.length; j++)


b. for (int j=O; j<array.length (); j++)
c. for (int j=O; j <a rra y.si z e; j++)
d. for (int j=O; j <arr ay. si ze ( ) ; j+ +)
Pregunta 5: Tienes que hacer una clase que almacena objetos únicos. No es necesario que estén ordenados. ¿Qué
interfaz sería la más apropiada implementar en esta clase?
a. Set
b. List
c. Map
d. Vector

Pregunta 6: Cuando varios componentes de un software colaboran para completar una misma tarea se dice que entre
ellos hay ...
a. una clase clara y bi en definida.
b. una instancia clara y bien definida.
c. una interfaz clara y bien definida.
d. un proceso claro y bien definido.

Pregunta 7: Dado el siguiente código, ¿cuál será su salida?


Número de Línea Código
4 class Vehículo {
5 public void imprimirSonido()
6 System.out.print("Vehiculo");
7
8
9 class Coche extends Vehiculo {
10 public void imprimirSonido()
11 System.out.print("Coche") ;
12
13
14 class Bicicleta extends Vehículo {
15 public void imprimirSonido()
16 System.out.print("Bicicleta");
17
18
19 public class Test {
20 public static void main (String[] args)
21 Vehículo v = new Coche();
22 Bicicleta b = (Bicicleta) v;

23 v.imprimirSonido() ;
24 b.imprimirSonido() ;
25
26
a. Fallo de compilación.
b. Lanza una excepción en tiempo de ejecución.
c. Imprime "VehiculoCoche".
d. Imprime "BicicletaBicicleta".
Pregunta 8: ¿Qué pasará si se compila 1 ejecuta este código?
Número de Línea Código
4 class Padre {}
S class Hijo extends Padre { }
6 class Hijo2 extends Padre { }
7 public class CEx{
8 public static void main(String[] args) {
9 Padre p=new Padre();
10 Hijo h=(Hijo) p;
11
12
a. El código compilará y se ejecutará sin errores.
b. El código daría un error a compilar.
c. El código daría un error a ejecutar.
d. El código no daría ningún error; sin embargo, h no tendría el tipo deseado.

Pregunta 9: ¿ c uá l sería el resultado de ejecutar el método goo ( ) ?


Número de Línea Código
4 public void goo()
S foo f = new foo();
6 System.out.println(f);
7
8 public class foo {
9 String f = "22";
10 public String toString() {
11 return("44");
12
13 public foo (){ }
14
a. null
b. 22
c.44
d. Un error de ejecución

Pregunta 10: ¿Cuál de las siguientes definiciones es correcta para una clase abstracta?
a.abstract Animal { abstract void ladrar(); }
b.class abstract Animal { abstract void ladrar();}
c.abstract class Animal { abstract void ladrar(); }
d.abstract class Animal { abstract void ladrar() { System.out.println("RRRRRRR") ; } }

Pregunta 11: ¿Cómo podemos detectar que el usuario ha hecho click en un botón en una interfaz Swing?
a. Implementando public void eventPerformed(ActionEvent e) de la interfaz ActionListener
b. Implementando public void actionPerformed (ActionEvent e) de la interfaz ActionListener
c. Implementando public boolean actionPerformed (ActionEvent e) de la interfaz ActionListener
d. Implementando public void actionPerformed (Event e) de la interfaz ActionListener

Pregunta 12: Las sentencias de código que podrían lanzar una excepción se protegen de la siguiente manera:
try {
11 aquí se protege una o más sentencias

11 aquí se informa y se recupera de la excepción

¿Qué habría que colocar en el hueco correspondiente?


a.catch (exception Exception)
b. catch (Event exception)
c.catch (Exception exception)
d.catch (event Exception)
Pregunta 13: Las clases de un sistema corresponden a las X y los métodos a las Y. Donde X y Y son . ..
a. X= verbos, Y= sustantivos
b. X= sustantivos, Y= verbos
c. X =sustantivos, Y =sustantivos
d. X= verbos, Y = verbos

Pregunta 14: ¿Cómo se puede crear una nueva instancia de la clase Vector y añadir un elemento? (índica la respuesta
falsa)
a.Vector<Integer> v new Vector<Integer>(); v.add(99);
b.Vector<Integer> v new Vector<Integer>(99); v.add(99);
c.Vector<Integer> v = new Vector<Integer>(99, 99); v.add(99);
d.Vector<Integer> v = new Vector<Integer>(99); v.add(99, 99);

Pregunta 15: Sobre una variable local que se declara dentro del bloque "try" , se puede decir que ...
a. es visible dentro de los bloques "catch" y "finally".
b. es visible dentro del bloque "catch" pero no del bloque "finally".
c. es visible dentro del bloque "finally" pero no del bloque "catch".
d. no es visible dentro de los bloques "catch" y "f in ally".

PARTE PRÁCTICA [6,5 PUNTOS]:


Una empresa de alquiler de automóviles tiene a su disposición un conjunto de vehículos indicados en
la siguiente tabla. Se quiere diseñar e implementar un programa que almacene y gestione la información
relacionada con estos vehículos.

marca, matrícula, número de identificación, número de kilómetros, estado actual de


Motos
de sito de ina.
marca, matrícula, número de identificación, tipo (normal 1 familiar), número de
Coches (turismos) puertas, número de kilómetros, tipo de motor (gasolina 1 gasoil), estado actual del
de sito.
marca, matrícula, número de identificación, capacidad de motor, número de
Coches (deportivos) kilómetros, turbo o no, número de puertas, número de asientos, estado actual del
de sito de salina.
marca, matrícula, número de identificación, número de kilómetros, tipo de motor
Coches (4x4)
lina soil número de asient estado actual de de
marca, matrícula, número de identificación, número de kilómetros, número de
Monovolúmenes puertas, puertas laterales, número de asientos, tipo de motor (gasolina 1 gasoil),
ca ito.
marca, matrícula, número de identificación, número de kilómetros, capacidad de
Furgonetas
ca , altura, estado actual del depósito de soil.

Se pide:
1) [1,5 puntos] Identificar la estructura y las relaciones de herencia y de uso de las clases necesarias para
almacenar y gestionar esta información.
2) [1,5 puntos] Dibujar un esquema de la organización de estas clases en el diseño global.
3) [2,0 puntos] Implementar la especificación de las clases.
4) [1,5 puntos] Se quiere declarar un array de objetos para almacenar todos los vehículos,
independientemente del tipo.
a) ¿Cómo declararías el array?
b) ¿Qué métodos se necesitan para acceder a un vehículo concreto?
e) ¿Cómo se almacenan las diferencias entre los distintos tipos de vehículos?
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA- ESCUELA TÉCNICA SUPERIOR DE INGENIERIA INFORMÁTICA
71901072 -PROGRAMACIÓN ORIENTADA A OBJETOS GRADO EN INGENIERIA INFORMÁTICA/ lEC NOLOGIAS DE LA INFORMACIÓN)
JUNIO 2011 -MODELO B- LLI!I.•�;..w.&:�,alUI.lll!O.!II.':Ls:�L!i:llü.!.;.J.
� L

PARTE TEÓRICA- TEST [2,5 PUNTOS]:


Sólo una de las respuestas es válida. Las respuestas correctas se puntu arán con +1.0, mientras que las respondidas de
maner a incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Pregunta 1: Dada la declaración de las siguientes variables, indicar cuáles de ellas son correctas.
1. float foo = -1;
2. float foo1 l. O;
3. float foo2 42e1;
4. float foo3 2.02f;
5. float foo4 3_03d;
6. float foo5 Ox0123;
a. 1 y 2
b.l y3
c. 4 y 6
d. 3 y4

Pregunta 2: Dado el siguiente fragmento de código, indica cuál de las siguientes afirmaciones es correcta en relación al
valor de la variable foo.
Número de Línea Código
4 int index 1; =

5 boolean[] test = new boolean[3] ;


6 bo o1ean foo = t est [index];
a. foo tiene el valor O
b. foo tiene el valor null
c. foo tiene el valor false
d. Se produce una excepción y foo no posee ningún valor

Pregunta 3: Dadas las siguientes expresiones, indica cuál de las opciones es la correcta.
l. (1 > 1) && (1 > 1) == (1 > 1) == false
2. (1 == 1) 1 (10 > 1) == true 1 true == true
a. La expresión 1 es evaluada como falsa y la expresión 2 como falsa.
b. La expresión 1 es evaluada como falsa y la expresión 2 como verdadera.
c. La expresión 1 es evaluada como verdadera y la expresión 2 como falsa.
d. La expresión 1 es evaluada como verdadera y la expresión 2 como verdadera.

Pregunta 4: Dado el siguiente código, ¿cuál es su resultado?


Número de Línea Código
4 class Top {
5 public Top(String s) { System_out.print("B");
6
7 public class Bottom2 extends Top {
8 public Bottom2( String s) { System.out.print ("O");
9 public static void main(String [] args) {
10 Bottom2 obj=new Bottom2 ( "C");
11 System.out. println (" ") ;
12
13
a. BD
b. DB
c. BDC
d. Error de compilación
Pregunta 5: Dado el siguiente código, ¿cuál de las afirmaciones es cierta?
Número de Línea Código
4 class Hotel
S public int reservas;
6 public void r es ervar ( )
7 reserva s++ ;
8
9
10 public class Sup erHot el extends H ot el {
11 public void reservar ( ) {
12 reservas--;
13
14 public void reservar (int size)
15 reservar();
16 super.reservar ();
17 reservas += size;
18
19 public static void main (String[] args)
20 SuperHotel hotel = new SuperHotel();
21 hotel r es erv ar (2);
.

22 System.out.print(hotel.reservas);
23
24
a. Error de compilación.
b. Lanza una excepción en tiempo de ejecución.
c. o.
d. 2.

Pregunta 6: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta:
a. La depuración es la actividad cuyo objetivo es determinar si una pieza de código produce el comportamiento
pretendido.
b. La prueba viene a continuación de la depuración.
c. La depuración es una actividad dedicada a determinar si un segmento de código contiene errores.
d. La depuración es el intento de apuntar con precisión y corregir un error en el código.

Pregunta 7: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta:
a. Un encapsulamiento apropiado en las clases reduce el acoplamiento.
b. El término acoplamiento describe cuánto se ajusta una unidad de código a una tarea lógica o a una entidad.
c. El acoplamiento describe la conectividad de los propios objetos de una clase.
d. Un sistema débilmente acoplado se caracteriza por la imposibilidad de modificar una de sus clases sin tener que
realizar cambios en ninguna otra.

Pregunta 8: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es FALSA
en relación a los métodos polimórficos:
a. Una variable polimórfica es aquella que puede almacenar objetos de diversos tipos.
b. Las llamadas a métodos en Java no son polimórficas.
c. El mismo método puede invocar en diferentes momentos diferentes métodos dependiendo del tipo dinámico de la
variable usada para hacer la invocación.
d. Cada objeto en Java tiene un método toString que puede usarse para devolver un String de su representación.

Pregunta 9: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes opciones declarará un
método en una clase que fuerza a una subclase a implementarlo:
a.static void methoda (double dl) { }
b.public native double methoda();
c.abstract public void methoda();
d.protected void methoda (double dl) { }
Pregunta 10: Dado el siguiente fragmento de código que pretende mostrar un ejemplo de sobrescritura, indique cuál de
las siguientes opciones completaría el código para dar lugar a un ejemplo correcto de sobrescritura:
Número de Línea Código
4 class BaseClass {
S prívate float x = l.Of
6 protected float getVar () { return x; }
7
8 class Subclass extends BaseClass
9 prívate float x = 2.0f;
10 //Insertar código aquí
11
a.float getVar { return x; }
b. public f loat getVar ( ) { return X; }
c. float double getVar ( ) { return x; }
d.public float getVar (float f ) return f; }

Pregunta 11: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta en relación a la programación por parejas:
a. Consiste en programar una clase por duplicado con el objetivo de depurar los errores más fácilmente.
b. Es una manera de producir código, opuesta a la programación extrema en la que un solo programador desarrolla las
clases asignadas.
c. Era una técnica de programación tradicional que las empresas eliminaron para reducir costes.
d. Es uno de los elementos de una técnica que se conoce como programación extrema.

Pregunta 12: La ejecución del siguiente fragmento de código ...


Número de Línea Código
4 import javax.swing.*;
S class PrimerFrame extends JFrame
6
7 public PrimerFrame()
8 {
9 setTitle("Mi primer programa gráfico");
10 setSize(400, 100);
11
12
13 public class FrameTest
14 {
1S public static void main (String[] args)
16 {
17 JFrame frame = new PrimerFrame();
18 frame.setVisible (true);
19
20
Da lugar al siguiente programa:

Pero este último programa tiene el problema de que cuando se cierra la ventana, a pesar de que dejamos de verla, el
programa no finaliza su ejecución. De esta forma, para que el programa funcione correctamente, hemos de interceptar
el evento que se produce cuando cerramos la ventana y hacer que el programa termine su ejecución en ese momento.
Indique qué clase hemos de definir en este caso y asociárselo al JFrame del ejemplo:
a.ActionListener
b.ComponentListener
c. WindowListener
d. ItemListener
Pregunta 13: En el siguiente fragmento de código hemos definido la ejecución de cinco bloques. Estos bloques se
ejecutarán dependiendo de las excepciones que se produzcan en cada caso. Indique cuál de las siguientes afi rmac iones
es correcta:
Número de Línea Código
4 11 Bloquel
5 try{
6 11 Bloque2
7 }eateh (ArithmetieExeeption e)
8 11 Bloque3
9 }finally{
10 11 Bloque4
11 }
12 11 BloqueS
a. El Bloque4 no se ejecutará si se produce una excepción de tipo aritmético en el Bloque2
b. El Bloque4 no se ejecutará si se produce un acceso a un objeto nulo (null) en el Bloque2
c. El Bloque4 se ejecutará antes que el Bloque3 si se produce una excepción de tipo aritmético en el Bloque2
d. El Bloque4 se ejecutará antes de que la excepción producida por un acceso a un objeto nulo (null) en el Bloque2 se
propague hacia arriba

Pregunta 14: Indique el resultado de ejecutar el siguiente código que se muestra a continuación:
Número de Línea Código
4 publie elass test {
5 publie statie void add3 (Integer i)
6 int val = i.intValue();
7 val += 3;
8 i
= new Integer (val);
9
10 pu bli e statie void main (String args[] )
11 Integer i = new Int eg er (0);
12 add3 (i);
13 System.out.println (i.intValue ( ) );
14
15
a. El programa indicará un fallo en tiempo de compilación.
b. El programa imprime por pantalla el valor "0".
c. El programa imprime por pantalla el valor "3".
d. El programa lanzará una excepción en la línea 6 (int val i.intValue (); ) .

Pregunta 15: Dado el siguiente código . .


.

Número de Línea Código


4 publie elass testJunio
5 publie void setVar (int a , int b, float e)
6 }
7 11 INSERTAR CÓDIGO AQUÍ
8
Y los siguientes métodos:
1 private void setVar (int a , float e, int b) { }
2 proteeted void setVar (int a, int b, float e) {
3 publie int setVar (float a , int b , int e) { return b; }
4 publie int setVar (int a, int b, float e) { return a; }
5 proteeted float setVar (int a , int b, float e) { return e;}
Indique qué métodos permiten una sobrecarga del método setVar de manera correcta:
a. 1 y 2
b.l y 3
c. 3 y 5
d. 3 y 4
PARTE PRÁCTICA (6,5 PUNTOS]:
El juego del Cinquillo Solitario es una variedad del popular Cinquillo en el cual un jugador puede jugar
de manera online contra el ordenador. El juego se inicia con el reparto de todas las cartas de una baraja
española que consta de 48 naipes o cartas, clasificados en cuatro palos (oros, bastos, copas y espadas) y
numerados del 1 al 12. El objetivo del juego consiste en descartarse (quedarse sin cartas) antes que el
oponente.
El jugador que posee el cinco de oros lo coloca boca arriba encima de la mesa y de esta forma empieza
el turno de descartes. En turnos alternativos, cada jugador puede descartarse de máximo un naipe. Solo se
pueden colocar cincos o todas aquellas cartas que siguen en progresión ascendente o descendente a las que
hay en la mesa y sean del mismo palo. Es decir, si por ejemplo solamente está colocado el cinco de oros en la
mesa, los jugadores solo podrán colocar el seis o el cuatro de oros o un cinco de otro palo.
Si un jugador no puede colocar ninguna carta pasa, y le toca el turno al siguiente jugador. Nunca se
puede pasar si se puede colocar alguna carta. El primer jugador que consigue colocar todas sus cartas sobre la
mesa es el ganador.
En cuanto a la dinámica del juego, uno de los contrincantes será un jugador humano (introducimos sus
datos y sus preferencias por el teclado) y el otro contrincante será el propio ordenador.

a) [1,5 puntos] Diseñe las clases necesarias que permita desarrollar el juego del Cinquillo Online utilizando
un paradigma orientado a objetos. Debe hacerse uso de los mecanismos de la programación orientada a
objetos siempre que sea posible y un diseño que permita la reutilización del código y facilite su
mantenimiento.
b) [1,5 puntos] Implemente un método que defina el funcionamiento del ordenador, teniendo en cuenta que
todos sus procesos tienen que hacerse automáticamente sin la intervención del usuario.
e) [1,5 puntos] Proporcione un método que muestre la lógica del juego, definiendo la información necesaria
para establecer el uso de clases, interacciones entre elementos, declaración y uso de variables y métodos
necesarios, etc.
d) [2,0 puntos] Indiqué qué modificaciones son necesarias introducir en la aplicación para permitir la
participación de varios jugadores humanos (hasta 4). Para ello el juego en lugar de constar de partidas
individuales e11 las cuales gana el jugador que antes se descarta, para a ser una partida formada por un
conjunto de rondas. El ordenador deberá llevar un registro de los puntos que cada jugador ha conseguido
en cada ronda. El jugador que consigue descartarse primero logrará 3 puntos, el jugador o jugadores que
se quede con un mayor número de cartas al finalizar la ronda obtendrá O puntos. El resto obtendrá 1
punto. La partida finaliza cuando un jugador consiga llegar al menos a los 10 puntos, ganando el que más
puntos tenga en caso de superar esta puntuación varios jugadores. En caso de empate se jugará una ronda
extra para decidir el ganador.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA- ESCUELA TÉCNICA SUPERIOR DE INGENIERIA INFORMÁTICA
71901072 -PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERIA INFORMÁTICA/ lEC NOLOGIAS DE LA INFORMACIÓN)
SEPTIEMBRE 2011- MODELO A - No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONA

PARTE TEÓRICA- TEST [2,5 PUNTOS]:


Sólo una de las respuestas es válida. Las respuestas correctas se puntuarán con +1.0, mientras que las respondidas de
manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Pregunta 1 ¿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);

Pregunta 2 ¿Qué pasaría a continuación si se crea un objeto sin parámetros con la sentencia A obj A new A ();
siendo la clase A la siguiente?

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

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
publicA(intnA){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()

Pregunta 3 ¿Qué es necesario si queremos utilizar el método de una clase predefinida como por ejemplo
lnteger.parselnt("String");?
a) Solamente se crea una instancia de la clase predefinida.
En este caso: lnteger integ new lnteger(); integ.parselnW'String");
=

b) No es necesario importar la clase en cuestión ni crear una instancia de la clase predefinida


e) Importar la clase en cuestión. En este caso: import java.lang.lnteger; y crear una instancia de la clase
predefinida. En este caso: lnteger integ = new lnteger(); integ.parselnt("String");
d) Solamente se importa la clase en cuestión. En este caso: import java. lang.lnteger;

Pregunta 4 Un método de clase static, ¿se pod rí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
e) Sí, se podría llamar al método desde la misma clase
d) Si, se podría llamar al método pero sólo si la clase es abstracta

Pregunta S Suponie·ndo 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
e) "calcula_area" en figura y no en sus subclases
d) No puede ser ejecutado de ninguna manera
Pregunta 6 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 manera 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
e) "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

Pregunta 7 ¿Cuál de las siguientes declaraciones nunca podría generar dos objetos de la misma clase con los mismo
valores?
a) Triangulo objCirl=new Triangulo(5, 8);
Triangulo objCir2=new Triangulo(objCirl);
b) Triangulo objCirl=new Triangulo(5, 8);
Triangulo objCir2=objCirl;
e) Triangulo objCirl=new Triangulo(5, 8);
Triangulo objCir2=new Triangulo(5, 8);
d) Triangulo objCirl=new Triangulo(S);
Triangulo objCir2=new Triangulo(S);

Pregunta 8 Una diferencia entre HashSet y TreeSetes ...


a) HashSet implementa la interfaz Set y TreeSet no
b) En TreeSet se permiten elementos repetidos y en HashSet no
e) TreeSet mantiene todos los elementos ordenados en su orden natural o de acuerdo a como indique el
Comparator que se indica en el constructor, y HashSet no hace esto
d) HashSet se puede recorrer mediante un lterator, mientras que TreeSet no

Pregunta 9 ¿Qué tipo de acceso se puede emplear para sobrecargar los métodos que implementan una interfaz?
a) Pueden ser métodos con acceso public y prívate, pero no protected
b) Sólo pueden ser con acceso public
e) Sólo pueden ser con acceso prívate
d) Pueden emplear cualquier tipo de acceso de Java

Pregunta 10 ¿Qué s.e entiende por cohesión en lo que a una unidad de código se refiere?
a) Que la unidad de código es responsable de una y sólo una tarea
b) Que la unidad de código no se descompone en otras unidades de programación (métodos)
e) Que todos los métodos que forman parte de la unidad de código se encuentran en la misma clase
d) Todas las anteriores son correctas

Pregunta 11 Respecto a las variables polimórficas en Java ...


a) Es aquella que puede almacenar varios objetos de diferentes tipos
b) Ese concepto, al igual que la herencia múltiple, no se implementa en Java
e) Cada variable objeto en Java es potencialmente polimórfica
d) Se declaran siempre como public o prívate, pero nunca protected

Pregunta 12 Respecto a la declaración de las clases internas y su relación con su clase envolvente...
a) La clase interna puede acceder tanto a los métodos privados como a los públicos y protegidos de la clase
envolvente
b) La clase interna puede acceder tanto a los métodos públicos como a los métodos protegidos de la clase
envolvente, pero no a los métodos privados de la misma
e) La clase interna puede acceder a los métodos públicos de la clase envolvente, pero no a los métodos
privados ni a los protegidos de la misma
d) La clase interna no puede acceder ni a los métodos públicos ni a los privados ni a los protegidos de la clase
envolvente
Pregunta 13 En lo que se refiere a las clases internas anónimas, se puede afirmar...

a) Suelen emplearse en los lugares en los que se requiere la implementación de una sola instancia
b) Siempre se hará referencia la instancia mediante su supertipo
e) Permiten definir una clase y crear una instancia de ella, todo en un solo paso
d) Todas las anteriores son correctas

Pregunta 14 ¿Cuál de las siguientes afirmaciones es cierta para los interfaces en Java?
a) Todos los métodos de la interfaz son abstractos, pero se permiten métodos con cuerpos. No es necesaria la
palabra clave abstract
b) Todos los métodos de la interfaz son abstractos, luego no se permiten métodos on cuerpos. Es necesaria la
palabra clave abstract
e) Todos los métodos de la interfaz son abstractos, luego no se permiten métodos con cuerpos. No es
necesaria la palabra clave abstract
d) Ninguna de las afirmaciones anteriores es cierta

Pregunta 15 ¿Qu é instrucción permite cargar en la variable "a" el tamaño del array?
a) int a; int [ ] b new int[lO]; a=b.size;
b) int a; int [ ] b new int[lO]; a=b.size () ;

e) int a; int [] b new int[lO]; a=b.length;


d) int a; int [] b new int [lO ] ; a=b.length();

PARTE PRÁCTICA [6,5 PUNTOS]:

Un banco desea enviar a sus clientes una carta, mensaje de correo electrónico o mensaje al móvil (según los
datos y preferencias de cada cliente) de agradecimiento por cada uno de los productos financieros que ha
contratado el cliente. Cada cliente puede haber contratado varios productos (tarjetas de crédito, débito, plan
de pensiones, seguro, fondos de inversión, etc.) y cada tipo de producto requiere una carta/mensaje
diferente. Se quiere usar una jerarquía de clases para representar los diferentes tipos de producto y otra para
los diferentes tipos de mensajes. Para el programa hay que usar un Arraylist del tipo más adecuado más un
iterador para gestionar el envío de mensajes conjuntamente.

a) [2 puntos] Identificar la estructura y las relaciones de herencia y de uso de las clases necesarias para la
aplicación que realice el trabajo descrito.
b) [2 puntos] Dib,ujar un esquema de la organización de estas clases en el diseño global.
e) [2 puntos] Implementar el método "main" del programa mostrando cómo se gestiona el envío de los
mensajes.
d) [0,5 puntos] ¿Qué cambios serían necesarios en el diseño y programa para mandar otro tipo de mensaje,
algo de publicidad sobre nuevos productos, conjuntamente con el mensaje de agradecimiento?
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA- ESCUELA TÉCNICA SUPERIOR DE INGENIERIA INFORMÁTICA
71901072 -PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERIA INFORMÁTICA/ lEC NOLOGIAS DE LA INFORMACIÓN)
SEPTIEMBRE 2011 -MODELO B- No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONA

PARTE TEÓRICA- TEST [2,5 PUNTOS]:


Sólo una de las respuestas es válida. Las respuestas correctas se puntuarán con +1.0, mientras que las respondidas de
manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la n ot a
.

Pregunta 1: Dada la siguiente clase TV:

l. public class TV {
2. prívate String marca;
3. prívate String modelo;
4.
5. public TV(String marca, String modelo) {
6. this.marca = marca;
7. this.modelo = modelo;
8.
9.
10. publicboolean equals(TV other) {
11. returnmarca.equals(other.marca) &&
12. modelo.equals(other.modelo);
13. }
14.
15.

¿Cuál sería el resultado de ejecutar el siguiente código?

TV a = new TV("Philips", "42PFL5603D");


TV b = new T V ( "Philips ", "42PFL5603D");
if(a.equals(b)) {
System_out.println("iguales");
} else {
System.out.println("no son iguales");
}

a) iguales
b) no son iguales
e) Err or de compilación en la línea 11
d) Excepción en tiempo de ejecución en la línea 15

Pregunta 2: ¿cual es el resultado de la ejecución de las siguientes líneas de código?

28. Integer i = 5;
29. switch (i) {
30. case 1: System.out.print (l); break;
31. case 3: System.out.print(3);
32. case 5 : System.out.print (5);
33. case 7: System.out.print(7); break;
34. default : System.out.print("default");
35. }

a) 5
b) 57
e) 57default
d) Error de compilación en la línea 29
Pregunta 3: Dado el siguiente código:

30. Set < Object >objetos = new HashSet< Object > ();
31. Str ing one = "hola";
32. int two = 2;
33. Boolean three new Boolean(true);
=

34. objetos.add(one);
35. objetos.add(two);
36. objetos.add(three);
37. objetos.add(three);
38. for(Object objeto : objetos)
39. System.out.print (objeto);}

¿Cuál de las siguientes afirmaciones es cierta?

a) La salida es hola, 2 y true en un orden no determinado.


b) La salida es hola, 2, true y true en un orden no determinado.
e) Error de compilación en la línea 35.
d) Excepción en tiempoO de ejecución en la línea 37.

Pregunta 4: Dadas las siguientes definiciones de clase y de interfaz:

l. //Legible.java
2. public interface Legible
3. public void leer() ;
4. pu bli c i n t Mll.X LENGTH 10;
5.

l. //MiLector.java
2. public class MiLector implements Legible {
3. public void leer() {
4. Legible.MAX_LENGTH = 25;
5. System.out.println(Legible.MAX_LENGTH);
6.
7.

¿cuál sería el resultado de ejecutar la siguiente línea de código? newMiLector().leer() ;

a) 25
b) 10
e) Error de compilación en la línea 4 deLegible.java
d) Error de compilación en la línea 4 deMiLector.java

Pregunta 5: ¿cual es la salida del siguiente código?

5. int x = 5 * 4 % 3;
6. System.out.println(x);

a) Error de compilación en la línea S.


b) 2
e) 3
d) 6
Pregunta 6: ¿cuál sería la salida del siguiente código?

3. int x = 0;
4. String = null;
s
5. if(x == s) {
6. System.out.println("Exito");
7. else {
8. System.out.println("Fracaso");
9.

a) Éxito
b) Fracaso
e) Error de compilación en la línea 4.
d) Error de compilación en la línea S.

Pregunta 7: ¿cuál sería la salida del siguiente código?

l. publicclassForma {
2. private String color;
3.
4. publicForma(String color)
5. System.out.print("Forma");
6. this. color = color;
7.
8.
9. public static void main(String [] args)
10. newRectangulo();
11. }
12.}
13.
14. classRectangulo extends Forma {
15. publicRectangulo() {
16. System.out.print("Rectangulo");
17.
1 8.

a) FormaRectangulo
b) RectanguloForma
e) Rectangulo
d) Error de compilación en la línea 15

Pregunta 8: Dada la siguiente definición de clase:

l. importjava.awt.*;
2. importjava.awt.event.*;
3.
4. public class MyWindow
5. private Frame frame new Frame();
6.
7. public void registerEvents() {
8. WindowAdapterwa = new WindowAdapter()
9. public void windowClosing(WindowEvent e) {
10. frame.setVisible(false);
11. frame.dispose();
12.
13. };
1 4. frame.addWindowListener(wa);
15.
16.}
¿cuál de las siguientes afirmaciones es cierta?

a) Hay un error de compilación en las líneas 10 y 11.


b) El objeto que se instancia en la línea 8 no tiene acceso al campo frame de la línea S porque este es privado.
e) El método de la línea 9 no se ejecuta nunca ya que deja de ser accesible a partir de la línea 15.
d) La clase anónima anidada de la línea 8 extiende la claseWindowAdapter.

Pregunta 9: ¿cual es la salida del siguiente código?

3. int x = 10, y = 3;
4. if(x % y == 2)
5. System.out.print("dos");
6. System.out.print(x%y);
7. if(x9¿y == 1)
8. System.out.print("uno");

a) dosl
b) dos2
e) uno
d) luna

Pregunta 10: ¿Cual es el resultado del siguiente código?

4. final char a = 'A', d = 'O';


5. charneta = 'B';
6. switch(nota)
7. case a :
8. case 'B' :
9. System.out.print("enhorabuena");
10. case 'C' :
11. System.out.print("aprobado");
12. break;
13. case d :
14. case 'F' :
15. System.out.print("notgood");
16.

a) enhorabuena
b) enhorabuenaaprobado
e) Error de compilacion en la línea 4
d) Error de compilacion en la línea 7
Pregunta 11: ¿cual es la salida del siguiente código?

l. public class Incognita {


2. public static intmetodoincognita(String input) {
3. int count = O;
4. int length input.length();
=

5. int i = O;
6.
7. String lowercase input.toLowerCase();
=

8. while(i < length) {


9. switch(lowercase.charAt(i))
10. case 'a, :
11. case 'e, :
12. case 'i, :
13. case 'o, :
14. case 'u' :
15. count++;
16.
17. i++;
18.
19. return count;
20.
21.
22. public static void main(String [) args)
23. int x = metodoincognita("Otorrinolaringologo");
24. System.out.print(x);
25. }
26. }

a) O
b) 9
e) 19
d) 20

Pregunta 12: ¿cual es el resultado del siguiente programa?

l.publicclassComparadorRaro {
2. privatelnteger x;
3.
4. publicbooleancompare(int y) {
S. return x ==y;
6.}
7.
8. public static void main(String [] args) {
9. ComparadorRaro u = new ComparadorRaro();
10. if(u.compare(21)) {
11. System.out.println("true");
12. } else {
13. System.out. println("false");
14.
1S.}
16.}

a) true
b) false
e) Error de compilación en la línea S.
d) La línea S lanza una excepción NuiiPointerException
Pregunta 13: Termina la frase. Si todos los campos no finales de una clase se declaran como privados y, además, la clase
contiene métodos públicos para modificar o consultar dichos campos, esto es un ejemplo de:

a) Encapsulamiento alto
b) Acoplamiento bajo
e) Cohesión alta
d) Una relación "es un"

Pregunta 14: Dada la siguiente clase Television:

public class Television {


publicintcanal;
privatebooleanestaEncendida;
privateintvolumen;
publicvoidcambiarCanal(intnuevoCanal) {
canal = nuevoCanal;

publicintconsultarCanal() {
returncanal;

publicvoidencender() {
estaEncendida "'true;

publicvoidapagar() {
estaEncendida = false;

publicvoidsubirVolumen() {
volumen+= 1;

public void bajarVolumen() {


volumen -= 1;

¿Qué podemos afirmar?


a) La clase está altamente encapsulada.
b) La clase está altamente acoplada
e) La clase tiene un grado de cohesión alto
d) La clase tiene un grado de cohesión bajo

Pregunta 15: Dada la siguiente declaración:

Map < String, Double > map new HashMap< String, Double > ();

¿Cuál de las siguientes opciones es correcta?

a) map.add( " pi 3.14159);


",

b) map.add( " e " , 2.71828D);


e) map.add( " log(l) " , new Double(O.O) ) ;
d) Ninguna de las anteriores.
PARTE PRÁCTICA (6,5 PUNTOS]:

La Universiidad Sin Distancias (USD) quiere diseñar un sistema de gestión de matrículas de alumnos, del
que también forman parte los profesores. Las universidades a nivel nacional se identifican por el nombre, la
dirección y el teléfono de información. Desde el punto de vista de la matrícula, la USD se considera como un
conjunto de estudiantes, a cada uno de los cuales se le debe asignar un número de identificación personal. Los
estudiantes asisten a cierto número de cursos, cada uno de los cuales es impartido por un profesor. En cuanto
a los profesores, la USD se divide en departamentos, cada uno de los cuales está formado por varios
profesores, uno de los cuales actúa como director del departamento. Cada profesor sólo puede pertenecer a
un departamento. A su vez, los departamentos tienen la responsabilidad de impartir uno o más cursos. El
sistema debe permitir añadir o borrar estudiantes, departamentos y profesores, así como realizar consultas
sobre cada uno de estos estamentos.

a. [2 puntos] Identifique las clases necesarias para resolver el problema. Indique, para cada una de ellas, sus
miembros de clase y su ámbito, así como las relaciones existentes entre estas. Ilustre esto último con un
diagrama de clases.
b. [1,5 puntos] Suponiendo que existen y están definidos los métodos "get" y "set" para aquellos miembros
de clase que haya definido como privados, escriba los métodos: "nuevaMatrícula" que permita realizar la
gestíón de una nueva matrícula tal y como se ha descríto en la específícacíón y el método "nuevoProfesor"
que permita añadir un nuevo profesor en el organigrama de la Universidad. Indique además en qué
clase/es incluiría estos métodos.
a) [1,5 puntos] Suponiendo que existen y están definidos los métodos "get" y "set" para aquellos miembros
de clase que haya definido como privados, escriba un método "nuevoDepartamento" que permita añadir
un nuevo departamento con su correspondiente nuevo conjunto de cursos y profesores. Indique además
en qué clase o clases se deberían íncluir estos métodos.
c. [1,5 puntos] En el caso de que la Universidad decidiera realizar una división interna en la que los
departamentos pertenecieran a una determinada escuela o facultad, ¿qué modificaciones se tendrían que
realizar en el díseño de las clases y en el método "nuevoProfesor"?
UN IVERSIDAD NACIONAL D E EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR D E INGEN IERIA
IN FORMÁTICA
71 901 072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERIA INFORMÁTICA / TECNOLOGIAS DE
LA INFORMACIÓN)
JUNIO 2012 - MODELO A -

PARTE TEÓRICA - TEST [2,5 PUNTOS]:


Sólo una de las respuestas es válida. Las respuestas correctas se puntuarán con +1.0, m ientras q u e las respondidas de
manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Pregunta 1: Según el texto de la bibliografía básica de la asignatura, indique cuál d e las siguientes afirmaciones es
correcta:
a. Los métodos pueden devolver información de algún objeto mediante un valor de retorno.
b. Los métodos siempre tienen parámetros con los que obtener la información necesaria.
c. A partir de una clase tan solo se puede crear un solo objeto.
d. El estado de los objetos se representa mediante los parámetros de su constructor.

Pregunta 2: Dado el siguiente fragmento de código, indique cuál de las siguientes afirmaciones es el resultado de su
ejecución:
if{" S t ri ng " . t r i m ( ) == " S t r i ng " )
S y s t em . o u t . p r i n t l n ( '' I gu a l '' ) ;
el se
S y s t em . o u t . p r i n t l n ( ''No I g u a l '' ) ;

a. El código compilará e i m primirá 111gual11•


b. El código compilará e imprimirá "No Igual".
c. El código provocará un error de compilación.
d. El código provocará un error en tiempo de ejecución.

Pregunta 3: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta:
a. Los campos se conocen como variables de objeto.
b. El alcance de una variable define la sección de código desde donde la variable puede ser declarada.
c. Los constructores permiten que cada objeto sea preparado adecuadamente cuando es creado.
d. El tiempo d e vida de una variable describe el número de veces que es utilizada en u n método.

Pregunta 4: Según el texto de la bibliografía básica de la asignatura, indique cuales de las siguientes expresiones
resultan verdaderas:
l . ( 4 < 5 1
2. 2 > 2 1 1 1 ( ( 4 --
4 1 && ( 1 < o 1 1
3. 2 > 2 1 1 1 ( 4 --
4 1 && ( 1 < o 1
4. 2 > 2 1 1 1 1
( ( 4 --
4 1 && ( 1 < o 1 1
5 . 34 != 33 1 && ! false

a. Las expresiones 3 y 4.
b. Las expresiones 2 y 4 .
c. Las expresiones 3 y 5.
d. Las expresiones 4 y 5.

L_
Pregunta 5: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta:
a. E l lenguaje Java tiene tres variantes del ciclo for : for-each, for y far-do.
b. Un ciclo while es similar en su estructura y propósito q u e el ciclo for-each.
c. El tipo de la variable de ciclo no tiene porqué ser el mismo que el tipo del elemento declarado para la colección
que estamos recorriendo con u n ciclo.
d. Un índice es u n objeto que proporciona funcionalidad para recorrer todos los elementos de una colección.

Pregunta 6 : la siguiente figura muestra u n a captura de pantalla del editor BlueJ con una línea de código recuadrada.
Indica cual de las siguientes afirmaciones es correcta en relación a la línea recuadrada:

a. M u estra u n error en tiempo d e ejecución.


b. M uestra un error de compilación.
c. M uestra un punto de interrupción.
d. M uestra una el lanzamiento de una excepción.

IJ ClienteDeCorreo
Class Edit Tools Optfons

/?;7;
1r Impr1me el si•;p.liente :m.ensaje ( s i e s que hay alglm.O) para este
* usuar1o en l a terminal de texto.
'!
pt1blic void imprim.irMens aJeS iguiente ( )

Mens a j e unl1ensaj e = servidor. getl'rensaj e:�a.;;ruiente (usuario)


i f (un.Mensaje == nul l ) {
:System. out.p r:intln ( "No hay ningún mensaj e nue·.;o . " ) ;

else {
un.Hensaj e . imprimir: ( ) :!

Pregunta 7: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta:

a. U n objeto e s inmutable s i su contenido o s u estado n o puede ser cambia � o una vez q u e se ha creado.
b. Un objeto de tipo String puede ser modificado una vez que está creado, por tanto no es un ejemplo de objeto
inmutable.
c. la clase String tiene un método de nombre tri m que permite modificar caracteres en cualquier posición de una
cadena.
d. Como regla general, las cadenas de texto de tipo String se suelen comparar mediante el operador "==".
Pregunta 8: Dado el siguiente fragmento de código, indique cuál de las siguientes afirmaciones es el resultado de su
ejecución:
class Test

pub l i c s t a t i c v o i d ma i n { S t r i ng a r g s [ ] )
{
int n , e = 1, serie = 5 ;
S y s t em . o u t . p r i n t ( " Cantidad de t e rmi n a s : ") ;
n = 7;
w h i l e ( e <= n )
1
S y s tem . o u t . p r i n t ( " , " + serie ) ;
s e r i e += 5 ;
e++;

a. Cantidad d e terminas: 5,10,15,20,25,30,


b. Cantidad de terminas: ,5,10,15,20,25,30
c. Cantidad de terminas: ,5, 10, 15,20,25,30,35
d. Cantidad de terminas: ,5,10,15,20,25,30,35,40

Pregunta 9: Según el texto d e la bibliografía básica de la asignatura, indique cuál d e las siguientes afirmaciones es
correcta:
a. Las colecciones de objetos son objetos que pueden almacenar un número predeterminado e invariable de otros
objetos.
b. Un itera dar es un objeto q u e proporciona funcionalidad para recorrer todos los elementos de una colección.
c. Un ciclo consiste en la escritura repetida de un bloque de sentencias.
d. U n arreglo (array) es u n tipo especial d e colección que puede almacenar u n n ú m e ro variable d e elementos.

Pregunta 10: Según el texto de la bibliografía básica d e la asignatura, indique cuál de las siguientes afirmaciones es
correcta en relación a la clase Vector d e Java:
a. Es Final
b. Implementa java.utii. List
c. Es serializable
d. Dispone de u n solo constructor

Pregunta 11: Dado el siguiente fragmento de código, indique cuál de las siguientes afirmaciones es el resultado de su
ejecución:
public c l a s s Test
1
p r í vate int i = get J I ) ;
private i n t j 10;

private i n t getJ ( )
1
return j ;

p ub l i c s t a t i c v o i d ma i n ( S t r i n g a r g s ( ] )
1
S y s t em . o u t . p r i n t l n ( ( n e w T e s t ( ) ) . i ) ;

a. Error W¡ compilación en relación a la restricción de acceso de variables privadas en la clase Test.


b. Error de compilación e n relación a las referencias realizadas.
c. Sin errores de compilación, su salida es O.
d. Sin errores de compilación, su salida es 10.
Pregunta 12: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta:
a. L a interfaz de una clase describe lo q u e hace la clase y cómo puede usarse pudiendo mostrar parte de su
implementación.
b. Un mapa es una colección que almacena entradas de ternas de valores llave/va lor/posición.
c. La documentación de u n a clase debe ser suficientemente detallada como para que otros programadores
puedan usar la clase sin necesidad de leer su implementación.
d. Los modificadores d e acceso definen las restricciones de uso d e u n objeto para determinados métodos,
constructores o campos.

Pregunta 13: Dado el siguiente fragmento de código, indique cuál de las siguientes afirmaciones es el resultado de su
ejecución:
pub l i c class Test

{
pub l i c static v o i d ma i n ( S t r i n g args [ ] )
{
char e ""' - 1 ;
S y s t em . o u t . p r i n t l n ( c ) ;

a. La expresión '\ c h a r e = - 1 ; " provocará un error de compilación debido a que el rango de la clase " c h a r "
n6-1¡ .
es 0 - 2
b. N o habrá error de compilación, la salida será - l .
c. No habrá error de compilación, la salida no será ningún carácter ascii.
d. No habrá error de compilación, la salida será un carácter U n icode.

Pregunta 14: Según el texto de la bibliografía básica de la asignatura, indique cuál de las siguientes afirmaciones es
correcta :
a. U n a superclase e s una clase q u e e s i m plementada por otra.
b. Una subclase es una clase que implementa a otra clase.
c. Las clases que están vinculadas mediante una relación de herencia forman una jerarquía de herencia.
d. La herencia nos permite heredar pero no reutilizar en un nuevo contexto clases que fueron escritas
previamente.

Pregunta 15: Dado el siguiente fragmento de código, indique cuál de las siguientes afirmaciones es el resultado de su
ejecución:
import j av a . a w t . * ;

publ i c class T e s t F r ame extends Frame


{
publ i c T e s t Frame ( )

{
s e t L a yout ( ne w G r i dL a y o u t ( ) ) ;
for ( i nt i = 1 ; i <= 4 ; ++ i )
{
add ( n e w B u t t o n ( I n t e g e r . t o S t r i n g ( i ) ) ) ;

pack ( ) ;
s e t V i s ible ( t r u e ) ;
1

pub l i c static v o i d ma i n ( S t r i ng args [ ] )

{
T e s t F rame tf = new T e s t F rame ( ) ;
a. El código compila, su ejecución provoca q u e todos los botones aparezcan en una sola columna.
b. El código compila, su ejecución provoca que todos los botones aparezcan en una sola fila.
c. El código compila, su ejecución provoca que todos los botones se monten uno encima del otro y tan solo sea
visible el último.
d. E l código compila, pero s e produce u n error e n tiempo d e ejecución cuando s e añaden los componentes.

PARTE PRÁCTICA [§_.!? PUNTOS):


La práctica del presente curso ha sido una versión del legendario arcade "Space lnvaders". A continuación se muestra la
propuesta del juego tal y como se solicitaba para la práctica del curso.

Liw>:r
.. dt'{>.:tl-ihl',' i"'>f
.. 14• n.�vto
.. gna.rdlim
...

H4v�
�:uardt.Ul
1
.......J 1

En el juego aparecen cuatro clases de elementos (Ver Figura):

l. Naves alienígenas o UFOs, q u e se m u even de izda. a dcha. y van bajando hacia abajo poco a poco.
Esporádicamente lanzan misiles.
2. La nave guardián es controlada por el jugador.
3. El láser disparado por la nave guardián (trayectoria ascendente). Cuando el láser d e la nave alcanza una nave
enemiga, ésta desaparece del juego.
4. Los misiles disparados por los UFOs (trayectoria descendente). Cuando u n misil alcanza a la nave, finaliza el
juego.

a) [2 puntos) Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios para la aplicación
explicada de la práctica durante el curso. Es necesario identificar la estructura y las relaciones de herencia y de
uso de las clases necesarias para almacenar y gestionar esta información. Debe hacerse uso de los mecanismos


de herencia siempre que sea posible. Se valorará u n buen diseño que favorezca la reutilización de código y
facilite su mantenimiento.
b) [1,5 puntos) Implementa la clase Nave G u a r d i a n . Especifica sus atributos y métodos y justifica las decisiones
de implementación que creas importantes .
• e) [1,5 puntos) Implementa la siguiente regla del juego: "Varias filas de naves alienígenas o UFOs avanzan hacia la
base d�fensora, con movimientos oscilatorios de izquierda a derecha, bajando poco a poco". Especifica sus
atributos y m étodos y justifica las decisiones de implementación q u e creas i m portantes.
d) [1,5 puntO,'i) lndique los cambios que serían necesarios en el diseño y programa para permitir que cada nave
alienígena se moviera según una trayectoria independiente del resto de naves alienígenas pudiendo moverse
libremente en las cuatro coordenadas (arriba, abajo, izquierda y derecha). Las naves alienígenas no podrían
ocupar el mismo espacio de coordenadas, por tanto deberían chocar y cambiar su dirección.
U NIVERSIDAD N ACIONAL DE E DUCACIÓN A D ISTANCIA – E SCUELA T ÉCNICA S UPERIOR DE I NGENIERÍA
I NFORMÁTICA
71901072 – P ROGRAMACIÓN O RIENTADA A O BJETOS ( G RADO EN I NGENIERÍA I NFORMÁTICA / T ECNOLOGÍAS DE
LA I NFORMACIÓN )
J UNIO 201 2 – M ODELO B – N O ESTÁ PERMITIDO EL US O DE MATERIAL ADICIO NAL

PARTE  TEÓRICA  -­‐  TEST  [2,5  PUNTOS]:  


Sólo  una  de  las  respuestas  es  válida.  Las  respuestas  correctas  se  puntuarán  con  +1.0,  mientras  que  las  respondidas  de  
manera  incorrecta  se  puntuarán  con  -­‐0.25.  Las  no  contestadas  no  tendrán  influencia  ni  positiva  ni  negativa  en  la  nota.  
 
Pregunta  1: Según el texto de la bibliografía básica de la asignatura, indique cual de las siguientes afirmaciones es falsa:  
a. Únicamente  las  clases  que  implementan  la  interfaz  List  permiten  el  uso  de  iteradores.  
b. Un  iterador  es  un  objeto  que  proporciona  funcionalidad  para  recorrer  todos  los  elementos  de  una  
colección.  
c. Un  iterador  permite  recorrer  cualquier  tipo  de  colección  hacia  adelante  utilizando  el  método  next()  
combinado  con  el  método  hasNext()  para  comprobar  si  se  ha  alcanzado  el  final  de  la  colección.  
d. Una  colección  puede  recorrerse  tanto  con  un  iterador  como  con  un  ciclo  for-­‐each.  Ambas  formas  son  
equivalentes.  

Pregunta  2: Respecto a los bucles, indique cual de las siguientes afirmaciones es falsa:  
a. El  cuerpo  de  un  bucle  for-­‐each  puede  repetirse  0  o  más  veces.  
b. Un  bucle  for-­‐each  puede  aplicarse  sobre  cualquier  clase  que  implemente  la  interfaz  Iterable.  
c. El  cuerpo  de  un  bucle  while  siempre  se  ejecuta,  como  mínimo,  una  vez.  
d. Un  bucle  for-­‐each  puede  aplicarse  sobre  arreglos  (arrays).  

Pregunta  3: Dado el siguiente código


 
String c1=new String(”Hola”);
String c2=new String(”Mundo”);
if (…………)
System.out.println(“Ambas cadenas son iguales”);
else
System.out.println(“Ambas cadenas no son iguales”);
¿Cuál de las siguientes opciones debería ponerse en la línea de puntos para llevar a cabo la comparación de las cadenas c1
y c2 en función de la salida proporcionada por el programa?
a. c1==c2
b. c1.equals(c2)
c. c1.compareTo(c2)>=0
d. c1=c2

Pregunta  4: Indique cual de las siguientes afirmaciones es verdadera:  


a. Para  definir  una  variable  de  instancia  es  necesario  utilizar  la  palabra  reservada  static.  
b. Un  método  estático  puede  acceder  a  cualquier  componente  (método  o  variable)  no  estático  de  su  clase.  
c. Los  métodos  estáticos  pueden  ser  sobreescritos.  
d. Una  variable  de  clase  puede  ser  modificada  sin  necesidad  de  haber  instanciado  objeto  alguno  de  dicha  
clase.  
 
 

Pregunta  5: Indique cual de las siguientes afirmaciones es falsa:  


a. El  objetivo  de  la  sobrecarga  de  métodos  es  facilitar  la  invocación  de  un  mismo  método  pasándole  un  
conjunto  de  parámetros  de  entrada  diferentes.  
b. Se  puede  sobrecargar  un  método  variando  el  tipo  de  retorno  de  éste  sin  variar  los  parámetros  de  entrada.  
c. Un  método  puede  ser  sobrecargado  en  la  misma  clase  o  en  una  subclase.  
d. Los  métodos  sobrecargados  pueden  cambiar  el  modificador  de  acceso  del  método  original.  
Pregunta  6: Dada la siguiente definición de clase  

public class TV {
private String marca;
private String modelo;
public TV(String marca, String modelo) {
this.marca = marca;
this.modelo = modelo;
}
public boolean equals(Object t) {
TV television=(TV)t;
return marca.equals(television.marca)&&
modelo.equals(television.modelo);
}
public int hashCode() {
return marca.length() * 10 + modelo.length();
}
}

¿Cual sería el resultado visualizado al ejecutar el siguiente código en un método main?


 
TV tv1 = new TV("Sony", "Bravia");
TV tv2 = new TV("Sony", "aivarB");

if(tv1.equals(tv2)) {
System.out.println("los televisores son iguales");
} else {
System.out.println("los televisores no son iguales");
}  
 
a. Los  televisores  son  iguales.  
b. Los  televisores  no  son  iguales.  
c. Error  de  compilación  
d. Error  en  tiempo  de  ejecución  

Pregunta  7: Dado el siguiente código, indique cual de las siguientes afirmaciones es cierta:  

public class MiClase {


int x = 2;
float y = 4.3f;
public static void main (String [] args) {
for (int z = 1; z < x; z++ )
System.out.println("Valor de y="+y);
}
}
a. Se  produce  un  error  en  tiempo  de  ejecución.  
b. El  código  no  compila.  
c. Se  imprime  en  pantalla  “Valor  de  y=4.3”  
d. Se  imprime  en  pantalla  “Valor  de  y=4.3000”  
 

Pregunta  8: Sea la siguiente definición de clase:  

public class ClaseA {


public ClaseA(String s) { System.out.print("Construyendo Clase A."); }
}

Y la siguiente definición de una subclase:

public class ClaseB extends ClaseA {


public ClaseB(String s) { System.out.print("Construyendo Clase
B.");super(s); }

public static void main(String [] args) {


new ClaseB("Objeto Clase B");
System.out.println(" ");
}
}

¿Cuál de las siguientes afirmaciones es cierta al ejecutar el código?


a. Se  produce  un  error  en  tiempo  de  ejecución.  
b. Se  muestra  el  mensaje  “Construyendo  Clase  B.  Construyendo  Clase  A.”.  
c. Se  muestra  el  mensaje  “Construyendo  Clase  A.  Construyendo  Clase  B”.  
d. Error  de  compilación.  

Pregunta  9: Dado el siguiente código, ¿Cuál de las siguientes afirmaciones es correcta?
 
Set < Object > objetos = new HashSet<Object>();
String obj1 = "JAVA";
int obj2 = 5;
Boolean obj3 = new Boolean(true);
objetos.add(obj3);
objetos.add(obj1);
objetos.add(obj2);
objetos.add(obj3);
for(Object object : objetos) {
System.out.print(object);

a. Error  en  tiempo  de  ejecución.  


b. Se  muestran  por  pantalla  JAVA  5  y  true  en  un  orden  no  determinado.  
c. Se  muestran  por  pantalla  JAVA  5  y  true  en  el  orden  exacto  en  el  que  fueron  insertadas  en  la  colección.  
d. Se  muestran  por  pantalla  JAVA  5  y  true  en  un  orden  no  determinado  y,  además,  “true”  se  muestra  dos  veces.  

Pregunta  10: Dados las siguientes definiciones de clases:  

public abstract class Disparo {


protected int velocidad=10;
abstract public void disparar();
}

public class DisparoUFO extends Disparo {


public void disparar() {
this.velocidad=20;
System.out.println("Dispara la nave");
}
}

public class DisparoNave extends Disparo{


public void disparar() {
this.velocidad=10;
System.out.println("Dispara la nave");
}
}

public class TestUFO {


public static void main(String[] args) {
Disparo dn=new DisparoNave();
new TestUFO().inicio(dn);
}
public void inicio(Disparo d)
{
d.disparar();
}
}
Podemos afirmar:

a. El  método  disparar  está  sobrecargado.  


b. Muestra  por  pantalla  el  mensaje  “Dispara  la  nave”.  
c. No  se  muestra  por  pantalla  ningún  mensaje.  
d. Obtenemos  un  error  en  tiempo  de  ejecución.  

Pregunta  11: Según el texto de la bibliografía básica de la asignatura, cuando un objeto permite realizar un conjunto de
tareas muy relacionadas entre sí, podemos afirmar que:  
a. El  objeto  presenta  una  alta  cohesión.  
b. El  objeto  está  muy  acoplado.  
c. El  objeto  está  poco  encapsulado.  
d. El  objeto  presenta  una  baja  cohesión.  

Pregunta  12: Dado el siguiente código:  

public class ClaseUno {


ClaseUno obj;
ClaseUno() { }
ClaseUno(ClaseUno m) { obj = m; }

void inicializar() { System.out.print("Inicializando. ");}


}

public class Test {


public static void main(String[] args) {
ClaseUno obj1 = new ClaseUno();
ClaseUno obj2 = new ClaseUno(obj1);
obj2.inicializar();
ClaseUno obj3 = obj2.obj;
obj3.inicializar();
ClaseUno obj4 = obj1.obj;
obj4.inicializar();
}
}

Podemos afirmar que:


a. Se  mostrará  el  mensaje  “Inicializando.  Inicializando.  Inicializando.”  
b. Se  mostrará  el  mensaje  “Inicializando.  Inicializando”.  
c. Se  mostrará  el  mensaje  “Inicializando.  Inicializando”  seguido  de  una  excepción.  
d. Se  mostrará  el  mensaje  “Inicializando.  Inicializando.  Inicializando.”  seguido  de  una  excepción  

Pregunta  13: Indique cual de las siguientes afirmaciones es cierta:  


a. Una  interfaz  puede  implementar  alguno  de  los  métodos  que  declara.  
b. Una  interfaz  puede  declarar  variables  de  instancia  o  de  clase.  
c. Cuando  una  clase  implementa  una  interfaz  específica  no  hace  falta  que  implemente  todos  los  métodos  que  
ésta  declara.  
d. Una  clase  puede  implementar  más  de  una  interfaz  al  mismo  tiempo.    

 
Pregunta  14:  Dada  la  siguiente  clase  Prueba:  
 
public class Prueba {  
public static void main(String[] args) {  
ArrayList < Integer > valores = new ArrayList < Integer > ();  
valores.add(4);  
valores.add(5);  
valores.set(1, 6);  
valores.remove(0);  
for(Integer v : valores) {  
System.out.print(v);  
}  
}  
 
}  
   
Al  ejecutar  el  código  obtendremos:  
a. Un  error  en  tiempo  de  ejecución  
b. Se  mostrará  4  
c. Se  mostrará  5  
d. Se  mostrará  6  
   
Pregunta  15:  Si  quisiera    organizar  los  componentes  de  una  interfaz  gráfica  de  acuerdo  a  una  tabla  utilizaría  como  gestor  
de  contenido:  
   
a. GridLayout  
b. BoxLayout  
c. FlowLayout  
d. BorderLayout  
 
 
 
PARTE  PRÁCTICA  [6,5  PUNTOS]:  
La  práctica  del  presente  curso  ha  sido  una  versión  del  legendario  arcade  “Space  Invaders”.  A  continuación  se  muestra  la  
propuesta   del   juego   tal   y   como   se   solicitaba   para   la   práctica   del   curso.   En   el   juego   aparecen   cuatro   clases   de   elementos  
(Ver  Figura):    
 
1) Naves  alienígenas  o  UFOs,  que  se  mueven  de  izda.  a  dcha.  y  van  bajando  hacia  abajo  poco  a  poco.  
Esporádicamente  lanzan  misiles.    
2) La  nave  guardián  es  controlada  por  el  jugador.  
3) El  láser  disparado  por  la  nave  guardián  (trayectoria  ascendente).  Cuando  el  láser  de  la  nave  alcanza  una  nave  
enemiga,  ésta  desaparece  del  juego.    
4) Los  misiles  disparados  por  los  UFOs  (trayectoria  descendente).  Cuando  un  misil  alcanza  a  la  nave,  finaliza  el  
juego.    
 
Se pide diseñar utilizando una aproximación orientada a objetos una ampliación a la práctica realizada a lo largo del curso
que permita la existencia de un nuevo tipo de nave alienígena (NaveDeReconocimiento) que se desplace horizontalmente
por la parte superior de la pantalla (es decir, por encima del conjunto de UFOs que se van desplazando hacia la nave
guardián) y que al llegar a uno de los extremos de la pantalla desaparezca por este y vuelva a aparecer por el extremo
opuesto. Para ello el alumno deberá responder de manera razonada a los siguientes apartados:
a) [X   puntos]   Proponga,   utilizando   diagramas   de   clase,   y   explique   como   modelaría   este   nuevo   tipo   nave  
alienígena  aprovechando  el  diseño  que  ha  realizado  en  la  práctica.  Debe   hacerse  uso  de  herencia  siempre  
que   sea   posible.   Se   valorará   un   buen   diseño   que   favorezca   la   reutilización   de   código   y   facilite   su  
mantenimiento.  
b) [X   puntos]   Implemente   la   nueva   clase   NaveDeReconocimiento   especificando   sus   atributos   y   métodos,  
justificando  las  decisiones  de  implementación  que  considere  relevantes.  
c) [X  puntos]  Implemente  la  regla  de  juego:  “La  nave  de  reconocimiento  aparecerá  en  uno  de  los  extremos  de  
la   pantalla   y   se   desplazará   hasta   el   extremo   contrario   de   manera   horizontal.   Una   vez   alcanzado   el   extremo  
opuesto  desaparecerá  por  éste  y  volverá  a  aparecer  en  el  extremo  inicial  de  manera  iterativa  hasta  que  sea  
destruida  por  un  disparo”.  En  caso  de  que  lo  considere  necesario  puede  apoyarse  en  aquellas  clases  que  ha  
utilizado  en  su  práctica  explicando  claramente  sus  funcionalidades.  
d) [X   puntos]   Explique   razonadamente   qué   cambios   serían   necesarios   en   el   diseño   que   ha   realizado   en   los  
apartados  anteriores  para  que  la  NaveDeReconocimiento  también  pudiera  realizar  disparos.  
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE INGENIERiA INFORMÁTICA
71901072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERiA INFORMÁTICA / TECNOLOGÍAS DE LA INFORMACIÓN)
SEPTIEMBRE 201 2 - MODELO A - i�t.Jtid�MMIW·MMII�·M·13&Bi@ijti.]Mf·Hdl

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Sólo una de las respuestas es válida. Las respuestas correctas se puntuarán con + 1.0, mientras que las respondidas
de manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la
nota.

Pregunta 1 : ¿Cuál e s el resultado de ejecutar el siguiente fragmento de código?

if ( " S t r i ng " . t o S t r i ng ( ) == " S t r i n g " )


S y s t em . o ut . p r i n t l n ( " I gu a l " ) ;
else
S y s t em . o ut . p r i n t l n ( " No I gu a l " ) ;
a. El código compilará e imprime "Igual".
b. El código compilará e imprime "No Igual".
c. El código compilará pero producirá un error de ejecución.
d. El código no compilará.

Pregunta 2 : ¿Cuál es el resultado d e ejecutar el siguiente código?

pub l i c c l a s s E j emp l o {
pr ivate int i=j ;
pr ivate int j = l O ;
pub l i c s t a t i c vo i d ma i n ( S t r i n g [ ] a r g s )
S y s t e m . ou t . p r i n t l n ( ( n e w E j emp l o ( ) ) . i ) ;

a. Da un error de compilación debido a las restricciones de acceso a las variables privadas de Ejemplo.
b. Da un error de compilación debido a la referencia que se hace a variables declaradas con posterioridad.
c. No da ningún error de compilación y produce como salida el valor O .
d. No da ningún error de compilación y produce como salida el valor 10.

Pregunta 3 : ¿Cuál d e las siguientes e s una característica d e l a clase java.lang.Exception?


a. private.
b. extends Throwable.
c. implements Throwable.
d. final.

Pregunta 4: Sean "Mamifero" y "Gato" dos clases que mantienen una relación de herencia padre-hijo. ¿Qué habría
que modificar en el siguiente código para que sea correcto y por qué?

An i ma l a ; /* Linea 1 */
Gato b ; /* Linea 2 */
a = n ew Animal () ; /* Linea 3 */
b = a; /* Linea 4 */

a. Nada. Es correcto.
b. No se puede asignar un objeto a otro de otra clase, luego cambiamos la línea 2 : An imal 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 = ( Ga t o ) 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 = n ew ( Ga t o ) a ; .

Pregunta 5: Una variable de clase, definida como s t a t i c . . .


a. No puede ser accedida desde otra clase.
b. Si se modifica, lo hace para todas las instancias de la clase.
c. Es de valor constante.
d. Solo puede ser accedida desde clases del mismo paquete.
Pre2unta 6: En una estructura s w i t ch, ¿en qué lugar tiene que ser colocado el bloque de sentencias "de f a u l t"?
a. Antes de las diferentes sentencias c a s e .
b . Después d e todas las sentencias c a s e .
c . Después de las sentencias c a s e pero antes d e l a sentencia f i n a l l y.
d. Puede colocarse en el lugar que se quiera.

Pre2unta 7: Dada la siguiente instrucción:

X = y-- ;

¿Cuál de las siguientes afirmaciones es verdadera DESPUÉS de ejecutarse la instrucción?


a. La instrucción da un error de compilación.
b. x > y.
C. X = = y.
d. x < y.

Pre2unta 8: ¿Qué ocurre si se compila y ejecuta el siguiente código?


Número de Código
Línea
4 pub l i c c l a s s C l a s e
S pub l i c s t a t i c v o i d ma i n ( S t r i ng [ ] a rgume n t s )
6 me t ( a r gume n t s ) ; }
7 pub l i c vo i d met ( S t r i ng [ ] a rgume n t s )
8 S y s t em . o u t . p r i n t l n ( a r gume n t s ) ;
9 S y s t em . o u t . p r i n t l n ( a r gume n t s [ l ] ) ;

a. Da un error de compilación porque no se puede hacer referencia al método no-estático me t .


b. Da un error de compilación porque el método ma i n no puede ser estático.
c. Da un error de compilación porque el array a rgume n t s no puede pasarse como parámetro al método me t .
d. Da un error de ejecución porque en el acceso al array a rgume n t s nos salimos del rango de dicho array.

Pre2unta 9: ¿Cuál de los siguientes no es un identificador válido en Java?


a. #va r i ab l e .
b . $va r i ab l e .
c . v a r i ab l e .
d . va r i a b l e .

Pre2unta 10: En la definición de una interface en Java :


a. Es necesaria emplear la palabra clave ab s t r a c t .
b . L a signatura d e los métodos d e una interfaz tienen visibilidad pub l i c o p r i vate, pero n o p r o t e c t e d.
c. No se permiten campos constantes.
d. Aunque no se indique usando la palabra clave f i n a l , todos los campos son tratados como si así fuesen.

Pre2unta 1 1 : Una clase interna:


a. Puede acceder a los campos y métodos públicos y protegidos de la clase envolvente, pero no privados.
b. Puede acceder a los campos y métodos públicos de la clase envolvente, pero no a privados ni a protegidos.
c. Puede acceder a los campos y métodos públicos y privados de la clase envolvente.
d. No puede acceder a los campos y métodos privados de la clase envolvente.

Pre2unta 1 2 : Según e l texto de l a bibliografía básica de l a asignatura, indique cuál d e las siguientes afirmaciones
es correcta:
a. La depuración es la actividad cuyo objetivo es determinar si una pieza de código produce el comportamiento
pretendido.
b. La prueba viene a continuación de la depuración.
c. La depuración es una actividad dedicada a determinar si un segmento de código contiene errores.
d. La depuración es el intento de apuntar con precisión y corregir un error en el código.
Pre2unta 13 : ¿De qué clase deriva la clase ArrayList?
a. AbstractList.
b. AbstractCollection.
c. ArrayCollection.
d. ListCollection.

Pre2unta 14: Cuando queremos que un objeto oiga eventos de acción disparados por el usuario, el objeto tiene
que implementar la interfaz ...
a. Ac t i o n E v e n t .
b. Act i o nL i s t e ne r.
c. L i s t e n e rAc t i o n .
d. L i s t e n e r Ev e n t .

Pre2unta 1 5 : Un conjunto e s una:


a. Que almacena cada elemento individual una sola vez como mínimo. No mantiene un orden específico.
b. Que almacena cada elemento individual una sola vez como mínimo. Mantiene un orden específico.
c. Que almacena cada elemento individual una sola vez como máximo. No mantiene un orden específico.
d. Que almacena cada elemento individual una sola vez como máximo. Mantiene un orden específico.

PARTE PRÁCTICA [6,5 PUNTOS] :


Co n s i d e re pa ra su est u d i o u n a ve rsión d e l conocido j uego Space l nva d e rs . Este j u ego consiste e n q u e
va rias fi l a s de n a v e s a l i e n íge n a s o U FOs ava n z a n hacia la b a s e defe nsora, con m ovi m i e ntos osci latorios de
izq u i e rda a d e recha, baj a n d o poco a poco . As í, u na nave g u a rd i á n d efie nde l a base y t rata de evita r los m is i l e s
la nzados esporá d ica m e nte por l a s n aves i nvasoras. La nave g u a rd i á n la nza d i spa ros de u n o e n u n o . E l j u ego
fi n a l iza c u a n d o todos los i nva sores h a n sido a l ca nzados o c u a n d o los i nvasores l l ega n a la base.

a) [2,5 puntos] S u po nga q u e la i m p l e m e ntación del j u ego se h a ce e n b a se a la existe ncia de u n a clase N a v e ,


de t i po a bstra cto, que si rve d e c l a se d e refe re ncia pa ra otras pos i b l e s su bclases (ta nto l a s naves
a l i e n íge n a s co m o la nave g u a rd i a n a ) . A p a rt i r de ésta, se ge n e ra una n u eva c l a se d e n o m i nada N a v e U FO
q u e si rve pa ra m od e l a r U NA nave U F O . El j uego d is p o n d rá de u n tota l cuatro fi l a s de siete n aves U FO ca d a
u n a d e e l l a s, q u e se e n c u e n t ra n e n l a p a rte s u p e r i o r de l a pa nta l l a d e l j uego . P ro p o rcione la estruct u ra de
a m ba s clases (y d e l bloque co m p l eto de n aves U FO), a s í co m o los d ife re ntes atrib utos q u e co n s i d e re
i m p resci n d i b les p a ra cada u n a de e l la s y los p r i n ci pa l es m étodos a ccesores y mod ifi c a d o res. Si se necesita
del uso d e a lg u n a otra clase a uxi l i a r, debe defi n i rse ta m b i é n e n este a p a rt a d o .

b) [2,5 puntos] P ro p o rcione e l m étodo de s p l a z a rN a v e s U F O q ue si m u la e l m ovi m i e nto d e l a s n aves U FO


a d e recha e izq u ie rd a . El m ovi m i e nto se rea l iza rá c u a n d o e l sa lta u n dete r m i n a d o t i m e r ( q u e no h a y q u e
i m p l e m e nta r, sólo e l m étodo q u e s e l la m a c u a n d o este t i m e r sa lta ) . La s n aves pa rten de l a zo na su perior
izq u i e rda y se d e s p l a za n h a sta l a pa rte d e recha de la p a nta l l a . Cuando l lega n al fi n a l, baj a n todas l a s naves
una posi ción y co m i e nza n a d e s p l aza rse a ho ra hacia la izq u ie rd a . Se deja a su e lecci ó n el p rototi po q u e
t i e n e n q ue t e n e r estos m étod os, p e ro h a n de se r co h e re ntes c o n l o expuesto e n e l a pa rtado a nterior. Si se
necesita d e l u so de a lg u n a otra clase a uxi l i a r, d e be d efi n i rse ta m bi é n en este a p a rt a d o .

e) [1,5 puntos] P ro p o rcione e l m étodo d ispa ra M i s i l, q u e si m u la e l d i spa ro de u n p royect i l a sce n d e nte p o r


pa rte de u n a nave U FO . Se rec u e rd a la rest ricci ó n de q u e e n u n m o m e nto dete r m i n a d o só lo puede h a be r
a ctivo u n ú n ico m i si l . S e deja a s u e l ecci ó n e l p rotot i p o q ue t i e n e n q ue t e n e r estos m étodos, p e ro h a n d e
se r co h e rentes con lo exp uesto e n e l p ri m e r a pa rt a d o . Si s e n ecesita d e l uso de a lg u n a otra clase a uxi l i a r,
d e b e defi n i rse ta m b i é n e n este a pa rtado.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE INGENIERiA INFORMÁTICA
71901072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERiA INFORMÁTICA / TECNOLOGÍAS DE LA INFORMACIÓN)
SEPTIEMBRE 201 2 - MODELO B - i�t.Jtid�MMIW·MMII�·M·13&Bi@ijti.]Mf·Hdl

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Sólo u n a d e las respuestas es válida. Las resp uestas correctas se puntuarán con +l. O, m ientras q u e las respondidas d e
mane ra i ncorrecta se p u ntuarán con -0.25. Las no contestadas no tendrán i nfl u encia n i positiva n i negativa e n la nota.

Pregunta 1: ¿Qué incl uye como m ínimo la d escripción de un patrón?


a . U n nom bre, un a d escripción del problema, u na descripción d e la so l ución y las consecu encias del uso del patró n .
b. U n nom bre, un a clase, una d escripción del problema y las consecuencias del uso del patrón.
c. U na clase, un a d escripción del pro blema, u na d escripción d e la sol ución y las consecuencias del uso del patró n .
d . U n nom bre, un a clase, una d escripción d e la sol ución y las consecuencias del uso del patrón.

Pre2unta 2 : ¿Cuál es el resultado d e ejecutar el siguiente código?

pub l i c c l a s s E j emp l o
{
p r i v a t e i n t i= dame J ( ) ;
pr ivate int j = l O ;

p r i v a t e i n t dame J ()
{
return j ;

pub l i c s t a t i c vo i d ma i n ( String [ ] args )


{
S y s t e m . ou t . p r i n t l n ( ( n e w E j emp l o ( ) ) . i ) ;

a. Da un error de compilación debido a las restricciones de acceso a las variables privadas de Ejemplo.
b. Da un error de compilación debido a la referencia que se hace a métodos declarados con posterioridad.
c. No da ningún error de compilación y produce como salida el valor O.
d. No da ningún error de compilación y produce como salida el valor 10.

Pregunta 3: ¿Cuál de las siguientes i nstru cciones compila sin provocar un warning o un error?
a. char e=" a " ;
b. b y t e b = 2 5 7 ;
c. b o o l e an b = n u l l ;
d . int i=l O ;

Pregunta 4: ¿Java perm ite herencia m últiple?


a . Sí, es un a característica del l enguaje.
b. No, por d efi nición no admite herencia m últiple y no puede implementarse d e modo alguno.
c. N o, pero puede implementarse med iante com binación d e "extends" y d e "implements interface" .
d . No, pero puede i mplementarse mediante com binación d e "implements" y d e "extends i nterface".

Pregunta 5: ¿ Qu é ocurre si se compila y ejecuta el siguiente código?

pub l i c c l a s s Q {
pub l i c s t a t i c vo i d ma i n ( S t r i ng a rgv [ ] ) {
int anar [ ] =new i nt [ 5 ] ;
S y s t e m . ou t . p r i n t l n ( an a r [ O ] ) ;
a. Error: anar is referenced befare it is i n itialized
b. nu l l
c. o
d. S

Pregunta 6: ¿Cuál de las siguientes afirmaciones es falsa?


a . S y s t em . o u t . p r i n t l n ( -1 >>> 2 ) ; producirá u n resultado mayor que 10.
b. S y s t em . o u t . p r i n t l n ( -1 >>> 2 ) ; producirá u n resultado mayor que cero ( positivo ) .
c. S y s t e m . ou t . p r i n t l n ( 2 > > 2 ) ; pro d ucirá el resultado O.
d . S y s t em . o u t . p r i n t l n ( 1 < < < 2 ) ; pro d ucirá u n resultado 4.

Pregunta 7: ¿ Qu é se mostrará por panta l l a cuando se i ntenta compilar y ejecutar el siguiente código?

imp o r t j av a . awt . * ;
pub l i c c l a s s B u t t e x t e n d s F r ame {
pub l i c s t a t i c v o i d ma i n ( S t r i n g a r gv [ ] ) {
Butt MyB u t = n ew B u t t ( ) ;

Butt ( ) {
B u t t o n H e l l oBut=new B u t t o n ( " Ho l a " ) ;
B u t t o n ByeBut=new B u t t o n ( " Ad i o s " ) ;
add ( He l l oBut ) ;
add ( ByeBut ) ;
setS i z e ( 3 0 0 , 3 0 0 ) ;
s e tVi s ib l e ( t ru e ) ;

a. Dos boto nes j u ntos ocupando todo el frame. Hola en la izq u ierda y Ad ios en la derecha.
b. U n botó n ocupando todo el fra m e d iciendo Hola.
c. U n botón ocupando todo el fram e d iciendo Adios.
d. Dos boto nes e n l a parte s u perior del fra m e diciendo uno Hola y el otro Adios.

Pregunta 8: Dado el sigui ente fragmento, ¿ podemos insta nciar un obj eto de esta clase?

N ú mero de Línea Código


4 pub l i c a b s t r a c t c l a s s C l a s eAb s t r a c t a {
5 ab s t r a c t vo i d Me t o doAb s t r a c t o ( i n t a ) ;
6

a. Sí, creando un a n u eva clase q u e extienda a C l a s eAb s t r a c t a .


b. Sí, creando un a n u eva clase q u e extienda a C l a s eAb s t r a c t a e implemente el método Me t o doAb s t r a c t o .
c . Si, l a s clases a bstractas se pueden i nstanciar como cualquier otra clase si necesidad d e extenderlas si se redefi na e l
m étodo Me t o doAb s t ra c t o .
d . N i nguna respuesta a nterior es correcta.

Pregunta 9: Según el texto de la bibliografía básica de la asignatura, i n d iq u e cuál de las siguientes afirmaciones es
correcta :
a. U n encapsulamiento apropiado en las clases reduce el acoplamiento.
b. El térm in o acoplamiento d escribe c u á nto se aj u sta una u n idad de código a una tarea lógica o a una entidad.
c. E l acoplam iento d escribe l a conectividad d e los propios obj etos d e una clase.
d . Un sistema débilmente acoplado se ca racteriza por la i mposi bil idad d e modificar una d e sus clases sin tener q u e
realizar cambios e n ninguna otra .
Pregunta 10: Si se ejecuta el siguiente cód igo, ¿ q u é se i m prime por pa ntalla?

N ú mero de Línea Código


4 S t r i ng s = n ew S t r i n g ( "Bi cycl e " ) ;
5 int iBegin = 1 ;
6 char iEnd = 3 ;
7 S y s t em . o ut . p r i n t l n ( s . s ub s t r i n g ( i B e gi n , i E nd ) ) ;

a. Bic.
b. ic.
c. icy.
d . e rror: no m ethod match ing s u bstring( int, char).

Pregunta 11: ¿Cuál es el resu ltado d e la siguiente operación: S y s t e m . o u t . p r i n t l n (4 1 3) ; ?


a. 6.
b. O .
c. l.
d. 7.

Pregunta 12: N ecesita crear u na clase que almacene como elemento base d e la m isma obj etos ú nicos. No se n ecesita
q u e guarden orden algu no, pero sí q u e no se repitan. ¿Qué interfaz sería la más apropiada para este fin?
a. Set.
b. L i s t .
c. Map.
d. Ve c t o r .

Pregunta 13: Dado e l siguiente código, i n d iq u e q u é ocurri ría al llamar al método e j emp l o ( ) ;

N ú mero de Línea Código


4 c l a s s Examen {
5 private int i ;
6 pub l i c vo i d e j e mp l o ( )
7 f o r ( i nt i = O ; i < 5 ; i + + )
8 S y s t em . o ut . p r i nt ( th i s . i + + ) ;
9
10
a . I mprime 00000.
b. I mprime 0 1234.
c. I m prime i nfin itos ceros.
d. Se pro d ucirá un e rror en tiempo de com pilación por no estar inicializada la propiedad i .

Pregunta 14: Dado el siguiente fragmento de código:

N ú mero de Línea Código


4 S t r i ng c a d e n a l = " Ha l o " ;
5 S t r i ng c a d e n a 2 = " HALO " ;
6 c a d e na l . t o Uppe r C a s e ( ) ;
¿Cuál sería el resultado d e eva l uar: i f ( c a d e n a l . e qu a l s ( c a d e n a 2 ) ) ?
a. true.
b. fa lse.
c. E rror en la expresión.
d . N i nguna d e las anteriores es correcta.

Pregunta 15: En lo que se refiere a las clases internas anóni mas, se puede afirmar q u e :
a . S u e l e n emplea rse e n l o s l ugares en l o s q u e se req u iere la implementación d e una s o l a insta ncia.
b. Siempre se hará referencia l a i nstancia med iante su s uperti po.
c. Permiten defin ir una clase y crear una i nsta ncia de el la, todo en un solo paso.
d. Todas las anteriores son correctas.
PARTE PRÁCTICA [6,5 PUNTOS] :
Co n s i d e re pa ra su est u d i o u n a ve rsión d e l conocido j uego Space l nva d e rs . Este j u ego consiste e n q u e
va rias fi l a s de n a v e s a l i e n íge n a s o U FOs ava n z a n hacia la b a s e defe nsora, con m ovi m i e ntos osci latorios de
izq u i e rda a d e recha, baj a n d o poco a poco . As í, u na nave g u a rd i á n d efie nde l a base y t rata de evita r los m is i l e s
la nzados esporá d ica m e nte por l a s n aves i nvasoras. La nave g u a rd i á n la nza d i spa ros de u n o e n u n o . E l j u ego
fi n a l iza c u a n d o todos los i nva sores h a n sido a l ca nzados o c u a n d o los i nvasores l l ega n a la base.

a) [2,5 puntos] S u po nga q u e la i m p l e m e ntación del j u ego se h a ce e n b a se a la existe ncia de u n a clase N a v e ,


de t i po a bstra cto, que si rve d e c l a se d e refe re ncia pa ra otras pos i b l e s su bclases (ta nto l a s naves
a l i e n íge n a s co m o la nave g u a rd i a n a ) . A pa rti r de ésta, se g e n e ra una n ueva c l a se d e n o m i nada
N a v e Gu a r d i a n q u e si rve pa ra m od e l a r la nave g u a rd i á n q ue se e ncue ntra e n la pa rte i nfe rio r de la
pa nta l la d e l j uego . P ro p o rcione la estructu ra de a m ba s cla ses, a s í co m o los d ife re ntes a t r i b utos que
co n s i d e re i m p resci n d i b les p a ra cada una d e e l la s y los p r i n c i p a les m étodos a ccesores y m o d ifica d o re s . Si
se necesita del uso d e a lg u n a otra clase a uxi l i a r, d e be d efi n i rse ta m bi é n e n este a p a rt a d o .

b) [2,5 puntos] P ro p o rcione los m étodos de s p l a z a r i z qu i e r d a y de s p l a z a r D e r e c h a q u e si m u la r el


m ovi m i e nto d e la nave a d e recha e izq u i e rd a . E l m ovi m i e nto se rea l iza rá cuando e l usua ri o p u lse l a s teclas
'P' e n e l caso de la d e recha, u 'O' e n e l caso de l a i zq u i e rd a . Se d eja a su e l ecci ó n e l p rotot i p o q u e t i e n e n
q u e te n e r estos m étodos, p e ro h a n de s e r co h e re ntes c o n lo expu esto e n e l a pa rtado a nterior. Si se
necesita d e l u so de a lg u n a otra clase a uxi l i a r, d e be d efi n i rse ta m bi é n en este a p a rt a d o .

e) [1,5 puntos] P ro p o rcione e l m étodo di s p a r aMi s i l , q u e si m u la e l d ispa ro de u n p royect i l a sce n d e nte


por p a rte de la n a ve g u a rd i a n a al p u lsa r l a tecla Ba rra Espaci a d o ra . Se recu e rd a la rest ricción de q u e en u n
m o m e nto d ete r m i n a d o sólo p u e d e h a be r a ctivo u n ú n ico m i si l . S e d eja a s u e lecci ó n e l p rotot i p o q u e
t i e n e n q u e t e n e r estos m étod os, p e ro h a n d e se r co h e re ntes con lo expuesto e n e l p r i m e r a pa rt a d o . Si se
necesita d e l u so de a lg u n a otra clase a uxi l i a r, d e be d efi n i rse ta m bi é n en este a p a rt a d o .
U N IV E RSIDAD NAC IONAL D E E DUCACIÓ N A DISTA N C IA - ESC U E LA T É C N IC A S U P E RI O R D E I N G E N IE RiA
I N FORMÁTICA
7 1 9 0 1 072 - PROGRAMACIÓN O R I E N TADA A O BJ E TOS ( G RADO EN I N G E N I E R iA I N FORMÁTICA f T E C N OLOG iAS D E
LA I N FORMAC IÓN)
J U N IO 2 0 1 3 - MODELO 8 - No ESTÁ PERM ITIDO E L USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PUNTOS] :


Sólo u n a de las respuestas es vá l i d a . Las respu estas correcta s se puntuarán con +1 .0, mientras q u e las respo ndidas d e
manera incorrecta se pu nt u a rá n c o n -0.25. La s no contestadas no tendrán i nfl uencia ni positiva ni negativa e n la n ota .

Pregu nta 1: Dado el siguiente fragmento de cód igo, cuál es el res ultado del co mando java test 2:

pub l i c c l a s s t e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g a r g s [ ] ) {
I n t e g e r i n t üb j = I n t e ge r . v a l u e ü f ( a rgs [ a rgs . l e ngth - 1 ] ) ;
i n t i = i n t Ob j . i n tV a l u e ( ) ;

i f ( a rgs . l e ngth > 1 )


S y s tem . ou t . p r i n t l n ( i ) ;
i f ( a rgs . l e ngth > 0 )
S y s tem . ou t . p r i n t l n ( i - 1 ) ;
el se
S y s tem . ou t . p r i n t l n ( i - 2 ) ;

a . test
b. test- 1
c. 1
d. 2

Pregu nta 2 : Dado e l siguiente fragmento de cód igo, i ndi que c u á l de l o s siguientes resultados es el resu ltad o d e s u
ejecu ció n :

pub l i c c l a s s t e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g a r g s [ ] ) {
int i , j = 1 ;
i = (j>1) ?2 : 1;
switch ( i ) {
c a s e 0 : S y s tem . ou t . p r i n t ( O ) ; b r e a k ;
c a s e 1 : S y s tem . ou t . p r i n t ( 1 ) ;
c a s e 2 : S y s tem . ou t . p r i n t ( 2 ) ; b r e a k ;
c a s e 3 : S y s tem . ou t . p r i n t ( 3 ) ; b r e a k ;

a. 01
b. 12
c. 13
d . 23

Pregu nta 3 : Segú n e l texto de la bibliografía básica de la asignatura, i ndi que c u á l de las sigu i e ntes afirmaciones e s
incorrecta sobre l as bibliotecas para la construcción de interfa ces gráficas de us uario en Java:
a . AWT utiliza clases de Swi ng.
b. Swing util iza clases de AWT.
c. H ay clases e q u iva l e ntes en AWT y Swi ng.
d . S e identifica n l a s clases de Swing con l a letra J como prefijo.
Pregu nta 4 : Segú n e l texto d e l a bibliografía básica de la asignatu ra, i ndi que cua les de las sigu i e ntes expresiones
resu lta n ve rd a d eras:
l. ( 4 > 5 )
2 o 1 > 2 ) 1 1 ( ( 3 3 ) && ( 2 < 1 ) )
--

3 o 3 > 3 ) 1 1 ( 3 --
3 ) && ( 1 < 2 )
4 o 3 > 3 ) 1 1 ! ( ( 3 --
3 ) && ( 1 > o ) )
5. 33 '= 33 ) & & ! false

a. La s expresiones 3 y 4.
b. La s expresiones 2 y 4.
c. La s expresiones 3 y S.
d. La s expresiones 1 y 3.

Pregu nta 5 : Segú n e l texto de la bibliografía básica de la asignatura, i ndi que c u á l de las sigu i e ntes afirmaciones e s
incorrecta :
a . La s clases d efi nen ti pos.
b. La s d iagra mas d e clases mu estra n las clases de u na aplicación y la relación entre el los.
c . La s clases son objetos.
d . La s clases d efi nen métodos.

Pregu nta 6: Dado el sigu i e nte fragme nto de cód igo, i ndi que cuál de las siguientes afirmaciones es el resu ltad o de su
ejecu ció n :
1. class U no{
2. protected U no yo M i smo(){ retu rn this;}
3.
4. class Dos exte nds U no{
S. public Dos yo M ismo(){
6. ret u rn su per.yo M ismo();
7.
8.

a. No hay e rrores en el código. El resu lta do sería una refe rencia a un objeto del tipo U no
b. N o hay e rrores en el código. El resu lta do sería una refe rencia a un objeto del tipo Dos
c. I ncompati bil id ad de ti pos línea 6.
d. El método yoM ismo d e la clase U no no es visi ble en línea 6.

Pregu nta 7 : Segú n e l texto de la bibliografía básica de la asignatura, i ndi que c u á l de las sigu i e ntes afirmaciones e s
correcta :
a . El encapsu l amiento a propiado en l a s clases red u ce su acoplamiento.
b. El acopla m ie nto describe el encapsu l a m iento de las clases.
c. El encapsu l amiento a propiado en las clases red u ce su cohesión.
d. La cohesión d e u na unidad de cód igo refleja su acopla miento.

Pregu nta 8: Dado el sigu i e nte fragme nto de cód igo, i ndi que cuál de las siguientes afirmaciones es el resu ltad o de su
ejecu ció n :

public class TestSet {


static void a dd (Set set) {
set. a d d ( " H o l a " );
set. a d d ( l);
System. out.println(set.size());

public static void m a i n(String[] a rgs) {


Set<Stri ng> set new H a shSet<String>();
=

a d d (set);
a. O
b. 1
c. 2
d. N u i i Poi nterException

Pregu nta 9 : ¿Cuál d e l as sigui entes es u n pala bra reservada en Java ?:


a . N U LL
b. new
c. i nsta nceOf
d. wend

Pregu nta 10: ¿Cu á l de l a s sigu i e ntes afi rmaciones es correcta sobre la clase Math en Java ?:
a . public c l a ss MyCa l c exte nds Math
b. Math.max( 10);
c. Math.round (9. 99, 1);
d. N i nguna d e l a s a nteriores.

Pregu nta 11: Dado e l sigu i e nte fragmento de cód igo, i ndi que cuál d e las siguientes afirmaciones es el res u ltado d e su
ejecu ció n :

pub l i c c l a s s t e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g a r g s [ ] ) {
int i=l , j = l ;
try
i++;
j --;
i f ( i == j )
i++;

c a t c h ( A r i thme t i cExcep t i on e ) {
S y s tem . ou t . p r i n t ( O ) ;

c a t c h ( A r r a y i nde xOu tOfBoundsExcep t i on e ) {


S y s tem . ou t . p r i n t ( l ) ;

c a t c h ( Excep t i on e ) {
S y s tem . ou t . p r i n t ( 2 ) ;

finally {
S y s tem . ou t . p r i n t ( 3 ) ;

S y s tem . ou t . p r i n t ( " , 4 " ) ;

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

Pregu nta 12: Segú n el texto de la bibl iografía básica de la asignatura, i ndi que cuál de las siguientes defin iciones d e un
método m, que la nza IO Exception, y que devue lve void, es correcta :

a. void m() th rows I O Exceptio n {}


b. void m() th row I O Exceptio n {}
c. void m(void) th rows IO Exce ption {}
d. void m ( ) { } th rows I O Exception
Pregu nta 13: Dado e l siguiente fragmento de cód igo, i ndi que cuál es el resu ltado de su compi lación :

l. c l a s s Parent {
2. Doub l e g e t ( )
3. return 1 . 0 ;
4o
5o
6. c l a s s C h i l d extends P a r e n t {
7. Integer get ( )
8. return 2 ;
9o
10 .

a. Éxito.
b. get() en Child no puede extender get( ) en Pa rent, ti pos del retorno son i ncom pati bles.
c. get() e n Child no puede extender get( ) en Pa rent, no son clases públ icas.
d . get() e n Child y a defi nido en P a rent.

Pregu nta 14: Según el texto de la bibliografía básica de la asignatu ra, i ndi que cuál de las siguientes afirmaciones es
correcta :
a . Si un a cl ase t ie ne a lgún método abstracto hay q u e declara rla como a bstracta .
b. Todos los métodos en u na clase abstracta tienen que ser declarados como abstractos.
c. Una clase q u e hereda de una clase abstracta no tiene q u e implementa r todos los métod os abstractos para no
ser abstracta.
d . U n a clase abstracta no puede implementa r n inguna i nte rface.

Pregu nta 15: Dado e l siguiente fragmento de cód igo, i ndi que cuál es la sa l i d a de su compilación/ejecución :
l. S t r i n g n omb re = n u l l ;
2. F i l e f i l e = new F i l e ( " / f o l d e r " , n omb re ) ;
3. S y s t em . ou t . p r i n t ( f i l e . e x i s t s ( ) ) ;

a . true
b. fa lse
c. N u i i Poi nterExce ption en línea 2.
d . N u i i Poi nterException en l ínea 3 .

PARTE PRÁCTICA [6,5 PUNTOS] :


La práctica del presente cu rso ha sido u na versión del j uego " R-Type" . A contin u ación se presenta n las reglas d e l j u ego
ta l y como se so licitaba para la práctica del c u rso:

1. El juego comenzará c o n u na panta l la de bienvenida a partir de la cual se pod rá seleccionar el mod o d e j u ego
(FAC I L, N O R MAL, CO M P LICADO, I M POSI BLE) y comenzar a jugar.
2. El juego consta rá de u n ú n i co nivel donde el jugador deberá aca b a r co n una horda de naves a l ie níge nas. El
n ú mero d e a l ien ígenas con los que acabar dependerá del modo de j uego sel eccionado. Fácil= 10, N orma l= 15,
Compl icado=20, lm posible=30.
3. El jugador control a rá l a nave a l ia da y d ispondrá de 1 sola vid a .
4. La s naves a l ie n ígenas será n controladas p o r el ordenador.
5. La s naves a l ie n ígenas no d i spara n .
6. N o h a y q u e implementa r re lieve. E s decir, no h a y q u e mostra r ningún tipo de suelo o techo como e n e l j u ego
origi n a l .
7. L a nave a l i a d a podrá moverse a rriba (Tecla Q), a bajo (Tecla A ) , izqu ierda (Tecla O) y derecha (Tecla P ) . Así
mismo pod rá d isparar su l a ser utilizando la tecla ESPACIO.
8. El á rea d e movimiento perm iti do para la nave será toda la pa nta lla, a u nq u e habrá que com proba r que la nave
no sa lga de estos l ím ites.
9. El d isparo que rea liza la nave a l ia da es conti nuo, es decir, no es necesa rio espera r a que el misil d ispara d o
abandone la panta l la para q u e l a nave a l i a d a p u e d a volver a d isparar.
10. La nave a l i a d a sólo puede realizar un tipo d e d i sparo que se desplazará horizonta lmente hacia la de recha d e la
panta l l a , sin va riar su trayectoria y a velocidad consta nte.
11. La s naves a l ie n ígenas se m u even a velocidad consta nte y podrán ser de d os tipos:
a. Nave Alienígena Tipo A. Apa recen po r la pa rte derecha de la panta l la y se m u even horizonta lmente
hacia la izqu ierda a velocidad consta nte sin va riar su trayectoria, es decir, su coordenada "y" no varia e n
todo el desplazamiento.
b. Nave a lienígena Tipo B. Apa recen por la pa rte derecha de la panta l la y se m u even hori zonta lmente
hacia la izqu ierda a velocidad consta nte. La principal d ife rencia con las Naves de Tipo A es q u e éstas
pueden va riar su trayectoria, es decir, en su desplaza miento horizonta l pueden va riar su coordenada "y"
d e manera a l eatoria .
12. La ve locidad a l a q u e s e m u eve n l a s naves a l i e nígenas dependerá del modo de j uego sel eccionado. Tod as las
naves se m u even a l a m isma velocidad.
13. Cuando l a s naves a l i e n ígenas a lcancen l a pa rte izqu ierda de la pa nta lla volve rá n a aparecer por la pa rte d e recha
d e ésta.
14. Se deberán d e detecta r dos ti pos de col isiones.
a . La s colisiones entre la nave a l ia da y las naves a l ie níge nas, lo q u e supondrá el final del j uego.
b. La s col isiones entre los m isiles d i sparados por la nave aliada y las naves ali enígenas, lo que supondrá la
d estru cción de la nave a l i enígena contra la que ha chocado el misil.
15. Si e l jugador fi na l iza el nivel del j u ego deberá aparecer u n me nsaje de fe l icitación y se volvería a mostra r e l
menú i nicia l .

a) [1,5 pu ntos] Diseñar u t i l i z a ndo u n parad igma orie nta do a objetos, los elementos necesarios para la ap l icación
explicada d e l a práctica d u ra nte el cu rso. Es necesario id entificar la estructura y las re laciones de herencia y de
uso d e las clases necesa rias para a l macenar y gestionar esta información. Debe hacerse uso de los meca nismos
d e herencia siem pre que sea posible. Se va lora rá un buen d i seño que favorezca la re utilización d e cód igo y
facilite su ma ntenimiento.
b) [1,5 pu ntos] Impleme nta la clase N aveAl i a da. Especifica sus atri butos y métodos y j ustifica las decisiones de
implementación q u e creas im porta ntes.
e) [1,5 pu ntos] I mplementa la siguiente regla del j uego: "Las naves a l ien ígenas Tipo A aparecen por la pa rte
d erecha de la panta l l a y se mueven horizonta lmente hacia la izqu ierda a ve locidad consta nte sin va riar su
trayectoria, es decir, su coord enada "y" no varia en todo el desplaza miento". Especifica sus atri butos y métod os
y ju stifica las decisiones de i mplementación q u e creas im porta ntes.
a) [2 pu ntos] I n d i q u e los ca m bios q u e sería n necesarios en el d iseño y progra ma para permiti r que ca d a nave
a l ienígena se moviera seg ú n u na trayectoria independ iente del resto de naves a l ieníge nas p u d iendo moverse
li bremente e n las cuatro coordenadas (a rriba, a bajo, izqu ierda y derecha ) . Las naves a l ien ígenas no pod ría n
ocu par el m ismo espacio de coordenadas, por tanto debería n choca r y cambiar su d i rección.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA
71901072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA / TECNOLOGÍAS DE LA INFORMACIÓN)
JUNIO 201 3 - MODELO A - No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONA

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Sólo u n a d e las respuestas es válida. Las respuestas correctas se p u ntuarán con +l . O, mi entras q u e las respondidas d e
mane ra i ncorrecta se p u ntuarán con -0. 25 . Las no contestadas no tendrán i nfl u encia n i positiva n i negativa e n la nota.

Pregunta 1 : Según e l texto d e la bibl iografía básica d e la asignatura, el alcance d e una va riable lll

a. Defin e la forma en la q u e la va riable puede s er accedida.


b. Define e l conj u nto d e m étodos q u e puede acceder a la va riable.
c. Define la sección d e cód igo en la que l a va riable puede ser accedida.
d. N inguna d e las a nteriores.

Pregunta 2 : Según e l texto d e la bibl iografía básica d e la asignatura, u n prototipo es lll

a. U na versión d e l a apl icación en la q u e se simula una parte de el la, en vías a experimentar co n las resta ntes
partes.
b. U na versión de l a apl icación en l a que se simulan varias partes, en vías a experimentar con una de sus partes.
c. U na versión de l a apl icación en l a q u e se simulan varias partes, en vías a experimentar con las restantes partes.
d. N inguna d e l a s a nteriores

Pregunta 3 : Respecto a l a s excepciones en J ava, podemos afirmar lll

a . Todas las su bclases d e la clase está ndar d e Java Run T imeE x c ep t i o n son excepciones compro badas.
b. Todas las su bclases de la clase está ndar de Java E x c ept i o n son excepciones comprobadas.
c. E r r o r es una s u bclase d i recta de T h r owab l e, m ientras q u e E x c ept i o n es una s u bclase d i recta de E r r o r .
d. Tanto E r r o r como E x c ep t i o n son s u bclases d i rectas d e Th rowab l e .

Pregunta 4 : ¿Qu é meca nismo usa J ava para i m p l em entar herencia m ú ltiple?

a. E n Java no se perm ite l a herencia m últiple d e clases, ni tam poco la implementación m últiple d e i nterfaces.
b. E n Java no se perm ite l a herencia m últiple de clases, pero sí la implementación m ú ltiple de interfaces.
c. E n Java se permite la herencia m últiple de clases, pero no la implementación m últiple de interfaces.
d. En Java se permite la herencia m últiple de clases, y ta m bién la implementación m ú ltiple de i nterfaces.

Pregunta 5 : ¿Cuál es e l va lor d e la va riable d después d e ejecutar la siguiente l ínea d e código?


doub l e d = Ma th . r o u n d ( 2 . 5 + Ma th . r a n dom ( ) ) ;

a. 2
b. 3
c. 4
d. 2.5

Pregunta 6 : Se a e l siguiente código :


s w i t ch (x) {
d e f au l t :
S y s t em . o ut . p r i n t l n ( " H o l a " ) ;

¿Qué dos posibles tipos son aceptables para x?


1 : byte 2 : long 3 : char 4: float 5: Short 6: Lo ng

a. 1 y 3.
b. 2 y 4.
c. 3 y 5.
d. 4 y 6.
Pregunta 7: ¿Qu é i nterfaz proporciona la capacida d d e al macenar obj etos usando u n va lor l lave?

a. Java . uti i . Map.


b. Java . utii .Set.
c. Java . utii. List.
d. Java . utii .Col l ection.

Pregunta 8 : ¿Cuál d e las siguientes sentencias s o n correctas?


(1) int w = ( i nt ) 8 8 8 . 8 ;
(2) byte x = ( by t e ) l O O O L ;
(3) l o n g y ( byt e ) 100;
(4) byt e z = ( byt e ) 1 OOL;

a . 1 y 2.
b. 2 y 3 .
c. 3 y 4.
d . Todas son correctas.

Pregunta 9 : ¿Cuál d e las siguientes sentencias declara l ega l m e nte, construye e in icial iza u n array?

a. int [J mi L i s t a = { "1", "2" , "3" } ;


b. int [J mi L i s t a = (5, 8, 2) ;
c. int miLista [J [J = { 4 , 9, 7 , 0 } ;
d. int miLista [J = {4, 3, 7} ;

Pregunta 10: ¿Cuál de las siguientes listas contiene sólo pala bras clave de Java?

a. c l a s s, i f, vo i d, l o n g, I n t, c o n t i nu e .
b. g o t o , i n s t a n c e o f, n a t ive, f i n a l l y, de f a u l t, t h r o w s .
c. t r y, v i r t u a l , t h row, f i n a l , vo l a t i l e, t ra n s i e n t .
d. b y t e , b r e a k, a s s e r t, s w i t ch, i n c l ude.

Pregunta 11: ¿Cuál es la salida q u e pro d u ce el siguiente progra ma?

pub l i c c l a s s T e s t
{
pub l i c s t a t i c v o i d l e ft s h i f t ( i n t i , int j )
{
i <<= j ;

pub l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
{
int i = 4 , j = 2 ;
l e ftshift ( i , j ) ;
S ys t em . ou t . p r i n t l n ( i ) ;

a. 2
b. 4
c. 8
d . 16

Pregunta 12: ¿Cuál es la salida del siguiente programa?

class Test {
pub l i c s t a t i c v o i d ma i n ( S t r i n g [] a rg s )
T e s t p = new Te s t ( ) ;
p . s t a rt ( ) ;
void start ( )
b o o l e a n b l = fa l s e ;
boolean b2 = fix ( bl ) ;
S y s t e m . ou t . p r i n t l n ( b l + " " + b2 ) ;

boolean fix (boolean b l )


b l = true ;
return bl ;

a. true true
b. fa lse true
c. true fa lse
d. fa lse fa lse

Pregunta 13: ¿Cuál es la salida que se o btiene a l ejecutar este programa?

l. pub l i c c l a s s T e s t {
2. pub l i c i n t aMe thod ( )
3. static int i = O ;
4 o i++;
5. r e t u rn i ;
6 o

7. pub l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
8. T e s t t e s t = new T e s t ( ) ;
9. i n t i = t e s t . aMe thod ( ) ;
10 . i n t j = t e s t . aMe thod ( ) ;
11 . S ys t em . ou t . p r i n t ln ( j ) ;
12 .
13 .

a. O
b. 1
c. 2
d. La co m pilación fa l l a .

Pregunta 14: ¿Cuál es la salida del siguiente programa?

for ( i nt i = O ; i <= 4 ; i += 2 )
S y s t em . o ut . p r i nt ( i + " ") ;

S y s t em . o ut . p r i n t l n ( i ) ;

a. O24
b. o245
c. o1234
d. La compilación fa l l a .

Pregunta 15: ¿Qué cód igo hay que añadir en la posición i n d icada en el código para que co mpile?

pub l i c c l a s s Except i o n T e s t {
c l a s s T e s tExcept i o n extends Except i o n { }
pub l i c v o i d run T e s t ( ) t h r ows T e s tExcept i o n { }
pub l i c v o i d t e s t ( ) / * Codigo a añadir * / {
run T e s t ( ) ;

a. N o h ay q u e añadir cód igo alguno.


b . throws E x c ep t i o n
c . c a t ch ( E x c ep t i o n e )
d . t h r o w s Run t imeEx cept i o n
PARTE PRÁCTICA [6,5 PUNTOS] :
La práctica d e l presente cu rso ha sido u na versión del j u ego IZIR-Typelll A contin uación se presentan las reglas del
j u ego tal y como se sol icita ba para la práctica del curso:

l. El j u ego comenzará con u na panta lla d e bienvenida a partir d e la cual se podrá sel eccionar el modo d e j u ego
( FACI L, N O R M AL, CO M P LI CADO, I M PO S I B LE) y comenzar a j ugar.
2. El j u ego constará d e u n ú n ico n ivel d o n d e el j ugador d e berá acabar con una horda d e naves ali e n ígenas. E l
n ú me ro d e al i enígenas con l o s q u e aca bar dependerá del modo d e j u ego seleccionado. Fácil= 10, Normal=15,
Complicado=20, l mposi ble=30.
3. E l j ugad or controlará l a nave aliada y d ispondrá de 1 sola vida.
4. Las naves al ie n ígenas serán controladas por el ordenador.
5. Las naves al ie nígenas no d ispara n.
6. N o h ay q u e i mplementar rel i eve. Es decir, no hay q u e mostrar n i ngún ti po d e suelo o techo como e n e l j u ego
original.
7. La nave aliada podrá moverse arriba (Tecla Q), a bajo (Tecla A), izq u ierda (Tecla O) y derecha (Tecla P). Así m ismo
podrá d isparar s u laser utilizando l a tecla ESPACIO.
8. E l á rea d e movimiento permitido para l a nave será toda la pantal la, a u n q u e habrá que compro bar que la nave
no salga d e estos l ím ites.
9. E l d isparo que real iza l a nave aliada es conti n uo, es decir, no es necesario esperar a que el m isil d isparado
a bandone la panta l l a para que la nave aliada pueda volver a d isparar.
10. La nave a l iada sólo puede real izar un tipo de d isparo que se despl azará horizonta l m e nte hacia la de recha de la
pantal la, sin variar s u trayectoria y a velocidad constante.
11. Las naves al ie n ígenas se m u even a velocidad constante y podrán ser de dos tipos:
a. Nave Alienígena Tipo A. Aparecen por la parte derecha de la pa nta lla y se m u even horizontalmente
hacia la izq u ierda a velocidad constante sin va riar s u trayectoria, es decir, s u coordenada f11]1 o varia en
todo e l desplazamiento.
b. Nave Alienígena Tipo B. Aparecen por la parte derecha de la panta lla y se m u even horizonta l me nte
hacia l a izq u ierda a velocidad constante. La principal d iferencia con las N aves de Tipo A es q u e éstas
pueden va riar su trayectoria, es decir, en su desplazamiento horizontal pueden variar su coordenada �
d e manera a l eatoria.
12. La velocidad a la que se m u even las naves ali enígenas dependerá del modo de j u ego seleccionado. Todas las
naves se m u even a la m isma velocidad.
13. Cuando las naves a l i enígenas a l cancen la parte izq u ierda d e la pantalla volverán a aparecer por la parte d e recha
de ésta.
14. Se d e berán de d etectar dos ti pos de col isiones.
a. Las col isiones entre la nave aliada y las naves ali enígenas, lo q u e s upo ndrá el final del j u ego.
b. Las co l isiones entre los m isiles d isparados por la nave aliada y las naves ali enígenas, lo que su pondrá la
d estru cción d e la nave a l i enígena contra la que ha chocado el m isil.
15. Si e l j ugador finaliza el n ivel del j u ego deberá aparecer u n mensaje d e felicitación y se volvería a mostrar e l
m e n ú i n icial.

Se pide d i se ñ a r u t i l i z a n d o u na a p roxi m a c i ó n o rie ntada a o bjetos u n a a m p l i a ci ó n a l a p rá ct i ca rea l izada a lo


la rgo d e l c u rso que perm ite l a existencia de un n uevo t i p o d e nave a l i e n íge n a (Ti po C).

Este n u evo ti po de n a ve es una m od ifica ción de la n a ve Tipo A, con la p a rt i c u l a ridad de q u e, c u a ndo


a lca nza la pa rte i zq u i e rda, e n l uga r d e a pa rece r por l a pa rte d e recha, l o que h a ce es d e s p l a za rse de i zq u i e rda a
d e recha, h a sta q u e a l ca nza n ueva me nte e l l ím ite d e recho, vo lvi e n d o e ntonces a d e s p l a z a rse hacia la i zq u i e rda
(y a s í s u cesiva m e nte h a sta se r dest r u id a ) .

E n u n m o m e nto dete rm i n a do, s ó l o p uede h a b e r u na n a ve d e Ti po C e n e l j uego, y no s e p uede cre a r otra


m i e n t ra s la a nterior de ese t i po no haya sido d e st r u i d a . Ad e m á s, co m o m áxi m o, se podrá n ge n e ra r 2 n aves de
Ti po C en el modo Fáci l; 3 en el modo N o r m a l ; 4 en el modo Co m p l icado y 5 en el modo I m posi b l e
a) [1,5 pu ntos] Proponga y explique, utilizando d iagramas d e clase, cómo modela ría este n u evo tipo d e nave
al ie n ígena aprovechando el d iseño que ha rea lizado en la práctica. Debe hacerse uso de herencia siem pre q u e
s e a posible. Se va lorará u n b u e n d iseño q u e favorezca la reutil ización d e código y faci lite s u mante n i miento.

b) [1,5 pu ntos] I mplemente la n u eva clase especificando sus atri butos y métodos, j ustificando las decisiones d e
i mplementación q u e considere relevantes.

e) [2,0 puntos] Implemente la regla del j u ego: �lila nave alienígena Tipo C se com porta como una nave Tipo A, con
la particularidad de que, cuando alca nza la parte izquierda, en lugar de aparecer por la parte derecha, lo que
hace es desplazarse de izquierda a derecha, hasta que alcanza nuevamente el límite derecho, volviendo
entonces a desplazarse hacia la izquierda (y así sucesivamente hasta ser destruida)IZI.

a) [1,5 puntos] Explique razonadamente q u é cambios serían necesarios en el d iseño q u e ha realizado en los
apartados anteriores para que la nave a l i enígena Tipo C pudiera rea l izar un n ú mero N de idas y venidas ( d e
d e recha a izq u ierda y viceversa) y q u e cuando pasaran ese n ú mero d e veces sin ser d estruida, e ntonces se
a utodestruyera.
U N IV ERSIDAD NAC IONAL DE E DU CAC IÓN A D ISTA N C IA - ESCUELA T É C N ICA S U P E R IO R DE I N G E N I E RiA
I N FORMÁTICA
7 1 9 0 1 0 7 2 - PROGRAMACIÓN O R I E N TADA A OBJETOS ( G RADO E N I N G E N I E RÍA I N FORMÁTICA f T E C N O LOGÍAS DE
LA I N FORMACIÓN)
S EPTI E M B R E 2 0 1 3 - M O DELO C - No ESTÁ PERM ITIDO E L USO D E MATERIAL ADICIO NAL

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Sólo u na de las respuestas es vá l i d a . La s respu estas correcta s se puntuarán con +1.0, mientras q u e las respondidas d e
ma nera incorrecta se p u ntuarán c o n - 0 .2 5. La s no contesta das no te ndrán infl uencia ni positiva ni negativa e n la nota .

Pregu nta 1: ¿Qué ocu rrirá al com p i l a r y ejecuta r el sigu i e nte código?

c l a s s Padre { }
c l a s s C l a s e H i j a extends Padre { }
c l a s s C l a s e H i j a 2 e x t e n ds P a d r e { }
pub l i c c l a s s T e s t {
pub l i c s t a t i c vo i d ma i n ( S t r i n g a r gv [ ] ) {
P a d r e b=new P a d r e ( ) ;
ClaseHi j a s= ( C laseHi j a ) b ;
S y s t em . o u t . p r i n t ( " E j e c u t a n do Ap l i c a c i ó n " ) ;
}

a. Compil a rá y s e ejecuta rá s i n problemas


b. Error d e Com pilación
c. Excepción e n tiempo de ejecución
d. Excepción e n tiempo de ejecución y l u ego mostra rá el mensaje " Ejecutando Aplicación"

Pregu nta 2: Segú n la bibliografía básica, ¿Qu é elementos cree q u e defi nen a un objeto?

a . S u s ca rd i na l i d a d y su tipo
b. Sus atri butos y sus métodos
c. La forma e n q u e esta blece com u nicación e i nterca mbia mensajes
d . Su inte rfaz y l o s eventos asociados

Pregu nta 3: Dada l a siguiente definición de cla se, ¿Cuál sería el contenido más coherente a i mplementa r en el
constructor?

class Test {
i n t var ;
T e s t ( i n t va r ) { CONTE N I DO C ON S T RU C T OR }

a. va r=va r;
b. int var=va r;
c. this.va r=var;
d. No s e puede l l a m a r igua l el parám etro d e l constru ctor q u e el atri buto de la clase

Pregu nta 4: De acu erdo a l a bibliografía básica ¿Qué es el bytecode en Java?

a. U n formato d e i nterca m bio de datos


b. El formato q u e obtenemos tras com p i l a r u na clase .java
c. Un tipo d e va riable
d. U n d e pura d or de cód igo
Pregu nta 5: Dado e l sigu i e nte fragmento de progra ma, i ndi que q u e afirmación es cierta :

int cont ;
for ( cont=S ; cont>O ; cont- - )
S y s t em . o ut . p r i n t ( c o n t ) ;
S y s t em . o ut . p r i n t ( c o n t ) ;

a . S e imprime e n pa nta l l a 543210


b. Se im prime e n panta l l a 5432100
c. Se im prime e n pa nta l l a 55443 3 2 2 1 100
d. Se im prime e n pa nta l l a 543210-1

Pregu nta 6: Dados los sigu i e ntes fragmentos de cód igo ¿Cu á l de ellos asocia ría a una I nterfaz en Java ?

a. public class Componente interfa ce Pro du ct


b. Compone nte cp new Componente (i nterfa z)
=

c. public class Componente implements Printable


d. Compone nte cp new Componente . interfaz
=

Pregu nta 7: De acu erdo a l a bibliografía básica ¿Qué significa insta nciar una clase?

a. Duplica r una clase


b. Eliminar una clase
c. Cre ar un objeto a partir de l a clase
d. Conectar dos clases entre sí

Pregu nta 8: Dado el sigu i e nte cód igo, el resu lta do será :

c l a s s Mi C l a s e { p ub l i c i n t va l o r ; }

class Test {

pub l i c s t a t i c v o i d ma i n ( S t r i n g [ ] a r g s ) {
MiClase a l n e w Mi C l a s e ( ) ;
M i C l a s e a 2 = n e w Mi C l a s e ( ) ;
M i C l a s e a 3 = n e w Mi C l a s e ( ) ;
a l . va l o r= l S O ;
a 2 . va l o r= l 5 0 ;
a 3 = a2 ;
if (al a2 ) S ys t e m . ou t . p r i n t l n ( " UNO " ) ; }
if (al a3) S ys t e m . ou t . p r i n t l n ( " D O S " ) ; }
if (a2 a3) S ys t e m . ou t . p r i n t l n ( " TRE S " ) ; }

a. UNO
b. U N O TRES
c. UNO DOS TRES
d. TRES

Pregu nta 9: Dadas las sigui entes defin iciones de clases:

c l a s s C l a s e Padre { }
c l a s s C l a s e H i j a l e x t e n ds C l a s e Pa d r e { }
c l a s s C l a s e H i j a 2 e x t e n ds C l a s e Pa d r e { }
y l a s siguientes insta nciaciones:

C l a s e Padre var O new C l a s e Padre ( ) ;


ClaseHij a1 var 1 new ClaseHij a1 ( ) ;
ClaseHi j a2 var2 new ClaseHi j a2 ( ) ;
C l a s e Padre var3 new ClaseHij a1 ( ) ;
C l a s e Padre var 4 new ClaseHi j a2 ( ) ;

¿Cuál de las asignaciones es vá l i d a ?

a . va rO = va r1;
b. va r2 = (Ci ase H ij a 2 )va r1;
c. va r2 = va r4;
d. va r1 = var2;

Pregu nta 10: ¿Qué ocu rrirá al com pilar y ejecutar el sigu iente cód igo?

pub l i c c l a s s M i C l a s e {
s t a t i c i n t va r i ab l e E s t a t i c a ;
pub l i c s t a t i c v o i d ma i n ( S t r i n g a r gv [ ] ) {
S ys t e m . o u t . p r i n t l n ( va r i ab l e E s t a t i c a ) ;
}
}

a . Error e n tiempo de ejecución. La va riable "va riable Estatica" no ha sido i nicia l izada
b. Se mostra rá e n panta l l a n u l l
c. Se mostra rá e n panta l l a 1
d . S e mostra rá e n pa nta l l a O

Pregu nta 11: De acuerd o a l a bibliografía básica ¿Qué significa sobreca rga r un métod o?

a. Editarlo para mod ifica r su com porta miento


b. Ca m biarle e l nombre dejánd olo con la misma fu ncionalidad
c. Cre a r u n método con el mismo nom bre pero d ife rentes a rgumentos
d . Aña d i rle fu nciona l id a des a u n método

Pregu nta 12: ¿Qué se mostra rá en panta l la al ejecuta r el siguiente cód igo?

imp o r t j ava . awt . * ;


imp o r t j avax . s w i n g . J F r ame ;

pub l i c c l a s s App B o t o n e x t e n d s JF rame {

pub l i c s t a t i c vo i d ma i n ( S t r i n g a r gv [ ] ) {
AppB o t o n MiApp B o t o n= n e w AppB o t o n () ;

pub l i c App B o t o n ( ) {
B u t t o n b o t o n 1 = n e w B u t t o n ( " BOTON 1 " ) ;
B u t t o n b o t o n 2 = n e w B u t t o n ( " BOTON 2 " ) ;
add ( b o t o n 1 ) ;
add ( b o t o n 2 ) ;
setS i z e ( 1 0 0 , 1 0 0 ) ;
s e tVi s ib l e ( t ru e ) ;
}
}
a. Dos botones, u n o j u nto a otro ocupando todo el fra me. En el botón de la izqu ierda aparecerá BOTON 1 y e n e l
d e l a d e recha ap a recerá BOTO N 2 .
b. U n botón ocu pando todo el fra me con l a eti q u eta BOTON 1.
c. U n botón ocu pando todo el fra me con la etiq ueta BOTON 2.
d. Dos botones en l a pa rte superior del fra me, uno de ellos con la eti q u eta BOTO N 1 y otro d e ellos con la etiq u eta
BOTON 2.

Pregu nta 13: De acuerd o a l a bibliografía básica, ¿Cuál es la descripción q u e crees q u e define mejor el conce pto 'clase'
e n l a progra mación orienta da a objetos?

a. E s u n concepto similar a l de 'a rray'


b. Es un tipo particu l a r de va riable
c. Es u n modelo o plantilla a partir de la c u a l creamos objetos
d. E s un a categoría de datos ordenada secuencialmente

Pregu nta 14: De acuerd o a la bibliografía básica, el q u e una va riable en una clase sea estática implica

a . Ha ce fa lta cre a r u n o bjeto para usarl a .


b. Cua l q u ie r o bjeto de esa clase puede mod ifica r su va lor.
c. Todos los objetos tienen una copia de l a va ria ble.
d. Que es un a va riable global y se puede usar en cualquier pa rte de la apl icación.

Pregu nta 15: Segú n e l cód igo siguiente ¿Qué se visu a l izará en panta l l a ?

c l a s s C l a s eA {
pub l i c C l a s eA ( int x ) {
S y s t em . o ut . p r i n t ( " C l a s eA- " + x) ; }

c l a s s C l a s e B e x t e n ds C l a s e A {
pub l i c C l a s e B ( ) {
supe r ( 6 ) ;
S y s t em . o ut . p r i n t ( " C l a s e B - " ) ; }

pub l i c c l a s s C l a s e P r i n c i p a l {
pub l i c s t a t i c v o i d ma i n ( S t r i n g [ ] args )
C l a s e B ob j B l = n e w C l a s e B ( ) ;
C l a s e B ob j B 2 ;
S ys t e m . ou t . p r i n t l n ( " FIN" ) ;

a. Cla seA-6 ClaseB- F I N


b. ClaseB- Cla seA-6 F I N
c. Hay un error en la clase B. La se nte ncia "super(6);" no puede ser la primera en el constru ctor
d. H a y e n e rror en la clase ClasePri nci pal. Fa lta el new en "CiaseB obj B2;"

PARTE PRÁCTICA [6,5 PU NTOS] :

La práctica d e l prese nte cu rso ha sido u na versión del j uego "R-Type". A conti nuación se presentan las reglas d e l
j u ego ta l y como se sol icita ba para l a práctica del curso:

1. El juego comenzará c o n u na pa nta l l a de bienvenida a partir de la cual se pod rá sel eccionar el mod o d e j u ego
( FACI L, NORMAL, CO M P LICADO, I M POS I BLE) y comenzar a jugar.
2. El juego consta rá de u n ú n ico nivel donde el j ugado r deberá acabar co n una horda de naves a l i enígenas. El
n ú me ro d e a l i e nígenas con los que a ca b a r depend erá del modo de j uego seleccionado. Fácil= 10, Normal=15,
Co mpl icado= 20, l m posible=30.
3. El juga d or contro l a rá la nave aliada y d i spondrá de 1 sola vid a .
4. La s naves a l i e nígenas será n controladas por el ordenador.
S. La s naves a l i e nígenas no d ispara n.
6. No hay que implementa r re lieve. Es decir, no hay que mostra r ningún tipo de suelo o techo como e n e l j u ego
origi n a l .
7. L a nave a l ia d a pod rá moverse a rriba (Tecla Q), a bajo (Tecla A ) , izqu ierda (Tecla O) y derecha (Tecla P). Así m ismo
pod rá d isparar su laser util iza ndo l a tecla ESPACIO.
8. El á rea d e movimiento permitido para la nave será toda la pa nta lla, a u nq u e habrá que com proba r que la nave
no salga de estos límites.
9. El d isparo que rea liza l a nave a l i a d a es conti nuo, es decir, no es necesario espera r a que el misil d isparado
a ba ndone l a pa nta l l a para que la nave a l ia da pueda volver a d i sparar.
10. La nave a l ia d a sólo puede rea l izar u n tipo d e d isparo que se desplazará horizonta lmente hacia la de recha d e la
panta l la, sin va riar su trayecto ria y a veloci dad consta nte.
11. La s naves a l i e nígenas se m u even a ve locidad constante y pod rá n ser de dos tipos:
a . Nave Alienígena Tipo A . Apa recen p o r la pa rte derecha de la pa nta lla y s e m u even horizo nta lmente
hacia la izqu ierda a velocidad consta nte sin va riar su trayectoria, es decir, su coordenada "y" no va ria en
todo el desplaza m iento.
b. Nave Alienígena Tipo B. Apa recen por la pa rte derecha de la panta l l a y se mueven horizonta lmente
hacia la izqu ierd a a ve locidad consta nte. La pri nci pal d ife rencia con las N aves de Tipo A es q u e éstas
pueden va riar su trayectoria, es decir, en su desplazamiento hori zonta l pueden va riar su coord enada "y"
de ma nera a l eatoria.
12. La ve locidad a la que se mueven l a s naves a l ien ígenas d ependerá del modo de j uego sel eccionado. Tod as las
naves se m u even a la misma ve loci d a d .
13. C u a n d o las naves a l ien ígenas a l ca ncen la pa rte izqu ierda de la panta l la volverá n a aparecer p o r la pa rte d e recha
d e ésta .
14. Se d e berá n de detecta r dos ti pos de colisiones.
a. La s colisiones entre l a nave a l i a d a y las naves a l i enígenas, lo que supondrá el fi nal del j uego.
b. La s col isiones entre los m isiles d i sparados por la nave a l iada y las naves a l ie nígenas, lo q u e supondrá la
d estrucción de l a nave a l ie nígena contra la q u e ha choca do el misil.
1S. Si e l jugador fi na l iza el nivel del j u ego deberá aparecer u n mensaje de felicitación y se volvería a mostra r e l
menú inicial.

To mando como pu nto de partida l a práctica rea lizada, se pide i mplementa r a lgunas mejoras para q u e la nave a l iad a
d isponga d e u n escud o p rotector. Este escu do protector pod rá activa rse pulsando la tecla " E" y, en es e momento, h ará
q u e la nave sea i n morta l d u ra nte S segu ndos. El jugador d ispondrá inicialmente de 3 escu dos protectores q u e irán
d ismi nuyendo conforme éste los vaya a ctiva ndo.

a) [1,5 pu ntos] M u estre el d i agra ma de clases genera l q u e ha d iseñado en la práctica, explicando claramente la
fu nciona l id ad de ca da u na de l a s clases y sus métodos asociados.
b) [1,5 pu ntos] Explicar q u é clases de la práctica habría q u e mod ifica r para materia l izar los ca m bios sol icitados.
M uestre claramente las va riables de i nsta ncia nueva s que habría que defi ni r y los métodos que h a b ría q u e
implementa r, i ndicando en c a d a caso a q u é clases afecta ría n .
e) [2 puntos] Implemente las mod ificaciones propuestas.
d) [1,5 pu ntos] Explique razona d a m e nte qué cambios sería n necesarios en el d iseño que ha rea l izado en los
a pa rtados a nteriores para que a p a rezca n a leatori amente Bonus d e Escudos Protectores que la nave a l iad a
pueda recoger a l p a s a r por enc i m a de el los. El efecto de recoger u n bo nus de escu dos protectores será e l
a u m ento d e l n ú mero de escu dos d isponibles para su uso.
U N IVERSIDAD NACIONAL DE E D UCACIÓN A D ISTA N CIA - E S C U E LA TÉC N ICA S U P E RIOR DE I N G E N I E RfA
I N FORMÁTICA
7 1 9 0 1 072 - P ROGRAMACIÓN O R I E N TA DA A O BJ ETOS ( G RADO EN I N G E N IERfA I N FO R M ÁTICA /
T E C N OLOGÍAS D E LA I N FORMAC IÓN}
S EPTIE M B R E 2 0 1 3 - MODELO 0 - No ESTÁ PERM ITIDO E L USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Sólo un a de las respu estas es vá l i d a . Las respu estas correctas se p u ntuarán con +1.0, mientras q u e las
respondidas d e ma nera incorrecta se p u nt u arán co n -0.25. La s no contesta das no te ndrán infl uencia ni
positiva ni negativa en l a nota.

Pregu nta 1: Seg ú n el texto de l a bibliografía básica de la asignatu ra, i ndi que cu á l de las sigu i e ntes
afirmaciones es correcta :
a . La signatu ra es el encabezado de u n método y pro porci ona la información necesaria para i nvocarlo.
b. La signatu ra está form a da por los parámetros de u n método y proporciona la información necesaria
para i nvoca rlo.
c. La signatura es el nom bre de un método y puede te ner pará m etros para proporcionar información
a d i cional p a ra realizar u na ta rea .
d . La signatu ra es el encabezado de u n método y puede tener pará metros para proporcionar
i nformación a d icional para rea l izar u na ta rea .

Pregu nta 2: Dado el sigu i e nte fragmento de código:

i:at. indice = 1 ;
boolean [ ] examen = new boolean [ 8 ] ;
boo lean poo = examen [ indice ] ;

I nd ica cual d e l as sigu i e ntes afirmaciones es correcta en relación a l va lor de la va riable poo.

a. poo tiene el va lor O


b. poo tiene el va lor n u l l
c. poo tiene el va lor fa l se
d. S e prod u ce u na excepción y poo no posee ningún va lor

Pregu nta 3: Segú n el texto de l a bibliografía básica de la asignatu ra, i n d i q u e cu á l de las sigu i e ntes
afirmaciones es correcta :
a . Los ca m pos s e conocen como va riables de objeto.
b. El a l ca nce de una va riable defi ne la secci ón de cód igo desde donde la va riable puede ser d eclara d a .
c. Los constructores permiten q u e cada objeto sea preparado adecu a d a m ente cuando es creado.
d. El tiempo de vida de u na va riable describe el n ú m ero de veces q u e es utilizada en u n método.

Pregu nta 4: Dado el sigu iente fragmento d e cód igo, i ndi que cuál de las siguientes afirmaciones es el
resultado d e su ejecución:

i f ( " S t ring " . t rim ( ) == " S t r i n g " )


S y s tem . ou t . p r i n t l n ( " I gu a l " ) ;
el se
S y s tem . ou t . p r i n t l n ( " No I gu a l " ) ;
a. El cód igo com pilará e i mpri m i rá "Igu a l" .
b. El cód igo com pilará e i mpri m i rá "No Igual".
c. El cód igo p rovocará u n error de compi lación.
d. El cód igo p rovocará u n error en tiempo de ejecu ción.

Pregu nta 5: Segú n el texto de l a bibliografía básica de la asignatu ra, i n d i q u e cu á l de las sigu i e ntes
afirmaciones es correcta :
a . Los ca m pos s e defi nen dentro de l o s constructores y de l o s métodos.
b. Los ca m pos se usan para a lmacenar datos q u e nu nca persisten d u ra nte la vida del objeto.
c. Los ca m pos tienen un tiempo de vida q u e perd u ra después de term i n a r el objeto.
d . La accesi bilidad de l o s ca m pos s e exti ende a tod a clase y p o r este motivo pueden usarse d entro d e
cua l q u ier constru ctor o método de c las e en la q u e estén d efi nidos.

Pregu nta 6: Segú n el texto de la bibliografía básica de la asignatu ra, i ndi que cuales de las siguientes
expresiones resu lta n verda d eras:

l. 4 < 5 )
2. 2 > 2 ) 1 1 ( ( 4 --
4 ) && ( 1 < o )
3. 2 > 2 ) 1 1 ( 4--
4 ) && ( 1 < o )
4. 2 > 2 ) 1 1 ! ( ( 4 --
4 ) && ( 1 < o )
5. 34 ' = 33 ) & & ! fa 1 s e

a. La s expresiones 4 y S .
b. La s expresiones 3 y 4 .
c. La s expresiones 2 y 4 .
d. La s expresiones 3 y S .

Pregu nta 7: Segú n el texto de l a bibliografía básica de la asignatura, i n d i q u e cual de las siguientes
afirmaciones es correcta :

a. U n objeto de tipo String puede ser modificado una vez q u e está creado, por ta nto no e s u n ejemplo
d e objeto i nmutable
b. La clase String tiene u n método de nombre trim que permite mod ifica r caracteres en cu a l q u ie r
posición de u na cadena
c. Como regla genera l, l a s cadenas de texto de tipo Stri ng se suelen comparar media nte el operador

d. U n objeto es i nm utable si su contenido o su esta do no puede ser ca m biado una vez que se ha
creado

Pregu nta 8: Segú n el texto de l a bibliografía básica de la asignatura, i n d i q u e cual de las siguientes
afirmaciones es correcta :

a. El térm ino acopla m iento describe cuá nto s e aj usta una unidad de cód igo a una tarea lógica o a u n a
entidad
b. El acopla m iento describe l a conectivi dad de los propios objetos d e una clase
c. U n enca ps u l a miento a p ropiado en l as clases red uce el acoplamiento
d. U n sistema debilmente acoplado s e ca racte riza por la i mposibilidad de modifica r una de s u s clases
sin te ner que rea l izar ca m bios en ninguna otra
Pregu nta 9: Dado el siguiente fragmento de cód igo q u e prete nde mostra r un ejemplo de sobrescritu ra :

class Examen {
private f loat pregunta = l . O f ;
protected f loat getNota ( ) { return pregunt a ; }
}

class Test extends Examen {


private f loat nota = 2 . 0 f ;

I n d i q u e cual de l a s siguientes opciones completa ría el cód igo a nterior para d a r lugar a u n ejemplo correcto
de sobrescritura :

a . public float getN ota (fl oat va lor ) { retu rn va lor; }


b. public float getN ota ( ) { retu rn nota;}
c. float getN ota ( ) { ret u rn nota ;}
d. float double getN ota ( ) { retu rn nota ;}

Pregu nta 10: Seg ú n el texto de l a bibliografía básica de la asignatu ra, i ndi que cual de las siguientes
afirmaciones es correcta :

a. Un mapa es u na colección que a l macena pares l lave/va lor como entradas.


b. Un mapa es u na colección que a l macena tríos l lave/índ ice/va lor como entradas.
c. Un mapa es u na colección que a l macena pares índ ice/va lor como entradas.
d. Un mapa es u na colección que a l macena tríos índice/posición/va lor como entradas.

Pregu nta 11: Dado el siguiente fragmento de cód igo, i ndi que cuál de las sigu i e ntes afi rmaciones es el
resultado d e su ejecución:

puh l i c class Examen {

puh l i c s t a t i c voíd main ( S tring arg s [ ] )


{
char nota = -1 ;
S y s t em . o u t . print ln ( not a ) ;
}

a. N o habrá error de co mpi lación, l a salida será - 1 .


b. La expresión " ch a r n o t a = - 1 ; " provocará u n error de co mpilación debido a q u e el ra ngo d e
l a cl ase " c h a r " es 0 - 2 ( 1 2 8 - 1 ) .
c. La expresión " ch a r n o t a = - 1 ; " provocará u n error de co mpilación debido a q u e el ra ngo d e
l a cl ase " c h a r " es 0 - 2 ( 1 6 - 1 ) .
d. N o habrá error de co mpi lación, l a salida será u n ca rácter U n icode.

Pregu nta 12: Segú n el texto de la bibl iografía básica de la asignatu ra, i ndi que cual de las siguientes
opciones d eclara rá un método en una clase q u e fuerza a una su bclase a implementa rlo:

a. protected void metodo P I (double d 1 ){}


b. abstract public void metodoPI () ;
c. static void metodoPI (dou ble d 1 ) {}
d. public native double metodoPI () ;
Pregu nta 13: Segú n el texto de la bibl iografía básica d e la asignatura, i n d i q u e cuál de las sigu i e ntes
afirmaciones es correcta :

a. U n a su percl a se e s u na clase q u e es i m plementa da por otra .


b. U n a su bclase es u na clase q u e implementa a otra clase.
c. La herencia nos perm ite hered a r pero no re utilizar en u n nuevo contexto clases q u e fu eron escritas
previamente.
d. La s clases q u e está n vincu l a da s media nte una re lación de herencia forma n una jerarq u ía de
herenci a .

Pregu nta 14: En el sigu iente fragmento de cód igo hemos defi nido la ejecución de cinco bloques. Estos
bloques se ejecutará n dependiendo de l a s excepciones q u e se prod u zca n en ca da caso.

try {

} catch ( A r i thme t i cExcep t i on e ) {

} finally {

I n d i q u e cual de la s siguientes afirmaciones es correcta :

a. El Bloque4 no s e ejecuta rá s i s e prod uce u n a exce pción de tipo a ritmético en el Bloq ue2
b. El Bloque4 se ejecuta rá a ntes de q u e la exce pción prod ucida por u n acceso a u n objeto nu/1 en e l
Bloq ue 2 se propague ha c i a a rriba
c. El Bloque4 no se ejecuta rá si se prod uce un acceso a un objeto nu/1 en el Bloq ue2
d. El Bloque4 s e ejecuta rá a ntes q u e el Bloque3 s i s e produce u n a exce pción de tipo a ritmético e n e l
Bloq ue 2

Pregu nta 15: Segú n el texto de la bibl iografía básica d e la asignatura, i n d i q u e cuál de las sigu i e ntes
afirmaciones es correcta :
a . En Javadoc l a eti q u eta @ pa ra m i ndica el nú mero de pará metros del método
b. En Java doc l a eti q u eta @ dep recated ind ica q u e el va lor d evuelto por el método puede conte ner
e rrores
c. En Javadoc l a eti q u eta @ see ind ica una referencia cru zada
d. En Javadoc l a eti q u eta @throws ind ica el modo en que debe ser lanzado u n método
PARTE PRÁCTICA [6,5 PU NTOS] :

La práctica d el presente c u rso ha sido u n a versión del j uego "R-Type". A conti nuación se presenta n las
reglas d e l juego ta l y como se sol icita ba para la práctica del curso:

1. El juego comenzará c o n u na panta l l a de bienvenida a partir de la cual se pod rá seleccionar el modo


d e juego ( FACI L, NORMAL, CO M P LICADO, I M POSIBLE) y co menzar a jugar.
2. El juego consta rá de u n ú n i co n ivel donde el jugador deberá acabar con una hord a de naves
a l i eníge nas. E l nú mero de a l ien íge nas con los que aca bar dependerá del modo de j u ego
seleccionado. Fácil= 10, N orma l = 15, Co mpl icado=20, l m posible=30.
3. El jugador control a rá l a nave a l ia da y d ispondrá de 1 sola vid a .
4. La s naves a l ienígenas será n controladas p o r el ordenad or.
5. La s naves a l ienígenas no d ispara n .
6. N o h a y q u e i mplementar re li eve . E s d ecir, no h a y q u e mostra r n i ngún tipo de suelo o techo como
e n e l juego origi na l .
7. La nave a l i a d a pod rá moverse a rriba (Tecla Q), a bajo (Tecla A), izqu ierda (Tecla O) y derecha (Tecla
P). Así mismo pod rá d isparar su laser utilizando la tecla ESPACIO.
8. El á rea d e movimiento permitido para la nave será toda la panta l la, a u n q u e h a b rá que comproba r
q u e la nave no sa lga de estos límites.
9. El d i sparo que rea l iza l a nave a l i a d a es conti nuo, es decir, no es necesa rio espera r a que el m isil
d isparado a ba ndone la p a nta l l a para q u e la nave a l i a d a pueda volver a d i sparar.
10. La nave a l i a d a sólo puede realizar u n tipo de d isparo que se desplazará horizonta lmente hacia la
d e recha d e la panta l la, sin va riar su trayectoria y a ve locidad consta nte.
11. La s naves a l ienígenas se m u even a ve locidad consta nte y podrán ser de dos tipos:
a. Nave Alienígena Tipo A. Apa recen por la pa rte derecha de la panta l la y se m u even
horizonta l mente hacia l a izqu ierda a ve locidad consta nte sin va riar su trayectoria, es decir,
su coordenada "y" no va ria en todo el desplazam iento.
b. Nave Alienígena Tipo B. Apa recen por la pa rte derecha de la pa nta lla y se mueven
horizonta l mente hacia l a izqu ierda a veloci dad consta nte. La pri nci pal d iferencia con las
N aves de Tipo A es que éstas pueden va riar su trayectoria, es decir, en su desplaza m ie nto
horizonta l pueden va riar su coordenada "y" de ma nera a leatoria.
1 2. La ve locidad a la que se m u eve n l a s naves a l i eníge nas dependerá del modo de j uego seleccionado.
Tod a s las naves se m u even a l a m isma velocidad.
13. Cuando l a s naves a l i e nígenas a l ca ncen la pa rte izqu ierda de la panta l la vo lverá n a aparecer por la
pa rte d erecha de ésta .
14. Se deberán de detecta r dos tipos de col isiones.
a. La s col isiones entre l a nave a l i a d a y las naves a l i e nígenas, lo que supondrá el fin al del
j u ego.
b. La s colisiones entre los m isiles d i spara d os por la nave aliada y las naves a l i enígenas, l o que
supondrá la destrucción de la nave ali enígena contra la q u e ha choca do el misil.
15. Si e l jugador fi na l iza el nive l del j u ego deberá aparecer u n me nsaje de fel icitación y se volvería a
mostra r el menú inicial.

Se pide d iseñar utilizando u na a proxi mación orienta da a objetos una a m pl iación a la práctica rea l izada
a l o l a rgo d e l cu rso que permite l a existe ncia d e u n nuevo tipo de nave a l i enígena (Ti po C).

Este n uevo tipo de nave es u na mod ificación de la nave Tipo A, con la pa rticu l a ridad de q ue, cuando
a lcanza l a pa rte izq u ierda, en l ugar de aparecer por la pa rte derecha, lo q u e hace es desplazarse d e
izqu ierda a d e recha, ha sta q u e a lcanza nu eva me nte el límite derecho, volviendo entonces a desplazarse
hacia la izqu ierda (y así sucesivame nte ha sta ser destru ida).
En u n momento determ inado, sólo puede haber una nave de Tipo C en el j uego, y no se puede cre ar
otra mientras l a a nterior de es e t i p o no haya s i do destru ida. Además, como máximo, se pod rá n generar 2
naves de Tipo C en el modo Fácil; 3 en el modo Normal; 4 en el modo Co mplicado y 5 en el modo I mposible.
Se pide:

a) [1,5 puntos] D i se ñ a r uti l iz a n d o un pa ra d i g m a orie ntado a o bjetos, los e l e m e ntos


necesa rios p a ra la a p l ica c i ó n exp l ica d a de la práctica d u ra nte e l c u rso . Es necesa rio
i d e ntifi ca r la estructu ra y las re l a c i o n e s de h e re ncia y de u so de las clases necesa rias pa ra
a l m a ce n a r y gesti o n a r esta i n fo r m a ció n . D e be h a c e rse uso de los m eca n i s mos de h e re ncia
s i e m p re q u e sea pos i b l e . Se va l o ra rá u n buen d iseño q ue favorezca l a re uti l ización de
código y fa c i l ite s u m a nte n i m ie nto.
a) [1,5 puntos] I m p l e m e nta l a c l a se N a v e A l i e n i ge n a T i p o B . Es pecifica s u s atrib utos y
m étodos y j u stifica l a s decisiones de i m p l e m e ntación q u e c re a s i m po rta ntes.
b) [1,5 puntos] I m p le m e nta un m étodo q ue gest i o n e las co l is i o n e s e nt re los m isiles
d i s p a rados p o r la n a ve a l ia d a y l a s n a v e s a l i e n íg e n a s .
e) [2 puntos] I nd i q u e los c a m bios q u e se ría n necesa rios e n e l d iseño y p rogra m a pa ra
permitir que las n aves a l i e n íg e n a s de Ti po B p u d i e ra n va ri a r su ve locidad de
d e s p l a za m i e nto a m e d i d a q u e se i ncre m e nta el n ú m e ro de naves a l i e n íg e n a s destru i d a s . La
ve locidad se dete rm i na e n e l m o m e nto de a pa ri c i ó n de la nave e n la pa nta l l a y por ta nto
pod ría da rse el caso d e que en la pa nta l l a co-exi stiesen n aves a l i e n íg e n a s con ve locidades
d ife re ntes.
UNIVe.RSIOAO NAC IONAl PIS EDUCACIÓN A DISTANCIA - ESCUElA ltCNICA SUPeRIOR PE INGENie.RfA INFORMÁTICA
71901 072 - PROGRAMACIÓN ORIENTADA A 0aJETOS (GAAOQ EN I NGENI ERiA INFORMÁTICA f TECNOlQGiA$ OE lA
INFORMACIÓN)
JUNIO 201 4 - MODELO A - No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Solo un a de las respu estas es vá l i d a . Las respu estas correctas se pu ntu a rá n con +1 .0, mientras q u e las
respondidas d e ma nera incorrecta se p u nt u arán co n -0.25. La s no contesta das no te ndrán infl uencia ni
positiva ni negativa en l a nota.

Pregunta 1: Un patrón de d i seño ...


a. proporciona u na descripción de u n problema co m ú n sin dar n i ngún detalles de i mplenta ción.
b. no se aplica en reso l u ción de problemas d e orientación a o bjetos.
c. proporciona una descripción de un peq ueño conj u nto de clases q u e ayuda a resolver un problema.
d. no puede implementa rse en Java

Pregunta 2: Respecto a las clases i nternas ...


a . La s insta ncias de l a clase i nterna no están necesa riamente asociadas a i nsta ncias de la clase
ci rcu n d ante.
b. N o se consideran u na pa rte de la clase circunda nte.
c. No pueden acceder a los métod os privados de la clase ci rcu nda nte.
d . Presenta n u n acopl a m i ento m u y estrecho con la clase ci rcu ndante.

Pregunta 3: U n método cohesionado ...


a. Será responsa ble de a l menos u na tarea bien defi nida, pero puede serlo de más.
b. Será responsa ble de u na y sólo u na tarea bien defi ni da.
c . Es a q u e l método abstracto q u e se ha i nsta nciado en una clas e determinada.
d. Es a q u e l que se crea en u na clase interna para ser i nvoca do desde la clase circunda nte.

Pregunta 4: Su po nga mos q u e reescribi mos el ejemplo B o u n c i n gB a l l del li bro de la forma en q u e se


m u estra a conti nuación:
1 pub l i c c l a s s Bounc ingB a l l {
2 int n ;
3 pub l i c s t at i c void main ( S tring args [ ] )
4 {
5 if ( n ! =O )
6 {
7 n = n + 1;
8 S y s t em . out . print ln ( " E l nfimero e s " + n) ;
9 }
10 }
11 }

¿Cu á l es la l ínea q u e provoca q u e el cód igo prod uzca u n error d e co mpilación?

a. Línea 5.
b. Línea 3.
c. Línea 2.
d. Línea 1.

Pregunta 5: Se a el siguiente fragmento de cód igo de código:


1 Random randomGenerator ;
2 randomGenerator = new Random ( ) ;
3 int index = randomGenerator . next i nt ( ) ;
4 S y s t em . out . print ln ( index ) ;
¿ E n q u é l ínea d e l cód igo a nterior se prod uce u n error de com pi lación?
a. N o se prod u ce error de com pi lación
b. En la línea 1
c. En la línea 2
d . En la línea 3

Pregunta 6: Sea el siguiente fragme nto de cód igo modificado de la clase Ma i l i t em mostra da en el li bro
d e texto:

1 pub l i c c l a s s Ma i l i t e m {
2 s t at i c int num1 10 ; =

3 pub l i c s t at i c void main ( S tring args [ ] ) {


4 int num2 5;=

5 new Ma i l i t e m ( ) ;
6 }
7 pub l i c Ma i l i t e m ( ) {
8 int aux thi s . num2 ;
=

9 i f ( aux > 1 ) {
10 S y s t em . out . print ln ( aux ) ;
11 }
12 }
13 }

¿Cuál es el resu lta do q u e prod uce?


a. Se prod u ce u n error de co mpilación.
b. Se prod u ce u n error de ejecu ción.
c. N o prod u ce n i ngún error pero no m u estra nada por panta l l a .
d . N o s e prod u ce n i ngú n error y m u estra p o r panta l la el va lor 5.

Pregunta 7 : ¿Cu á l de las sigu i e ntes sentencias se ejecuta de ma nera correcta ?


a. S t r ing ma t r i z [] = { " C o ch e " , " Av i ó n " , " Tren " } ;
b. S t r i n g ma t r i z = { " C o c he " , " Av i ó n " , " Tren" } ;
c. S t r i n g ma t r i z [] new S t r i n g { " C o che " " Avi ó n " " Tren" } ;
d. S t r ing ma t r i z [] = { " C o c he " " Avi ó n " " Tren" } ;

Pregunta 8: Dado q u e u n elemento But t o n puede propici a r el lanzam iento d e u n A c t i o nEvent, ¿qué
tipo d e listener habría q u e i mplementar en l a clase q u e q u iera gestionar este evento?

a. W i n dowL i s t e n e r
b. ActionL i s tener
c. C omp o n e n t L i s t e n e r
d. PushL i s te n e r

Pregunta 9 : ¿ E n q u é condiciones puede volverse a invocar u n constru ctor de una clase para u n objeto
después de q u e ese o bjeto haya sido creado?

a. Cuando q u eremos resetea r tod os los ca m pos del objeto a sus va lores i niciales.
b. Cuando se ha creado u n objeto abstracto y se le q u iere d a r va lores iniciales a sus atributos.
c. Cuando se i mplementa una i nterfaz para el objeto en cu esti ón.
d. N u nca .

Pregunta 10: Sea el siguiente cód igo modificado de la clase Mu s i c O r ga n i z e r mostrada en el li bro base:

1 i mp o r t j ava . u t i l . * ;
2 pub l i c c l a s s Mu s i c O r g a n i z e r
3 pub l i c s t a t i c v o i d ma i n ( S t r i n g a r g s [ ] ) {
4 A r r a yL i s t < S t r i n g> a = n e w Ar r a yL i s t (5) ;
5 f o r ( i n t i = O ; i <= 5 ; i + + )
6
7 a . a dd ( " Ho l a " ) ;
8
9 S y s t em . o ut . p r i n t l n ( " Fu n c i o n a " ) ;
10
11
¿Cuál es el resu lta do d e com p i l a r y ejecuta r este código?

a. S e prod uce u n error de ejecu ción a l defi ni r u n A r r a yL i s t de S elementos y q u e rer inse rtar 6
elementos.
b. No se prod u ce n i ngú n tipo de error y proporciona el resu ltado por panta l l a "Fu nciona".
c. La línea 4 provoca u n warn ing pero se ejecuta sin problemas proporcionando el resu ltad o por
panta l la "Fu nciona".
d. La línea 7 provoca u n warn ing pero se ejecuta sin problemas proporcionando el resu ltad o por
panta l la "Fu nciona".

Pregunta 11: ¿Cómo se l l a m a el entorno de pruebas que soporta la prueba estructurada de u nidades y las
pruebas d e regresión en J ava ?

a. JDK
b. J Boss
c. Javadoc
d. J U nit

Pregunta 12: Respecto a l constru ctor de la su bclase ...


a. Debe siempre invocar a l constructor d e su su perclase como primera instru cción. Si no incluye esta
llamada, J ava intenta rá i nserta r u na llamada a utomáticamente.
b. N o debe invocar nu nca a l constructor de su su perclase como primera i nstrucción. Si la incluye esta
llamada, J ava ignora rá esta l l a m a d a a utomáticamente.
c. Debe siempre i nvocar al constructor de su su perclase como ú ltima instru cción. Si no i ncluye esta
llamada, J ava intenta rá i nserta r u na llamada a utomáticamente.
d. Debe siempre i nvocar a l constructor de su su perclase como ú ltima instru cci ón. Si no incl uye esta
llamada, J ava ge nera rá un error de compi lación.

Pregunta 13: Respecto a l a s va riables polimórficas ...

a. Tod a va riable de objeto en Java es potencialmente polimórfica .


b. Son a q u e l l a s q u e excl u siva mente pertenecen a clases a bstra ctas.
c. Son la i nsta nciación de u na clase abstracta, permitiendo sólo a l macenar objetos de ese tipo.
d. Son a q u e l l a s q u e i mplementa n u na i nterfaz y q u e provienen de una clase a bstracta .

Pregunta 14: S i u n a clase B exti ende u na clase abstracta A q u e tiene u n método abstracto me t, ¿qué
pod emos afirmar?

a. Que necesa riamente B es a bstra cta .


b. Que s i B i mplementa el método met, entonces seguro q u e B no es a bstracta .
c. Que no puedo crea r insta ncias de A.
d. Que puedo crea r i nsta ncias de A .

Pregunta 15: S e defi ne como excepción com proba da ...

a. Aquellas subclases de la clase está nd ar Ru n n e r t im e E x c ep t i o n


b. Aquellas subclases de la clase está nd ar Ru n n e ab l e T i me E x c e p t i o n
c. Aquellas subclases de la clase está nd ar Ru n n i n g t i me E x c e p t i o n
d. Aquellas subclases de la clase está nd ar Run t i me Ex c ept i o n

PARTE PRÁCTICA [6,5 PU NTOS] :

La p rá ct i ca d e l p rese nte cu rso ha sido u n a ve rsi ó n d e l l ege nda rio a rcade "Pac-M a n" . A
co nti n u ación se m uestra la p ro p uesta d e l j u ego t a l y co m o se s o l i cita ba pa ra la p rá ctica d e l c u rso.
1. E l j uego consta rá de un solo n ive l donde el j ugador d e b e rá co m e r todos los p u ntos d e la
pa nta l l a .
2. E l j ug a d o r co ntro l a rá a P a c- M a n y d is p o n d rá de 1 vi d a .
3. Los fa nta s m a s se rá n contro l a d os p o r e l o rd e n a d o r te n i e ndo e n cue nta e l co m po rta m i e nto
d ife re nte d e cada u no .
4. P a c- M a n pod rá m overse ( Ut i l iz a n d o l a s fl echas d e l teclado) a rri ba (Tecla U p ), a bajo (Tecla
Dow n), i zq u i e rda (Tecla Left) y d e recha (Tecla Right). Así mismo pod rá pa usa r e l j uego
p u l s a n d o la tecla "P" .
5. El á rea de m ovi m i e nto p e rm itido pa ra Pac- M a n y los fa nta s m a s s e rá e l m a pa d e l ú n ico
n i ve l d i s po n i b l e .
6. S e rá necesa rio co m p ro ba r q u e ta nto Pac- M a n co m o los fa nta s m a s n o su p e re n los l ím ites
del m a p a .
7. Los ca m i nos d e l m a pa so lo p e rm it e n e l p a so d e u n i n d ivid uo a l m i s m o t i e m po, por ta nto
h a b rá q u e t e n e r en cue nta las co l isiones.
8. Los fa nta s m a s d e b e n i m p l e m e n ta r co m po rta m i e ntos d ife re ntes:
a. B l i n ky, e l fa nta s m a rojo, b usca rá co l i s i o n a r con Pac-M a n . P a ra acerca rse a Pac- M a n
ca l c u l a rá l a d ista ncia ( po r eje m p l o m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro
acerca rse ve rtica l m e nte y l uego h o ri zo nta l m e nt e .
b. P i n ky. B usca rá co l i s i o n a r con Pac-M a n . Pa ra acerca rse a P a c- M a n ca lcu l a rá l a
d i sta ncia ( po r eje m p lo m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro a ce rca rse
h o ri zo nta l m e nte y l u ego ve rtica l me nte .
c. Clyd e . É l no p e rsigue a P a c- M a n, si no que dea m b u l a s i n u n a ruta es pecifica .
9. Se d e b e rá n d e detecta r dos ti pos d e co l isiones.
a. La s co l is i o n e s e nt re Pac- M a n y los fa nta s m a s, l o q ue s u p o n d rá la p é rd ida de u na
vida o e l fi n a l d e l j uego e n caso de no d i s p o n e r de m á s vidas.
b. La s co l i si o n e s e nt re los fa nta s m a s, q ue su pond rá u n ca m b io de d i rección e n los
fa nta s m a s i nvo l ucra d o s .
10. H a b rá cuatro p u ntos m á s gra ndes de lo n o rm a l s i t u a d o s ce rca de l a s esq u i n a s d e l la beri nto
y proporci o n a rá n a P a c- M a n la h a b i l id a d te m po ra l (5 seg u ndos) de co m e rse a los
fa nta s m a s (todos e l los se vuelven a z u les m i e nt ra s Pac- M a n t i e n e esa h a b i l i d a d ) . Después
de h a be r sido t ragados, los fa nta s m a s se rege n e ra n e n " casa de fa nta s m a s " .
11. S e rá necesa rio i m p l e m e nta r u n conta d o r con los p u ntos o bte n i dos e n cada m o m e nto,
t e n i e n d o en c u e nta los o bjetos co m idos. U n p u nto p e q u e ñ o s u po n e 10 p u ntos. Co m e r u n
fa nta s m a 100 p u ntos.
12. Si el j uga d o r fi na l i za el n ive l del j uego d e b e rá a p a rece r un m e nsaje de fe l icita ción y se
volve ría a m o st ra r la pági na i n icia l .

a) [ 2 puntos] D i se ñ a r uti l i za ndo u n pa ra d i g m a orie ntado a o bjetos, los e l e m e ntos necesa rios pa ra
la a p l ica c i ó n e x p l i ca d a de la p rá ctica d u ra nte el c u rso. Es necesa rio i d e ntifica r la estruct u ra y
l a s re l a ci o n e s de h e re ncia y de u so de l a s clases n ecesa ri a s p a ra a l m a ce n a r y gest i o n a r esta
i n fo r m a ció n . D e be h a ce rse uso de los m eca n i smos de h e re ncia si e m p re q u e sea posi b l e . Se
va l o ra rá u n b u e n d iseño q ue favorezca la re util ización de código y fac i l ite su m a nte n i m ie nto.
b) [1,5 puntos] I m p l e m e nta la c l a se F a n t a s ma S u s t o . Este fa nta s m a l o q u e h a ce es h u i r del

P a c- M a n, de ta l m a n e ra q u e mide l a d ista ncia q ue hay e ntre P a c- M a n y é l, y se m u eve a rriba,


izq u i e rda, d e recha o a bajo e n fu nción de si l a d i sta ncia q u e consigue con ese d e s p l aza m i e nto
es el mayor a l eja m i e nto pos i b l e . Especifica s u s atrib utos y métodos y j u stifica l a s decisiones de
i m p l e m e ntación q u e cre a s i m po rta ntes. Como se ha d i cho, pa ra a leja rse de P a c- M a n ca l c u l a rá
la d ista ncia seg ú n e l c riterio q u e se co n s i d e re o p o rt u n o ( p o r eje m p lo, m e d i d o e n fi l a s y
co l u m na s ) .
e) [1,5 puntos] I m p l e m e nta u n m étodo q u e gest i o n e e l efecto "te rre m oto" . E l te rre m oto co nsiste
en que el siste m a col oca a utom ática m e nte todos los fa nta s m a s e n posi ciones a leatorias d e l
ta b l e ro, y a P a c- M a n l o co loca e n e l ce ntro d e l todos los fa nta s m a s . Se d e be especifi ca r có m o
se ca l c u l a l a posi ción d o n d e s e coloca P a c- M a n (a defi n i r p o r e l a l u m no ) .
d) [1,5 puntos] I nd i q u e los ca m bios q ue se ría n necesa rios e n e l d i s e ñ o y p rogra m a pa ra p e r m i t i r
q u e confo r m e p a s a e l t i e m po, los fa nta s m a s vaya n a u m e nt a n d o s u ve locidad de m ovi m i e nto
h a sta q u e P a c- M a n se co m e un p u nto g ra nde, m o m e nto en el q ue todos los fa nta s m a s vue lven
a resta u ra rse a la ve locidad d e m ovi m i e nto i n ici a l .
UNIVe.RSIOAO NAC IONAl PIS EDUCACIÓN A DISTANCIA - ESCUElA ltCNICA SUPeRIOR PE INGENie.RfA INFORMÁTICA
71901 072 - PROGRAMACIÓN ORIENTADA A 0aJETOS (GAAOQ EN I NGENI ERiA INFORMÁTICA f TECNOlQGiA$ OE lA
INFORMACIÓN)
JUNIO 201 4 - MODELO B - No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Solo un a de las respu estas es vá l i d a . Las respu estas correctas se pu ntu a rá n con +1 .0, mientras q u e las
respondidas d e ma nera incorrecta se p u nt u arán co n -0.25. La s no contesta das no te ndrán infl uencia ni
positiva ni negativa en l a nota.

Pregu nta 1: Si la primera pa rte de una clase TicketMachine tuviera la sigu i e nte estructura :

pub l i c c l a s s T i c ketMac hine {


private String nombre = " ACME " ;
private String r e g i s tro = " 0 0 0 0 " ;

pub l i c T i c ketMac hine ( S tring r e g i s tro ) {


thi s . r e g i s tro = r e g i s tro ;
}

pub l i c T i c ketMac hine ( S tring nombre ) {


thi s . nombre = nombre ;
}

pub l i c s t at i c void main ( S tring [ ] args ) {


String nombre = " maquina l " ;
T i c ketMac hine tm = new T i c ketMac hine ( nombre ) ;
}
}
¿Qué pasa ría a l ejecuta r el método m a i n?
a . tm. nombre tend ría el va lor de "m a q u i n a l" .
b. tm . registro tend ría el va lor de "maquinal".
c. El progra ma da ría u n error de ejecución.
d. El progra ma da ría u n error de com pi lación.

Pregu nta 2: Se d i ce q u e un objeto es i nm uta ble s i :


a . Su contenido o esta do ca mbia después de s u creación.
b. Su contenido o esta do no puede cambiarse después de su creación.
c. Existi rá más que u na copia de su contenido o esta do después de su creación.
d. Su contenido o esta do es visible fu era de la clase en la que esta defi nido.

Pregu nta 3: Hay u n a clase M essage Post q u e hereda de otra Post. Si a m bas clases tuviera n la sigu i e nte
estruct ura :
c l a s s Post {
pub l i c String men s a j e = " En P o s t " ;

pub l i c void envi arMen s a j e ( ) {


S y s t em . out . print ln ( men s a j e ) ;
}
}

pub l i c c l a s s Me s s agePost extends P o s t {


pub l i c String men s a j e = " En Me s s agePost " ;

pub l i c void envi arMen s a j e ( ) {


S y s t em . out . print ln ( men s a j e ) ;
}
pub l i c s t at i c void main ( S tring arg s [ ] ) {
P o s t p = new Me s s agePost ( ) ;

S y s t em . out . print ( p . men s a j e + " ");

p . envi arMe n s a j e ( ) ;
}
}
¿Cual sería e l resulta do de ejecuta r el método m a i n ? :
a . En Post E n Post
b. En Message Post E n Post
c. En Post E n M essagePost
d . En Message Post E n M essagePost

Pregu nta 4: ¿En BlueJ, cómo se pueden ver los métodos que tiene una l i brería del siste ma como
java . l a ng.Stri ng? :
a . En e l m e n ú 'Ed it(Ed itar)' h a y u na entrada para ma nej ar las clases en la li brería .
b. En e l menú 'View(Vista)' hay u na entrada para ma nej ar las clases en la l i brería .
c. En el menú 'Tools(H erra m i entas)' hay una entrada para ma nej ar las clases en la l ibre ría .
d . N o s e puede hacer en Bl ueJ.

Pregu nta 5: E n una simu l a ción de los zorros y los conejos se puede defi ni r una clase abstracta Anima l . En
u na versión d e l a s i m u lación, el cód igo pod ría ser:

import j ava . ut i l . Li s t ;
ab stract c l a s s Animal {
String nombre = " Animal " ;

ab stract pub l i c void act ( Li s t<Animal> newAnima l s ) ;


}

c l a s s Z orro extends Animal {


String nombre = " Z orro " ;
pub l i c String nombreAnima l ( ) {
return ( nombre ) ;
}
}

pub l i c c l a s s Z orrosCone j o s {
pub l i c s t at i c void main ( S tring [ ] args ) {
Z orro z = new Z orro ( ) ;
S y s t em . out . print ln ( z . nombreAnimal ( ) ) ;
}
}

¿Cual sería el resulta do de ejecuta r el método m a i n ? :


a. Animal
b. Zorro
c. Un e rror de compilación
d. U n e rror de ejecución

Pregu nta 6: ¿Cuál sería l a signatu ra de u n método p ú b lico suma que tenga u n parámetro que es u n a rray
d e i nt y q u e d evuelva un int?:

a. public i nt suma (int n u m eras)


b. public i nt suma (int[] n ú m eros[] )
c. public i nt[] suma (int n u m eras)
d. public i nt suma (int[] n u m eras)
Pregu nta 7: Pa ra anticipar las excepciones existe la i nstrucción try. Dado el siguiente cód igo para extra e r la
exte nsión d e un a rchivo:

pub l i c c l a s s Arc hivo {


pub l i c void t ipoExte n s ion ( String nombre ) {
try {
String ext = nombre . sub string ( nombre . indexOf ( ' . ' ) ,
nombre . length ( ) ) ;
S y s t em . out . print ln ( ext ) ;
} c at c h ( S t r i n g i ndexOutO fBoundsException ex ) {
S y s t em . out . print ( " Arc hivo no tiene exten s i ón " ) ;
} c at c h ( Arithmet icException ex ) {
S y s t em . out . print ( " Error aritmé t i c o " ) ;
} c at c h ( Nu l lPointerException ex ) {
S y s t em . out . print ( " Error de l puntero " ) ;
} f i n a l ly {
S y s t em . out . print ( " . En c l au s u l a f i n a l ly " ) ;
}
S y s t em . out . print ( " . D e s pué s de l try " ) ;
}

pub l i c s t at i c void main ( S tring [ ] args ) {


Arc hivo ae = new Archivo ( ) ;
ae . t ipoExte n s ion ( " foo " ) ;
}
}

¿Cual sería el resulta do de ejecuta r el método m a i n ? :


a . Arch ivo no tiene exte nsión. En clausula fi nal ly. Después del try
b. Error a ritmético. E n clausula fi na l ly. Después del try
c. Error del pu ntero. En clausula fi na l ly. Después del try
d . En clausula fi na l ly. Después del try

Pregu nta 8: En u n reloj d igita l la clase ClockDisplay gestiona las horas y los m i nutos. Se pod ría a ñ a d i r un
método a l a rma para comprobar para a ctiva r u n despertador:

private f i n a l String a l arma = " 1 1 : 0 0 " ;


pub l i c void a l arma ( S tring hora ) {
S y s t em . out . print ln ( " Hora == Al arma i s : " + hora a l arma ) ;
}

pub l i c s t at i c void main ( S tring [ ] args ) {


Arc hivo ae = new Archivo ( ) ;
ae . a l arma ( " 1 1 : 0 0 " ) ;
}

¿Cual sería el res u ltado de ejecuta r el método mai n( ) ?:


a . H ora == Alarma i s :
b. H ora == Alarma is: 1 1 :00
c. H ora == Alarma is: 1 1 :00 fa lse
d . fa lse

Pregu nta 9: En la práctica de este año hay q u e crear un ta blero para el j uego Pacm a n . Para ello se puede
d i buja r un a matriz de cuadros negros, dejando otros en bla nco. ¿Cu á l de los siguientes métodos nos
permite d i bujar u n cu a d ra do negro entero en la panta l la ? :

a. fi i i Rect(int x, int y, i nt a nchura, int a ltura) ;


b. fi i i Rect(int a nchu ra, i nt a ltura);
c. fi i i C ua d ro(int x, int y, int a nchura, int a ltura);
d. fi i i C ua d ro(int a nc hu ra, i nt a ltu ra ) ;
Pregu nta 10: ¿Qué es un ba nco de pruebas? :
a . U n o o m á s o bjetos q u e s e emplean e n m á s de una prueba.
b. U n o o más o bjetos q u e se emplean e n una sola prueba.
c. U n o o más o bjetos q u e se emplean para encontra r errores si ntácticos en el código.
d . N i nguno d e los a nteriores.

Pregu nta 11: Dada la sigu i e nte jerarq u ía de clases:

EstudianteDeDoctorado

¿Cuáles d e las sigu i e ntes asignaciones sería n lega les?:

1. Persona pl new Estud i a nte ();


=

2. Persona p2 new Estud i a nteDe Doctora do();


=

3. Estu dia nteDe Doctora do edd new Estu d i a nte ();


=

4. Estu d i a nte el new Estu d i a nteDe Doctorado();


=

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

Pregu nta 12: ¿ Existen varios modelos para la construcción de software. ¿Cuáles son dos de los más
conoci dos?:

a. Modelo en casca da y modelo de a n á l isis


b. Modelo en casca da y d esarrollo iterativo
c. Modelo en cascada y prueba increme nta l
d. Desarrollo ite rativo y prueba i ncrementa l

Pregu nta 13: En el orga nizador de m ú sica podemos usar un Arraylist para guard a r los nom bres d e las
ca nciones:

import j ava . ut i l . ArrayL i s t ;


pub l i c c l a s s Organ i z adorMu s i c a {

ArrayL i s t< S tring> c anciones = new ArrayL i s t< S tring> ( ) ;


pub l i c s t at i c void main ( S tring [ ] args ) {
Organ i z adorMu s i c a mo = new Organ i z adorMu s i c a ( ) ;
mo . c ancione s . add ( " Al amanecer " ) ;
S y s t em . out . print ln ( " ¿ E x i s t e la c an c i ón ? : + mo . ex i s t e ( " Al
amanecer " ) ) ;
}

pub l i c boolean e x i s t e ( String c ancion ) {


XXX
i f ( titulo . equa l s ( c ancion ) )
return ( true ) ;
}
return ( f a l s e ) ;
}
}

¿Qué habrá q u e poner en vez de los XXX para q u e a l ejecutar mai n el progra ma pro duzca el res u ltado
"Exi ste l a ca nción?: true"?

a. while (Stri ng titu l o : canciones) {


b. for (String titu l o in ca nciones) {
c. for (String titu l o : ca nciones) {
d . for ( i nt i=O; i < ca nciones. length; i++) { Stri ng titu lo = ca nciones.get( i );

Pregu nta 14: En l a s d ife rentes versiones de un proyecto del j uego z u u l se pueden plantea r d ife rentes
versiones del método getExitString; por ejemplo:

pub l i c S t r i n g getExitString ( ) { pub l i c S t r i n g getExitString ( ) {


String returnString = " Ex i t s : " ; String returnString = " Ex i t s : " ;
i f ( northExit ! = nu l l ) Set<S tring> keys = exit s . keyS e t ( ) ;
returnString += " north " . , for ( String exit : key s ) {
i f ( e a s tExit ! = nu l l ) returnString += " " + exit ;
returnString += " e a s t " . , }
if ( we s tExit ! = nu l l ) return returnS tring ;
returnString += " we s t " . , }
i f ( s outhExit ! = nu l l )
returnString += " s outh " . ,

return returnS tring ;


}
Versión A Versión B

¿Cuál de las dos versiones m u estra más acopla miento?


a. A
b. B
c. Son iguales
d. N o m u estra n acopla m iento n i nguno

Pregu nta 15: E n un visor de imágenes se usa botones para q u e el usu a rio pueda cambiar el tamaño d e la
i magen; por ejemplo:

sma l lerButton = new JButton ( " Sma l l er " ) ;


sma l lerButton . addAc tionL i s tener ( XXX {
pub l i c void actionPerformed ( Ac t i onEvent e ) { makeSma l ler ( ) ; }
}) ;
toolbar . add ( sma l lerButton ) ;

¿Qué tipo d e Listener habrá q u e usar (donde está n los XXX en el cód igo a nterior) para detecta r q u e e l
u s ua rio ha h e c ho clic en el botón?

a. new Eventliste ner()


b. new Button liste ner()
c. new Actio n listener()
d. new ActionPerformed listener()

PARTE PRÁCTICA [6,5 PU NTOS] :

La p rá ctica del p rese nte c u rso ha sido una versión del lege nda rio a rca d e "Pac-M a n" . A
co nti n u ación se m uestra la p ro p uesta d e l j u ego ta l y co m o se sol icita ba pa ra la p rá ctica d e l c u rso .

1- El j uego consta rá de u n solo n ive l d o n d e e l j ugador d e b e rá co m e r todos los p u ntos de l a


pa nta l l a .

2- E l j ug a d o r co ntro l a rá a P a c- M a n y d is p o n d rá de 1 vi d a .
3- Los fa nta s m a s se rá n contro l a d os p o r e l o rd e n a d o r te n i e ndo e n cue nta e l co m po rta m i e nto

d ife re nte d e cada u no .

4 - P a c- M a n pod rá m overse ( Ut i l iz a n d o l a s fl echas d e l teclado) a rri ba (Tecla U p ), a bajo (Tecla


Dow n), izq u i e rda (Tecla Left) y d e recha (Tecla Right). Así mismo podrá pa usa r e l j uego

p u l s a n d o la tecla "P" .

5- El á rea de m ovi m i e nto p e rm itido pa ra Pac- M a n y los fa nta s m a s s e rá e l m a pa d e l ú n ico

n i ve l d i s po n i b l e .

6 - S e rá necesa rio co m p ro ba r q u e ta nto Pac- M a n co m o l o s fa nta s m a s n o su p e re n l o s l ím ites


del m a p a .

7 - Los ca m i nos d e l m a pa so lo p e rm it e n e l p a so d e u n i n d ivid uo a l m i s m o t i e m po, p o r ta nto


h a b rá q u e t e n e r en cue nta las co l isiones.

8- Los fa nta s m a s d e b e n i m p l e m e n ta r co m po rta m i e ntos d ife re ntes:

a. B l i n ky, e l fa nta s m a rojo, b usca rá co l i s i o n a r con Pac-M a n . P a ra acerca rse a Pac- M a n

ca l c u l a rá l a d ista ncia ( po r eje m p l o m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro

acerca rse ve rtica l m e nte y l uego h o ri zo nta l m e nt e .

b. P i n ky. B usca rá co l i s i o n a r con Pac-M a n . Pa ra acerca rse a P a c- M a n ca lcu l a rá l a

d i sta ncia ( po r eje m p lo m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro a ce rca rse

h o ri zo nta l m e nte y l u ego ve rtica l me nte .

c. Clyd e . É l no p e rsigue a P a c- M a n, si no que dea m b u l a s i n u n a ruta es pecifica .

9- Se d e b e rá n de detecta r dos ti pos de co l isiones.

a. La s co l is i o n e s e nt re Pac- M a n y los fa nta s m a s, l o q ue s u p o n d rá la p é rd ida de u na

vida o e l fi n a l d e l j uego e n caso de no d i s p o n e r de m á s vidas.

b. La s co l i si o n e s e nt re los fa nta s m a s, q ue s u p o n d rá u n ca m bi o de d i recci ó n e n los

fa nta s m a s i nvo l ucra d o s .

10- H a b rá cuatro p u ntos m á s gra ndes de lo n o rm a l s i t u a d o s ce rca de l a s esq u i n a s d e l la beri nto

y proporci o n a rá n a P a c- M a n la h a b i l id a d te m po ra l (5 seg u ndos) de co me rse a los

fa nta s m a s (todos e l los se vuelve n a z u les m i e nt ra s Pac- M a n tiene esa h a b i l i d a d ) . Después

de h a be r sido t ragados, los fa nta s m a s se rege n e ra n cada u na e n u n a esq u i na d e l l a b e ri nto.

11- S e rá necesa rio i m p l e m e nta r un conta d o r con los p u ntos o bte n i d o s e n cada m o m e nto,

t e n i e n d o en c u e nta los o bjetos co m idos. U n p u nto peq u e ñ o s u po n e 10 p u ntos. C o m e r u n

fa nta s m a 100 p u ntos.

12- Si el j uga d o r fi na l i za el n ive l del j uego d e b e rá a p a rece r un m e nsaje de fe l icita ción y se

volve ría a m o st ra r la pági na i n icia l .

a) [ 2 puntos] D i se ñ a r uti l i za n d o u n pa ra d i g m a orie ntado a o bjetos, los e l e m e ntos n ecesa rios


pa ra l a a p l i ca c i ó n e x p l i ca d a de l a p rá ctica d u ra nte el c u rso. Es n ecesa rio i d e ntifica r la
estruct u ra y las re l a c i o n es de h e re n cia ( m e d i a nte e l uso de un d i agra m a de clases) y de uso
de las c l a ses necesa rias pa ra a l m a ce n a r y gestio n a r esta i nfo r m a ció n . Debe h a c e rse uso de
los m eca n i smos de h e re ncia s i e m p re que sea posi b l e . Se va l o ra rá u n buen d i se ñ o q ue
favorezca la re util ización de código y fa ci lite su m a nte n i m i e nto.
b) [ 1,5 puntos] I m p l e m e nta l a c l a se F a n t a s ma P i n k y. Es pecifica s u s a t ri b utos y m étodos y
j u stifica l a s decisiones de i m p l e m e ntación q ue cre a s i m porta ntes. Recuerd a q u e este
fa nta s m a b usca rá co l isio n a r co n Pac-M a n . P a ra a ce rca rse a P a c- M a n ca l c u l a rá la d i sta ncia
(por eje m plo, medido e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro acerca rse h o rizo nta l m e nte y
l u ego ve rtica l m e nte .
e) [1,5 puntos] I m p l e m e nta u n m étodo q ue gest i o n e l a s dos ti pos de co l i s i o n e s q u e p u e d e
h a b e r e nt re P a c- M a n y los fa nta s m a s, lo q ue s u p o n d rá l a p é rd ida de u n a vida o e l fi n a l d e l
j uego e n caso d e n o d i s p o n e r de m á s vid as, y l a s co l is i o n e s e nt re los fa nta s m a s, q ue
s u po n d rá n u n ca m bi o de d i recci ó n e n los fa nta s m a s i nvo l u c rados.
d) [1,5 puntos] I n d i q u e los ca m bios que se ría n n ecesa rios e n e l d i s e ñ o y l a i m p l e m e ntación
pa ra permitir que haya d ife re ntes n i ve l e s y q u e e n cada u n o de éstos se a ña d a u n n uevo
t i po de fa nta s m a ( a d e m á s de los q u e ya existe n ) .
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA
71 901 072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA / TECNOLOGÍAS DE LA
INFORMACIÓN �

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Solo un a de las respu estas es vá l i d a . Las respu estas correctas se p u ntuarán con +1.0, mientras q u e las
respondidas d e ma nera incorrecta se p u nt u arán co n -0.25. La s no contesta das no te ndrán infl uencia ni
positiva ni negativa en l a nota.

Pregu nta 1: Ind ica cual de las sigui entes declaraciones es vá lida para el método m a i n :

a. pub l i c static void main ( S tring args [ ] ) ;


b . s tatic public void main ( S tring ) ;
c. pub l i c static void main ( S tring ) ;
d. pub l i c static int mai n ( S t r ing arg s [ ] ) ;

Pregu nta 2: Ind ica cual de las sigui entes afirmaciones es correcta :

a. Los métodos de mod ifica ción no ca mbian el esta do de u n objeto.


b. La s sente ncias de asignación a l macenan el va lor representado por el lado derecho de la se nte ncia
e n una va riable nom bra da a l a izq u ie rd a .
c. El a l ca nce de una va riable defi ne la secci ón de un método en la q u e la va riable puede ser acce d i d a .
d. Los métodos de a cceso devuelven i nformación sobre el esta do de una i nsta ncia.

Pregu nta 3: Ind ica cual de las sigui entes afirmaciones es correcta :

a. U n d e pu rador es u na herra m i enta de software q u e ayuda a exa m i n a r cómo com pila una aplicación.
b. U n a llamada a método interno consiste en que los métodos pueden llamar a otros métod os d e la
m isma clase como pa rte de su implementa ción.
c. U n a llamada a método exte rno consiste en que los métodos pueden l l a m a r a métodos de otras
clases abstractas usando la nota ción de pu nto.
d. Los objetos pueden crea r otros objetos usando el operado r "i nsta nceof" .

Pregu nta 4: Su pongamos que q u e remos implementa r una Agenda, ¿cuál sería la salida del sigu i e nte
código?

pub l i c c l a s s Agenda {

pub l i c s t at i c void main ( S tring argv [ ] ) {


Agenda agenda = new Agenda ( ) ;
}

protected Agenda ( ) {
for ( int i = O ; i< l O ; i ++ ) {
S y s t em . o u t . print ln ( i ) ;
}
}
}

a. Error d e Compilación y a q u e l o s constru ctores no pueden s e r declarados como "protected".


b. Error e n tiempo de ejecución ya q u e los con structores no pueden ser declara d os como "protected".
c. Co mpilación correcta y salida de los d ígitos de O a 10.
d. Co mpilación correcta y salida de los d ígitos de O a 9.
Pregu nta 5: Ind ica cual de las sigui entes afirmaciones es correcta :

a. El l e nguaje J ava tiene tres tipos de ciclo: whi le, while-do y for.
b. Un ciclo while es similar en su estru ctu ra y propósito q u e el ciclo for-each.
c. El tipo d e la va riable de ciclo no tiene porq ué ser el mismo que el tipo del elemento declarado para
la colección q u e esta mos recorriendo con u n ciclo.
d. U n índ ice es u n objeto q u e proporciona fu nciona l idad para recorrer todos l o s elementos de u n a
colección.

Pregu nta 6: Dado el siguiente fragmento d e cód igo, i ndi que cuál de las siguientes afirmaciones es el
resultado d e su ejecución:

i f ( " Problema " . trim ( ) . toLowerC a s e ( ) " prob lema " )


S y s t em . out . print ln ( " I gua l " ) ;
else
S y s t em . out . print ln ( " No I gua l " ) ;

a. El cód igo p rovocará u n error de compi lación.


b. El cód igo p rovocará u n error en tiempo de ejecu ción.
c. El cód igo com pilará e i mpri m i rá "Igu a l" .
d. El cód igo com pilará e i mpri m i rá " N o Igual".

Pregu nta 7: Ind ica cual de las sigui entes afirmaciones es correcta :

a. La prueba es la actividad de descu brir si una pieza de cód igo prod uce el comporta mie nto
pretendido.
b. U n a a serción es u na expresión q u e esta b lece u n a cond ición q u e esperamos q u e resu lte verdad e ra .
c. Un segu imiento es la a ctividad de tra baj ar a través de un segme nto de cód igo línea por línea,
m ie ntras se observa n ca m bios de estado y otros comportami entos de la aplicación.
d. Tod as las respuestas a nteriores son correcta s.

Pregu nta 8: Ind ica cual de l a s sigui entes afirmaciones es correcta :

a. El acopla m iento describe l a conectivi dad de l o s propios objetos d e una clase


b. U n sistema débilmente acoplado se ca racte riza por la i mposi bilidad de mod ificar una de sus clases
sin tener q u e rea l izar ca m bios en n i nguna otra
c. Un enca ps u l a miento a p ropiado en las clases red uce el acoplamiento
d. El térm ino acopla m iento describe cuá nto s e aj usta una u n idad de cód igo a u n a tarea lógica o a u n a
entidad

Pregu nta 9: Basado en el eje m plo de la Base de Datos de CDs y DVDs visto en la asignatura en el capítu lo 8,
¿cuál sería la salida del siguiente cód igo?

pub l i c c l a s s B a s eDeDatos {

pub l i c f i n a l void metodoAgregarE lemento ( ) {


S y s t em . o u t . print ln ( " Agregar E l emento " ) ;
}
}

pub l i c c l a s s B a s eDeDat o s DeMu s i c a {

pub l i c s t at i c void main ( S tring argv [ ] ) {


B a s eDeDatos db new B a s eDeDatos ( ) ;
=
db . metodoAgregarE lemento ( ) ;
}
}

a. Error en tiempo de com pi lación i ndicando q u e una clase con métodos fi nales deben s e r declarada
ta m bién como fi na l .
b. Error e n tiempo de co mpilación ind icando q u e no se puede heredar de una clase con métod os
fi n a les.
c. Error e n tiempo de ejecución ind icando q u e Base De Datos no ha sido definida como fin a l .
d. Éxito en la com pil ación y salida " Agrega r Elemento".

Pregu nta 10: I n d ica cual de l a s sigu i e ntes afirmaciones es correcta :

a. La declaración de u n ca mpo o de u n método como "protected" permite el acceso d i recto a l mismo


desde l as subclases (solo d i recta s).
b. La s llamadas a métodos en Java perm ite q u e la misma llamada a u n método en d ife rentes
mome ntos pueda invoca r d ife rentes métodos, depend iendo del tipo d i námi co del pará metro de
retorno a l a hora de hacer l a i nvoca ción.
c. La l l a m a d a a "su per" en u n determ inado método (que no sea u n constructor) tiene que ocurrir e n
su prim era sente ncia de ntro de d i cho métod o.
d. N i nguna de l a s a nteriores.

Pregu nta 11: I n d ica cual de las sigu i e ntes afirmaciones es correcta :

a. Todos l o s métodos d e u na i nterfaz son abstractos.


b. La s interfa ces no contienen ningún constru ctor.
c. En una i nterfaz sólo se permiten los ca m pos consta ntes.
d. Tod as l a s respuestas a nteriores son correcta s.

Pregu nta 12: Dado un visor de i mágenes, ¿Cuál sería la salida del sigu i e nte código?

import j ava . awt . * ;


pub l i c c l a s s P u l s ador extends Frame {
pub l i c s t at i c void main ( S tring argv [ ] ) {
P u l s ador MiPu l s ador=new P u l s ador ( ) ;
}

P u l s ador ( ) {
Button BotonHol a=new Button ( " Ho l a " ) ;
Button Boto sAdios =new Button ( " Adi o s " ) ;
add ( BotonH o l a ) ;
add ( Boto sAdios ) ;
setSize ( 3 0 0 , 3 0 0 ) ;
s etVi s ib l e ( true ) ;
}
}

a. Dos botones u no a l l a d o del otro ocu pando todo el ma rco, "Hola" en la izqu ierda y "Ad ios" e n l a
d e recha.
b. Dos botones u no encima del otro d iciendo, "Hola" a rriba y "Ad ios" a bajo.
c. Un solo botón ocupando el m a rco entero d iciendo "Hola".
d. U n solo botón ocupando el m a rco entero d i ciendo "Ad ios" .

Pregu nta 13: Te niendo en cuenta el modelo en cascada prese nte en la constru cción del softwa re, ind ica
cual de l as sigu i e ntes fa ses N O perte nece a l desa rro llo de software :
a. Anál isis del problema.
b. Prueba U nita ria.
c. Prueba Secu encia l .
d. Entrega del sistema a l cliente.

Pregu nta 14: ¿Cuál sería l a salida del siguiente cód igo?

int i = l ;
swi t c h ( i ) {
case 0 :
S y s t em . ou t . print ( " c ero " ) ;
break ;
case 1 :
S y s t em . ou t . print ( " uno " ) ;
case 2 :
S y s t em . o u t . print ( " dos " ) ;
break ;
de fault :
S y s t em . ou t . print ( " otro " ) ;
}

a. uno
b. un o otro
c. un o dos
d. un o dos otro

Pregu nta 15: I n d ica cual de las sigu i e ntes afirmaciones es correcta :

a. El proceso de a utoboxi ng s e l leva a ca bo a utomática mente cuando s e u s a u n va lor de u n tipo n o


primitivo en u n contexto q u e req u i e re u n tipo objeto.
b. Los o bjetos su bti po pueden usarse cada vez q u e se espera un su pertipo. Esto se conoce como
su perti pación.
c. La s clases que está n vincu l a da s media nte una re lación de herencia forma n una jerarq u ía de
herenci a .
d. Tod as l a s respuestas a nteriores son fa lsas.

PARTE PRÁCTICA [6,5 PU NTOS] :

La p rá ctica del p rese nte c u rso ha sido una versión del lege nda rio a rca d e "Pac-M a n" . A
co nti n u ación se m uestra la p ro p uesta d e l j u ego ta l y co m o se sol icita ba pa ra la p rá ctica d e l c u rso .

1- El j uego consta rá de u n solo n ive l d o n d e e l j ugador d e b e rá co m e r todos los p u ntos de l a

pa nta l l a .

2- E l j ug a d o r co ntro l a rá a P a c- M a n y d is p o n d rá de 1 vi d a .
3- Los fa nta s m a s se rá n contro l ados p o r e l o rd e na d o r te n ie ndo e n cue nta e l co m po rta m i e nto

d ife re nte de cada u no .

4 - P a c- M a n pod rá m overse ( Ut i l iz a n d o l a s fl echas d e l teclado) a rri ba (Tecla U p ), a bajo (Tecla


Dow n), izq u i e rda (Tecla Left) y d e recha (Tecla Right). Así mismo podrá pa usar e l j uego

p u l s a n d o la tecla "P" .

5- El á rea de m ovi m i e nto p e rm itido pa ra Pac- M a n y los fa nta s m a s s e rá e l m a pa d e l ú n ico

n i ve l d i s po n i b l e .
6- S e rá necesa rio co m p ro ba r q u e ta nto Pac- M a n co m o los fa nta s m a s no su p e re n los l ím ites
del m a p a .

7 - Los ca m i nos d e l m a pa so lo permiten e l paso de u n i n d iv i d u o a l m is m o t i e m po, p o r ta nto


h a b rá q u e t e n e r en cue nta las co l isiones.

8- Los fa nta s m a s d e b e n i m p l e m e n ta r co m po rta m i e ntos d ife re ntes:

a. B l i n ky, e l fa nta s m a rojo, b usca rá co l i s i o n a r con Pac-M a n . P a ra acerca rse a Pac- M a n

ca l c u l a rá l a d ista ncia ( po r eje m p l o m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro

acerca rse ve rtica l m e nte y l uego h o ri zo nta l m e nt e .

b. P i n ky. B usca rá co l i s i o n a r con Pac-M a n . Pa ra acerca rse a P a c- M a n ca lcu l a rá l a

d i sta ncia ( po r eje m p lo m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro a ce rca rse

h o ri zo nta l m e nte y l u ego ve rtica l me nte .

c. Clyd e . É l no p e rsigue a P a c- M a n, si no que dea m b u l a s i n u n a ruta es pecifica .

9- Se d e b e rá n de detecta r dos ti pos de co l isiones.

a. La s co l is i o n e s e nt re Pac- M a n y los fa nta s m a s, l o q ue s u p o n d rá la p é rd ida de u na

vida o e l fi n a l d e l j uego e n caso de no d i s p o n e r de m á s vidas.

b. La s co l i si o n e s e nt re los fa nta s m a s, q ue s u p o n d rá u n ca m bi o de d i recci ó n e n los

fa nta s m a s i nvo l ucra d o s .

10- H a b rá cuatro p u ntos m á s gra ndes de lo n o rm a l s i t u a d o s ce rca de l a s esq u i n a s d e l la beri nto

y proporci o n a rá n a P a c- M a n la h a b i l id a d te m po ra l (5 seg u ndos) de co m e rse a los

fa nta s m a s (todos e l los se vuelve n a z u les m i e nt ra s Pac- M a n t i e n e esa h a b i l i d a d ) . Después

de h a be r sido traga dos, los fa nta s m a s se rege n e ra n cada u na e n u n a esq u i na d e l l a b e ri nto.

11- S e rá necesa rio i m p l e m e nta r un conta d o r con los p u ntos o bte n i dos en cada m o m e nto,

t e n i e n d o en c u e nta los o bjetos co m idos. U n p u nto peq u e ñ o s u po n e 10 p u ntos. C o m e r u n

fa nta s m a 100 p u ntos.

12- Si el j uga d o r fi na l i za el n ive l del j uego d e b e rá a p a rece r un m e nsaje de fe l icita ción y se

volve ría a m o st ra r la pági na i n icia l .

a) [ 2 puntos] D i se ñ a r uti l i za n d o u n pa ra d i g m a orie ntado a o bjetos, los e l e m e ntos n ecesa rios


pa ra l a a p l i ca c i ó n e x p l i ca d a de l a p rá ctica d u ra nte el c u rso. Es n ecesa rio i d e ntifica r la
estruct u ra y las re l a c i o n es de h e re n cia ( m e d i a nte e l uso de un d i agra m a de clases) y de uso
de las c l a ses necesa rias pa ra a l m a ce n a r y gestio n a r esta i nfo r m a ció n . Debe h a c e rse uso de
los m eca n i smos de h e re ncia s i e m p re que sea posi b l e . Se va l o ra rá u n buen d i se ñ o q ue
favorezca la re util ización de código y fa ci lite su m a nte n i m i e nto.
b) [1,5 puntos] I m p l e m e nta l a c l a se F a n t a s maMi n k y. Este fa nta s m a b usca rá co l isio n a r co n
P a c-M a n . P a ra a ce rca rse a Pac- M a n rod ea rá los o bstá c u los a l contra rio de l a s m a neci l la s
d e l re l oj y a u m e nta rá su ve locidad d e s p u é s d e q u e u n c i e rto n ú m e ro d e p u ntos sea n
co m i d o s ( po r eje m p lo ca d a 25 p u ntos a u m e nta rá su ve loci d a d ) . Especifica s u s a t ri b utos y
m étodos y j u stifica l a s decisiones de i m p l e m e nta ción q ue c re a s i m p o rta ntes a s í co m o los
ca m bios e n l a s clases q u e creas necesa rio.
e) [1,5 puntos] I m p l e m e nta u n m étodo q u e perm ita l a existencia de cuatros p u ntos más
g ra ndes de lo n o rm a l p resentes e n l a s esq u i n a s del l a b e ri nto y q ue proporci o n a ría n a
PacM a n la h a b i l id a d t e m poral ( 10 seg u ndos) de c o m e rse a los fa nta s m a s . Los fa nta s m a s se
volve ría n a z u l e s d u ra nte este p e riodo de t i e m p o y desp ués, en caso de h a b e r sido co m i dos
a pa rece ría n de n uevo cada uno por una esq u i n a d ife re nte .
d ) [1,5 puntos] I nd i q u e los ca m bios q ue se ría n n ecesa rios e n e l d i s e ñ o y p rogra m a pa ra
p e r m i t i r q ue h u bi e ra un n uevo t i po de Fa nta s m a d e n o m i n a d o "l nvl n ky" q ue t uviera
ve locidad consta nte, tuviera u n m ovi m i e nto e rrático s i n la i nte n c i ó n de co l i s i o n a r con
PacM a n y que a d e m á s tuvi e ra dos ti pos d e co l is i o n e s :
a. E n c a s o de co l i s i o n a r co n los otros F a n ta s m a s, ta nto "l nvl n ky" co m o e l otro
fa nta s m a i nvo l ucrado, ca m b i a ría n d e se ntido a lejá ndose uno del otro .
b. En e l caso de PacM a n, no h a b ría c o l i s i ó n s i n o q u e pa ra PacM a n se ría co m o u n
o bjeto i nvisi b l e q ue no le ca usa n i ng ú n tipo de daño ni ca m b io en su
co m p o rta m i ento.
UNIVe.RSIOAO NAC IONAl PIS EDUCACIÓN A DISTANCIA - ESCUElA ltCNICA SUPeRIOR PE INGENie.RfA INFORMÁTICA
71901 072 - PROGRAMACIÓN ORIENTADA A 0aJETOS (GAAOQ EN I NGENI ERiA INFORMÁTICA f TECNOlQGiA$ OE lA
INFORMACIÓN)
SEPTIEMBRE 2014 - MODELO 0 - No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Sólo un a de las respu estas es vá l i d a . Las respu estas correctas se p u ntuarán con +1.0, mientras q u e las
respondidas d e ma nera incorrecta se puntuarán con -0.25. La s no contesta das no te ndrán infl uencia ni
positiva ni negativa en l a nota.

Pregunta 1: Un método de a cceso o selector:

a. H a bitu a l m ente devuelve void.


b. Devue lve siem pre info rmación sobre el esta do d e u n objeto.
c. Devuelve siem pre un objeto de l a clase Object.
d. Perm ite a cceder a l constru ctor de la clase q u e lo define.

Pregunta 2: U n método de mod ifica ción o mutador:

a. H a bitu a l m ente devue lve void.


b. Devue lve siem pre info rmación sobre el esta do de u n objeto.
c. Perm ite modifica r el esta do ú n ica mente de los ca m pos p ú b licos de la clase.
d. Perm ite a cceder a l constru ctor de la clase que lo define.

Pregunta 3: Dada l a siguiente definición de clase:

pub l i c c l a s s Mu s icOrgan i z e r
{
private int valor ;

pub l i c Mu s icOrgan i z e r ( int n )


{
valor=n ;
}

pub l i c int c a l c u l ar ( )
{
int r e s u l t ado= ! ;
int numero=valor ;

if ( va lor>= ! )
{
whi le ( numero>= l ) {
r e s u l t ado* =numero ;
numero- - ;
}
return r e s u l t ado ;
}
else{
return 1 ;
}

pub l i c s t at i c void main ( S tring [ ] args ) {

Mu s icOrgan i z e r t=new Mu s icOrgan i z e r ( 4 ) ;


int v=t . c a l c u l ar ( ) ;
S y s t em . out . print ln ( v ) ;

}
}

El resu lta d o d e su ejecución se ría :

a. 24
b. 6
c. 120
d. o

Pregunta 4: Cual de l a s sigu i e ntes afi rmaciones es fa lsa :


a . La documentación d e l a l i b rería de clases de Java m uestra deta l les ace rca de tod as las clases d e la
l i brería .
b. La interfa z de u na clase describe l o que una clase hace y cómo se puede utilizar sin mostra r su
implementa ción.
c. Los mod ificadores de a cceso defi nen la visi bilidad sólo de los cam pos.
d . La s clases pueden tener ca m pos. Estos s e conocen con el nombre de va riables de clase o va riables
estáticas.

Pregunta 5: I n d i q u e cual de las siguientes afirmaciones no es correcta respecto al uso de la herencia en


JAVA:
a . Evita e l tener q u e declarar constru ctores
b. Evita la d u pl icación de cód igo
c. Faci lita la re utilización del cód igo
d . Faci lita la a m pl i a b i l i da d y m a nte nimiento d e l cód igo

Pregunta 6: Se ha visto en la asignatura u na clase Message Post q u e hereda de otra Post. Si a m bas clases
tuviera n la siguiente estruct u ra :

c l a s s Post {
pub l i c String men s a j e = " En P o s t " ;

pub l i c void envi arMen s a j e ( ) {


S y s t em . out . print ln ( men s a j e ) ;
}
}

pub l i c c l a s s Me s s agePost extends P o s t {


pub l i c String men s a j e = " En Me s s agePost " ;

pub l i c void envi arMen s a j e ( ) {


S y s t em . out . print ln ( men s a j e ) ;
}

pub l i c s t at i c void main ( S tring arg s [ ] ) {


Me s s agePost p = new Me s s agePost ( ) ;
P o s t pos t=p ;
p o s t . envi arMen s a j e ( ) ;
}
}
Cual se ría e l resu lta do de ejecuta r el método m a i n :
a . En Post
b. En Message Post E n Post
c. En Message Post
d . En Message Post E n M essagePost
Pregunta 7: La s pruebas de regresión se definen como:

a. La ejecución de l a s pruebas pasa da s previamente para asegu rarse de q u e la nueva versión aún las
pasa.
b. La ejecución de pruebas a utomatiza das a leatorias sobre los d istintos va lores q u e puede reci bir la
c l a se eva l u a d a .
c. La a p l i cación sistemática del conj u nto de casos de prueba base q u e se defi nieron j usto al comenzar
con e l desarrollo de l a a p l icación y q u e no varía n nu nca a lo largo d e éste.
d. El conju nto de pruebas negativas necesa rias para demostrar q u e la clase eva l u ada fa l l a .

Pregunta 8: En u na simu l a ción de l o s zorros y l o s conejos s e p u e d e defi ni r una clase abstracta Anima l . E n
u na versión modifica da de la simu lación el cód igo pod ría ser:

import j ava . ut i l . Li s t ;
ab stract c l a s s Animal {
String nombre = " Animal " ;

ab stract pub l i c void metodo ( Li s t<Animal> newAnima l s ) ;


}

c l a s s Z orro extends Animal {


String nombre = " Z orro " ;

pub l i c String nombreAnima l ( ) {


return ( nombre ) ;
}

pub l i c void metodo ( Li s t<Animal> newAnima l s ) {

S y s t em . out . print ln ( " Animal " ) ;


}
}

pub l i c c l a s s Z orrosCone j o s {
pub l i c s t at i c void main ( S tring [ ] args ) {
Animal z = new Z orro ( ) ;
S y s t em . out . print ln ( z . nombreAnimal ( ) ) ;
}
}

Cual se ría el resu lta do de ejecuta r el métod o m a i n :


a . Animal
b. Zorro
c. Un e rror de compilación
d. U n e rror en tiempo de ejecución

Pregunta 9 : Dado el cód igo de l a clase MusicOrga nizer. ¿Cu á l sería el res ultado de la ejecución del método
m a in ?

import j ava . ut i l . ArrayL i s t ;

pub l i c c l a s s Mu s icOrgan i z e r
{

private ArrayL i s t< S tring> f i le s ;

pub l i c Mu s icOrgani z er ( )
{ f i l e s = new ArrayL i s t< S tring> ( ) ; }
pub l i c void addF i l e ( String f i lename )
{ f i l e s . add ( f i lename ) ; }

pub l i c int getNumberOfF i l e s ( )


{ return f i l e s . s i z e ( ) ; }

pub l i c void l i s t F i l e ( int index )


{
i f ( index >= O & & index < f i l e s . s i z e ( ) ) {
String f i lename = f i le s . get ( index ) ;
S y s t em . out . print ln ( f i lename ) ;
}
}

pub l i c void removeF i l e ( int index )


{
i f ( index >= O & & index < f i l e s . s i z e ( ) ) {
f i le s . remove ( index ) ;
}
}
}
pub l i c c l a s s T e s t
{
pub l i c s t at i c void main ( S tring [ ] args ) {
Mu s icOrgan i z e r mo=new Mu s icOrgan i z e r ( ) ;

mo . addF i l e ( " Di s c o 1 " ) ;


mo . addF i l e ( " Di s c o 2 " ) ;
mo . addF i l e ( " Di s c o 3 " ) ;

mo . l i s t F i le ( l ) ;
mo . remove F i l e ( l ) ;
mo . l i s t F i le ( l ) ;
}
}

a. Di sco 2 n u l l
b. Error e n tiempo de ejecución
c. Di sco 1 Disco 2
d. Di sco 2 Disco 3

Pregunta 10: Dado el sigu i e nte fragmento de cód igo, pod emos afirm a r q u e la salida del progra m a :

import j ava . ut i l . Random ;

pub l i c c l a s s T e s t
{
pub l i c s t at i c void main ( S tring [ ] args ) {

Random generadorAl e atorio s ;


generadorAleatorios =new Random ( ) ;

for ( int n=O ; n< = l O O ; n++ ) {


S y s t em . out . print ln ( generadorAle atorio s . next i nt ( n+ l ) ) ;
}
}
}

a. Genera rá va l ores a l eatorios entre O y n en cada vuelta del bucle.


b. Genera rá va l ores a l eatorios entre O y n+1 en cada vuelta del bucle.
c. Genera rá va l ores a l eatorios entre 1 y n en cada vuelta del bucle.
d. Genera rá va l ores a l eatorios entre 1 y n+1 en cada vuelta del bucle.
Pregunta 11: I n d i q u e cual de l a s siguientes afirmaciones es fa lsa en re lación a l desa rrollo de la práctica
obl igatori a :
a . El método a ctionPerformed es el enca rgado de actu a l izar l a s posiciones y el esta do del j uego e n
ca d a interva lo de tiempo.
b. La vista del j u ego se i mplementa sobre un J Panel sobreescribiendo su método paint().
c. Pa ra d etectar las pu lsaciones de teclado en el j uego pod emos hacer uso de la clase abstracta
KeyAda pter.
d . El método a ctionPerformed h a y q u e i mplementa rlo en el modelo, nu nca en el controlad or.

Pregunta 12: Dada la sigu i e nte jerarq u ía de clases:

Y la siguiente i n icia l ización de objetos :

pub l i c s t at i c void main ( S tring [ ] args ) {


Vehiculo v l =new Coche ( ) ;
Vehiculo v2 =new Vehiculo ( ) ;
B i c i c l e t a b=new B i c i c l e t a ( ) ;
Coche c =new Coche ( ) ;
}

¿Cuáles de las sigu i e ntes asignaciones son correcta s?


1. c=(Coche)v1;
2. c=(Coche)v2;
3. b=( Bicicleta ) e;
4. b=v2;

a. 1
b. 1y4
c. 1,2 y 4
d. 4

Pregunta 13: Sea u na nu eva definición de las clases Post y MessagePost:

pub l i c c l a s s P o s t
{
pub l i c String toString ( ) {

return " Me n s a j e 2 "


}
}

pub l i c c l a s s Me s s agePost extends P o s t


{
pub l i c String toString ( ) {

return " Me n s a j e 1 " + super . toString ( ) ;


}
}

pub l i c c l a s s T e s t
{
pub l i c s t at i c void main ( S tring arg s [ ] ) {
Post p = new Me s s agePost ( ) ;
S y s t em . out . print ln ( p ) ;
}
}

¿Qué se mostra rá por pa nta l l a a l ejecuta r el método mai n de la clase Test?


a. Error de Compilación
b. Me nsaje 2 M ensaje 1
c. Me nsaje 1 M ensaje2
d. Me nsaje 2

Pregunta 14: En el cód igo li breta de d i recciones ( a d d ress book) explicado en el li bro d e texto se hace uso d e
las a serciones.

pub l i c void removeDe t ai l s ( String key )


{
i f ( key nu l l ) {
==

throw new I l le g a lArgumentException ( " Nu l l key passed to


removeDe t ai l s . " ) ;
}
i f ( ke y i nU s e ( key ) ) {
ContactDet a i l s det a i l s book . get ( key ) ;
=

book . remove ( de t ai l s . getName ( ) ) ;


book . remove ( de t ai l s . getPhone ( ) ) ;
numberO fEntrie s - - ;
}
a s sert ! keyinUse ( key ) ;
a s sert c o n s i s t e nt S i z e ( ) " I ncon s i s tent book s i z e " ;
}

I n d i q u e cual de la s siguientes afirmaciones es cierta :


a . Se m u estra u n error Asserti o nE rro r en el caso en el que el método key l n U se devuelva como
resultado fa lso.
b. Se muestra el me nsaje "l nconsistent book si ze" en el caso en el q u e el método consistentSize
d evuelva como resu lta do fa lso.
c. Se muestra el me nsaje "l nconsistent book si ze" en el caso en el q u e el método consistentSize
d evuelva como resu lta do verd ad ero.
d . S e l a nza u na excepción deriva da de la clase Exce ption en el caso en el q u e el método key ln Use
d evuelva como resu lta do verd ad ero.

Pregunta 15: I n d i q u e cual de las siguientes afirmaciones relativas al uso de excepciones en Java es fa lsa :

a. La s excepciones com proba da s están pensadas para aq uel los casos en los q u e el cliente debería
espera r q u e u na o peración pueda fa l la r.
b. La s excepciones no comprobadas están pensadas para aq uel los casos q u e nu nca debería n fa l l a r
d u ra nte la operación norm a l .
c. La s excepciones no comprobadas heredan de la clase Error.
d. La s excepciones com proba da s heredan d e la clase Exce ption.

PARTE PRÁCTICA [6,5 PU NTOS] :

La p rá ctica del p rese nte c u rso ha sido una versión del lege nda rio a rca d e "Pac-M a n" . A
co nti n u ación se m uestra la p ro p uesta d e l j u ego ta l y co m o se sol icita ba pa ra la p rá ctica d e l c u rso :

1. E l j uego consta rá de u n s o l o n ive l d o n d e e l j ugador d e b e rá co m e r todos los p u ntos d e l a


pa nta l l a .
2. E l j ug a d o r co ntro l a rá a P a c- M a n y d is p o n d rá de 1 vi d a .
3. Los fa nta s m a s se rá n contro l a d os p o r e l o rd e n a d o r te n i e ndo e n cue nta e l co m po rta m i e nto
d ife re nte d e cada u no .
4. P a c- M a n pod rá m overse ( Ut i l iz a n d o l a s fl echas d e l teclado) a rriba (Tecla U p ), a bajo (Tecla
Dow n), i zq u i e rda (Tecla Left) y d e recha (Tecla Right). Así mismo pod rá pa usa r e l j uego
p u l s a n d o la tecla "P" .
5. El á rea de m ovi m i e nto p e rm itido pa ra Pac- M a n y los fa nta s m a s s e rá e l m a pa d e l ú n ico
n i ve l d i s po n i b l e .
6. S e rá necesa rio co m p ro ba r q u e ta nto Pac- M a n co m o los fa nta s m a s n o su p e re n los l ím ites
del m a p a .
7. Los ca m i nos d e l m a pa so lo p e rm it e n e l p a so d e u n i n d ivid uo a l m i s m o t i e m po, por ta nto
h a b rá q u e t e n e r en cue nta las co l isiones.
8. Los fa nta s m a s d e b e n i m p l e m e n ta r co m po rta m i e ntos d i fe re nte s :
a. B l i n ky, e l fa nta s m a rojo, b usca rá co l i s i o n a r c o n Pac-M a n . P a ra acerca rse a Pac- M a n
ca l c u l a rá l a d ista ncia ( po r eje m p l o m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro
acerca rse ve rtica l m e nte y l uego h o ri zo nta l m e nt e .
b. P i n ky. B usca rá co l i s i o n a r con Pac-M a n . Pa ra acerca rse a P a c- M a n ca lcu l a rá l a
d i sta ncia ( po r eje m p lo m e d i d o e n fi l a s y co l u m na s ) e i nte nta rá p ri m e ro a ce rca rse
h o ri zo nta l m e nte y l u ego ve rtica l me nte .
c. Clyd e . É l no p e rsigue a P a c- M a n, si no que dea m b u l a s i n u n a ruta es pecifica .
9. Se d e b e rá n d e detecta r dos ti pos d e co l isiones.
a. La s co l is i o n e s e nt re Pac- M a n y los fa nta s m a s, l o q ue s u p o n d rá la p é rd ida de u na
vida o e l fi n a l d e l j uego e n caso de no d i s p o n e r de m á s vidas.
b. La s co l i si o n e s e nt re los fa nta s m a s, q ue s u p o n d rá u n ca m bi o d e d i recci ó n e n los
fa nta s m a s i nvo l ucra d o s .
10. H a b rá cuatro p u ntos m á s gra ndes de lo n o rm a l s i t u a d o s ce rca de l a s esq u i n a s d e l la beri nto
y proporci o n a rá n a P a c- M a n la h a b i l id a d te m po ra l (5 seg u ndos) de co m e rse a los
fa nta s m a s (todos e l los se vuelve n a z u les m i e nt ra s P a c- M a n t i e n e esa h a b i l i d a d ) . Después
de h a be r sido t ragados, los fa nta s m a s se rege n e ra n e n " casa de fa nta s m a s " .
11. S e rá necesa rio i m p l e m e nta r u n conta d o r con los p u ntos o bte n i dos e n cada m o m e nto,
t e n i e n d o en c u e nta los o bjetos co m idos. U n p u nto peq u e ñ o s u po n e 10 p u ntos. Co m e r u n
fa nta s m a 100 p u ntos.
12. Si el j uga d o r fi na l i za el n ive l del j uego d e b e rá a p a rece r un m e nsaje de fe l icita ción y se
volve ría a m o st ra r la pági na i n icia l .

a) [ 2 puntos] D i se ñ a r uti l i za n d o u n pa ra d i g m a orie ntado a o bjetos, los e l e m e ntos n ecesa rios


pa ra l a a p l i ca c i ó n e x p l i ca d a de l a p rá ctica d u ra nte el c u rso. Es n ecesa rio i d e ntifica r la
estruct u ra y las re laciones de h e re ncia y de uso de las clases necesa ri a s pa ra a l m a ce n a r y
gestio n a r esta i nfo rmaci ó n . D e be hacerse uso de los m eca n is m os de h e re ncia s i e m p re q ue
sea posi b l e . Se va l o ra rá u n b u e n d i se ñ o q u e favorezca la re uti l i za c i ó n de cód igo y fa ci l ite s u
m a nte n i m i e nto.
b) [1,5 puntos] I m p l e m e nta l a clase F a n t a s m a C l yde . Especifica sus a t ri b utos y m étodos y
j u stifica l a s decisiones de i m p l e m e ntación q ue cre a s i m porta ntes. Recuerd a q u e este
fa nta s m a dea m b u l a s i n u n a ruta específica por el la beri nto.
e) [1,5 puntos] I m p le m e nta los m étodos necesa rios pa ra gestio n a r e l ca m bi o de estado ta nto
en P a c- M a n co m o en los fa nta s m a s c u a ndo éste p a sa por e nci m a de un p u nto gra n d e . Es
necesa rio i nd i ca r a qué clases p e rte nece cada uno de los m étodos i m p l e m e ntados.
d ) [1,5 puntos] I nd i q u e los ca m bios q ue se ría n n ecesa rios e n e l diseño y p rogra m a pa ra
p e r m i t i r la existencia de " p re m ios" ( e .g . cerezas, fresas, n a ra nj a s, m a n za n as, etc) en cada
n i ve l d e l j uego q u e p e rm ita n a Pac- M a n a u m e nta r su p u nt u a c i ó n al p a sa r por e nci m a de
e l los.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA
71 901 072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA / TECNOLOGÍAS DE LA
INFORMACIÓN �

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Solo un a de las respu estas es vá l i d a . Las respu estas correctas se p u ntuarán con +1.0, mientras q u e las
respondidas d e ma nera incorrecta se p u nt u arán co n -0.25. La s no contesta das no te ndrán infl uencia ni
positiva ni negativa en l a nota.

Pregu nta 1: Ind ica cual de las sigui entes afirmaciones es correcta :

a. Los métodos pueden d evolver información de a lgún objeto media nte u n va lor de retorno.
b. Los métodos siem pre tienen pará m etros con los q u e obtener la i nformación necesa ria.
c. A partir de u na clase ta n solo se puede crear u n solo objeto.
d. El esta d o de l o s objetos s e representa media nte los métodos i mple mentados.

Pregu nta 2: Dado el sigu i e nte fragmento de cód igo,

i n t estudiante = 1 ;
b o o l e a n [] mat ri culas = n ew b o o l e a n [3] ;
b o o l e a n ap robado = mat ri culas [estudi ante] ;

I nd ica cual de l as sigu i e ntes afirmaciones es correcta en relación a l va lor de la va riable ap robado.

a. ap robado tiene el va lor O


b. ap robado tiene el va lor n u l l
c. ap robado tiene el va lor fa lse
d. S e prod u ce u na excepción y ap robado no posee n i ngún va lor

Pregu nta 3: Ind ica cual de las sigui entes afirmaciones es correcta :

a. Los ca m pos también son conocidos como va riables de esta do.


b. El a l ca nce de u na va riable defi ne la secci ón de cód igo desde donde la va riable puede ser declara d a .
c. Los constructores permiten q u e cada objeto sea preparado adecu a d a m ente cuando es crea do.
d. El tiempo de vida de u na va riable describe el n ú m ero de veces q u e e s utilizada en u n método.

Pregu nta 4: Su pongamos que q u e remos implementa r una Agenda, ¿cuál sería la salida del sigu i e nte
código?

public class Age nda {

public static void ma i n ( S t r i ng a r gv [ ] ) {


Age nda agenda = new Age nda ( ) ;

protected Age nda ( ) {


for ( int i = O ; i< l O ; i + + ) {
S ys t em . o u t . p r i n t l n ( i ) ;
a. Error d e Compi lación y a q u e l o s constru ctores no pueden s e r declarados como "protected".
b. Error e n tiempo de ejecución ya q u e los con structores no pueden ser declara d os como "protected".
c. Co mpilación correcta y salida de los d ígitos de O a 10.
d. Co mpilación correcta y salida de los d ígitos de O a 9.

Pregu nta 5: Ind ica cual de las sigui entes afirmaciones es correcta :

a. Los ca m pos s e defi nen dentro de l o s constructores y de l o s métodos.


b. Los ca m pos se usan para a lmacenar datos q u e nu nca persisten d u ra nte la vida del objeto.
c. Los ca m pos tienen un tiempo de vida q u e perd u ra después de term i n a r el objeto.
d. La accesi bilidad de l o s campos s e extiende a toda clase y por este motivo pueden usarse dentro d e
cua l q u ier constru ctor o método de clase en la q u e estén definidos.

Pregu nta 6: Ind ica cual de l a s sigui entes afirmaciones es correcta :

a. El l e nguaje J ava tiene tres varia ntes del ciclo for : for-each, for y far-d o.
b. U n ciclo while es similar en su estru ctu ra y propósito q u e el ciclo for-each.
c. El tipo de la va riable de ciclo no tiene porq ué ser el mismo q u e el tipo del elemento declarado para
la colección q u e esta mos recorriendo con u n ciclo.
d. U n índ ice es u n objeto q u e proporciona fu nciona l idad para recorrer todos l o s elementos de u n a
colección.

Pregu nta 7: Ind ica cual de las sigui entes afirmaciones es correcta :

a. La prueba es la actividad de descu brir si una pieza de cód igo prod uce el comporta m ie nto
pretendido.
b. U n a a serción es u na expresión q u e esta b lece u n a cond ición q u e esperamos q u e resu lte verdad e ra .
c. Un segu imiento es la a ctividad de tra baj ar a través de un segme nto de cód igo línea por línea,
m ie ntras se observa n ca m bios de estado y otros comportami entos de la aplicación.
d. Tod as las respuestas a nteriores son correcta s.

Pregu nta 8: Ind ica cual de l a s sigui entes afirmaciones es correcta :

a. U n objeto de tipo String puede ser modificado una vez q u e está creado, por ta nto no e s u n ejemplo
d e objeto i nmutable
b. La clase String tiene u n método de nombre trim que permite mod ifica r caracteres en cu a l q u ie r
posición de u na ca dena
c. La s ca denas de texto de tipo Stri ng solamente se pueden com pa ra r media nte el operador "=="
d. U n objeto es i nm utable s i su contenido o su esta d o no puede s e r ca mbiado una vez q u e s e h a
creado
Pregu nta 9 : Basado en el ejemplo de la Base de Datos de CDs y DVDs vi sto en la asignatu ra en el ca pítulo 8,
¿cuál sería la salida del siguiente cód igo?

public class B a s e De Da t o s {

public final void met odoAgr e g a r E l eme n t o ( ) {


S ys t em . o u t . p r i n t l n ( "Ag regar E l ement o " ) ;

public class B a s e D e D a t o s DeMu s i c a {

pub l i c s tatic void ma i n ( S t r i ng a r gv [ ] ) {


B a s e De D a t o s db = new B a s e De Da t o s ( ) ;
db . me todoAg r e g a r E l eme n t o ( ) ;

a. Error en tiempo de com pi lación i ndicando q u e una clase con métod os fi nales deben s e r declarada
ta m bién como fi na l .
b. Error e n tiempo de co mpilación ind icando q u e no se puede heredar de una clase con métod os
fi n a les.
c. Error e n tiempo de ejecución ind icando q u e Base De Datos no ha sido definida como fi nal.
d. Éxito en la com pil ación y salida " Agrega r Elemento".

Pregu nta 10: I n d ica cual de l a s sigu i e ntes afirmaciones es correcta :

a. El térm ino acopla m iento describe cuá nto s e aj usta una u n idad de cód igo a u n a tarea lógica o a u n a
entidad
b. El acopla m iento describe l a conectivi dad de los propios objetos d e una clase
c. U n enca ps u l a miento a p ropiado en l as clases red uce el acoplamiento
d. U n sistema debilmente acoplado s e ca racte riza por la i mposi bilidad de mod ificar una de s u s clases
sin tener q u e rea l izar ca m bios en n i nguna otra

Pregu nta 11: Dado el sigu i e nte fragmento de cód igo q u e prete nde mostra r un ejem plo de sobrescritura :

c l a s s Examen{
private f loat pregunta = l . O f ;
protected f loat getNota ( ) { return pregunt a ; }
}

extends Examen {
c l a s s Test
private f loat nota = 2 . 0f ;

I n d i q u e cual de l a s siguientes opciones completa ría el cód igo a nterior para d a r lugar a u n ejemplo correcto
de sobrescritura :

a . public float getN ota (fl oat va lor ) { retu rn va lor;}


b. public float getN ota ( ) { retu rn nota;}
c. float getN ota ( ) { ret u rn nota ;}
d. float double getN ota ( ) { ret u rn nota ;}
Pregu nta 12: I n d ica cual de las sigu i e ntes afirmaciones es correcta :

a. U n a I G U s e construye media nte visores q u e s e u bican en la panta l l a .


b. La distri bución de los compone ntes en la panta l l a se l leva a ca bo media nte gestores de d isposición.
c. Los componentes se u bican en una ve nta na agregá ndolos a la ba rra de esta do o al panel agregador.
d. U n objeto puede escu char los eve ntos de los compone ntes implementa ndo una i nterfaz
i nterpretadora de eve ntos.

Pregu nta 13: En el sigu iente fragmento de cód igo hemos defi nido la ejecución de cinco bloques. Estos
bloques se ejecutará n dependiendo de l a s excepciones q u e se prod uzca n en ca da caso.

try {

} catch ( A r i thme t i cExcep t i on e ) {

} finally {

I n d i q u e cual de la s siguientes afirmaciones es correcta :

a. El Bloque4 no s e ejecuta rá s i s e prod uce u n a exce pción de tipo a ritmético en el Bloque2


b. El Bloque4 se ejecuta rá a ntes de q u e la exce pción prod ucida por u n acceso a u n objeto nulo ( n u l l )
e n e l Bloq ue2 s e propague hacia a rriba
c. El Bloque4 no se ejecuta rá si se prod uce un acceso a un objeto n u l o ( n u l l ) en el Bloq ue2
d. El Bloque4 s e ejecuta rá a ntes q u e el Bloque3 s i s e produce u n a exce pción de tipo a ritmético en e l
Bloq ue 2

Pregu nta 14: I n d ica cual de l a s sigu i e ntes afirmaciones es correcta :

a. U n a su percl a se e s u na clase q u e es i m plementa da por otra .


b. U n a su bclase es u na clase q u e implementa a otro objeto.
c. La herencia nos perm ite hered a r pero no re utilizar en un nuevo contexto clases q u e fu eron escritas
previamente.
d. La s clases q u e está n vincu l a da s media nte una re lación de herencia forma n una jerarq u ía de
herenci a .

Pregu nta 15: I n d ica cual de las sigu i e ntes afirmaciones es correcta :

a. La interfa z de u na clase describe l o q u e hace la clase y cómo puede usarse p u d iendo mostra r pa rte
de su implementa ción.
b. U n mapa es u na colección q u e a l macena entradas d e ternas de va lores ll ave/va lor/posición.
c. La documentación de u na clase debe ser suficientemente deta l l a d a como para que otros
progra madores puedan usar la clase sin necesidad de leer su i mple mentación.
d. Los modificadores de a cceso defi nen las restricciones d e uso de u n objeto para determi nados
métodos, constructores o cam pos.
PARTE PRÁCTICA [6,5 PU NTOS] :

La práctica d e l presente c u rso ha sido u na termi nal pu nto de venta (por sus siglas, TPV) q u e ha servi do para
estu d i a r y practicar los meca nismos de la P rogra m a ción Orientada a Objetos.

Definición de TPV y Características

Segú n la Wikipedia (www.wiki pedia.org), un termi nal pu nto de venta (cuyo acrónimo es TPV hace referencia
a l d ispositivo y tecnol ogía s que ayu d a n en l a ta rea de gestión de u n esta blecimiento co mercial de venta al
públ ico que puede conta r con sistemas i nfo rmáticos especi a l i zados media nte una i nterfaz accesible para los
vended ores.

Los TPV permiten la creación e i m p resión del tiq ue de venta mediante las referencias de prod uctos, rea l izan
d ive rsas operaciones d u ra nte todo el proceso de venta, así como ca mbios en el inventa rio. Ta m bién
ge nera n d iversos reportes que ayu d a n en la gestión del negocio. Los TPV se co mponen de una pa rte
h ardware (dispositivos físicos) y otra software (sistema operativo y progra ma de gestión).

En nuestro caso concreto, el hadwa re será u n o rdenador tipo PC o similar y nu estro softwa re será u n a
a pl icación d esarro l l a da en J ava q u e se ejecuta rá sobre d icho equ ipo.

Funcionalidades

Los TPV permite n la i mplementación desde l a bores simples de gestión de una venta, hasta operaciones más
com plejas como es la gestión de a l macén o i nventa rio, gestión de facturación o gestión de clientes. En esta
práctica, se propondrá diferentes fu ncionalidades para el sistema de gestión del TPV:

Lleva r u n control de d ife rentes elementos q u e existen en nuestro esta bleci miento. Así, los
prod uctos habrá n de estar identificados en el sistema por, a l menos, los sigui entes datos: cód igo
d escri ptivo (por ejem plo, el cód igo de ba rras), descripción, precio u n itario sin IVA, IVA apl ica ble,
precio u n itario con IVA, cantidad d i spo nible en stock.
• El sistema debe permiti r d a r de a lta nu evos prod uctos, d a r de baja prod uctos existentes así como
modifica r los datos del m ismo.
• Rea lizar la i mporta ción y/o expo rta ción de los prod uctos a/d esde ficheros (u otro método sim i l a r
q u e e l a l umno considere en su l ugar).
• Lleva r u n control de l a s d ife rentes ventas q u e se prod u cen. Así, el sistema deberá l leva r u n control
d e ti ckets generad os, de modo q u e cada ticket se considera rá una ve nta . Cada ticket tiene q u e
te ner u n cód igo de identifica dor ú n ico. U na forma de genera r u n cód igo ú nico pod ría s e r d e la
forma AAAA M M D D H H M M, donde AAAA es el año en cu rso, M M el mes en q u e se genera la venta,
DD e l d ía de l a ve nta, H H M M las horas y mi nutos en las q u e se i nicia la ve nta . Asu mi remos q u e sólo
hay u n TPV, por l o que no procede que haya dos ventas simu ltá neas.

La ve nta consistirá en la inclusión de va rios pro ductos en u n a lista, generá nd ose una l ínea por ca d a
prod ucto ve ndido. Cada línea mostra rá, a l menos, el cód igo del prod u cto, la descripción d e l
prod ucto, l a cantidad de unidades ve ndidas, el precio u n itario co n IVA, el IVA q u e se le apl ica y el
importe total de la ve nta de ese prod ucto según el n ú m ero de unidades ve ndidas.

El proceso de venta impl icará a utomática mente u n proceso de actual ización del inventa rio. De este
mod o, si se i ntrod uce un cód igo q u e no pertenece a ningún pro ducto, o si se introd uce un prod u cto
q u e no existe en stock (o más u n idades de las existentes), el progra ma deberá mostra r los errores
correspon dientes.

El sistema deberá permitir ta m bién i ntrod ucir u n prod ucto a ve nder en el ticket haciendo u n a
búsq ue da por l a descripción, además de co n el cód igo q u e lo identifica.
• Rea lizar la i mporta ción y/o exportación de los d iferentes tickets de ventas a/desde ficheros (u otro
método s i m i l a r q u e el a l u m no consid ere en su l uga r).
• Lleva r u n control de los d ife rentes clientes q u e tra baj an con el esta blecimiento com erci a l . Así, los
clientes habrá n de estar identificados en el sistema por, a l menos, los sigu ientes datos: cód igo
identificativo del clie nte, N I F o C I F, nom bre y a pel lidos 1 razón social, domicilio, fecha de a lta en e l
sistem a .

El sistema debe permitir d a r de a lta nuevos clientes, d a r de baja clientes existentes así como
modifica r los datos de los mismos.
• Rea lizar la i m porta ción y/o exportación de los clientes a/desde ficheros (u otro método sim i l a r q u e
e l a l u m no considere en su lugar).

Permitir generar factu ras a partir d e u n conj u nto de ti ckets. Puede ge nerar factu ras agru pando
diferentes tickets siem pre y cuando perte nezca n a l mismo cliente y se han rea l izado de ntro d e l
m ismo periodo fisca l ( es d ecir, dentro del mismo a ño). L a información q u e i rá en cada fa ctu ra
deberá ser, a l menos, la sigu iente : nú mero de la factu ra (identifica dor ú nico), C I F del vendedor,
razón social del ve nded or, fecha de emisión de la fa ctura, datos del cliente (los ind icados con
a nterioridad, excepto la fecha de a lta en el sistema), l istado de los d iferentes prod uctos ve ndidos
(especificando para cada p ro du cto, e l ticket en el q u e se encuentra, su cantidad ve ndida e im porte
tota l ) así como suma del total de la venta (valo r tota l de la fa ctura).
• Rea lizar la i m portación y/o exporta ción de las factu ras a/desde ficheros (u otro método similar q u e
e l a l u m no considere en su l uga r).
• Generación de l ista dos: se de berá implementa r, a l menos, la emisión de tres listad os, a saber:
ventas rea l izadas en u n interva lo de tiempo d etermi nado agru padas estas ventas por clientes,
ventas rea lizadas en un i nterva lo de tiempo determ inado a un cliente y ra nking de prod uctos más
ve nd idos en u n i nterva lo de tiempo determinado.

a) [1,0 pu ntos] Diseña r utilizando u n parad igma orie nta do a objetos, los elementos necesarios para la
a pl icación explicada de la p rá ctica d u ra nte el cu rso. Es necesario identificar la estru ctu ra y las
re laciones de herencia (mediante el uso de u n d iagra ma de clases) y de uso de las clases necesa rias
para a l macenar y gestionar esta info rmación. Debe hacerse uso de los meca n ismos de herencia
siem pre que sea posible. Se va lora rá u n buen d i seño que favorezca la reutilización de cód igo y
fa ci lite su ma ntenim iento.

b) [1,5 pu ntos] I m plementa la fu nciona lidad q u e permita d a r de a lta nuevos clientes, d a r de baja
clientes existentes así como mod ifica r los datos de los mismos. J u stifíq ue las opciones y decisiones
que se tomen.

e) [1,5 puntos] Implementa la fu ncionalidad que perm ita la generación de listados: se deberá
implementa r, a l menos, la emisión de tres l istados, a saber: ventas rea l izadas en u n interva lo d e
tiempo determ inado agru padas estas ventas po r clientes, ventas rea l izadas en u n i nterva lo d e
tiempo determ inado a u n cliente y ra nking de prod uctos más ve ndidos en u n interva lo de tiempo
determinado. J u stifíq u e las opciones y decisiones que se tomen.

d) [2,5 pu ntos] P a ra l a siguiente versión del softwa re se desea a ñ a d i r la figu ra del proveedor. De cada
proveedor se debe te ner u n lista do de los prod uctos que sirve, así como su precio, que pod ría
a ctu alizarse m a n u a l mente después de la ú ltima ve nta . El sistema debería consultar el i nventa rio
después de ca da venta y por debajo de un mínimo de prod uctos realizar un ped ido al proveedor
más ba rato, de ma nera a utomática . El nú mero de prod uctos ped ido, pod rá ser configu ra b l e para
q u e el vendedor esta blezca u n va lor por cada prod ucto. ¿Qué ca m bios sería n necesarios en e l
d i seño para a d a ptar esta nu eva fu ncion a l i d a d ? Imple me nte el método (o métodos) q u e permita
esta n ueva fu ncionalidad .
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA
71 901 072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA / TECNOLOGÍAS DE LA
INFORMACIÓN �

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


Solo un a de las respu estas es vá l i d a . Las respu estas correctas se p u ntuarán con +1.0, mientras q u e las
respondidas d e ma nera incorrecta se p u nt u arán co n -0.25. La s no contesta das no te ndrán infl uencia ni
positiva ni negativa en l a nota.

Pregu nta 1: ¿Qué significa el siguiente fragm ento de cód igo Java ?:

i nt u no() { return 1; }

a. H ay u n método "int u no" q u e no recibe n i ngún pará metro de entrada y devu elve el va lor 1.
b. H ay un a va riable "i nt" cuyo va lor es "uno() { retu rn 1; }"
c. H ay un método "u no" q u e no recibe n i ngún pará m etro de entrada y devue lve un entero cuyo va lor es
1.
d. El fragmento no rep resenta u n fragmento de cód igo lega l en Java.

Pregu nta 2: Pa ra l ogra r q u e una clase entre en el depurador en BlueJ a hacer una insta ncia en BlueJ, ¿ q u é
h a y q u e h a c e r c o n el cód igo fuente? :
a . Co mpilarl o de nu evo con la opción Debug activado .
b. Meter u n pu nto de ruptura.
c. La nzar d i rectamente el dep u ra d or.
d . S e hace a utomática mente a l encontra r u n error en el cód igo.

Pregu nta 3: Dado el sigu i e nte fragmento de cód igo en Java :

i nt m, n;
public void f() {
m = (m + 2) % n;
Syste m.out. print(m + " ");

public void g() {


i nt i = O; m = O; n = 8;
while( i++<n ) {
f();

¿Cuál es el resu lta do de ejecuta r g()?

a. O246O246
b. 24624624
c. 2460246024
d. 246o246o

Pregu nta 4: Segú n el l ibro de l a a signatu ra, ¿cómo se l l a m a el cód igo fuente de una clase?:
a. La implementación de la clase.
b. La interfa z de la clase.
c. Los métodos de l a clase.
d. La visibilidad de la clase.
Pregu nta 5: Para ca pta r el evento de d a r en un botón en Java, ¿que i nterfaz hay q u e implementa r?:
a. public class Demo Boto n exte nds J Pa n el i mplements Windowliste ner
b. public class DemoBoton exte nds J Pa n el implements Eventliste ner
c. public class Demo Boto n exte nds J Pa n el i mplements Button listener
d. public class Demo Boto n exte nds J Pa n el i mplements Actionliste ner

Pregu nta 6: Segú n el l ibro de l a a signatu ra, l a d u pl icación de cód igo es u n síntoma d e :
a . B u e n a cohesión.
b. M a l a cohesión.
c. La solución inevita ble de u n problema com plejo.
d . Mal encapsu l a m i ento.

Pregu nta 7 : Segú n el l ibro de l a a signatu ra, ¿qué significa "prueba de u n idades" ?:
a . U n a prueba completa de la a p l i cación.
b. U n a prueba sistemática de u n método en concreto.
c. Una prueba de las pa rtes indivi d u a les de la aplicación.
d. U n a d e p u ración completa de la a p l icación.

Pregu nta 8: Dado el sigu i e nte fragmento de cód igo de Java :

class 1 {}
class J extends 1 {}
class K extends J {}
public void h h () {
J j new J();
=

boolean bl j insta nceof K;


=

boolean b2 j insta nceof J ;


=

boolean b3 j insta nceof 1;


=

boolean b4 j insta nceof O bject;


=

System .out.println(bl + +
11
b2 +
11 11 11 +
b3 + 11 11 +
b4);

¿Cuál sería l a salida del método h h ?


a . fa lse true true true
b. true true true true
c. fa lse true true fa lse
d . fa lse false tru e true

Pregu nta 9: Un método abstracto se declara de la siguiente forma :


a . abstract String ss(){}
b. abstract String ss();
c. abstract String ss( ){retu rn void};
d. abstract ss();

Pregu nta 10: Si existe un Arraylist<String> as, ¿cómo se consigue un iterador sobre as?
a. lterator it a s.getlterator();
=

b. lterator it as.ite rato r();


=

c. lterator it new lterator(as);


=

d. lterator it as.next lte rator();


=
Pregu nta 11: Si l a s clases J y K hered a n de la clase 1 y la clase L hereda de la clase J, entonces (i nd ica la
respu esta que da ría u n error de com pilación):
a. 1 i = new K();
b. J j = new K();
c. J j = new L();
d. K k = new 1();

Pregu nta 12: En l a práctica hay q u e leer información desde un a rchivo. ¿Cómo se puede gen era r u n a
exce pción si no se encuentra el a rchivo ? :
a . th row new FileNotFound Exce pti on( "Arch ivo no encontrado");
b. th row new NoFileExce pti on( "Archivo no encontrado");
c. th row new File Exception( "Arch ivo no encontrado");
d. th row new N u i i Poi nte rException ("Archivo no encontrado ");

Pregu nta 13: Dado el sigu i e nte fragmento de cód igo en Java :
String s1 = 0 + "5"; // ( 1 )
String s2 = "0" + 5; // ( 2 )
String s3 = 0 + 5 + " "; // (3)
String s4 = java . l a ng. l nteger.toStri ng(O) + 5; // (4)

¿Cuáles son formas válidas de constru ir una ca d e n a ? :


a. 1, 2 y 4
b. 1, 2 y 3
c. 4
d . Tod as l a s formas son vá lidas.

Pregu nta 14: Seg ú n el l ibro de la a signatu ra, las i nstrucciones cond iciona les lleva n a cabo (con la exce pción
del switch ):
a . un a d e d o s acciones posibles.
b. un a d e va rias a cciones posibles.
c. las dos acciones posi bles.
d. dos o más de l a s a cciones posibles.

Pregu nta 15: ¿Cuál es la d ife rencia entre declarar una va riable de clase private y protected?:
a . private: Acceso solo de ntro d e la cla se, protected : Acceso desde la clase y s u s hijos.
b. private: Acceso desde la clase y sus hijos, protected : Acceso solo d entro de la clase.
c. private: Acceso solo de ntro del paquete, protected : Acceso desde la clase y sus hijos.
d . S e pueden aplica r private y protected sol amente a la declaración de clases y no a va riables.
PARTE PRÁCTICA [6,5 PUNTOS] :

La práctica del presente cu rso ha sido u na termi nal pu nto de venta (por sus siglas, TPV) q u e ha servido para
estudiar y pra ctica r los meca nismos de la P rogram ación Orientada a O bjetos.

Definición de TPV y Características

Segú n la Wikipedia (www.wiki pedia.org), un te rminal pu nto de venta (cuyo acrónimo es TPV hace referencia
al d ispositivo y tecnol ogía s que ayu d a n en l a ta rea de gestión de un esta blecimiento co mercial de venta a l
públ ico q u e puede conta r con sistemas i nform áticos especial izados mediante una i nterfaz accesi ble para los
vended ores.

Los TPV permiten la creación e i m p resión del tiq ue de venta mediante las referencias de prod uctos, rea l izan
d ive rsas operaciones d u ra nte todo el proceso de venta, así como ca m bios en el inventa rio. Ta mbién
genera n dive rsos reportes que ayu d a n en la gestión del negoci o. Los TPV se com ponen de una pa rte
h ardware (dispositivos físicos) y otra software (sistema operativo y progra ma de gestión).

En n uestro caso concreto, el ha dwa re será u n ordenador tipo PC o similar y nuestro software será u n a
a pl icación d esarro l l a da en J ava q u e se ejecuta rá sobre d icho equ ipo.

Funcionalidades

Los TPV permite n la i mplementación desde l a bores simples de gestión de una venta, hasta operaciones más
com plejas como es la gestión de a l macén o i nventa rio, gestión de factu ra ción o gestión de clientes. E n esta
práctica, se propondrá diferentes fu ncionalidades para el sistema de gestión del TPV:
• Lleva r u n control de d ife rentes elementos q u e existen en nuestro esta bleci miento. Así, los
prod uctos habrá n de esta r identificados en el sistema por, a l menos, los sigui entes d atos: cód igo
d escri ptivo (por ejem plo, el cód igo de ba rras), descripción, precio u n itario sin IVA, IVA apl ica ble,
precio u n itario con IVA, cantidad d i sponible en stock.
• El siste ma debe perm iti r d a r de a lta nuevos prod uctos, d a r de baja prod uctos existentes así como
modifica r los datos del m ismo.

Rea lizar la i mporta ción y/o expo rta ción de los prod uctos a/d esde ficheros (u otro método s i m i l a r
q u e e l a l umno considere en su l ugar).
• Lleva r u n control de l a s d ife rentes ventas q u e se prod u cen. Así, el sistema deberá l leva r u n control
d e ti ckets generad os, de modo q u e cada ticket se considera rá una ve nta . Cada ticket tiene q u e
te ner u n cód igo de identifica dor ú n ico. U na forma de genera r u n cód igo ú n i co pod ría s e r d e la
forma AAAA M M D D H H M M, donde AAAA es el año en cu rso, M M el mes en q u e se genera la venta,
DD e l d ía de l a ve nta, H H M M las horas y mi nutos en las q u e se i nicia la venta . Asu mi remos q u e sólo
hay un TPV, por l o q u e no procede q u e haya dos ventas sim u ltáneas.
• La ve nta consistirá en la inclusión de va rios pro ductos en u n a lista, generá nd ose una l ínea por ca d a
prod ucto ve ndido. Cada línea mostra rá, a l menos, el cód igo del pro ducto, la descripción d e l
prod ucto, l a cantidad de unidades ve ndidas, el precio u n itario co n IVA, el IVA q u e se le apl ica y el
importe total de la ve nta de ese prod ucto según el n ú m ero de unidades ve ndidas.

El proceso de ve nta i mpl icará a utomática mente u n proceso de actu a l ización del i nventario ta l y
como se ha defi nido en el N ivel 2. De este modo, si se i ntrod uce u n cód igo q u e no pertenece a
n i ngún prod u cto, o si se i ntro du ce u n prod u cto q u e no existe en stock (o más u n ida des de las
existentes), el progra ma deberá mostra r los errores correspondientes.
• El sistema deberá permitir ta m bién i ntrod ucir u n prod ucto a vender en el ticket haciendo u n a
búsq ue da por l a descripción, además de co n el cód igo q u e lo identifica.
• Rea lizar la i mporta ción y/o exportación de los d iferentes tickets de ventas a/desde ficheros (u otro
método s i m i l a r q u e el a l u m no consid ere en su l uga r).
• Lleva r u n control de los d ife rentes clientes q u e tra baj an con el esta blecimiento com erci a l . Así, los
clientes habrá n de estar identificados en el sistema por, a l menos, los siguientes datos: cód igo
identificativo del clie nte, N I F o C I F, nom bre y a pel lidos 1 razón social, domicilio, fecha de a lta en e l
sistem a .

El sistema debe permitir d a r de a lta nuevos clientes, d a r de baja clientes existentes así como
modifica r los datos de los m ismos.
• Rea lizar la i m porta ción y/o exportación de los clientes a/desde ficheros (u otro método sim i l a r q u e
e l a l u m no considere en su lugar).

Permitir generar factu ras a partir d e u n conj u nto de ti ckets. Puede ge nerar factu ras agru pando
diferentes tickets siem pre y cuando perte nezca n a l mismo cliente y se han rea l izado dentro d e l
m ismo periodo fisca l ( es d ecir, dentro del mismo a ño). L a información q u e i rá en cada fa ctu ra
deberá ser, a l menos, la sigu iente : nú mero de la factu ra (identifica dor ú nico), C I F del ve nded or,
razón social del ve nded or, fecha de emisión de la fa ctura, datos del cliente (los ind icados con
a nterioridad, excepto l a fecha de a lta en el sistema), l istado de los d iferentes prod uctos ve ndidos
(especificando para cada p ro du cto, e l ticket en el q u e se encuentra, su ca ntidad ve ndida e i mporte
tota l ) así como suma del total de la venta (valo r tota l de la fa ctura).
• Rea lizar la i m portación y/o exporta ción de las factu ras a/desde ficheros (u otro método similar q u e
e l a l u m no considere en su lugar).
• Generación de listados: se deberá i mplementa r, a l me nos, la emisión de tres listad os, a saber:
ventas rea l izadas en u n interva lo de tiempo d etermi nado agru padas estas ventas por clientes,
ventas rea lizadas en un i nterva lo de tiempo determinado a un cliente y ra nking de prod uctos más
ve nd idos en u n i nterva lo de tiempo determinado.

a) [1,0 pu ntos] Diseñar utilizando u n parad igma orientado a objetos, los elementos necesarios para la
a pl icación explicada de la p rá ctica d u ra nte el cu rso. Es necesario identificar la estru ctu ra y las
re laciones de herencia (mediante el uso de u n d iagra ma de clases) y de uso de las clases necesa rias
para a l macenar y gestionar esta info rmación. Debe hacerse uso de los meca n ismos de herencia
siem pre que sea posible. Se va lora rá u n buen d i seño que favorezca la reutilización de cód igo y
fa ci lite su ma ntenim iento.

b) [2,0 pu ntos] Implementa la fu ncionalidad de ge nerar factu ras agru pando d ife rentes tickets siem pre
y cuando pertenezcan a l m ismo cliente y se han rea l izado dentro del mismo periodo fisca l (es decir,
d e ntro d el m ismo a ño). La i nformación q u e irá en cada fa ctu ra de berá ser, al menos, la siguiente:
n ú me ro de la fa ctu ra (identifica dor ú n i co), CIF del ve ndedor, razón social del vendedor, fecha d e
e misión de la fa ctu ra, datos del cliente (los i ndicados co n a nterioridad, excepto la fecha de a lta e n
e l sistema), lista do de los d ife rentes prod uctos vend idos (especificando para cada prod ucto, e l
ti cket e n el q u e se encuentra, su cantidad ve ndida e i m porte tota l) as í como suma del total d e la
venta (va lor total d e la factu ra ) .

e) [1,0 pu nto] Implementa u n método q u e d é una notificación cuando se ve nda el ú ltimo ejemplar d e
u n prod u cto en el a l macén para q u e se pueda ped ir más.

d) [2,5 puntos] P a ra l a siguiente versión del software se q u i ere incluir u n catá logo de los pro d u ctos
para q u e un cliente pueda m irarlo en pa nta llas dentro de la tienda y com pra r los prod u ctos
d i recta mente desde el catá l ogo. Se trata ría de una nueva interfa z sobre el TPV q u e proporciona ría
a lgunas de l a s fu nciones (aquellas releva ntes para el cliente) d i recta mente al cliente. ¿Qué cambios
sería n necesarios en el d i seño para incluir esta nueva fu ncionalidad? I m plementa los cambios
necesarios q u e perm ita n esta nu eva fu nciona l i d a d .
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE

PARTE TEÓRICA - TEST [2,5 PUNTOS] :


Solo una de las respuestas es válida. Las respuestas correctas se puntuarán con + 1 .0, mientras que las
respondidas de manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni positiva
ni negativa en la nota.

Pregunta 1 : Segú n el texto d e l a bibliografía básica d e la asignatura, los constru ctores ...

a. Almacenan datos d e manera persistente dentro d e u n obj eto.


b. I mplementa n el comporta m iento de un obj eto.
c. Son responsables de ga ra ntiza r q u e un o bj eto se configu re a propiadam ente en el mom ento de usarlo
por primera vez, siempre y cuando haya sido creado previamente.
d. N inguna d e l a s a nteriores.

Pregunta 2: En B l u eJ, ¿qué nos p erm ite experimenta r con expresiones Java ?

a. El Pad Code
b. El Patch Cod e
c. El Pa n Cod e
d. N inguna d e l a s a nteriores.

Pregunta 3 : Por mod u l a rización entend emos ...

a. El proceso d e d ividir u n todo en pa rtes laxa m ente d efinidas que puedan constru i rse y exa m i n a rse e n
conju nto y q u e intera ctú en d e formas bien d efi nidas.
b. El proceso d e d ivid i r un todo en pa rtes bien d efinidas que puedan constru irse y exa m i n a rse e n
conju nto y q u e intera ctú en d e formas bien d efi nidas.
c. El proceso d e d ivid i r u n todo en pa rtes bien d efi ni das q u e puedan constru irse y exa m in a rse por
separa do y q u e intera ctúen de formas bien d efi nid as.
d. N inguna d e l a s a nteriores.

Pregunta 4: Qu e remos com p i l a r el siguiente cód igo q u e se puede enco ntra r en el texto base de la asignatu ra
y q u e ha sido modifica do conve n i entemente. ¿Cuál es el resultado q u e obtenemos a l co mpilar?

1 pub 1 i c c 1 a s s Ma i 1 I t e m
2 {
3 pr ivate s t a t i c S t r i n g from;
4 p r i v a t e S t r i ng t o ;
5 p r i v a t e S t r i ng me s s a ge ;
6
7 pub 1 i c s t a t i c Ma i 1 I t em ( S t r i ng f r o m , S t ring to , S t r i ng m )
8 {
9 th i s . f r o m = f r o m ;
10 th i s . t o = t o ;
11 th i s . me s s a ge = m ;
12
13
a. El cód igo com pila s i n errores
b. Prod uce un error de com pilación en la l ínea 3.
c. Prod uce un error de com pilación en la l ínea 1 1 .
d. N inguna d e l a s a nteriores.

Pregunta 5 : Qu e remos com p i l a r el siguiente cód igo q u e se puede enco ntra r en el texto base d e la asignatu ra
y q u e ha sido mod ifica do conve n ientemente. Al compi lar, Bl u eJ nos da error d e co mpilación. ¿Qué d e beremos
ca m biar para que el progra ma com pi l e?

1 imp o r t j ava . ut i l . Ar r a y L i s t ;
2
3 pub l i e e l a s s Mu s i e O r g a n i z e r
4 {
5 p r i v a t e Ar r a yL i s t < S t r i n g> f i l e s ;
6 p r i v a t e Mu s i e P l a ye r p l a ye r ;
7
8 pub l i e Mu s i e O r g a n i z e r ()
9 {
10 f i l e s = n e w Ar r a yL i s t < S t r i n g> () ;
11 p l a y e r = n ew Mu s i e P l ay e r ( ) ;
12
13
14 pub l i e v o i d s t a r t P l a yi ng F i l e ( i n t i n de x )
15 {
16 S t r i ng f i l e n ame = f i l e s . ge t ( i n de x ) ;
17 p l a y e r . s t a rt P l ay i n g ( f i l e n ame ) ;
18
19
20 pub l i e v o i d s t op P l a y i n g ()
21 {
22 pl ayer . s top ( ) ;
23
24

a. Defin ir la clase Mu s i e P l a ye r conve n i entemente, con a l m enos l o s métodos s t op P l a y i n g ( ) y


s t a rt P l ay i n gF i l e ( i n t i n de x ) , e i m porta rla (si fuese necesa rio) media nte la instru cción
i mp o r t Mu s i e P l a ye r ;
b. Mod ifica r la l ínea 1 0 para que q u ede así: f i l e s = n e w Ar r a yL i s t < S t r i n g> ( O ) ;
c. Mod ifica r la l ínea 6 para q u e q u ede así: pub l i e Mu s i e P l a ye r p l a ye r ;
d. Hay q u e a plicar los ca m bios ind icados e n a , b y e, puesto q u e s i a lguno n o s e aplicase, e l cód igo no
com pila ría.

Pregunta 6: Queremos compilar el sigu iente cód igo q u e se puede encontra r en el texto base de la asignatura .
Al compil a r, Bl ueJ pod ría da rnos u n error en tiempo d e compila ción y/o un error en tiempo de ejecución.
¿Cómo d e be remos proceder para que el cód igo compi le y se ejecute correcta m ente?

1 pub l i e e l a s s E j e mp l o
2 {
3 pub l i e s t a t i e Ve h i e l e v ;
4 pub l i e s t a t i e C a r e ;
5 pub l i e s t a t i e B i e y e l e b ;
6
7 pub l i e s t a t i e vo i d ma i n ()
8 {
9 e = new Car ( ) ;
10 V e;
11 b = ( B i c yc l e ) e ;
12 b = ( B i c yc l e ) v ;
13 S y s t em . o u t . p r i n t l n ( " Fu n c i o n a " ) ;
14
15

a. Con i n d ependencia d e cómo d efina mos las cla ses Ve h i c l e, C a r y B i c y c l e, siem pre n o s d a rá u n
e rror en tiempo d e ejecución en l a l ínea 1 2 .
b. Con i n d ependencia de cómo d efinamos las cla ses Ve h i c l e, C a r y B i c y c l e, siem pre nos d a rá u n
e rror en tiempo d e com pilación en l a l ín ea 1 1 .
c. Si d efi nimos q u e C a r e x t e n ds Veh i c l e y q u e B i c yc l e e x t e n d s C a r, consegu imos
e l i m i n a r todos los errores del cód igo y muestra el mensaje por pa nta lla "Fu nciona".
d. Si d efi n imos q u e Veh i c l e e x t e n ds B i c y c l e y q u e C a r e x t e n ds Ve h i c l e , consegu imos
e l i m i n a r tod os los errores del cód igo y muestra el mensaje por pa nta lla "Fu nciona".

Pregunta 7 : Que remos compilar el sigu iente cód igo q u e s e puede encontra r en el texto base d e la asignatura .
¿Qué ocu rre a l com pi l a rl o con B l u eJ ?

1 imp o r t j ava . ut i l . L i s t ;
2 i n t e r f a c e Ac t o r
3
4 vo i d a c t ( L i s t <Ac t o r > n ewAc t o r s ) ;
5 b o o l e a n i s Act ive ( ) ;
6

a. Compila, no proporcionando ningún error en tiempo d e co mpilación.


b. Compila, no proporcionando n i ngún error en tiempo de co mpilación, del m ismo modo que ta m bién
com pila ría si prescind iéra mos d e l a l ínea 1.
c. N o com p i l a . Hay q u e mod ifica r la l ínea 2 q u edando d e la sigu i ente ma nera : pub l i c i n t e r fa c e
Actor
d. N o co mpila. Hay q u e mod ifica r la línea 4 q u edando de la sigu i ente m a nera : pub l i c vo i d a c t
( L i s t <Ac t o r > n ewAc t o r s ) ;

Pregunta 8 : Segú n el texto d e l a bibliografía bá sica d e la asignatura ...

a. El tipo estático d e u na va ria ble v y el tipo d i ná m ico de una va riable v co inciden siempre.
b. El tipo estático de una va ria ble v se mod ifica a utomática mente al mod ifica r el tipo d i ná m ico de la
va riable.
c. El tipo estático siempre coincide con el tipo d eclarado en la i nstru cción d e d eclaración d e la va ria ble.
d. N inguna d e l a s a nteriores.

Pregunta 9: Segú n el texto d e la bibliografía básica d e la asignatura, co n respecto a la igu aldad d e referencias
pod emos afi rmar ...

a. La igual d a d d e referencia tiene en cuenta el contenido d e los obj etos.


b. N o es posible usar la igu a l d a d de referencias para rea lizar comparaciones de ca d enas de ca racteres.
c. El m étod o e qu a l s hered a do de la clase Ob j e c t no permite comproba r q u e existe una iguald ad d e
refe rencias.
d. N inguna d e l a s a nteriores.
Pregunta 10: Queremos com p i l a r el siguiente cód igo q u e se pued e encontra r en el texto base d e la asignatura
y q u e h emos mod ifica do . ¿Qué ocu rre a l compi larlo con B l u eJ?

1 imp o r t j ava . ut i l . L i s t ;
2
3 pub l i c a b s t r a c t c l a s s An imal
4 {
5 pub l i c v o i d a c t ( L i s t <An ima l > n ewAn i ma l s , c h a r a n i ma l s ) { }
6 pub l i c s t a t i c vo i d a c t ( L i s t <A n i ma l > n ewAn ima l s , i n t a n ima l s ) ;
7 ab s t ra c t pub l i c s t a t i c v o i d a c t ( L i s t<An ima l > newAnima l s , S t r i ng a n i ma l s ) ;
8

a. Las líneas 5 y 6 provocan errores d e com pilación.


b. Las líneas 5 y 7 provocan errores de com pilación.
c. Las líneas 6 y 7 provocan errores d e com pilación.
d. Las líneas 5, 6 y 7 provoca n errores d e com pilación.

Pregunta 1 1 : Queremos com p i l a r el siguiente cód igo q u e se pued e encontra r en el texto base d e la asignatura
y q u e h emos mod ifica do . ¿Qué ocu rre a l compi larlo con B l u eJ?

1 pub l i c c l a s s E j e mp l o
2 {
3 pub l i c s t a t i c vo i d ma i n ( String [ ] args )
4 {
5 int [ ] nume r a s = n e w i n t [ ] {1,2,3};
6
7 S y s t em . o ut . p r i nt ( nume r o s ) ;
8 S y s t em . o ut . p r i nt ( nume r o s . l e n gt h ) ;
9 S y s t em . o ut . p r i nt ( nume r o s . last) ;
10 S y s t em . o ut . p r i nt ( nume r o s . first ) ;
11
12

a. Se prod uce u n error d e com pilación e n l a s l íneas 8 , 9 y 10


b. Se prod u ce u n error d e com pilación en las l íneas 9 y 10.
c. Se prod u ce un error d e com pilación en l ínea 10.
d. N inguna d e l a s a nteriores.

Pregunta 1 2 : ¿Cuál d e l a s sigu ientes opciones perm ite mod ifica r una cad ena d eclara d a como S t r i ng
i nput ; ?

a. i nput . t o Upp e r C a s e ( ) ;
b. i nput . t r i m ( ) ;
c. i nput . s t a r t sW i t h ( " h o l a " ) ;
d. N inguna d e l a s a nteriores.

Pregunta 1 3 : E n rel ación a l o s conceptos d e acoplam iento y cohesión, pod emos afi rmar ...

a. Un a lto gra do d e a cop l a m iento impl ica necesa riamente u n a lto grado d e cohesión.
b. Un bajo gra do de a copl a m i ento no impl ica necesa riam ente un a lto grado de cohesión.
c. En u n d iseño d e clases persegu imos un bajo grado d e cohesión y u n bajo acoplam iento
d. N inguna d e l a s a nteriores.
Pregunta 14: Queremos com p i l a r el siguiente cód igo que se pued e encontra r en el texto base de la asignatura
y q u e hemos mod ificado. El cód igo co mpila sin ca usar ningún error d e com pi l a ción, pero no m u estra nada
por pa nta l l a . ¿Qué falta por añadir para q u e el cód igo muestre a lgo por panta l la a l crear u n obj eto de la clase
I ma geVi e w e r dentro del entorno d e B l u eJ ?

1 imp o r t j ava . awt . * ;


2 imp o r t j av a . awt . e v e n t . * ;
3 imp o r t j avax . s w i n g . * ;
4
5 pub l i c c l a s s I ma geVi e w e r e x t e n ds J F r ame
6 {
7 pub l i c I ma geVi ewe r ( )
8 {
9 supe r ( " I ma geVi e w e r " ) ;
10 ma ke F r ame ( ) ;
11
12
13
14 p r i v a t e vo i d m a k e F r ame ( )
15 {
16 Container contentPane = getContentPane ( ) ;
17 JL ab e l l ab e l = n ew JLabe l ( " I am a l ab e l . " ) ;
18 c o n t e n t P a n e . add ( l ab e l ) ;
19
20
21

a . Añadir l a i nstrucción this.pack() en la línea 1 1 .


b. A ñ a d i r l a i nstrucción pack() en l a línea 1 9 .
c. N o h a y q u e a ñ a d i r na da . Se p u e d e ver el texto "1 a m a la bel" en pa nta l l a .
d . N inguna d e l a s a nteriores

Pregunta 1 5 : Queremos com p i l a r el siguiente cód igo q u e se pued e encontra r en el texto bas e d e la asignatura
y q u e ha sido mod ificado conven ientemente. Se prod uce u n error de com pilación. ¿Qué línea es la q u e
contiene u n e rror, ta l q u e si la mod ifica mos conve n ientemente, el cód igo com pila y no provoca ningún e rro r
d e co mpilación en B l u eJ ?
1 imp o r t j av a . i o . * ;
2
3 pub l i c c l a s s E j e mp l o
4 {
5 pub l i c s t a t i c vo i d ma i n () throws I OE x c ept i o n
6 {
7 S t r i ng f i l e n ame = n e w S t r i ng ( " E JEMPLO " ) ;
8 try {
9 t h r o w I OE x c ept i o n () ;
10
11 c a t c h ( E x c ep t i o n e )
12 S y s t e m . o ut . p r i n t l n ( " Un ab l e t o s ave t o " + f i l e n ame ) ;
13
14
15

a. El e rror está en la línea 5


b. El e rror está en la línea 7
c. El e rror está en la línea 9
d. El e rror está en la línea 11
PARTE PRÁCTICA [6,5 PUNTOS] :
La práctica del presente curso ha sido una terminal punto de venta (por sus siglas, TPV) que ha servido
para estudiar y practicar los mecanismos de la Programación Orientada a Objetos.

Definición de TPV y Características

Según la Wikipedia (www.wikipedia.org), un terminal punto de venta (cuyo acrónimo es TPV hace
referencia al dispositivo y tecnologías que ayudan en la tarea de gestión de un establecimiento
comercial de venta al público que puede contar con sistemas informáticos especializados mediante
una interfaz accesible para los vendedores.

Los TPV permiten la creación e impresión del tique de venta mediante las referencias de productos,
realizan diversas operaciones durante todo el proceso de venta, así como cambios en el inventario.
También generan diversos reportes que ayudan en la gestión del negocio. Los TPV se componen de
una parte hardware (dispositivos físicos) y otra software (sistema operativo y programa de gestión).

En nuestro caso concreto, el hadware será un ordenador tipo PC o similar y nuestro software será una
aplicación desarrollada en Java que se ejecutará sobre dicho equipo.

Funcionalidades

Los TPV permiten la implementación desde labores simples de gestión de una venta, hasta
operaciones más complejas como es la gestión de almacén o inventario, gestión de facturación o
gestión de clientes. En esta práctica, se propondrá diferentes funcionalidades para el sistema de
gestión del TPV:
• Llevar un control de diferentes elementos que existen en nuestro establecimiento. Así, los
productos habrán de estar identificados en el sistema por, al menos, los siguientes datos:
código descriptivo (por ejemplo, el código de barras), descripción, precio unitario sin IVA,
IVA aplicable, precio unitario con IVA, cantidad disponible en stock. D
• El sistema debe permitir dar de alta nuevos productos, dar de baja productos existentes así
como modificar los datos del mismo. D
• Realizar la importación y/o exportación de los productos a/desde ficheros (u otro método
similar que el alumno considere en su lugar). D
• Llevar un control de las diferentes ventas que se producen. Así, el sistema deberá llevar un
control de tickets generados, de modo que cada ticket se considerará una venta. Cada ticket
tiene que tener un código de identificador único. Una forma de generar un código único podría
ser de la forma AAAAMMDDHHMM, donde AAAA es el año en curso, MM el mes en que
se genera la venta, DD el día de la venta, HHMM las horas y minutos en las que se inicia la
venta. Asumiremos que sólo hay un TPV, por lo que no procede que haya dos ventas
simultáneas. D
• La venta consistirá en la inclusión de varios productos en una lista, generándose una línea por
cada producto vendido. Cada línea mostrará, al menos, el código del producto, la descripción
del producto, la cantidad de unidades vendidas, el precio unitario con IVA, el IVA que se le
aplica y el importe total de la venta de ese producto según el número de unidades vendidas.
D
• El proceso de venta implicará automáticamente un proceso de actualización del inventario.
De este modo, si se introduce un D código que no pertenece a ningún producto, o si se introduce
un producto que no existe en stock (o más unidades de las existentes), el programa deberá
mostrar los errores correspondientes.
• El sistema deberá permitir también introducir un producto a vender en el ticket haciendo una
búsqueda por la descripción, además de con el código que lo identifica. D
• Realizar la importación y/o exportación de los diferentes tickets de ventas a/ desde ficheros (u
otro método similar que el alumno considere en su lugar). D
• Llevar un control de los diferentes clientes que trabajan con el establecimiento comercial. Así,
los clientes habrán de estar identificados en el sistema por, al menos, los siguientes datos:
código identificativo del cliente, NIF o CIF, nombre y apellidos 1 razón social, domicilio,
fecha de alta en el sistema. D
• El sistema debe permitir dar de alta nuevos clientes, dar de baja clientes existentes así como
modificar los datos de los mismos. D
• Realizar la importación y/o exportación de los clientes a/ desde ficheros (u otro método similar
que el alumno considere en su lugar). D
• Permitir generar facturas a partir de un conjunto de tickets. Puede generar facturas agrupando
diferentes tickets siempre y cuando pertenezcan al mismo cliente y se han realizado dentro
del mismo periodo fiscal (es decir, dentro del mismo año). La información que irá en cada
factura deberá ser, al menos, la siguiente : número de la factura (identificador único), CIF del
vendedor, razón social del vendedor, fecha de emisión de la factura, datos del cliente (los
indicados con anterioridad, excepto la fecha de alta en el sistema), listado de los diferentes
productos vendidos (especificando para cada producto, el ticket en el que se encuentra, su
cantidad vendida e importe total) así como suma del total de la venta (valor total de la factura).
D
• Realizar la importación y/o exportación de las facturas a/ desde ficheros (u otro método similar
que el alumno considere en su lugar). D
• Generación de listados: se deberá implementar, al menos, la emisión de tres listados, a saber:
ventas realizadas en un intervalo de tiempo determinado agrupadas estas ventas por clientes,
ventas realizadas en un intervalo de tiempo determinado a un cliente y ranking de productos
más vendidos en un intervalo de tiempo determinado. D

a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios
para la aplicación explicada de la práctica durante el curso. Es necesario identificar la
estructura y las relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de
las clases necesarias para almacenar y gestionar esta información. Debe hacerse uso de los
mecanismos de herencia siempre que sea posible. Se valorará un buen diseño que favorezca
la reutilización de código y facilite su mantenimiento.
b) [1,0 puntos] Implementa un método (o métodos) que permitan la importación (cargar al
programa) de los diferentes tickets de ventas desde fichero (u otro método similar que el
alumno considere en su lugar). Justifíquese las opciones y decisiones que se tomen.
e) [2,0 puntos] Implementa un método (o métodos) que implementen el proceso de venta, junto
con la actualización del inventario. De este modo, si se introduce un código que no pertenece
a ningún producto, o si se introduce un producto que no existe en stock (o más unidades de
las existentes), el programa deberá mostrar los errores correspondientes. Justifíquese las
opciones y decisiones que se tomen.
d) [2,5 puntos] Proporcione un método (o métodos) que permita mostrar por pantalla un
formulario básico en modo gráfico que permita recoger los parámetros necesarios para dar
de alta un nuevo cliente en el sistema. El método deberá comprobar si el cliente existe, y si
existe, mostrar el correspondiente mensaje por pantalla. Si no existe, procederá a dar de alta
al cliente. Justifíquese las opciones y decisiones que se tomen.
UNIVERSIDAD NACIONAL. DE EDUCACIÓN A DISTANCIA � ESCUELA TÉCNICA SUPERIOR DE
INGENIERÍA INl"ORMÁTlCA
71901072 � PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA 1
TECNOLOGÍAS DE. LA INFORMACIÓN)
ruNI o/sEPTIEMBRE 20 1s � MoDE i"'. i
Lo n!IJI!�•r=-----------
No ESTÁ PERMITIDO EL USO DE MATERIAL
d.JtWt.l!LI
PARTE TEÓRICA - TEST [2,5 PUNTOS] :
Solo una de las respuestas es válida. Las respuestas correctas se puntuarán con + 1 .0, mientras que las
respondidas de manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni
positiva ni negativa en la nota.

Pregu nta 1: ¿Cuál es el resu lta do de co mpilar y ejecuta r el siguiente cód igo?

imp o r t j ava . u t i l . * ;
pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] Arg s ) {
A r r a yL i s t < S t r ing> l i s ta=new A r r a yL i s t < S t r ing> ( ) ;
l i s t a . add ( " u n o " ) ;
l i s t a . add ( " do s " ) ;
l i s t a . add ( " t re s " ) ;
for ( S t ring valor : l i s t a ) {
S y s t em . ou t . p r i n t ( " E l im i n o " +v a l o r + " - " ) ;
l i s t a . remove ( v a l o r ) ;

a. M uestra en conso l a : "Elimino u no - "


b. M uestra en conso l a : "Elimino u no - " y una exce pción del tipo ConcurrentMod ification Exce ption
c. M uestra en conso l a : "Elimino u no - Elimino dos - Elimino tres - "
d. M uestra en consola u na excepción del tipo ConcurrentMod ification Exce pti on

Pregu nta 2: ¿Cuál es el resu lta do de co mpilar y ejecuta r el siguiente cód igo?

imp o r t j ava . u t i l . * ;
pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] Arg s ) {
A r r a yL i s t < S t r ing> l i s ta=new A r r a yL i s t < S t r ing> ( ) ;
l i s t a . add ( " u n o " ) ;
l i s t a . add ( " do s " ) ;
l i s t a . add ( " t re s " ) ;
I t e r a t o r < S t r i ng> i t = l i s t a . i t e r a t o r ( ) ;
wh i l e ( i t . h a s N e x t ( ) ) {
S t r i n g v a l o r= i t . n e x t ( ) ;
S y s t em . ou t . p r i n t ( " E l im i n o " +v a l o r + " - " ) ;
i t . remove ( ) ;

a. M uestra en conso l a : "Elimino u no - "


b. M uestra en conso l a : "Elimino u no - " y una exce pción del tipo ConcurrentMod ification Exce ption
c. M uestra en conso l a : "Elimino u no - Elimino dos - Elimino tres - "
d. M uestra en consola u na excepción del tipo ConcurrentMod ification Exce pti on
Pregu nta 3: ¿Cuál de l a s siguientes afirmaciones es cierta ?

a. El térm ino a coplamiento describe l o bien q u e una u n i d a d de cód igo se corresponde co n una tarea
lógica o con u na enti d a d .
b. El término cohesión describe la interconexión de las clases.
c. Se debe tender a un acopla m iento débil.
d. Se debe tender a u n acopla m iento fu erte.

Pregu nta 4: ¿Cuál es el resu lta do de co mpilar y ejecuta r el siguiente cód igo?

pub l i c c l a s s Padre
{
p r ivate i n t x ;
pub l i c Padre ( i n t v a l o r ) { x valor; }

pub l i c c l a s s H i j o extends Padre


{
pub l i c H i j o ( ) { }

pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] Arg s ) {
H i j o h=new H i j o ( ) ;
S y s tem . ou t . p r i n t l n ( " C l a s e i n s t a n c i a da " ) ;

a. M uestra en conso l a : "Clase i nsta nciada "


b. Error d e co mpilación. Hay q u e poner s uper() en el constru ctor de la clase H ijo para acced e r al
constructor por defecto de l a clase Padre.
c. Error d e com pil ación. Hay q u e escri bi r expl ícita mente el constructor Padre() en la clase Padre.
d. Error d e co mpilación. H a y q u e poner su per() en el constru ctor de la clase H ijo para acced e r a l
constructor por d efecto de la clase Padre y h a y q u e escri bir expl ícita mente el constructor Pad re()
en la clase Padre.

Pregu nta 5: ¿Cuál es el resu lta do de co mpilar y ejecuta r el siguiente cód igo?

pub l i c c l a s s Padre
{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t l n ( " E j e c u t o e l m é t odo A de l a c l a s e Padr e " ) ;

pub l i c c l a s s H i j o extends Padre


{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t l n ( " E j e c u t o e l m é t odo A de l a c l a s e H i j o " ) ;

pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S tr ing [ ] Arg s ) {
Padre h=new H i j o ( ) ;
h . met odoA ( ) ;

a. M uestra en conso l a : "Ejecuto el método A de la clas e H ijo "


b. M uestra en conso l a : "Ejecuto el método A de la clase Padre "
c. Error de com pil ación. Tipos i ncom pati bles.
d. Ni ngu na de las a nteriores.
Pregu nta 6: ¿Cuál es el resu lta do de co mpilar y ejecuta r el siguiente cód igo?

pub l i c c l a s s Padre
{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t l n ( " E j e c u t o e l m é t odo A de l a c l a s e Padr e " ) ;

pub l i c c l a s s H i j o extends Padre


{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t l n ( " E j e c u t o e l m é t odo A de l a c l a s e H i j o " ) ;

pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s )
H i j o h=new Padre ( ) ;
i f ( h instanceof Hij o )
S y s tem . ou t . p r i n t l n ( " I n s t a n c i a de l a c l a s e H i j o " ) ;
el se
S y s tem . ou t . p r i n t l n ( " I n s t a n c i a d e l a c l a s e padr e " ) ;

a. M uestra en conso l a : "I nsta ncia de la clas e H ijo "


b. M uestra en conso l a : "I nsta ncia de la clase Padre"
c. Error d e com pil ación. Tipos i ncom pati bles.
d. Ni ngu na de las a nteriores.

Pregu nta 7: I n d ica c u a l d e las siguientes afirmaciones es correcta.

a. Declarar u n ca m po o u n método protegido (protected ) permite acceder d i recta mente a él des d e las
su bclases d i recta s o ind irecta s.
b. Declarar u n campo o u n método protegi do (protected ) perm ite acceder d i rectamente a él
ú nicamente desde las su bclases d i recta s.
c. Los miembros defi nidos como private en una su bclase son accesi bles para los objetos de otra s
clases.
d. Los miembros defi nidos como private en una su perclase son accesi bles para los objetos d e sus
su bclases.

Pregu nta 8: ¿Cuál es el resu lta do de co mpilar y ejecuta r el sigu i e nte código?

pub l i c c l a s s Padre
{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t l n ( " E j e c u t o e l m é t odo A de l a c l a s e Padr e " ) ;

pub l i c c l a s s H i j o extends Padre


{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t l n ( " E j e c u t o e l m é t odo A de l a c l a s e H i j o " ) ;

pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] args )
H i j o h= ( H i j o ) new Padre ( ) ;
i f ( h instanceof Hij o )
S y s tem . ou t . p r i n t l n ( " I n s t a n c i a de l a c l a s e H i j o " ) ;
el se
S y s tem . ou t . p r i n t l n ( " I n s t a n c i a d e l a c l a s e padr e " ) ;

a. M uestra en conso l a : "I nsta ncia de la clas e H ijo "


b. M uestra en conso l a : "I nsta ncia de la clase Padre"
c. Error d e com pil ación. Tipos i ncom pati bles.
d. Error e n tiempo d e ejecución. La nza u na exce pción ClassCa stException.

Pregu nta 9 : ¿Cuál es el resu lta do de co mpilar y ejecuta r el siguiente cód igo?

pub l i c c l a s s Padre
{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t ( " E j e c u t o e l m é t odo A de l a c l a s e Padre . ") ;

pub l i c c l a s s H i j o extends Padre


{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t ( " E j e c u t o e l m é t odo A de l a c l a s e H i j o . ") ;
sup e r . met odoA ( ) ;

pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] args )
Padre p=new H i j o ( ) ;
p . met odoA ( ) ;

a. M uestra en conso l a : "Ejecuto el método A de la clase Padre. "


b. M uestra en conso l a : "Ejecuto el método A de la clase H ijo."
c. M uestra en conso l a : "Ejecuto el método A de la clase Padre. Ejecuto el método A de la clase H ijo.
d. Ni ngu na de las a nteriores.

Pregu nta 10: ¿Cu á l es el resulta do de compi l ar y ejecuta r el sigu i e nte código?

pub l i c ab s t r a c t c l a s s Padre
{
ab s t r a c t v o i d met odoA ( ) ;

pub l i c c l a s s H i j o extends Padre


{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t ( " Mé t odo A de H i j o . ") ;

pub l i c c l a s s H i j a extends Padre


{
v o i d met odoA ( ) {
S y s t em . ou t . p r i n t ( " Mé t odo A de H i j a . ") ;

imp o r t j ava . u t i l . * ;
pub l i c c l a s s T e s t
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] args )
L i s t< P a d r e > l i s ta=new A r r a y L i s t < P a d r e > ( ) ;
l i s t a . add ( n ew H i j o ( ) ) ;
l i s t a . add ( n ew H i j o ( ) ) ;
l i s t a . add ( n ew H i j a ( ) ) ;
f o r ( I t e r a t o r< P a d r e > i t = l i s t a . i t e r a t o r ( ) ; i t . ha sNext ( ) ; ) {
Padre p= i t . n e x t ( ) ;
p . met odoA ( ) ;

a. M uestra en conso l a : "Método A de H ijo. Método A de H ijo. Método A de H ija."


b. Error d e com pil ación. No se puede i ncl u i r u n iterador dentro de u n bucle for.
c. Error d e com pil ación. La s clases H ijo e H ija deben declara rse como a bstracta s.
d. Error e n tiempo de ejecución. Es obligatorio hacer u n cast en cada elemento extra ído del Arraylist
para invocar a l método correcto

Pregu nta 11: ¿Cu á l es el resulta do de compi lar y ejecuta r el sigu i e nte código?

pub l i c ab s t r a c t c l a s s Padre
{
v o i d met odoA ( ) {
th i s . met odoB ( ) ;

ab s t r a c t v o i d met odoB ( ) ;

pub l i c c l a s s H i j o extends Padre


{
v o i d met odoB ( ) {
S y s t em . ou t . p r i n t ( " Mé t odo B de H i j o . ") ;

imp o r t j ava . u t i l . * ;
pub l i c c l a s s T e s t {
pub l i c s t a t i c v o i d m a i n ( S t r i n g [ ] args ) {
H i j o h=new H i j o ( ) ;
h . met odoA ( ) ;

a. M uestra en conso l a : "Método B de H ijo. "


b. Error d e com pil ación. No se puede i nvoca r un método abstracto desde la clase abstracta Padre
c. Error de com pil ación. La clase abstracta Padre debe declarar todos sus métodos como abstractos.
d. Ni ngu na de l a s a nteriores.

Pregu nta 12: ¿Cu á l de l a s sigui entes afirmaciones es fa lsa?

a. U n a interfaz en Java es u na especificación de u n ti po q u e no define implementación para a lguno d e


sus métodos.
b. Para que u na su bclase de una clase abstracta se transforme en concreta, d ebe proporcionar
implementaciones para todos los métodos abstractos heredados.
c. El objetivo de una clase a b stracta es servi r como una su perclase de otras clases.
d. La s llamadas a métod os de insta ncia no privados desde dentro de una su perclase siem pre se
eva l ú a n en el contexto más a m plio del tipo d i námi co del objeto.

Pregu nta 13: ¿Cu á l de l a s sigui entes afirmaciones es fa lsa?

a. La s clases i nternas a nónimas s o n u na estru ctu ra muy úti l a la hora d e i mplementar escuchas d e
su cesos.
b. U n a i nterfaz G U I se construye d ispon iendo componentes en panta l l a . Los compone ntes se
re presenta n media nte objetos.
c. Para d efi nir la colocación de los compone ntes de una G U I se utilizan gestores de d iseño gráfico.
d. U n objeto puede escu char los sucesos de l o s componentes extendiendo una clase abstracta d e
escucha de sucesos.

Pregu nta 14: ¿Cu á l de l a s sigui entes afirmaciones es fa lsa?

a. La seri a lización perm ite leer y escri bir en una ú n i ca operación o bjetos completos, pero no
jera rq u ía s de objetos.
b. Una excepción no com proba da es un tipo de exce pción cuyo uso no req u i ere n i nguna
comprobación por pa rte del co mpilador.
c. Una excepción com proba da es un tipo de exce pción cuyo uso req u i e re com probaciones ad icionales
por pa rte del compilador.
d . U n a a serción es u n e n u nciado de u n hecho q u e debe ser cierto d u ra nte la ejecución del progra m a .

Pregu nta 15: ¿Cu á l de l a s sigui entes afirmaciones es fa lsa?

a. La s pruebas son l a a ctivida d consistente en averigua r si u n fragmento de cód igo prese nta el
comporta m iento desea do .
b. U n recorrido manual es l a a ctividad consistente en a n a l izar u n segmento de cód igo línea a l ínea
mi entras que se o bserva n los cambios de esta do y otros comportami entos de la aplicación.
c. Una prueba negativa es una prueba de un caso q u e se espera q u e fu ncione correcta mente y q u e
fi n al mente no fu nciona.
d. Si l a condición definida en u na a serción es fa lsa, decimos que la aserción ha fa llado.

PARTE PRÁCTICA [ 6,5 PUNTOS] :

La práctica del presente curso ha sido una terminal punto de venta (por sus siglas, TPV) que ha
servido para estudiar y practicar los mecanismos de la Programación Orientada a Objetos.

Definición de TPV y Características

Según la Wikipedia (www.wikipedia.org), un terminal punto de venta (cuyo acrónimo es TPV hace
referencia al dispositivo y tecnologías que ayudan en la tarea de gestión de un establecimiento
comercial de venta al público que puede contar con sistemas informáticos especializados mediante
una interfaz accesible para los vendedores.

Los TPV permiten la creación e impresión del tique de venta mediante las referencias de productos,
realizan diversas operaciones durante todo el proceso de venta, así como cambios en el inventario.
También generan diversos reportes que ayudan en la gestión del negocio. Los TPV se componen de
una parte hardware (dispositivos físicos) y otra software (sistema operativo y programa de gestión).

En nuestro caso concreto, el hadware será un ordenador tipo PC o similar y nuestro software será
una aplicación desarrollada en Java que se ejecutará sobre dicho equipo.

Funcionalidades

Los TPV permiten la implementación desde labores simples de gestión de una venta, hasta
operaciones más complejas como es la gestión de almacén o inventario, gestión de facturación o
gestión de clientes. En esta práctica, se propondrá diferentes funcionalidades para el sistema de
gestión del TPV:

Llevar un control de diferentes elementos que existen en nuestro establecimiento. Así, los
productos habrán de estar identificados en el sistema por, al menos, los siguientes datos:
código descriptivo (por ejemplo, el código de barras), descripción, precio unitario sin IVA,
IVA aplicable, precio unitario con IVA, cantidad disponible en stock.

El sistema debe permitir dar de alta nuevos productos, dar de baja productos existentes así
como modificar los datos del mismo.

Realizar la importación y/o exportación de los productos a/desde ficheros (u otro método
similar que el alumno considere en su lugar).

Llevar un control de las diferentes ventas que se producen. Así, el sistema deberá llevar un
control de tickets generados, de modo que cada ticket se considerará una venta. Cada ticket
tiene que tener un código de identificador único. Una forma de generar un código único
podría ser de la forma AAAAMMDDHHMM, donde AAAA es el año en curso, MM el mes
en que se genera la venta, DD el día de la venta, HHMM las horas y minutos en las que se
inicia la venta. Asumiremos que sólo hay un TPV, por lo que no procede que haya dos
ventas simultáneas.

La venta consistirá en la inclusión de varios productos en una lista, generándose una línea
por cada producto vendido. Cada línea mostrará, al menos, el código del producto, la
descripción del producto, la cantidad de unidades vendidas, el precio unitario con IVA, el
IVA que se le aplica y el importe total de la venta de ese producto según el número de
unidades vendidas.

El proceso de venta implicará automáticamente un proceso de actualización del inventario.
De este modo, si se introduce un código que no pertenece a ningún producto, o si se
introduce un producto que no existe en stock (o más unidades de las existentes), el programa
deberá mostrar los errores correspondientes.

El sistema deberá permitir también introducir un producto a vender en el ticket haciendo una
búsqueda por la descripción, además de con el código que lo identifica.

Realizar la importación y/o exportación de los diferentes tickets de ventas a/desde ficheros
(u otro método similar que el alumno considere en su lugar).

Llevar un control de los diferentes clientes que trabajan con el establecimiento comercial.
Así, los clientes habrán de estar identificados en el sistema por, al menos, los siguientes
datos: código identificativo del cliente, NIF o CIF, nombre y apellidos 1 razón social,
domicilio, fecha de alta en el sistema.

El sistema debe permitir dar de alta nuevos clientes, dar de baja clientes existentes así como
modificar los datos de los mismos.

Realizar la importación y/o exportación de los clientes a/desde ficheros (u otro método
similar que el alumno considere en su lugar).

Permitir generar facturas a partir de un conjunto de tickets. Puede generar facturas
agrupando diferentes tickets siempre y cuando pertenezcan al mismo cliente y se han
realizado dentro del mismo periodo fiscal (es decir, dentro del mismo año). La información
que irá en cada factura deberá ser, al menos, la siguiente: número de la factura (identificador
único), CIF del vendedor, razón social del vendedor, fecha de emisión de la factura, datos
del cliente (los indicados con anterioridad, excepto la fecha de alta en el sistema), listado de
los diferentes productos vendidos (especificando para cada producto, el ticket en el que se
encuentra, su cantidad vendida e importe total) así como suma del total de la venta (valor
total de la factura).

Realizar la importación y/o exportación de las facturas a/desde ficheros (u otro método
similar que el alumno considere en su lugar).

Generación de listados: se deberá implementar, al menos, la emisión de tres listados, a
saber: ventas realizadas en un intervalo de tiempo determinado agrupadas estas ventas por
clientes, ventas realizadas en un intervalo de tiempo determinado a un cliente y ranking de
productos más vendidos en un intervalo de tiempo determinado.
a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios
para la aplicación explicada de la práctica durante el curso. Es necesario identificar la
estructura y las relaciones de herencia (mediante el uso de un diagrama de clases) y de uso
de las clases necesarias para almacenar y gestionar esta información. Debe hacerse uso de
los mecanismos de herencia siempre que sea posible. Se valorará un buen diseño que
favorezca la reutilización de código y facilite su mantenimiento.
b) [1,0 puntos] Modifique aquellas clases que considere oportunas para incluir la
funcionalidad de tener clientes VIP. A estos clientes se les aplicará un descuento del 1 0% en
todos los productos.
e) [2,0 puntos] Modifique los métodos de venta y generación de facturas para aplicar el
descuento en el precio final de cada producto en el caso en el que el cliente sea VIP.
d) [2,5 puntos] Proporcione un método (o métodos) que permitan mostrar por pantalla un
listado, en modo gráfico, de los clientes VIPs ordenados de mayor a menor en función del
gasto realizado.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA = ESCUELA TÉCNICA SUPERIOR DE.
INGENIERÍA IN"FORMÁTlCA
71 901072 � PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENlEIÚA INFQRMÁTlCA /
TECNOLOGÍAS DE. LA INFORMACIÓN}
JUNIO 2Q16 = MODELO B = O ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PUNTOS] :


El test consta de 1 4 preguntas y 2 preguntas adicionales de reserva. Solo una de las respuestas es válida. Las
respuestas correctas se puntuarán con + l . O, mientras que las respondidas de manera incorrecta se puntuarán
con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 1 4 preguntas iniciales del test
sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de alguna de
las 1 4 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso de que una
segunda pregunta de las 1 4 iniciales fuese anulada, entonces la segunda pregunta de reserva sustituiría a esta
segunda pregunta anulada. En aquellos hipotéticos casos en los que se produj ese la anulación de una tercera o
sucesivas preguntas de las 1 4 iniciales, entonces sólo en ese caso, las preguntas tercera y sucesivas anuladas
se considerarían como correctas (al no existir más preguntas de reserva que las sustituyan).

Pregunta 1 : Según el texto de la bibliografía básica de la asignatura, un ArrayList tiene las siguientes
características (indica la respuesta que NO es correcta) :
a. Puede incrementar su capacidad interna si es necesario.
b. Mantiene su propio contador del número de elementos almacenados.
c. Mantiene el orden de almacenamiento de los elementos.
d. No permite la duplicación de objetos.

Pregunta 2: Según el texto de la bibliografia básica de la asignatura, ¿cuál de las siguientes clases NO es una
colección?
a. ArrayList
b. HashSet
c. HashMap
d. ArraySet

Pregunta 3: La presencia de dos o más constructores en una clase se llama:


a. Herencia
b. Abstracción
c. Sobrecarga
d. Métodos internos

Pregunta 4: Dado el siguiente código:


1 imp o r t j ava . u t i l . Ar ra yL i s t ;
2 c l a s s P e r s on a {
3 p r i v a t e S t r i n g nomb r e ; p r i v a t e S t r i n g t e l e f o n o ;
4 pub l i c P e r s on a ( S t r i n g n , S t r i n g t ) {
5 n omb r e = n ; t e l e f o n o = t ;
6
7 pub l i c S t r i n g g e tNomb r e ( )
8 r e t u rn ( n omb r e ) ;
9
10
11 pub l i c c l a s s P r u eba {
12 p r i v a t e A r r a yL i s t < Pe r s o n a > a m i g o s new A r r a yL i s t < Pe r s o n a > ( ) ;
13
14 pub l i c P r u eba ( ) {
15 amigo s . add ( n ew P e r s on a ( " Pepe " , " 1 2 3 4 " ) ) ;
16 amigo s . add ( n ew P e r s on a ( " S a r a " , " 1 2 3 6 " ) ) ;
17
18 pub 1 i c v o i d b o r r a rAmi g o ( S t r i n g nomb r e ) {
19 f o r ( Pe r s o n a p : amigo s ) {
20 i f ( p . g e tNomb r e ( ) . equ a l s ( n omb r e ) )
21 amigo s . r emove ( p ) ;
22 S ys t em . ou t . p r i n t l n ( "Ami g o b o r rado " ) ;
23
24
25
26
¿Cuál es el resultado de compilar 1 llamar el método bo r ra rAm igo ( " S a r a " ) ?
a. Se produce un error de compilación.
b. Se produce una excepción durante la ej ecución
c. Se produce un aviso(warning) durante la ej ecución
d. Se imprime por pantalla el mensaje: Amigo borrado y no se genera error o excepción alguno

Pregunta 5: Según el texto de la bibliografia básica de la asignatura, el estado de un objeto se denomina:


a. El conjunto de parámetros que recibe y devuelve un objeto.
b. El conjunto de valores de todos los atributos que definen al objeto.
c. El conjunto de campos y métodos que componen el objeto.
d. Ninguna de las anteriores.

Pregunta 6: ¿Cómo se activan por primera vez las herramientas de prueba de JUnit en BlueJ?
a. No es necesario, ya vienen activadas.
b. Con el botón derecho, seleccionando Activar (Activate) JUnit
c. A través de la pestaña Miscelánea (Miscellaneous) del cuadro de diálogo Preferencias (Preferences).
d. A través del menú.

Pregunta 7: Según el texto de la bibliografia básica de la asignatura, ¿qué es una aserción? :


a. Una expresión que establece una condición que esperamos que sea cierta.
b. Una expresión que resume la función de un método.
c. Una instrucción que prueba la validez de una función.
d. Ninguna de las respuestas anteriores.

Pregunta 8: Si simplificamos el ejemplo PhotoPost del libro de la asignatura de la siguiente manera:


1 pub l i c c l a s s P o s t {
2 p rivate S t ring usua r i o ;
3
4 pub l i c P o s t ( ) { }
5 pub l i c P o s t ( S t r i n g au t o r )
6 u s u a r i o = au t o r ;
7
8
9 c l a s s Pho t o P o s t extends P o s t
10 p rivate S t ring f i l e ;
11
12 pub l i c Pho t o Po s t ( S t r i n g au t o r , S t ring f i l e ) {
13 XXX
14 th i s . f i l e = f i l e ;
15
16

¿Qué tendremos que añadir a la línea 1 3 , en vez de XXX, para asignar el valor de autor a variable usuario en
la clase Post?:
a. super ( ) ;
b. u s u a r i o = au t o r ;
c. s u p e r ( au t o r ) ;
d. supe r . u s u a r i o = au t o r ;

Pregunta 9 : Según e l texto de la bibliografía básica de l a asignatura, caracterizan los campos, constructores y
métodos de la siguiente forma:
l. . . . implementan el comportamiento de un objeto.
2. . . . almacenan datos de manera persistente dentro de un obj eto.
3. . . . son responsables de garantizar que un objeto s e configure apropiadamente a crearlo por primera vez.

¿Qué definición corresponde con que término?


a. Campos = 1 , Constructores = 2, Métodos = 3.
b . Campos = 2 , Constructores = 1 , Métodos = 3.
c . Campos = 2 , Constructores = 3, Métodos = l.
d. Campos = 3, Constructores = 2, Métodos = l.

Pregunta 10: Dado el siguiente fragmento de código del ejemplo del libro Image Viewer:
1 p r i v a t e vo i d ma keMenuBa r ( JF r ame f r ame ) {
2 f i n a l i n t S HORTCUT MAS K =
3 T o o l ki t . g e t D e f au l t T o o l ki t ( ) . ge tMen u S h o r t c u tK e yMa s k ( ) ;
4
5 JMe n u B a r menubar = new JMe n u B a r ( ) ;
6 f r ame . s e t JMenuB a r ( menuba r ) ;
7
8 JMenu menu ;
9 JMenu i t em i t e m ;
10
11 / / g e n e r a r menú de p r e f e r e n c i a s
12 XXX

Si se quisiera añadir una nueva entrada en la barra de menús con el nombre Preferencias, ¿que habrá que añadir
en la línea 1 3 en vez de XXX? :
a. menu = new JMenuitem("Preferencias"); menubar.add(menu);
b. menu = new JMenu("Preferencias"); frame.add(menu);
c. menu = (Jmenu)new JMenuitem("Preferencias"); menubar.add(menu);
d. menu = new JMenu("Preferencias"); menubar.add(menu);

Pregunta 11: Según el texto de la bibliografia básica de la asignatura, para crear una representación de un
objeto en forma de String tenemos que implementar el método:
a. getString()
b. toString()
c. printString()
d. parseString()

Pregunta 12: Se quiere proporcionar dos constructores en la clase del reloj ClockDisplay del libro para iniciar
el reloj de dos formas diferentes (fijando las horas y los minutos y fijando los minutos y los segundos) :

1 pub l i c C l o c k D i s p l a y ( i n t hou r , i n t m i nu t e )
2 {
3 hou r s = new Numbe r D i s p l a y ( 2 4 ) ;
4 m i nu t e s = new Numbe r D i s p l a y ( 6 0 ) ;
5 s e conds = new Numbe r D i s p l a y ( 6 0 ) ;
6 s e t T ime ( hou r , m i nu t e , s e c o n d ) ;
7 th i s . h o u r = hou r ;
8 th i s . m i n u t e m i nu t e ;
9 th i s . s e cond = O ;
10
11
12 pub l i c C l o c k D i s p l a y ( i n t m i nu t e , int s econd)
13 {
14 hou r s = new Numbe r D i s p l a y ( 2 4 ) ;
15 m i nu t e s = new Numbe r D i s p l a y ( 6 0 ) ;
16 s e conds = new Numbe r D i s p l a y ( 6 0 ) ;
17 s e t T ime ( hou r , m i nu t e , s e c o n d ) ;
18 th i s . h o u r = O ;
19 th i s . m i n u t e = m i nu t e ;
20 th i s . s e cond s econd;
21

¿Cuál es el resultado de compilar 1 llamar al constructor con los valores 2 y 1 5?


a. Generamos un objeto ClockDisplay con la hora 02: 1 5:00
b. Generamos un objeto ClockDisplay con la hora 00:02: 1 5
c. Tanto la respuesta a como la b son posibles.
d. Se produce un error de compilación en la línea 1 2 .

Pregunta 1 3 : Para definir una nueva clase de excepción, como s e h a hecho en e l ejemplo AddressBook del
libro, se hace de la siguiente forma:
1 pub 1 i c c 1 a s s NoMa t c h i n gD e t a i 1 sExcept i o n extends XXX {
2 p r i v a t e S t r i n g ke y ;
3
4 pub 1 i c NoMa t c h i ngDe t a i 1 sExcept i o n ( S t r i n g ke y ) {
5 th i s . k e y = ke y ;
6

¿Que habrá que añadir en la línea 1 3 en vez de XXX para declarar correctamente la nueva clase? :
a. RunException
b. Exception
c. IOException
d. java.util.Exception

Pregunta 14: Si se quiere insertar el siguiente método en la clase de la máquina expendedora de billetes, ¿cuál
es el resultado de compilar 1 ej ecutar el método con un valor de coste de 50?
1 pub 1 i c v o i d p roba r D i n e r o ( i n t di n e ro )
2 {
3 i f ( di n e ro = 5 0 ) {
4 S ys t e m . ou t . p r i n t l n ( " No s e adm i t e n b i l l e t e s d e 5 0€ . " ) ;
5
6 else
7 S ys t em . ou t . p r i n t l n ( " I mp r e s i ón de b i l l e t e en c u r s o . " ) ;
8
9

a. Se produce un error de compilación en la línea 3 .


b. S e produce un error de ejecución en l a línea 4 .
c. S e imprime por pantalla e l mensaje: N o s e admiten billetes de 50€.
d. Se imprime por pantalla el mensaje: Impresión de billete en curso.

Reserva 1 : Supongamos que reescribimos una parte de la simulación de los zorros y los conej os del libro de
la forma que se muestra a continuación:
1 imp o r t j ava . u t i l . L i s t ;
2 pub l i c ab s t ra c t c l a s s An imal
3
4 pub l i c An imal ( ) { }
5
6 ab s t ra c t pub l i c v o i d a c t ( L i s t<An ima l > newAn ima l s ) ;
7 p r o t e c t e d v o i d i sA l i ve ( ) { }
8 protected void s etDead ( ) { }
9
10
11 c l a s s Rabb i t extends An imal {
12
13 XXX
14 p r i v a t e v o i d i n c r ementAge ( ) { }
15 p r i v a t e v o i d giveB i rth ( L i s t<An ima l > newRabb i t s ) { }
16

¿Qué tendremos que añadir a la línea 1 3 , en vez de XXX para que el código no genere un error de
,
compilación?:
a . pub l i c Rabb i t ( ) ;
b. pub l i c v o i d a c t ( L i s t<An ima l > newRabb i t s ) { }
c. pub l i c v o i d a c t ( L i s t<An ima l > newRabb i t s ) ;
d. El código se compilará sin ningún error de todas formas.

Reserva 2: Según el texto de la bibliografia básica de la asignatura, ¿cómo se usa instanceofpara averiguar si
el tipo dinámico de un objeto (miobj) es de una cierta clase (MiClase)?
a. MiClase.instanceof(miobj)
b. java.lang.Object.instanceof(miobj, MiClase)
c. miobj instanceof MiClase
d. Object.instanceof(miobj, MiClase)

PARTE PRÁCTICA [6,5 PUNTOS] :


La Práctica del presente curso va a consistir en diseñar e implementar un sistema integrado de gestión
de una biblioteca (a partir de ahora, SIGB). Han existido versiones sencillas de estos sistemas incluso
antes de la existencia de los computadores, donde se almacenaba información sobre los materiales de
la biblioteca (por aquél entonces, libros, revistas, periódicos) en fichas en formato papel, guardadas
en cajones clasificados. El primer paso hacia la informatización de estos sistemas, hacia lo que hoy
en día es un SIGB, tuvo lugar en 1 936 en la Universidad de Texas, donde la información sobre los
libros estaba representada en tmjetas perforadas y cargada en su computador central. Con el avance
de la informática a lo largo de los años, el manejo de los recursos de una biblioteca, a través de
sistemas integrados de gestión, se ha podido llevar a cabo con una amplia gama de dispositivos, desde
terminales tontas hasta teléfonos móviles.

Funcionalidades

Un SIGB proporciona las siguientes funcionalidades:


• Añadir nuevos materiales a la colección de la biblioteca (rellenando los datos de un
formulario). Cada tipo de material debería tener su propia colección (libros, revistas,
periódicos, audio, video, etc.).
• Borrar materiales de la colección.
• Realizar búsquedas sencillas sobre los materiales.
• Gestionar suscripciones a revistas y periódicos.
• Gestión de usuarios : altas, bajas, generación de tmjetas, historiales de préstamo, control de
acceso (diferenciar entre dos perfiles : usuarios y bibliotecarios).
• Realización básica de Préstamos: prestar un material si está disponible en la biblioteca, asignar
fechas de devolución.
• Producir listados de préstamos según el tipo de material.
• Realizar búsquedas flexibles sobre los materiales en la biblioteca combinando varios campos
de búsqueda.
• Control de préstamos : número máximo de ítems de préstamo (6 por usuario, independiente de
tipo de material), emisión de avisos de materiales fuera de plazo, gestión de multas, etc.
• Producir listados de los materiales prestados.
• Realizar búsquedas flexibles sobre los materiales en varias bibliotecas a la vez combinando
varios campos de búsqueda.
• Préstamos entre bibliotecas: poder solicitar materiales a otras bibliotecas y procesar las
solicitudes de otras bibliotecas. El procesamiento de dichas solicitudes se lleva a cabo usando
archivos de solicitud de la siguiente manera:
o Preparar y exportar una lista de solicitudes de materiales que se quiere hacer a una
biblioteca. Se prepara la lista usando un formulario para identificar el nombre de la
biblioteca, el nombre del libro, el autor y el nombre de esta biblioteca. Una vez
terminado, se guardar la lista en un archivo de texto. No es necesario en esta práctica
preocuparse de cómo se enviaría el archivo a otras bibliotecas.
o Importar y procesar un archivo de solicitudes para materiales proveniente de otra
biblioteca. Se debe actualizar el estatus de cada material para marcarse como prestado,
pero en vez del identificador del usuario debería aparecer el identificador de la
biblioteca.
• Control de reservas: poder reservar un material si está ya prestado, gestión de avisos (al
usuario con el material que convendría devolverlo porque hay alguien esperando y al usuario
con la reserva cuando el material ya esta devuelto).

a) [1 punto] Diseñar utilizando el paradigma orientado a objetos, los elementos necesarios para
la aplicación explicada de la práctica durante el curso. Es necesario identificar la estructura y
las relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de las clases
necesarias para almacenar y gestionar esta información. Debe hacerse uso de los mecanismos
de herencia siempre que sea posible. Se valorará un buen diseño que favorezca la reutilización
de código y facilite su mantenimiento.
b) [1 punto] Implementar el método que permite producir listados de préstamos según el tipo
de material. Justifíquese las opciones y decisiones que se tomen.
e) [2 puntos] Implementar la funcionalidad de la preparación y exportación de una lista de
solicitudes que se quiere hacer a una biblioteca como parte del préstamo entre bibliotecas.
Justifíquese las opciones y decisiones que se tomen.
d) [2,5 puntos] Se quiere añadir una cafetería a la biblioteca para que los clientes puedan tomar
algo mientras miran los libros, revistas o periódicos. Se quiere utilizar el sistema de gestión
de la biblioteca para gestionar la compra y venta de los productos de la cafetería. Indique los
cambios que serían necesarios en el diseño y la implementación para permitir esa nueva
funcionalidad.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA = ESCUELA TÉCNICA SUPERIOR DE.
INGENIERÍA IN"FORMÁTlCA
71 901072 � PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENlEIÚA INFORMÁTICA /
TECNOLOGÍAS DE. LA INFORMACIÓN}
JUNIO 2016 = MODELO C = NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PUNTOS] :


El test consta de 1 4 preguntas y 2 preguntas adicionales de reserva. Solo una de las respuestas es válida. Las
respuestas correctas se puntuarán con + l . O, mientras que las respondidas de manera incorrecta se puntuarán
con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 1 4 preguntas iniciales del test
sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de alguna de
las 1 4 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso de que una
segunda pregunta de las 1 4 iniciales fuese anulada, entonces la segunda pregunta de reserva sustituiría a esta
segunda pregunta anulada. En aquellos hipotéticos casos en los que se produj ese la anulación de una tercera o
sucesivas preguntas de las 1 4 iniciales, entonces sólo en ese caso, las preguntas tercera y sucesivas anuladas
se considerarían como correctas (al no existir más preguntas de reserva que las sustituyan).

Pregunta 1: ¿ De q u é forma podemos invocar un método en el I D E Bl ueJ?


a . H aciendo di e c o n el botó n derecho del ratón en u n o bj eto, y seleccionando en el m e n ú emergente el
método correspondiente.
b. H aciendo die con el botón derecho del ratón en una clase, y sel eccionando en el menú emergente el
método correspondiente.
c. H aciendo d ie con el botó n derecho del ratón en un obj eto o clase ind istintamente, y seleccionando e n el
m e n ú e me rgente el método correspondiente.
d . N i nguna d e l a s a nteriores.

Pregunta 2 : Segú n el texto d e l a bibliografía básica d e la asignatu ra, ¿cuál d e l a s sigu ientes afirmaciones N O
es correcta?
a . Los campos a l m acenan datos d e manera no persistente d entro de u n o bj eto.
b. Los constructores son responsa bles de gara ntizar que un o bj eto s e configu re apropiadamente e n el
momento d e crearlo por prim era vez.
c. Los métodos implementan el co mporta m iento de un obj eto; proporcionan s u funcionalidad.
d. N i nguna d e las a nteriores.

Pregunta 3: Queremos compilar el siguiente cód igo que se puede enco ntrar en el texto base d e la asignatu ra
y q u e ha sido modificado convenientemente. ¿Cuál es e l resu ltado q u e o btenemos al compilar?
1 pub l i c c l a s s P r u e b a
2 {
3 pub l i c s t a t i c vo i d ma i n ( S t r i ng a r g s [ ] )
4 {
5 String cadenal = " e j emPLO " ;
6 String cadena2 = " E JEMPLO " ;
7 c a d e n a l . t o Upp e r C a s e ( ) ;
8
9 if ( c a d e n a l . e qu a l s ( ca de na 2 ) )
10
11 S y s t e m . ou t . p r i n t l n ( " S o n i g u a l e s " ) ;
12
13 else
14
15 S y s t e m . ou t . p r i n t l n ( " S o n di f e re n t e s " ) ;
16
17
18

a. Se produce u na excepción y la ejecución fa l l a .


b. Se i mprime p o r panta l l a e l m ensaje: S o n iguales.
c. Se i mprime por panta l l a e l m ensaje: Son d iferentes.
d. N i nguna d e l a s a nteriores.

Pregunta 4 : Según el texto d e la bibl iografía básica d e la asignatu ra, ¿ q u é d e b i l itaría la encapsulación?
a . Em plear e l acceso protegido a l o s métodos d e una clase.
b. Em plear e l acceso protegido a los cam pos de una clase.
c. Em plear e l acceso protegido a los co nstructores de una clase.
d. N i nguna d e las a nteriores.

Pregunta 5 : Supongamos q u e reescri bimos el ejemplo B o u n c i ngBa 1 1 d e l l ibro de la forma en q u e se


m uestra a contin uación:
1 pub 1 i c c 1 a s s Boun c ingB a 1 1 {
2 int n ;
3 pub 1 i c s t a t i c vo i d ma i n ( S tring args [] )
4 {
5
6 if ( n ! =O )
7
8 n = n + 1;
9 S ys t em . ou t . p r i n t 1 n ( " E 1 nóme r o e s " + n ) ;
10
11
12

El programa no compila. ¿Qué podemos cam biar para q u e funcione correctamente?


a. Sustitu i r la línea 2 por l a siguiente: i n t n = O ;
b. I nsertando e n l a l ínea 5 lo siguiente: n = O ;
c. Sustitu i r la línea 3 por lo siguiente: pub 1 i c s t a t i c vo i d ma i n ( )
d . N i nguna d e l a s a nteriores.

Pregunta 6 : Se a el siguiente cód igo modificado d e la clas e Mu s i cO r ga n i z e r mostrada en el l i bro base:

1 imp o r t j ava . u t i 1 . * ;
2 pub 1 i c c 1 a s s Mu s i c O r ga n i z e r
3 pub 1 i c s t a t i c vo i d ma i n ( S t r i n g a r g s [ ] ) {
4 A r r a yL i s t < S t r i n g > a = n ew A r r a y L i s t (5 ) ;
5 f o r ( i n t i = O ; i <= 5 ; i + + )
6 {
7 a . a dd ( " Ho 1 a " ) ;
8
9 S y s t em . o u t . p r i n t 1 n ( " Fu n c i o n a " ) ;
10
11

La com pilación pro d uce u n warning. ¿Cómo podemos resolver ese pro blema?
a. Sustituyendo l a línea 4 por: A r r a y L i s t a = n ew A r r a y L i s t ( 5 ) ;
b. Sustituyendo la línea 4 por: A r r a y L i s t a = n ew A r r a y L i s t < S t r i ng> ( 5 ) ;
c. Sustituyendo la línea 4 por: A r r a y L i s t < S t r i ng> a = new A r r a yL i s t < S t r i n g > (5) ;
d. Tanto ( a ) como ( e ) res uelven el problema.

Pregunta 7 : Queremos compilar el sigu iente código que se puede encontrar en el texto base d e la asignatu ra,
conve n i enteme nte mod ificado. ¿Qué ocurre a l com pilarlo con Bl ueJ ?

1 imp o r t j ava . u t i l . L i s t ;
2 pub l i c a b s t r a c t c l a s s An i m a l
3 {
4 p r i v a t e b o o l e a n a l ive ;
5 private S t r i n g f i e l d ;
6 p r i v a t e S t r i n g l o c at i o n ;
7
8 pub l i c ab s t r a c t A n i ma l ( S t r i ng f i e l d , S t r i n g l o c at i o n )
9 {
10 a l ive = t ru e ;
11 th i s . f i e l d = f i e l d ;
12 th i s . l o ca t i o n = l o ca t i o n ;
13
14
15 ab s t ra c t pub l i c v o i d a ct ( L i s t <A n i ma l > n e wAn imal s ) ;
16

a. Com pila, no proporcionando ni ng ú n e rro r en tiempo d e compilación.


b. No compila. Se soluciona s ustituyendo la l ínea 15 por la sigui ente: pub l i c vo i d
a ct ( L i s t <A n i ma l > n e wAn imal s ) ;
c. No com pila. S e sol uciona s ustituyendo la línea 15 por la sigui ente: pub l i c ab s t ra c t void
a ct ( L i s t <A n i ma l > n e wAn imal s ) ;
d. N i nguna d e l a s a nteriores.

Pregunta 8 : Segú n el texto d e l a bibliografía básica de la asignatu ra, las s u bclases d e E r r o r suelen esta r
reservadas para ...
a . Los e rrores d el sistema en tiem po d e ejecución.
b. Los e rrores del sistema en tiem po de compilación.
c. Los e rrores d e programación en tiempo d e com p ilación.
d. N i nguna d e las a nteriores.

Pregunta 9 : Según el texto d e la bibl iografía básica d e la asignatu ra, ¿cuál es el método i mprescindible y q u e
ha d e i m pl ementarse siem pre d e l a i nterfaz S e r i a l i z ab l e cuando queremos implementar la
serial ización?
a . El métod o I OWrite.
b. El métod o l n putOutputWrite.
c. El métod o WriteOutput.
d. N i nguno d e los a nteriores.

Pregunta 10: Queremos com p i l a r el siguiente cód igo que se puede encontrar en el texto base de la asignatu ra
y q u e ha sido conven ientemente mod ificado. El programa compila sin problemas pero no m uestra por
pantal l a e l texto "Ejemplo de texto". ¿ Qué tend ríamos que añad i r / modificar para se mostrase?

1 imp o r t j ava . awt . * ;


2 imp o r t j ava . awt . e v e n t . * ;
3 imp o r t j avax . s w i n g . * ;
4
5 pub l i c c l a s s ImageVi e w e r
6 {
7 p r i v a t e J F r ame f r ame ;
8 pub l i c ImageVi ewe r ( ) {
9 ma k e F r ame ( ) ;
10
11
12 p r i v a t e v o i d make F r ame ( ) {
13 f r ame = n e w J F r ame ( " I ma geVi e w e r " ) ;
14 C o n t a i n e r c o n t e nt P a n e = f r ame . g e t C o n t e n t P a n e ( ) ;
15 JLab e 1 1 a b e 1 = n e w JL ab e 1 ( " E j emp 1 o de t e x t o " ) ;
16 c o n t e n t P a n e . a dd ( 1 ab e 1 ) ;
17 f r ame . s etVi s i b 1 e ( t rue ) ;
18
19

a. A ñ ad ir e ntre las líneas 9 y 1 0 l o siguiente: f r ame . s e tVi s i b 1 e ( t ru e ) ; y eliminar la l ínea 17.


b. Añadir e ntre las líneas 15 y 1 6 lo siguiente: f r ame . pa c k ( ) ;
c. Añadir e ntre las líneas 16 y 17 lo siguiente: f r ame . pa c k ( ) ;
d. Sustitu i r la línea 17 p o r l o siguiente: f r ame . p a c k ( ) ;

Pregunta 11: Según el texto d e l a bibl iografía básica de la asignatura, ¿ q u é d efine e l térmi no acoplamiento?
a . L a bondad d e la correspondencia e ntre una u n i d a d d e código y una tarea lógica o e ntidad.
b. La interco nexión existente entre clases, busca ndo un acoplamiento lo menor posi ble.
c. La capacid ad d e u n obj eto d e comportarse como otra clase d e la cual proviene.
d. N i nguna d e las a nteriores.

Pregunta 12: Sea el siguiente fragmento de código modificado de la clase Ma i 1 I tem mostrada en e l l i bro
de texto:

1 p u b 1 i c c 1 a s s Ma i l i t e m {
2 s t a t i c S t r ing f rom ;
3 s t a t i c S t r ing t o ;
4 s t a t i c S t r ing me s s age ;
5 i n t numb e r ;
6
7 p u b 1 i c s t a t i c v o i d ma i n ( S t ri n g a r g s [ ] )
8 Mai 1 I tem m = new Ma i 1 I tem ( " Ho 1 a " , "Adi o s " , " Lu e go " , 3) ;
9 S ys t em . o u t . p r i n t 1 n ( " Func i on a " ) ;
10
11
12 p ub 1 i c Ma i l i t e m ( S t r i n g f r om , S tring to , S t r i n g me s s ag e , i n t numb e r ) {
13 t hi s . f rom = f rom ;
14 thi s . to = t o ;
15 thi s . me s s ag e = me s s ag e ;
16 thi s . numb e r = numbe r ;
17
18

¿Cuál e s e l resu ltado d e ejecutar e l código?


a. Se produce un e rror de com p i lación
b. Se produce un e rror de ejecución en la línea 9.
c. Se produce un e rror de ejecución en la línea 16.
d . N i nguna d e l a s a nteriores.

Pregunta 13: Seg ú n el texto d e l a bibliografía básica d e la asignatura, ¿qué podemos afirmar sobre las pruebas
d e regresión?
a . L a modificación d e software aca rrea co n m ucha facil idad errores adicionales d e softwa re.
b. Las pruebas de regresión sobre un módulo determinado tras haberse hecho una modificación del cód igo
pueden o bvia rse si no se rea l izan ca m bios en ese módulo.
c. Los marcos d e regresión perm iten a utom atizar las pruebas d e regresión.
d . Si no se a utomatizan, es m á s probable q u e l a s pruebas d e regresión se l l even a cabo.

Pregunta 14: Según el texto de la bibl iografía básica de la asignatura, ¿ q u é podemos afirmar sobre el concepto
de s ustitución?
a. Pueden utilizarse o bj etos d e u n s u perti po en cualqui er l ugar en el q u e se espera objetos d e u n s u btipo.
b. Permite crear o bj etos de u n clase que es a bstracta.
c. Permite q u e una va riable a l m acena obj etos de d iferentes ti pos (en concreto, del tipo d eclarado o de
cualquier su perti po del tipo declarado).
d. N i nguna d e las a nteriores

RESERVA 1 : Si un a clase B extiende u na clase abstracta A que tiene u n método a bstracto me t, ¿qué podemos
afi rmar?
a. Que n ecesariamente B es a bstracta.
b. Que s i B i m plementa el método m et, ento nces seguro que B no es a bstracta.
c. Que no se pueden crear i nstancias de A.
d . Que puedo crear insta ncias d e A.

RESERVA 2: Seg ú n el texto de l a bibliografía básica de la asignatura, ¿qué puede usarse para genera r la
d escripción d e las interfaces d e las clases a partir del código fuente?
a. J D K
b . J U nit
c. Code Pad
d. N i nguna d e las a nteriores

PARTE PRÁCTICA [6,5 PUNTOS] :


La Práctica del presente curso es diseño e implementación de un sistema integrado de gestión
de una biblioteca (a partir de ahora, SIGB). En general, las funciones que tienen un SIGB son varias
según el perfil de su usuario (que va desde el usuario de la biblioteca hasta su director) e incluyen las
siguientes:
• Adquisiciones: la compra de materiales (libros en diferentes formatos, audiolibros, CDs de música,
películas en DVD, etc.), gestión de compras, facturación, etc.
• Catalogar: la clasificación e indexación de los materiales de la biblioteca.
• Préstamos: prestar los materiales a los usuarios (tanto en papel como en otros formatos), reservas
de materiales ya en préstamos, control de préstamos (emisión de avisos de materiales fuera de plazo),
gestión de multas.
• Suscripciones: gestión de las suscripciones a revistas y periódicos.
• Catálogo en línea u OPAC (del inglés Online Public Access Catalog) : interfaz pública a los servicios
de la biblioteca (búsquedas, gestión de prestamos, etc.).
• Gestión de usuarios: altas, bajas, generación de tmjetas, historiales.

Funcionalidades

Los SIGB permiten la implementación desde labores simples de gestión de una alta de usuario, hasta
operaciones más complejas como es la gestión de préstamos o inventario. En esta práctica, se
propondrán diferentes funcionalidades para el sistema de gestión bibliotecaria:
• Añadir nuevos materiales a la colección de la biblioteca (rellenando los datos de un formulario).
Cada tipo de material debería tener su propia colección (libros, revistas, periódicos, audio, video,
etc.).
• Borrar materiales de la colección.
• Realizar búsquedas sencillas sobre los materiales.
• Gestionar suscripciones a revistas y periódicos.
• Gestión de usuarios: altas, bajas, generación de tmjetas, historiales de préstamo, control de acceso
(diferenciar entre dos perfiles: usuarios y bibliotecarios).
• Realización básica de Préstamos : prestar un material si está disponible en la biblioteca, asignar
fechas de devolución.
• Producir listados de préstamos según el tipo de material.
• Realizar búsquedas flexibles sobre los materiales en la biblioteca combinando varios campos de
búsqueda.
• Control de préstamos : número máximo de ítems de préstamo (6 por usuario, independiente de
tipo de material), emisión de avisos de materiales fuera de plazo, gestión de multas, etc.
• Producir listados de los materiales prestados.
• Realizar búsquedas flexibles sobre los materiales en varias bibliotecas a la vez combinando varios
campos de búsqueda.
• Préstamos entre bibliotecas: poder solicitar materiales a otras bibliotecas y procesar las solicitudes
de otras bibliotecas. El procesamiento de dichas solicitudes se lleva a cabo usando archivos de
solicitud de la siguiente manera:
o Preparar y exportar una lista de solicitudes de materiales que se quiere hacer a una
biblioteca. Se prepara la lista usando un formulario para identificar el nombre de la
biblioteca, el nombre del libro, el autor y el nombre de esta biblioteca. Una vez terminado,
se guardar la lista en un archivo de texto. No es necesario en esta práctica preocuparse de
cómo se enviaría el archivo a otras bibliotecas.
o Importar y procesar un archivo de solicitudes para materiales proveniente de otra
biblioteca. Se debe actualizar el estatus de cada material para marcarse como prestado,
pero en vez del identificador del usuario debería aparecer el identificador de la biblioteca.
• Control de reservas: poder reservar un material si está ya prestado, gestión de avisos (al usuario
con el material que convendría devolverlo porque hay alguien esperando y al usuario con la
reserva cuando el material ya está devuelto).

a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios para
la aplicación explicada de la práctica durante el curso. Es necesario identificar la estructura y las
relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de las clases necesarias
para almacenar y gestionar esta información. Debe hacerse uso de los mecanismos de herencia
siempre que sea posible. Se valorará un buen diseño que favorezca la reutilización de código y
facilite su mantenimiento.
b) [1,5 puntos] Implementa un método (o métodos) que permitan la importación (cargar al
programa) de los diferentes usuarios que hay en el sistema de gestión de biblioteca. Justifíquese
las opciones y decisiones que se tomen.
e) [3,0 puntos] Implementa un método (o métodos) que implementen el proceso devolución de un
préstamo. Deberá tenerse en cuenta las implicaciones que un préstamo puede acarrear: sanciones
(si se entrega fuera de plazo), actualización de ficheros que contienen los préstamos (indicar la
solución que se plantea en este caso), actualización de las reservas que haya sobre ese libro, etc.
Justifíquese las opciones y decisiones que se tomen.
d) [1,0 puntos] Proporcione un método (o métodos) que permita mostrar por pantalla un formulario
básico en modo gráfico que permita generar las estadísticas de los préstamos que se encuentran
almacenados en un fichero. La pantalla permitirá elegir entre dos listados: libros más prestados,
usuarios más activos (con mayor número de préstamos). Pedirá un rango de fechas y aplicará ese
criterio a la hora de buscar los contenidos en los ficheros. Los mostrará por pantalla de mayor a
menor. Se pide expresamente la parte gráfica. El objetivo es ver el conocimiento y destreza en el
uso de las librerías Swing y/o AWT. No desarrolle código asociado a la funcionalidad del
préstamo. Justifíquese las opciones y decisiones que se tomen.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA
71 901 072 - PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA 1 TECNOLOGÍAS DE LA
INFORMACIÓN �

PARTE TEÓRICA - TEST [2,5 PU NTOS] :


El test consta de 1 4 preguntas y 2 preguntas adicionales de reserva. Solo una de las respuestas es válida. Las
respuestas correctas se puntuarán con + l . O, mientras que las respondidas de manera incorrecta se puntuarán
con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 1 4 preguntas iniciales del test
sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de alguna de
las 1 4 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso de que una
segunda pregunta de las 1 4 iniciales fuese anulada, entonces la segunda pregunta de reserva sustituiría a esta
segunda pregunta anulada. En aquellos hipotéticos casos en los que se produjese la anulación de una tercera
o sucesivas preguntas de las 1 4 iniciales, entonces sólo en ese caso, las preguntas tercera y sucesivas
anuladas se considerarían como correctas (al no existir más preguntas de reserva que las sustituyan).

Pregunta 1 : Indica c u a l de l a s siguientes afirmaciones es correcta :


a. L a signatu ra está fo rmada p o r los parámetros d e u n método y proporciona la i nformación necesaria
para i nvocarlo.
b. La signat u ra es el encabezado d e u n método y puede tener parámetros para proporcionar
información a dicional para realiza r u na tarea.
c. La signat u ra es el encabezado de un método y proporciona la información necesaria para i nvocarlo.
d . La signatura es el nom bre d e u n m étodo y puede tener parámetros para proporcionar i nfo rmación
a d icional para rea l izar una tarea.

Pregunta 2: I n d i q u e el o rden seguido en los ejemplos del texto d e la bibliografía básica d e la asignatu ra e n
cuanto a l a parte interna d e u na clase:

publ i c c l a s s NornbreClase
{
PARTE INTERNA DE UNA CLASE

a. Constructores, M étodos y Campos


b. M étodos, Constructores y Campos
c. Campos, Constructores y M étodos
d. Campos, M étodos y Constructores

Pregunta 3 : Dado el sigui ente fragmento de cód igo :

int A = 9 ;
float B = 3 . 3 F ;
char e = � vJ i ;

S y s t em . out . p r i n t 1 n ( A + B > 1 2 ) ;
S y s t em . out . p r i n t 1 n ( A >= 8 && � != 'w' ) ;
S y s t em . out . p r i n t 1 n ( ( C == 'e' ) 1 1 ( ( h + l". ) == 1 2 ) ) ;

I nd ica cual será l a salida por panta l l a (cada va lor en una línea d iferente):
a. Tru e true fa lse
b. Tru e fa lse fa lse
c. Tru e fa lse true
d. False fa lse false
Pregunta 4: Indica cual de las siguientes afirmaciones es correcta en relación a q u e tipo de bucle se d e be
utilizar:
a. Si tenemos u n b u c l e q u e no está relacionado con colecciones ha brá q u e elegir el bucle fo r-each
b. El bucle fo r es preferible si, a l principio del bucle, no sabemos cuantas veces tenemos q u e
ejecutarlo.
c. Si n ecesitamos iterar a través de todos los elementos de una colección, el bucle for-each es casi
siempre la opción más elegante.
d . E l bucle for-each es adecuado cuando nos hace falta util izar d e manera explícita el contador d e l
bucle.

Pregunta 5 : Indica c u a l de l a s siguientes afirmaciones es correcta :


a. U n objeto d e t i p o Stri ng puede ser mod ificado una vez q u e está creado, po r tanto no es u n ejemplo
d e o bjeto in m uta ble
b. Un objeto es i n m uta ble si su contenido o s u estado no puede ser cam biado una vez que se ha
creado
c. La clase String tiene u n método d e nom bre trim que perm ite mod ificar caracteres en cualquier
posición d e u na cadena
d. Como regla general, las cadenas d e texto de tipo String se suelen co m parar med iante el operador

Pregunta 6 : Indica cual de las siguientes afirmaciones es correcta :


a. U n a c l as e cohesionada representa u na entidad bien acoplada.
b. Un m étodo cohesionado será responsable de varias tareas bien d efi n idas.
c. La segunda mayor ventaja d e l a cohesión es que ofrece u n mayor potencial d e utilización.
d . Las dos más i mportantes maneras en que una alta cohesión beneficia a u n d iseño son e l
acoplamiento y la encapsulación.

Pregunta 7 : Indica c u a l de l a s siguientes afirmaciones es correcta :


a. U n seguimiento es l a activida d d e tra bajar a través d e u n segmento d e cód igo línea por l ín ea,
m ie ntras se o bserva n ca m bios de estado y otros comportamientos de la aplicación.
b. Un banco de pruebas es un conj u nto de o bjetos en un estado indefinido que sirven como base para
realizar pruebas d e u n idades.
c. La aserción es la actividad d e d escu brir si una pieza d e código pro d uce el comportamiento
prete n d i do.
d. U na prueba es u na expresión que esta blece una con d ición que esperamos que resu lte verdade ra .

Pregunta 8 : Dada la sigui ente jera rq u ía de herencia :

Indica c u a l d e l a s siguientes asignaciones es correcta :


a. C ar el = new Vehicl e();
b. Car c2 = new Vehicl e();
c. Vehicle v l = new Car();
d . Todas l a s asignaciones anteriores son correctas.
Pregunta 9 : Dado el sigui ente cód igo :

public class t e s tJun i o {


publ ic void s e tVar ( in t, a , int b , float, e ) {
}

Y los siguie ntes métodos:

l. private vo id setVar ( i nt a, float e, int b) { }


2. protected voi d setVar (int a , i nt b , float e) { }
3. p u blic i nt setVar (int a, float e, int b ) {retu rn a;}
4. p u blic i nt setVar (int a, int b, float e) {retu rn a;}
5. protected float setVar ( i nt a, int b, float e) {return e;}

I n d i q u e q u é m étodos permiten u na sobrecarga del método setVar de manera correcta :


a. 3 y 5
b. 3 y 4
c. 1 y 2
d. 1 y 3

Pregunta 10: I n d i q u e cual de las siguientes opciones declarará un método en una clase que fuerza a un a
su bclase a implementarlo:
a. static void methoda (double d 1 ) {}
b. p u blic native d o u b l e methoda();
c. a bstract p u blic voi d m ethoda();
d. protected vo id methoda (double d 1){}

Pregunta 11: Indica cual d e las siguientes afirmaciones es correcta en relación a un marco d e Swi ng
(J Fra m e ) :
a. Está com p uesto d e tres partes: la ba rra d e título, una barra d e m e n ú opcional y lo s cuadros d e
d i á l ogo.
b. Está com p uesto de tres partes: la ba rra de título, el panel de contenido y el gestor de los bordes.
c. Está com p uesto d e tres partes: la ba rra d e título, una barra d e menú opcional y el panel de
contenido.
d. Está com p uesto d e cuatro partes: l a ba rra d e título, una barra d e m e n ú opcional, el panel de
contenido y el gestor de l o s bordes.

Pregunta 12: I n d i q u e cual d e las siguientes afi rmaciones es correcta :

Todas las excepciones no co m probadas son su bclases d elll


a. Exception
b. RunTimeException
c. Throwa ble
d . E rror

Pregunta 13: Teniendo en cuenta el modelo en cascada presente en la construcción del software, indica
cual de las siguie ntes fases NO pertenece al d esarrollo de softwa re:
a. Aná l isis del pro blema.
b. Prueba U n itaria.
c. Prueba Secuencial.
d. E ntrega del sistema a l cliente.
Pregunta 14: La siguiente i magen corresponde a un pa ntall azo de la aplicación Bl ueJ. En la parte inferior
d erecha hay un componente recta ngular de BlueJ que en s u interior co ntiene la expresión 1313 % 4� q u e a
su vez está rodeada por u n rectá ngulo interm itente. ¿Qué componente o herramienta es esta ?:

:�)%�)):}3: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}�:�?�";.�:::.::�'»::t�:��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .

•�t...#

... ;$:�¡
. � �
� � ::;: ::;: � �
� � � � ::;: ::;: � �
� ..-s
. '

... ,... ��"l¡

·
. : .: .: .: .: . : .: : :.: .: .:�,:>·/�': .:. :1 .•. �.�
:....

"� ·[ •

. . . ...................................................... : ..! . ! . ...........................................................

\:-:..�' · ¡'''����'�'�'��'� �;
a. Cod e Add
b. Code Exp
c. Code Pad
d. Code Area

Pregunta Rl: I nd ica cual d e las siguientes afirmaciones es correcta :


a. U n m ap a es u na co l ección q u e a l macena pares llave/va lor co mo entradas.
b. Un mapa es una co l ección que a l macena tríos llave/índ ice/valor co mo entradas.
c. Un mapa es u na colección que a l macena pares índ ice/valor como entradas.
d. Un mapa es u na col ección que almacena tríos índ ice/posición/valor como entradas.

Pregunta R2: I n d i q u e el resu ltado de ejecutar el siguiente código que se m uestra a contin uació n :

publ i c class test {


publ i c s tatic void add3 ( Integer i )
int v a l = i . i n tV a l u e ( ) ;
v a l += 3 ;
i = new I n t e g e r ( v a l ) ;

publ i c s tatic void m a i n ( S t ring args [ ] )


I n t e g e r i = new I n t e g e r ( 0 ) ;
a dd3 ( i ) ;
S ys t em . o u t . p r i n t l n ( i . i n tV a l u e ( ) ) ;

a. El programa indicará u n fa llo en tiempo d e compi lación


b. El programa i m prime por panta l l a el va lor mili
c. El programa i m prime por panta l l a el va lor 1310
d. El programa la nzará u na excepción en la l ínea 3 (int val = i. intVal ue();)
PARTE PRÁCTICA [6,5 PUNTOS] :

La Práctica del presente curso es d iseño e implementación d e u n sistema integrado d e gestión d e


u na bibl ioteca (a partir d e ahora, 5 1 G B) . En general, l a s funciones q u e tienen u n 5 1 G B s o n varias seg ú n e l
perfil d e su usuario ( q u e v a desde el usuario d e la bibl ioteca hasta s u d i rector) e incl uyen las siguientes:
• Adq u isiciones: la compra de materiales ( l ibros en d iferentes formatos, audi o li bros, CDs de m ú sica,

películas e n DVD, etc.), gestión de com pras, factu ración, etc.


• Catalogar: l a clasificación e i n d exación de los materiales de la bibl ioteca.

• Préstamos: presta r los materiales a los usuarios (tanto en papel como en otros formatos), reservas d e

materiales y a e n préstamos, contro l d e présta mos ( emisión d e avisos d e materia l es fuera d e pl azo), gestión
de m ultas.
• Suscripciones: gestión de las s uscri pciones a revistas y periódicos.

• Catá logo e n l ínea u O PAC (del inglés Online P u blic Access Cata log) : interfaz pú bl ica a los servicios de la

bibl ioteca (búsq uedas, gestión d e prestamos, etc.).


• G estión d e usuarios: a ltas, bajas, generación d e tarjetas, historial es.

Funcionalidades

Los 5 1 G B perm iten la implementación desde l a bo res simples de gestión de una alta de usuario, hasta
operaciones más com p l ejas como es la gestión de préstamos o inventa rio. En esta práctica, se propondrán
d iferentes funcionalidades para el sistema d e gestión bibl iotecaria:
• Añadir n u evos materiales a la colección d e la biblioteca ( rel lenando los datos d e u n fo rmulario). Cada
tipo d e material debería tener s u propia col ección ( l i bros, revistas, periódicos, a ud io, video, etc.).
• Borrar materiales de la colección.
• Rea lizar búsquedas senci l l as sobre los materiales.
• G estionar suscripciones a revistas y periód icos.
• G estión d e usuarios: altas, bajas, generación d e tarj etas, h istoriales d e préstamo, control d e acceso
(d iferenciar entre dos perfiles: usuarios y biblioteca rios).
• Real ización básica d e Préstamos: presta r u n material si está d ispon i ble en la biblioteca, asignar fechas
de d evol ución.
• Pro d ucir l istados d e préstamos según el tipo d e material.
• Rea l izar búsquedas fl exi bles so bre los materiales en la bibl ioteca com binando varios cam pos d e
búsqueda.
• Control d e préstamos: n ú m ero m áximo d e ítems d e préstamo (6 por usuario, independiente d e tipo d e
material), e m isión d e avisos d e materiales fuera d e plazo, gestión d e m u ltas, etc.
• Pro d ucir l istados d e los materia l es prestados.
• Rea l izar búsquedas fl exi bles sobre los materiales en varias bibl iotecas a la vez co m binando va rios
campos de búsqueda.
• Préstamos e ntre bibliotecas: poder so licitar materiales a otras bibliotecas y procesar las solicitud es d e
otras bibl iotecas. El procesa m i ento d e d ichas solicitudes se lleva a ca bo us ando archivos d e solicitud d e
l a siguie nte manera :
o Prepara r y exportar u na l ista d e solicitudes d e materia l es q u e se q u i e re hacer a una biblioteca.
Se prepara l a lista usando un form u l ario para identificar el nom bre de la biblioteca, el nom bre
d e l l i b ro, el a uto r y el nombre de esta bibl ioteca. U na vez term inado, se guardar la lista en u n
archivo d e texto. No es necesario en esta práctica preocuparse d e cómo se enviaría el archivo a
otras bibl iotecas.
o I m porta r y procesar u n a rchivo d e so licitudes para materia l es proveniente d e otra bibl ioteca. Se
debe actual izar el estatu s d e cada material para marcarse como prestado, pero en vez del
i de ntificador del usuario debería aparecer el i dentificado r d e la biblioteca.
• Control d e reservas: poder reservar u n material si está ya prestado, gestión de avisos (al usuario co n e l
material q u e co nvendría d evolverlo porq u e hay algui en esperando y al usuario co n la reserva cuando e l
material ya está devuelto).
a) [1,0 puntos] Diseñar utilizando u n paradigma o rientado a obj etos, los elementos necesarios para la
apl icación explicada d e la práctica d u rante el curso. Es necesario identificar la estructu ra y las
relaciones d e herencia (mediante el uso d e u n d iagrama d e clases) y d e uso de las clases necesarias
para al macenar y gestionar esta información. Debe hacerse uso de los m ecanismos de herencia
siempre que sea posible. Se va lorará un buen d iseño que favorezca la reutil ización de código y facilite
su mante n i miento.
b) [2,0 puntos] I m plementa un m étodo (o métodos) que permitan añadir n u evos materiales a la colección
de la biblioteca (rellenando los datos de un form u l ario). Cada tipo de material d e bería tener s u propia
colección ( l i bros, revistas, periódicos, a u d io, video, etc. ) .
e) [2,0 pu ntos] I m p l em enta u n m étodo (o métodos) q u e permitan la i m po rtación y procesamiento d e u n
archivo d e so licitudes para materiales proveniente d e otra biblioteca (préstamos entre bibliotecas). S e
d e b e actual izar el estatu s d e cada material para marcarse como prestado, pero en vez del identificador
d e l usuario debería aparecer el identificador d e la biblioteca.
d ) [1,5 puntos] Para la sigui ente versión del softwa re s e desea añadir la figura d e la Ed itorial . De cada
e d itorial se debe tener u n l istado d e los l ibros y audiol i bros que proporciona, así como s u precio, q u e
pod ría actual izarse manual m ente después d e la ú ltima venta. El sistema debería consultar el inventa rio
a final de año, y de los l i bros más prestados (top 10%), rea lizar un pedido a la Ed itorial correspond i e nte
de un 20% más de l ibros. El porcentaje de l ibros más prestados y el porcentaje de l ibros pedidos a las
Ed itoria l es, podrán ser configu ra bles dependiendo del presu p uesto de la bibl ioteca. ¿Qué cambios
serían n ecesarios en el d iseño para adaptar esta nueva funciona lidad? I m plemente el método (o
m étodos) q u e perm ita esta n u eva funcionalidad.
UNIVERSIDAD NACJONAL DE EDUCACIÓN A DISTANCIA - ESCUELA TÉCNICA SUPE.RI OR DE
INGENIElÜA INFO.RMÁTlCA
71 901072 � PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA 1
TECNOLOGÍAS DE. LA INFORMACIÓN)
SEPTIEMBRE. 2016 - MODELO D - No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PUNTOS] :


El test consta de 1 4 preguntas y 2 preguntas adicionales de reserva. Solo una de las respuestas es válida. Las
respuestas correctas se puntuarán con + l . O, mientras que las respondidas de manera incorrecta se puntuarán
con -0.25. Las no contestadas no tendrán influencia ni positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 1 4 preguntas iniciales del test
sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de alguna de
las 1 4 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso de que una
segunda pregunta de las 1 4 iniciales fuese anulada, entonces la segunda pregunta de reserva sustituiría a esta
segunda pregunta anulada. En aquellos hipotéticos casos en los que se produjese la anulación de una tercera
o sucesivas preguntas de las 1 4 iniciales, entonces sólo en ese caso, las preguntas tercera y sucesivas
anuladas se considerarían como correctas (al no existir más preguntas de reserva que las sustituyan).

Pregunta 1: ¿Cuál es el resu ltado de ejecutar el sigui ente código?

l . pub l i c a b s t r a c t c l a s s C l a s eA {
2 . pub l i c f i n a l v o i d me t o do l ( )
3 . S y s t em . ou t . p r i n t l n ( " C l a s eA " ) ;
4.
5.
6. pub l i c s t a t i c v o i d ma i n ( S t r i ng [ ] args )
7. C l a s e A ob j = n e w C l a s eB ( ) ;
8. o b j . me t o d o l ( ) ;
9.
10 .
11 .
12 . c l a s s C l a s eB e x t e n ds C l a s e A {
13 . pub l i c vo i d me t o do l ( ) {
14 . S y s t em . ou t . p r i n t l n ( " C l a s e B " ) ;
15 .
16.

a. ClaseA
b. ClaseB
c. E rror d e com pilación en l a línea 7
d. E rror d e com pilación en l a línea 1 3

Pregunta 2 : De acuerdo a la bibliografía básica, el que u n ca m po o m iem bro públ ico d e una clase sea
estático impl ica q u e :

a. Puedo acceder y modificar s u va lor s ó lo a través de u n obj eto.


b. Puedo acceder y modificar s u va lor sin necesidad de haber instanciado o bj eto alguno.
c. Todos los obj etos tienen u na copia d e la va riable.
d. Es un a va riable global y se puede usar d i rectam ente en cualqu i e r l ugar sin hacer referencia a la
clase correspondiente y sin insta nciar obj eto alguno.
Pregunta 3 : Según el texto d e la bibl iografía básica d e la asignatura, i n d iq u e c u á l d e l a s siguientes
afirmaciones es incorrecta :

a. Las clases pueden ser a bstractas.


b. Las d iagramas de clases m u estran las clases de una apl icación y la relación entre ellas.
c. Las clases d e ben contener a l menos u n m ie m bro d e clase o campo.
d. Las clases pueden contener métodos.

Pregunta 4 : Dada l a siguiente d efinición d e clases:

l. pub l i c c l a s s C l a s e A {
2. p r o t e c t e d vo i d me t o do l ( )
3. S y s t em . ou t . p r i nt ( " E n t r o e n e l mé t o do de s de C l a s e A" ) ;
4.
5.
6.
7. c l a s s C l a s eB e x t e n ds C l a s e A {
8. pub l i c vo i d me t o do l ( ) {
9. S y s t em . ou t . p r i n t ( " E n t ro e n e l mé t o do de s de C l a s e B " ) ;
10 .
11 .

¿Qué salida obtendremos al ejecutar el siguiente cód igo d entro d e u n método main i mplem entad o en
cualquiera d e las clases?

15 . C l a s eA p = n ew C l a s eB ( ) ;
16. p . me t o do l ( ) ;

a. Entro e n el m étodo desde Cl a s e A


b. Entro e n el m étodo desde Clase B
c. Error d e com pilación en la línea 15
d. Error d e com pilación en l a línea 8

Pregunta 5: Da do el siguiente cód igo ind icar cuál d e las afirmaciones es correcta. Supo nga q u e la s
importaciones d e l i brerías correspond i e ntes se han realizado.

6. S e t < I n t e ge r > c o n j u n t o = n ew H a s h S e t < I nt e g e r > () ;


7. c o n j u n t o . a dd ( n ew I nt e g e r ( 8 6 ) ) ;
8. c o n j u n t o . add ( 7 5 ) ;
9. c o n j u n t o . add ( ne w I n t e g e r ( 8 6 ) ) ;
10 . c o n j u n t o . add ( nu l l ) ;
11 . c o n j u n t o . add ( 3 0 9 ) ;
12 . I t e ra t o r i = c o n j u n t o . i t e ra t o r ( ) ;
13 . whi l e ( i . h a s Ne x t ( ) ) {
14 . S y s t e m . ou t . p r i n t ( i . n e x t ( ) ) ;
15 .

a. El cód igo co mpila sin errores


b. La salida que se m uestra es 8675 n u ll309
c. La línea 6 produce u n erro r d e com pilación
d. La línea 12 produce u n error d e com pi lación
Pregunta 6 : ¿cual es el resu ltado d e ejecutar el sigui ente código?

6. L i s t l i s t a = n ew A r r a y L i s t ( ) ;
7. l i s t a . a dd ( "AA" ) ;
8. l i s t a . a dd ( " BB " ) ;
9. l i s t a . a dd ( 8 ) ;
10 . f o r ( i nt n=O ; n< l i s ta . s i z e ( ) ; n++ )
11 . S y s t e m . ou t . p r i n t ( l i s t a . g e t ( n ) ) ;
12 .

a. AABB
b. AABB8
c. Error de com pilación en l a línea 6
d. Error d e com pilación en l a línea 9

Pregunta 7 : Seg ú n el texto d e la bibliografía básica d e la asignatu ra, i ndi que c u á l d e l a s sigu ientes
afirmaciones es correcta :
a. U n a cl as e a bstracta no puede implementar ni nguna i nterface.
b. Si un a clase tiene sólo alguno d e sus métodos a bstractos, no es necesario d eclararla como
a bstracta.
c. U na clase a bstracta no puede extender otra clase q u e no sea a bstracta.
d . U na clase q u e hereda d e u na clase a bstracta tiene que implementar todos l o s métodos a bstractos
para no ser a bstracta.

Pregunta 8 : Según el texto d e la bibl iografía básica d e la asignatura, el alcance d e una va riable:
a. Defin e e l va lor m áximo q u e puede almacenar d icha variable.
b. Defin e qué métodos de otras clases pueden acceder a la va riable.
c. Defin e q u é clases externas pueden utilizar d icha variable.
d. N i nguna d e las a nteriores.

Pregunta 9 : ¿Cuál es el resu ltado d e ejecutar el sigui ente código?

10. S t r i ng [ ] a r r a y= { "AA" , " BB " , " C C " } ;


11 . f o r ( i n t n = O ; n < a r r a y . l e n gt h ; n + + )
12 . S y s t em . ou t . p r i n t ( a r r a y [ n ] ) ;
13 .
14 . S y s t e m . ou t . p r i n t ( n ) ;

a. AABBCC
b. AAB
c. AABB
d. E l cód igo no compila

Pregunta 10: ¿Cuál es el resu ltado de ejecutar el siguiente código?

l . pub l i c c l a s s C l a s e A {
2 . p r i v a t e S t r i ng m i e mb ro l ;
3. p r i v a t e b o o l e a n m i e mb r o 2 ;
4.
5. pub l i c s t a t i c v o i d ma i n ( S t r i ng [ ] a r g s )
6. C l a s e A ob j = n e w C l a s eA ( ) ;
7. i f ( ! ob j . mi e mb ro 2 ) {
8. S y s t em . o ut . p r i n t l n ( " M i e mb r o l " + ob j . m i e mb r o l ) ;
9.
10 .
11 . }
a. Error d e com pilación en l a línea 6
b. Error de com pilación en l a línea 7
c. Error d e com pilación en la línea 8
d. M i em bro l = n u l l

Pregunta 11: ¿Cuál es el resu ltado de ejecutar el siguiente código?

6. S t r i ng c a d e n a l = " Examen " ;


7 . S t r i ng c a d e n a 2 = n ew S t r i n g ( c a de n a l ) ;
8. i f ( c a d e n a l = = c a d e na 2 ) {
9. S y s t e m . ou t . p r i n t l n ( " ca de n a l cadena2 " ) ;
10 .
11 . i f ( ca de n a l . equa l s ( ca de na 2 ) )
12 . S y s t em . o u t . p r i n t l n ( " c ad e na l . e qu a l s ( c a d e n a 2 ) " ) ;
13 .

a. No se m uestra na da
b. cad e n a l == cadena2
c. cadena l.equals(ca dena2)
d. B y C son ciertas

Pregunta 12: Seg ú n el texto d e la bibl iografía básica d e la asignatura, i n d i q u e cuál d e las siguie ntes
afirmaciones es correcta :
a. El acoplamiento d escri be el encapsu lam iento d e las clases.
b. E l e ncapsulamiento a propiado en las clases red uce s u cohesión.
c. E l e ncapsulamiento a pro piado en las clases red uce s u acoplamiento.
d . L a cohesión d e u na u n i d a d d e cód igo refleja s u acoplamiento.

Pregunta 13: ¿Cuál es el resu ltado d e ejecutar el siguiente código?

l . c l a s s C l a s eA {
2 . pub l i c f l o a t me t o do l ( doub l e d )
3 . S y s t em . ou t . p r i n t l n ( " C l a s eA " ) ;
4 . return l . O F ;
5.
6.
7.
8. pub l i c c l a s s C l a s e B e x t e n d s C l a s eA {
9. pub l i c doub l e me t o d o l ( do ub l e d )
10 . S y s t em . ou t . p r i n t l n ( " C l a s e B " ) ;
11 . return 1 . 0 ;
12 .
13 .
14 . pub l i c s t a t i c v o i d ma i n ( S t r i n g [ ] a rg s )
15 . n ew C l a s e B ( ) . me t o do l ( O . O ) ;
16 .
17 .

a. ClaseA
b. ClaseB
c. 1.0
d. E l código n o compila
Pregunta 14: De acuerdo a l a bibliografía básica, ¿qué significa insta nciar una clase?
a. Dupl icar u na clase.
b. H eredar de una clase.
c. Crear u n o bjeto a partir d e u na clase.
d. Conecta r dos clases entre sí.

RESERVA 1: Respecto a las excepciones en J ava, ¿Cuál de las siguientes afirmaciones es correcta?
a. Todas las s u bclases d e la clase está ndar d e Java RunTim e Exception s o n excepciones comprobadas.
b. Todas las s u bclases de la clase está ndar de Java Exception son excepciones compro badas.
c. E rror es u na s u bclase d i recta d e Throwa ble, m ie ntras que Exceptio n es una s u bclase d irecta de
Error.
d . Tanto E rror como Exception s o n s u bclases d i rectas d e Throwa ble.

RESERVA 2 : ¿Cuál d e las siguientes afirmaciones es correcta?


a. En Java no se permite l a herencia m ú ltiple d e clases, n i tampoco la implementación m ú ltiple d e
interfaces.
b. En Java se permite l a herencia m ú ltiple de clases, pero no la implementación m ú ltiple de i nterfaces.
c. E n Java no se permite la herencia m ú ltiple de clases, pero sí la i mplementación m ú ltiple d e
i nterfaces.
d. E n Java se permite la herencia m ú ltiple de clases, y también la implementación m ú ltiple d e
i nterfaces.

PARTE PRÁCTICA [6,5 PUNTOS] :

La Práctica del presente curso es diseño e implementación de un sistema integrado de


gestión de una biblioteca (a partir de ahora, SIGB). En general, las funciones que tienen un SIGB
son varias según el perfil de su usuario (que va desde el usuario de la biblioteca hasta su director) e
incluyen las siguientes :
• Adquisiciones : la compra de materiales (libros en diferentes formatos, audiolibros, CDs de
música, películas en DVD, etc.), gestión de compras, facturación, etc.
• Catalogar: la clasificación e indexación de los materiales de la biblioteca.
• Préstamos : prestar los materiales a los usuarios (tanto en papel como en otros formatos), reservas
de materiales ya en préstamos, control de préstamos (emisión de avisos de materiales fuera de
plazo), gestión de multas.
• Suscripciones: gestión de las suscripciones a revistas y periódicos.
• Catálogo en línea u OPAC (del inglés Online Public Access Catalog) : interfaz pública a los
servicios de la biblioteca (búsquedas, gestión de prestamos, etc.).
• Gestión de usuarios: altas, bajas, generación de tmjetas, historiales.

Funcionalidades

Los SIGB permiten la implementación desde labores simples de gestión de una alta de usuario,
hasta operaciones más complejas como es la gestión de préstamos o inventario. En esta práctica, se
propondrán diferentes funcionalidades para el sistema de gestión bibliotecaria:
• Añadir nuevos materiales a la colección de la biblioteca (rellenando los datos de un formulario).
Cada tipo de material debería tener su propia colección (libros, revistas, periódicos, audio,
video, etc.).
• Borrar materiales de la colección.
• Realizar búsquedas sencillas sobre los materiales.
• Gestionar suscripciones a revistas y periódicos.
• Gestión de usuarios : altas, bajas, generación de tarjetas, historiales de préstamo, control de
acceso (diferenciar entre dos perfiles: usuarios y bibliotecarios).
• Realización básica de Préstamos: prestar un material si está disponible en la biblioteca, asignar
fechas de devolución.
• Producir listados de préstamos según el tipo de material.
• Realizar búsquedas flexibles sobre los materiales en la biblioteca combinando varios campos de
búsqueda.
• Control de préstamos: número máximo de ítems de préstamo (6 por usuario, independiente de
tipo de material), emisión de avisos de materiales fuera de plazo, gestión de multas, etc.
• Producir listados de los materiales prestados.
• Realizar búsquedas flexibles sobre los materiales en varias bibliotecas a la vez combinando
varios campos de búsqueda.
• Préstamos entre bibliotecas: poder solicitar materiales a otras bibliotecas y procesar las
solicitudes de otras bibliotecas. El procesamiento de dichas solicitudes se lleva a cabo usando
archivos de solicitud de la siguiente manera:
o Preparar y exportar una lista de solicitudes de materiales que se quiere hacer a una
biblioteca. Se prepara la lista usando un formulario para identificar el nombre de la
biblioteca, el nombre del libro, el autor y el nombre de esta biblioteca. Una vez
terminado, se guardar la lista en un archivo de texto. No es necesario en esta práctica
preocuparse de cómo se enviaría el archivo a otras bibliotecas.
o Importar y procesar un archivo de solicitudes para materiales proveniente de otra
biblioteca. Se debe actualizar el estatus de cada material para marcarse como prestado,
pero en vez del identificador del usuario debería aparecer el identificador de la
biblioteca.
• Control de reservas: poder reservar un material si está ya prestado, gestión de avisos (al usuario
con el material que convendría devolverlo porque hay alguien esperando y al usuario con la
reserva cuando el material ya está devuelto).

a) [1 punto] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios para
la aplicación explicada de la práctica durante el curso. Es necesario identificar la estructura y las
relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de las clases
necesarias para almacenar y gestionar esta información. Debe hacerse uso de los mecanismos de
herencia siempre que sea posible. Se valorará un buen diseño que favorezca la reutilización de
código y facilite su mantenimiento.
b) [1,5 puntos] Se desea incluir en la biblioteca un nuevo tipo de recurso, los videojuegos para
diferentes consolas (PS3, PS4, Xbox 360, Xbox o Nintendo). Indica los cambios que habría que
realizar en el sistema de gestión de préstamos, así como la estructura de clases resultante.
e) [2 puntos] Implementar los métodos de préstamo y devolución de videojuegos teniendo en
cuenta, en el caso de las devoluciones, las implicaciones que dichos préstamos pueden acarrear:
sanciones (si se entrega fuera de plazo), actualización de ficheros que contienen los préstamos
(indicar la solución que se plantea en este caso), actualización de las reservas que haya sobre ese
videojuego, etc. Justifíquese las opciones y decisiones que se tomen.
d) [2 puntos] Proporcione un método (o métodos) que permita mostrar por pantalla un formulario
básico en modo gráfico que permita generar las estadísticas de los préstamos de videojuegos
que se encuentran almacenados en un fichero. La pantalla permitirá elegir entre dos listados:
videojuegos más prestados, usuarios más ')ugones" (con mayor número de préstamos). Pedirá
un rango de fechas y aplicará ese criterio a la hora de buscar los contenidos en los ficheros. Los
mostrará por pantalla de mayor a menor. Justifíquese las opciones y decisiones que se tomen.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA� ESCUELA TÉCNIC A SUPERIOR DE
INGENIERÍA INFORMÁTICA
71901072- PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA 1
TECNOLOGÍAS DE. LA INFORMACIÓN)
SEPTIEMBRE 2017 �MODELO C � No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA- TEST [2,5 PUNTOS]:


Solo una de las respuestas es válida. Las respuestas correctas se puntuarán con + 1.0, mientras que las
respondidas de manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni
positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 14 preguntas iniciales del test
sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de alguna de
las 14 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso de que una
segunda pregunta de las 14 iniciales fuese anulada, entonces la segunda pregunta de reserva sustituiría a esta
segunda pregunta anulada. En aquellos hipotéticos casos en los que se produjese la anulación de una tercera
o sucesivas preguntas de las 14 iniciales, entonces sólo en ese caso, las preguntas tercera y sucesivas
anuladas se considerarían como correctas (al no existir más preguntas de reserva que las sustituyan).

Pregunta 1: ¿Qué entendemos por signatura?


a. La cabecera de un método.
b. El tipo de datos que devuelve un método.
c. El tipo de datos que devuelve un constructor.
d. Ninguna de las anteriores.

Pregunta 2: Queremos compilar el siguiente código que se puede encontrar en el texto base de la
asignatura y que ha sido modificado convenientemente. ¿Cuál es el resultado que obtenemos al compilar?
1 public class Prueba
2 {
3 public static void main (String args [])
4 {
5 String cadena1 = new String("e jemPLO");
6 String cadena2 = new String("EJEMPLO");
7 cadena 1.toUpperCase();
8 if (cadena 1.toString().equals(cadena2.toString()))
9
10 System.out.println("Son iguales");
11
12 el se
13
14 System.out.println("Son di ferentes");
15
16
17

a. Se produce una excepción y la ejecución falla.


b. Se imprime por pantalla el mensaje: Son iguales.
c. Se imprime por pantalla el mensaje: Son diferentes.
d. Ninguna de las anteriores.
Pregunta 3: Según el texto de la bibliografía básica de la asignatura, ¿cuál de las siguientes afirmaciones es
correcta respecto al texto de una clase?
a. El envoltorio exterior contiene la cabecera de la clase.
b. El propósito principal del envoltorio exterior es proporcionar un constructor a la clase.
c. El envoltorio exterior permite sobrecargar cualquier método de la clase.
d. Ninguna de las anteriores.

Pregunta 4: Supongamos que reescribimos el ejemplo BouncingBall del libro de la forma en que se
muestra a continuación:
1 public class BouncingBall {
2 static int n = 10;
3 static Integer num = new Integer(n);
4
5 public static void main (String args [])
6 {
7 if (n!=O)
8 {
9 incrementar (num);
10 System.out.println("Valor: " + num.intValue());
11 }
12 }
13
14 public static void incrementar (Integer numero)
15 {
16 numero++;
17 }
18 }

¿Cuál es el resultado de compilar y/o ejecutar el código?


a. El programa no compila. Se produce un error en la línea 16
b. El programa no compila. Se produce un error en la línea 10
c. El programa compila e imprime el resultado "Valor: 11"
d. Ninguna de las anteriores.

Pregunta 5: Según el texto de la bibliografía básica de la asignatura, ¿qué se entiende por abstracción?
a. Proceso de dividir un todo en partes bien definidas que puedan construirse y examinarse por separado
y que interactúen de formas bien definidas.
b. Capacidad de ignorar los detalles de las distintas partes, para centrar la atención en un nivel superior de
un problema.
c. Capacidad de dividir un todo en partes bien definidas ignorando los detalles de las distintas partes.
d. Ninguna de las anteriores.

Pregunta 6: Según el texto de la bibliografía básica de la asignatura, con respecto al constructor de la


subclase podemos afirma que ...
a. Debe siempre invocar al constructor de su superclase como primera instrucción. Si el código fuente no
incluye esa llamada, Java intentará insertar una llamada automáticamente.
b. No debe invocar nunca al constructor de su superclase como primera instrucción. Si la incluye esa
llamada, Java ignorará esta llamada automáticamente.
c. Debe siempre invocar al constructor de su superclase como última instrucción. Si no incluye esa
llamada, Java intentará insertar una llamada automáticamente.
d. Debe siempre invocar al constructor de su superclase como última instrucción. Si no incluye esa
llamada, Java generará un error de compilación.
Pregunta 7: ¿Cómo se llama el entorno de pruebas que soporta la prueba estructurada de unidades y las
pruebas de regresión en Java?
a. JDK.
b. JBoss.
c. Javadoc.
d. JUnit.

Pregunta 8: Sea el siguiente código modificado de la clase MusicOrganizer mostrada en el libro base:

1 import java.util.*;
2
3 public class MusicOrganizer
4
5 public static void main (String args [])
6
7 ArrayList <Double> a = new ArrayList <Double> (5);
8 Integer numero = new Integer(O);
9
10 for (int i=O; i<=5; i++)
11
12 numero = Integer(i);
13 a.add(numero);
14
15 System.out.println(a.toString());
16
17

¿Qué ocurre cuando se intenta compilar y ejecutar el código?


a. No compila. Hay que sustituir la línea 12 por la siguiente: numero = i; Haciendo esto, el programa
compila y proporciona el resultado [O .O, 1.O, 2.O, 3.O, 4.O, 5.O]
b. No compila. Hay que sustituir la línea 13 por la siguiente: a.add(new Double(
numero. intValue () ) ) ; Haciendo esto, el programa compila y proporciona el resultado [O.O,
1.0, 2.0, 3.0, 4.0, 5.0]
c. No compila. Hay que sustituir la línea 12 por la siguiente: numero = i; y la línea 13 por la siguiente:
a.add(new Double(numero. intValue())); Haciendo esto, el programa compila y
proporciona el resultado [O.O, 1.O, 2.O, 3.O, 4.O, 5.O]
d. Compila y proporciona el resultado [O.O, 1.O, 2.O, 3.O, 4.O, 5.O].

Pregunta 9: Según el texto de la bibliografía básica de la asignatura, el acceso protegido ...


a. No puede aplicarse a métodos y constructores de una clase, sólo a los campos de una clase.
b. No puede aplicarse a los campos de una clase, sólo a métodos y constructores de una clase.
c. Puede aplicarse a cualquier miembro de una clase, aunque suele reservarse a campos y métodos, no
constructores.
d. Puede aplicarse a cualquier miembro de una clase, aunque suele reservarse a constructores y métodos,
no campos.

Pregunta 10: Respecto a File y Path, podemos afirmar ...


a. La interfaz File permite a un programa consultar los detalles relativos a un archivo externo, de una
forma independiente del sistema de archivos concreto sobre el que se esté ejecutando el programa.
b. La interfaz Path dispone por sí misma de sendos métodos exists y canRead.
c. La interfaz Files proporciona un gran número de métodos estáticos para consultar los atributos de un
objeto Path.
d. Ninguna de las anteriores.
Pregunta 11: Queremos compilar el siguiente código que se puede encontrar en el texto base de la
asignatura y que ha sido convenientemente modificado. ¿Qué ocurre cuando lo compilamos?

1 import java.awt.*;
2 public class ImageViewer extends Frame{
3 public static void main(String argv []){
4 ImageViewer MiimageViewer=new ImageViewer();
5
6
7 ImageViewer()
8 Button BotonHola=new Button("Hola");
9 Button BotonAdios=new Button("Adios");
10 add(BotonHola);
11 add(BotonAdios);
12 setSize(300, 300);
13 setVisible(true);
14
15

a. Compila, y muestra dos botones juntos ocupando todo el frame. " Hola" en la izquierda y "Adios" en la
derecha.
b. Compila, y muestra un botón ocupando todo el frame diciendo "Hola".
c. Compila, y muestra un botón ocupando todo el frame diciendo "Adios".
d. No compila.

Pregunta 12: Según el texto de la bibliografía básica de la asignatura, ¿qué permite el patrón Método
Factoría?
a. Garantiza que solo se cree una instancia de una clase y proporciona un acceso unificado a la misma.
b. Proporciona una interfaz para crear objetos, pero deja que las subclases decidan qué clase específica se
crea.
c. Trata con el problema de añadir funcionalidad a un objeto existente.
d. Define una relación uno-a-muchos, de modo que cuando un objeto cambie su estado, muchos otros
pueden ser notificados.

Pregunta 13: Se quiero compilar y ejecutar el siguiente código obtenido del manual de referencia y que ha
sido oportunamente modificado. ¿Cuál es el resultado que obtenemos?

1 public abstract class Simulator {


2 public static void main(String argv []){
3 System.out.println(mensaje Pantalla());
4
5
6 public static String mensaje Pantalla(){
7 return ("Hola");
8
9

a. El problema compila y se ejecuta correctamente, mostrando por pantalla el mensaje "Hola".


b. Se produce un error de compilación en la línea 1.
c. Se produce un error de compilación en la línea 2.
d. Se produce un error de compilación en la línea 3.
Pregunta 14: ¿Qué suceso se genera cuando se hace die en un botón o se mueve el ratón?
a. Se genera un suceso ActionEvent en ambos casos.
b. Se genera un suceso Action Perform en ambos casos.
c. Se genera un suceso ActionListener en ambos casos.
d. Ninguna de las anteriores.

RESERVA 1: ¿Cuál de las siguientes es una característica de la clase java.lang.Error?


a. extends Exception.
b. implements Throwable.
c. implements Exception.
d. Ninguna de las anteriores.

RESERVA 2: La siguiente operación: System.out.println (4 1 3) ; ¿qué imprime por pantalla?


a. O
b. 1
c. 6
d. 7

PARTE PRÁCTICA [6,5 PUNTOS]:


La práctica del presente curso consiste en diseñar e implementar un sistema integrado de
gestión de un taller de vehículos. Todos los dueños de algún tipo de vehículo (moto, coche,
furgoneta, etc.) tienen experiencia en llevar su vehículo al taller para algún tipo de revisión y/o
reparación. Puede que sea una puesta a punto antes de las vacaciones o algún viaje largo, o
debido a un problema concreto o ruido que hace, o alguna fuga de líquido, etc. Hace años, el
responsable de un taller no haría más que apuntar en un libro una breve descripción del vehículo,
el motivo por el cual ha acudido al taller su dueño y algún número de contacto. Hoy en día, debido
en parte a la competencia entre talleres y al deseo de aportar servicios de calidad para poder
fidelizar al cliente, los talleres usan sistemas de gestión para todo el proceso de recepción,
procesado y facturación de cada vehículo que pasa por el taller.

En general, las funciones que tienen un sistema de gestión de un taller de coches son
varias:
• Recepción del vehículo: al entrar un vehículo en el taller hay que generar una ficha con los
datos (si ya no forma parte del registro histórico del taller) más importantes (marca, modelo,
matrícula, cliente, etc.), dejar constancia del motivo de la visita (problema mecánico, revisión,
etc.) e imprimir el formulario de autorización que el dueño tiene que firmar para autorizar el
trabajo.
• Asignación de los trabajos a los mecánicos: a medida que vayan terminando trabajos, el jefe
del taller les va asignando nuevos vehículos.
• Procesado de los vehículos: un mecánico, al terminar la reparación de un vehículo, acude al
sistema para ver los siguientes trabajos que le corresponden. Según la información del
sistema, tiene que averiguar el problema, llevar a cabo el trabajo correspondiente y dejar
constancia del proceso realizado en el sistema para que el comercial pueda informar al cliente
de que su vehículo está listo para recoger. Una vez que el mecánico termine con un coche, en
el sistema le aparece reflejado el siguiente vehículo asignado. Si por el motivo que sea (por
ejemplo, falta de piezas o que un cliente no haya dado su autorización a realizar una
reparación debido al coste), un mecánico deja un trabajo en un estado sin completar, anota en
el sistema el motivo y pasa al siguiente trabajo.
• Gestión de usuarios: altas, bajas, modificaciones de las personas que figuran en el sistema
(miembros del taller [jefe, mecánico, comercial] y clientes). La primera vez que acude un
cliente al taller hay que darle de alta en el sistema.
• Gestión de clientes por parte del comercial: comunicar a los clientes el precio de una
reparación, informarles de que su vehículo está listo para recoger, presentar ofertas especiales
(por ejemplo, revisión antes de la inspección técnica del vehículo [ITV] o puesta a punto para
las vacaciones, revisión de los neumáticos, frenos).

Se pide realizar las siguientes tareas:


a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios
para la aplicación explicada de la práctica durante el curso. Es necesario identificar la
estructura y las relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de
las clases necesarias para almacenar y gestionar esta información. Debe hacerse uso de los
mecanismos de herencia siempre que sea posible. Se valorará un buen diseño que favorezca la
reutilización de código y facilite su mantenimiento.
b) [2,5 puntos] Implementar un método (o métodos) que permitan generar los listados de
vehículos que se han reparado en un día determinado, indicando, para cada uno de los
vehículos, los mecánicos que han intervenido, las piezas que se han utilizado y una descripción
de cada uno de los trabajos realizados. El listado aparecerá ordenado ascendentemente por la
matrícula del vehículo (en el listado aparecen antes aquellos que tengan una matrícula más
antigua). Justifique las opciones y decisiones que se tomen.
e) [2,0 puntos] Implementar un método (o métodos) que implementen la gestión del servicio
integral de revisión técnica (ITV) de los vehículos: el cliente puede dejar su coche, el taller lleva
a cabo una revisión, lleva el coche para la ITV y realiza las reparaciones adicionales necesarias.
Justifique las opciones y decisiones que se tomen.
d) [1,0 puntos] Proporcione un método (o métodos) que muestre por pantalla un formulario
básico en modo gráfico que recoja los parámetros necesarios para dar de alta un nuevo
vehículo en el sistema. Se pide expresamente la parte gráfica (asumiendo que la lógica de
funcionamiento está desarrollada). El objetivo es ver el conocimiento y destreza en el uso de
las librerías Swing y/o AWT. No desarrolle código asociado a la funcionalidad del alta.
Justifique las opciones y decisiones que se tomen.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA� ESCUELA TÉCNIC A SUPERIOR DE
INGENIERÍA INFORMÁTICA
71901072- PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA 1
TECNOLOGÍAS DE. LA INFORMACIÓN)
SEPTIEMBRE 2017 � MODELO D � No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA- TEST [2,5 PUNTOS]:


Solo una de las respuestas es válida. Las respuestas correctas se puntuarán con + 1.0, mientras que las
respondidas de manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni
positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 14 preguntas iniciales del test
sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de alguna de
las 14 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso de que una
segunda pregunta de las 14 iniciales fuese anulada, entonces la segunda pregunta de reserva sustituiría a esta
segunda pregunta anulada. En aquellos hipotéticos casos en los que se produjese la anulación de una tercera
o sucesivas preguntas de las 14 iniciales, entonces sólo en ese caso, las preguntas tercera y sucesivas
anuladas se considerarían como correctas (al no existir más preguntas de reserva que las sustituyan).

Pregunta 1: Indique cuál de las siguientes afirmaciones es correcta:


a. La signatura está formada por los parámetros de un método y proporciona la información necesaria
para invocarlo.
b. La signatura es el nombre de un método y puede tener parámetros para proporcionar información
adicional para realizar una tarea.
c. La signatura es el encabezado de un método y proporciona la información necesaria para invocarlo.
d. La signatura es el encabezado de un método y puede tener parámetros para proporcionar información
adicional para realizar una tarea.

Pregunta 2: Dado el siguiente fragmento de código:

int. indice = 1;
boolean[] examen = new boolean[8];
boolean poo = examen [indice];

Indica cual de las siguientes afirmaciones es correcta en relación al valor de la variable poo.
a. poo tiene el valor false
b. poo tiene el valor O
c. poo tiene el valor null
d. Se produce una excepción y poo no posee ningún valor

Pregunta 3: Dadas las siguientes expresiones:

1. (8 ==8) ¡ (10 > 8) == false true == true


2. ( 8 > 8) && (8 > 8) == (8 > 8) == false

Indica cual de las siguientes opciones es la correcta:


a. La expresión 1 es evaluada como falsa y la expresión 2 como falsa.
b. La expresión 1 es evaluada como falsa y la expresión 2 como verdadera.
c. La expresión 1 es evaluada como verdadera y la expresión 2 como falsa.
d. La expresión 1 es evaluada como verdadera y la expresión 2 como verdadera.
Pregunta 4: Indique cuál de las siguientes afirmaciones es correcta:
a. Un objeto colección puede almacenar un número no definido de otros objetos.
b. Un bucle se puede utilizar para ejecutar un bloque de instrucciones repetidamente, teniendo que
escribirlas múltiples veces.
c. Un iterador es un objeto que proporciona funcionalidad para iterar a través de todos los elementos de
una colección.
d. Una matriz es un tipo especial de colección que puede almacenar un número variable de elementos.

Pregunta 5: Indica cual de las siguientes afirmaciones es correcta:


a. Un objeto de tipo String puede ser modificado una vez que está creado, por tanto no es un ejemplo de
objeto inmutable
b. La clase String tiene un método de nombre trim que permite modificar caracteres en cualquier posición
de una cadena
c. Como regla general, las cadenas de texto de tipo String se suelen comparar mediante el operador==
d. Un objeto es inmutable si su contenido o su estado no puede ser cambiado una vez que se ha creado

Pregunta 6: Dado el siguiente fragmento de código, indique cuál de las siguientes afirmaciones es el
resultado de su ejecución:

elass Test

publie statie void main (String args [])


{
int n, e = 1, serie = 5;
System.out.print ("Cantidad de terminas: ");
n = 7;
while (e < n)
{
System.out.print ("," + serie);
serie += 5;
e++;

a. Cantidad de terminas: 5,10,15,20,25,30,


b. Cantidad de terminas: ,5,10,15,20,25,30
c. Cantidad de terminas: ,5,10,15,20,25,30,35
d. Cantidad de terminas: ,5,10,15,20,25,30,35,40

Pregunta 7: Indica cual de las siguientes afirmaciones es correcta:


a. El término acoplamiento describe cuánto se ajusta una unidad de código a una tarea lógica o a una
entidad
b. El acoplamiento describe la conectividad de los propios objetos de una clase
c. Un encapsulamiento apropiado en las clases reduce el acoplamiento
d. Un sistema débilmente acoplado se caracteriza por la imposibilidad de modificar una de sus clases sin
tener que realizar cambios en ninguna otra

Pregunta 8: Indica cual de las siguientes afirmaciones es correcta:


a. La depuración es el intento únicamente de localizar el origen de un error.
b. Una prueba positiva es la prueba de un caso que se espera que no funcione correctamente.
c. Las pruebas son la actividad consistente en averiguar si un fragmento de código presenta el
comportamiento deseado.
d. Una aserción es una expresión que establece una condición que esperamos que sea cierta o falsa.
Pregunta 9: Dada la siguiente jerarquía de herencia:

Indica cual de las siguientes asignaciones es correcta:


a. Vehicle vl = new Car();
b. Carel = new Vehicle();
c. Car c2 = new Bicycle();
d. Todas las asignaciones anteriores son correctas.

Pregunta 10: Dado el siguiente fragmento de código que pretende mostrar un ejemplo de sobrescritura:

class Examen {
private float pregunta = l.Of ;
protected float getNota ( ) {return pregunta;}
}

class Test extends Examen {


private float nota = 2.0f;

Indique cual de las siguientes opciones completaría el código anterior para dar lugar a un ejemplo correcto
de sobrescritura:
a. public float getNota (float valor ) { return valor;}
b. float getNota ( ) { return nota;}
c. float double getNota ( ) { return nota;}
d. public float getNota ( ) { return nota;}

Pregunta 11: Indica cual de las siguientes afirmaciones es correcta:


a. La definición de un método abstracto está compuesta de una cabecera de método, sin que exista un
cuerpo del mismo.
b. Una clase abstracta es una clase que esta pensada para crear instancias.
c. Para que una subclase de una clase abstracta se transforme en abstracta, debe proporcionar
implementaciones para todos los métodos abstractos heredados.
d. Una interfaz Java es una especificación de un tipo (en la forma de un nombre de tipo y un conjunto de
métodos) que define alguna implementación para los métodos.
Pregunta 12: La ejecución del siguiente fragmento de código

í:mport. ja.va.x.swing."";

c1;;;ss P::)_�_ec:Fc:a�.<' e.xtends cTFrame

set.Ti tle ("Mi primer programa :,,Tráfico") ;


set.Size{400,100);

public static void main(Strins[J args)

fra.me.set.Visible{true);

Da lugar al siguiente programa

Pero este último programa tiene el problema de que cuando se cierra la ventana, a pesar de que dejamos
de verla, el programa no finaliza su ejecución. De esta forma, para que el programa funciones
correctamente, hemos de interceptar el evento que se produce cuando cerramos la ventana y hacer que el
programa termine su ejecución en ese momento.

Indique que clase hemos de definir en este caso y asociárselo al JFrame del ejemplo:
a. Actionlistener
b. Componentlistener
c. ltem Listener
d. Windowlistener

Pregunta 13: Indique cual de las siguientes afirmaciones es correcta en relación a la programación por
parejas:
a. Es uno de los elementos de una técnica que se conoce como programación extrema.
b. Consiste en programar una clase por duplicado con el objetivo de depurar los errores más fácilmente.
c. Es una manera de producir código, opuesta a la programación extrema en la que un solo programador
desarrolla las clases asignadas.
d. Era una técnica de programación tradicional que las empresas eliminaron para reducir costes.
Pregunta 14: En el siguiente fragmento de código hemos definido la ejecución de cinco bloques. Estos
bloques se ejecutarán dependiendo de las excepciones que se produzcan en cada caso.

try {

}catch (ArithmeticException e) {

}finally {

Indique cual de las siguientes afirmaciones es correcta:


a. El Bloque4 no se ejecutará si se produce una excepción de tipo aritmético en el Bloque2
b. El Bloque4 no se ejecutará si se produce un acceso a un objeto nulo (null) en el Bloque2
c. El Bloque4 se ejecutará antes que el Bloque3 si se produce una excepción de tipo aritmético en el
Bloque2
d. El Bloque4 se ejecutará antes de que la excepción producida por un acceso a un objeto nulo (null) en el
Bloque2 se propague hacia arriba

RESERVA 1: Indique cuál de las siguientes afirmaciones es correcta:


a. Los campos se conocen como variables de tipo de clase.
b. Los constructores permiten que cada objeto sea preparado adecuadamente cuando es creado.
c. El alcance de una variable define la sección de código desde donde la variable puede ser declarada pero
no accedida.
d. El tiempo de vida de una variable describe el número de veces que es utilizada en un método.

RESERVA 2: Indique cuál de las siguientes afirmaciones es correcta:


a. Una superclase es una clase que es implementada por otra.
b. Las clases que están vinculadas mediante una relación de herencia forman una jerarquía de herencia.
c. Una subclase es una clase que implementa a otra clase.
d. La herencia nos permite heredar pero no reutilizar en un nuevo contexto clases que fueron escritas
previamente.

PARTE PRÁCTICA [6,5 PUNTOS]:


La práctica del presente curso consiste en diseñar e implementar un sistema integrado de
gestión de un taller de vehículos. Todos los dueños de algún tipo de vehículo (moto, coche,
furgoneta, etc.) tienen experiencia en llevar su vehículo al taller para algún tipo de revisión y/o
reparación. Puede que sea una puesta a punto antes de las vacaciones o algún viaje largo, o
debido a un problema concreto o ruido que hace, o alguna fuga de líquido, etc. Hace años, el
responsable de un taller no haría más que apuntar en un libro una breve descripción del vehículo,
el motivo por el cual ha acudido al taller su dueño y algún número de contacto. Hoy en día, debido
en parte a la competencia entre talleres y al deseo de aportar servicios de calidad para poder
fidelizar al cliente, los talleres usan sistemas de gestión para todo el proceso de recepción,
procesado y facturación de cada vehículo que pasa por el taller.

En general, las funciones que tienen un sistema de gestión de un taller de coches son
varias:

• Recepción del vehículo: al entrar un vehículo en el taller hay que generar una ficha con los
datos (si ya no forma parte del registro histórico del taller) más importantes (marca, modelo,
matrícula, cliente, etc.), dejar constancia del motivo de la visita (problema mecánico, revisión,
etc.) e imprimir el formulario de autorización que el dueño tiene que firmar para autorizar el
trabajo.
• Asignación de los trabajos a los mecánicos: a medida que vayan terminando trabajos, el jefe
del taller les va asignando nuevos vehículos.
• Procesado de los vehículos: un mecánico, al terminar la reparación de un vehículo, acude al
sistema para ver los siguientes trabajos que le corresponden. Según la información del
sistema, tiene que averiguar el problema, llevar a cabo el trabajo correspondiente y dejar
constancia del proceso realizado en el sistema para que el comercial pueda informar al cliente
de que su vehículo está listo para recoger. Una vez que el mecánico termine con un coche, en
el sistema le aparece reflejado el siguiente vehículo asignado. Si por el motivo que sea (por
ejemplo, falta de piezas o que un cliente no haya dado su autorización a realizar una
reparación debido al coste), un mecánico deja un trabajo en un estado sin completar, anota en
el sistema el motivo y pasa al siguiente trabajo.
• Gestión de usuarios: altas, bajas, modificaciones de las personas que figuran en el sistema
(miembros del taller [jefe, mecánico, comercial] y clientes). La primera vez que acude un
cliente al taller hay que darle de alta en el sistema.
• Gestión de clientes por parte del comercial: comunicar a los clientes el precio de una
reparación, informarles de que su vehículo está listo para recoger, presentar ofertas especiales
(por ejemplo, revisión antes de la inspección técnica del vehículo [ITV] o puesta a punto para
las vacaciones, revisión de los neumáticos, frenos).

Se pide realizar las siguientes tareas:


a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios
para la aplicación explicada de la práctica durante el curso. Es necesario identificar la
estructura y las relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de
las clases necesarias para almacenar y gestionar esta información. Debe hacerse uso de los
mecanismos de herencia siempre que sea posible. Se valorará un buen diseño que favorezca la
reutilización de código y facilite su mantenimiento.
b) [2,0 puntos] Implementar un método (o métodos) que permita generar un listado por cada
mecánico de los vehículos reparados en un día determinado por dicho mecánico, indicando,
para cada uno de los vehículos, otros mecánicos que hayan intervenido, las piezas que se han
utilizado y una descripción de cada uno de los trabajos realizados. El listado aparecerá
ordenado ascendentemente por la matrícula del vehículo (en el listado aparecen antes
aquellos que tengan una matrícula más antigua). Justifique las opciones y decisiones que se
tomen.
e) [2,0 puntos] Implementar un método (o métodos) que implemente el libro de mantenimiento
digital. Este libro de mantenimiento consta de toda la información posible acerca de cada una
de las reparaciones hechas en el vehículo. El usuario puede acceder online a este servicio y
descargar dicha información. Justifique las opciones y decisiones que se tomen.
d) [1,5 puntos] Proporcione un método (o métodos) que permita mostrar por pantalla un
formulario básico en modo gráfico que permita recoger los parámetros necesarios para dar de
alta un nuevo cliente en el sistema. Se pide expresamente la parte gráfica (asumiendo que la
lógica de funcionamiento está desarrollada). El objetivo es ver el conocimiento y destreza en el
uso de las librerías Swing y/o AWT. No desarrolle código asociado a la funcionalidad del alta.
Justifique las opciones y decisiones que se tomen.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA� ESCUELA TÉCNICA SUPERIOR DE
INGENIERÍA INFORMÁTICA
719(U072 � PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA l
TECNOLOGÍAS DE LA INFORMACIÓN)
JUNIO 2018 � MODELO B � No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA- TEST [2,5 PUNTOS]:


Solo una de las respuestas es válida. Las respuestas correctas se puntuarán con +1.0, mientras que las
respondidas de manera incorrecta se puntuarán con -0.2 5. Las no contestadas no tendrán influencia ni
positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 14 preguntas iniciales del test
sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de alguna
de las 14 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso de que
una segunda pregunta de las 14 iniciales fuese anulada, entonces la segunda pregunta de reserva sustituiría
a esta segunda pregunta anulada. En aquellos hipotéticos casos en los que se produjese la anulación de una
tercera o sucesivas preguntas de las 14 iniciales, entonces sólo en ese caso, las preguntas tercera y sucesivas
anuladas se considerarían como correctas (al no existir más preguntas de reserva que las sustituyan).

Pregunta 1: Indica cual de las siguientes declaraciones es válida para el método main:

a. public static void main(String args[]);


b. static public void main(String);
c. public static void main(String );
d. public static int main(String args[]);

Pregunta 2: Indique el orden seguido en los ejemplos del texto de la bibliografía básica de la asignatura en
cuanto a la parte interna de una clase:

pub!ic dass NombreCiase


{
PARTE INTERNA DE UNA ClASE
}

a. Constructores, Métodos y Campos


b. Métodos, Constructores y Campos
c. Campos, Constructores y Métodos
d. Campos, Métodos y Constructores

Pregunta 3: Indica cual de las siguientes afirmaciones es correcta:

a. El lenguajeJava tiene tres tipos de ciclo: w hile, w hile-do y for.


b. En caso de un bucle no relacionado con colecciones el bucle for-each no tiene utilidad.
c. El tipo de la variable de ciclo no tiene porqué ser el mismo que el tipo del elemento declarado para la
colección que estamos recorriendo con un ciclo.
d. Un índice es un objeto que proporciona funcionalidad para recorrer todos los elementos de una
colección.
Pregunta 4: Dado el siguiente fragmento de código:

int />.. = 9;
float g = 3.3F;
chmC = 'w';

System.out.println(i\ + B > 12 );
System.out.println(i\ >= 8 && C != 'w' ) ;
System.out.println((C: == 'e') 11 ((;\ + B) == 12 ));

Indica cual será la salida por pantalla (cada valor en una línea diferente):

a. true true false


b. true false true
c. true false false
d. false false false

Pregunta 5: Supongamos que queremos implementar una Agenda, ¿cuál sería la salida del siguiente
código?

pub!ic dass Agenda {

pubik statk void main(String argv[]){


Agenda agenda = new Agenda();

protected Agenda(){
for(inti= O; i<10; i++){
System.out.println(i);

a. Error de Compilación ya que los constructores no pueden ser declarados como "protected".
b. Error en tiempo de ejecución ya que los constructores no pueden ser declarados como "protected".
c. Compilación correcta y salida de los dígitos de O a 10.
d. Compilación correcta y salida de los dígitos de O a 9.

Pregunta 6: Indica cual de las siguientes afirmaciones es correcta:

a. La interfaz de una clase describe lo que una clase hace y cómo se puede utilizar mostrando su
implementación.
b. El código fuente completo que define una clase es la interfaz de dicha clase.
c. Se dice que un objeto es inmutable si su contenido o estado no puede cambiarse después de crearlo
excepto si la interfaz es mutable.
d. La documentación de la librería de clasesJava muestra detalles acerca de todas las clases de la librería.
Pregunta 7: Indique cuales de las siguientes expresiones resultan verdaderas:

1. !( 4<5 )
2. ( 2 > 2 ) 11 ( ( 4 == 4 ) && ( 1 < o ) )
3. ( 2 > 2 ) 11 ( 4 == 4 ) && ( 1< o )
4. ( 2 > 2 ) 11 !( ( 4 == 4 ) && ( 1<o ) )
5. ( 34 != 33 ) && ! false

a. Las expresiones 4 y 5.
b. Las expresiones 3 y 4.
c. Las expresiones 2 y 4.
d. Las expresiones 3 y 5.

Pregunta 8: Indica cual de las siguientes afirmaciones es correcta:

a. El término cohesión describe la interconexión de las clases.


b. El término acoplamiento describe lo bien que una unidad de código se corresponde con una tarea
lógica o con una entidad.
c. La duplicación de código produce errores de ejecución.
d. Una adecuada encapsulación de las clases reduce el acoplamiento y conduce, por tanto, a un mejor
diseño.

Pregunta 9: Indica cual de las siguientes afirmaciones es correcta:

a. La prueba es la actividad de descubrir si una pieza de código produce el comportamiento pretendido.


b. La depuración es el intento de localizar y corregir el origen de un error.
c. La prueba de unidad se refiere a las pruebas de las partes individuales de una aplicación, como los
métodos y las clases.
d. Todas las respuestas anteriores son correctas.

Pregunta 10: Dada la siguiente jerarquía de herencia:

Indica cual de las siguientes asignaciones es correcta:

a. Vehicle v1 = new Vehicle();


b. Vehicle v2 = new Bicycle();
c. Vehicle v3 = new Car();
d. Todas las asignaciones anteriores son correctas.
Pregunta 11: Indica cual de las siguientes afirmaciones es correcta:

a. El tipo dinámico de una variable v es el tipo tal como está declarado en el código fuente.
b. El tipo estático de una variable v es el tipo del objeto que está almacenado actualmente en v.
c. Declarar un campo o un método protegido impide acceder directamente a él desde las subclases.
d. Todas las afirmaciones anteriores son falsas.

Pregunta 12: Indique cual de las siguientes opciones declarará un método en una clase que fuerza a una
subclase a implementarlo:

a. static void methoda (double dl) {}


b. abstract public void methoda();
c. public native double methoda();
d. protected void methoda (double dl){}

Pregunta 13: ¿Qué significa el siguiente fragmento de códigoJava?: String saludar() { return "Hola"; }

a. Hay un método "String saludar" que no recibe ningún parámetro de entrada y devuelve el valor "Hola".
b. Hay una variable "String" cuyo valor es "saludar() { return "Hola"; }"
c. Hay un método "saludar" que no recibe ningún parámetro de entrada y devuelve una cadena (String)
cuyo valor es "Hola".
d. El fragmento no representa un fragmento de código legal enJava.

Pregunta 14: En el siguiente fragmento de código hemos definido la ejecución de cinco bloques. Estos
bloques se ejecutarán dependiendo de las excepciones que se produzcan en cada caso.

t ry {

}catch (ArithmeticException e) {

}fi na lly {

Indique cual de las siguientes afirmaciones es correcta:

a. El Bloque4 se ejecutará antes de que la excepción producida por un acceso a un objeto nulo (null) en el
Bloque2 se propague hacia arriba
b. El Bloque4 no se ejecutará si se produce una excepción de tipo aritmético en el Bloque2
c. El Bloque4 no se ejecutará si se produce un acceso a un objeto nulo (null) en el Bloque2
d. El Bloque4 se ejecutará antes que el Bloque3 si se produce una excepción de tipo aritmético en el
Bloque2

RESERVA 1: Indique cuál de las siguientes afirmaciones es correcta en relación a BlueJ:

a. Un punto de interrupción es un indicador asociado a un conjunto de líneas de código.


b. Los puntos de interrupción se definen mediante la ventana del editor.
c. Los puntos de interrupción solo se pueden definir dentro de las clases abstractas.
d. Todas las afirmaciones anteriores son falsas.
RESERVA 2: Dado el siguiente fragmento de código,

int electrodomestico = 1;
boo!ean[] ventas = new boolean[3];
boo!ean financiado = ventas [electrodomestico];

Indica cual de las siguientes afirmaciones es correcta en relación al valor de la variable aprobado.

a. financiado tiene el valor false


b. financiado tiene el valor O
c. financiado tiene el valor null
d. Se produce una excepción y financiado no posee ningún valor

PARTE PRÁCTICA [6,5 PUNTOS]:

La Práctica del presente curso va a consistir en diseñar e implementar un sistema integrado de gestión de
una tienda de electrodomésticos. Hoy en día las tiendas de electrodomésticos además de disponer de una
gran cantidad de productos en sus tiendas, disponen de diferentes perfiles de empleados (técnicos, cajeros,
financiación y postventa) para atender de la mejor manera posible a sus clientes. Además, los clientes
disponen de un perfil que además de sus datos personales incluyen un historial de compras, generación de
facturas, descarga de manuales, comprobación de estado de garantía y promociones. De esta forma, la
práctica consiste en desarrollar un sistema de gestión que englobe todas estas características teniendo en
cuenta un diseño orientado a objetos.

En general, las funciones que tienen un sistema de gestión de una tienda de electrodomésticos son varias:

• Venta de un electrodoméstico (cajero): cuando un cliente pasa por la línea de cajas es


necesario generar una ficha de cliente en el caso de que no disponga de ella. El
identificador principal es el DNI y los datos más importantes son el nombre, apellidos, dni,
domicilio y número de teléfono. Esta ficha tendrá disponible un histórico de los productos
comprados y su fecha de adquisición. En el caso de solicitar financiación, deberá constar en
la ficha y el cliente debería pasar por la oficina de financiación para obtener el visto bueno.
• Financiación (financiación): El empleado de la oficina de financiación recibirá clientes que
previamente hayan pasado por la línea de cajas para comprar productos y analizará la ficha
de financiación. Solicitará la última nómina al cliente, dejando constancia de la cantidad en
la ficha del cliente y en caso de que el cargo mensual no supere el 15% de la nómina en un
máximo de financiación de 60 meses, la financiación se aprobará.
• Reparación de Electrodomésticos (técnico): Los clientes podrán llevar sus productos
comprados en la tienda a reparar. Las condiciones de reparación serán las siguientes:
reparación gratuita en los dos primeros años. A partir de esa fecha, se cargará un importe
al cliente dependiendo de la reparación efectuada.
• Devolución de electrodoméstico (postventa): Un cliente, presentando su DNI, podrá
devolver uno o varios electrodomésticos en el caso de que el periodo de compra no supera
los3 meses.
• Gestión comercial (comercial): Este empleado generará una serie de comunicaciones con el
cliente ofreciendo diferentes posibilidades de compra.
• Gestión de usuarios: altas, bajas, modificaciones de las personas que figuran en el sistema
(empleados -- técnicos, cajeros, financiación, postventa y comerciales -- y clientes). La
primera vez que acude un cliente a la tienda hay que darle de alta en el sistema.
• Gestión de clientes: Cada uno de los empleados tendrán un tipo de relación con el cliente
teniendo que dejar constancia en la ficha del cliente la operación realizada y sus detalles
(cliente, empleado que atiende, tipo de operación, productos involucrados, fecha, etc.)
Se pide realizar las siguientes tareas:

a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios para la
aplicación explicada de la práctica durante el curso. Es necesario identificar la estructura y las
relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de las clases necesarias
para almacenar y gestionar esta información. Debe hacerse uso de los mecanismos de herencia
siempre que sea posible. Se valorará un buen diseño que favorezca la reutilización de código y facilite
su mantenimiento.
b) [2,0 puntos] Implementar un método (o métodos) que permita generar un listado por cada cliente de
los electrodomésticos comprados en un día determinado, indicando, para cada uno de los
electrodomésticos, otros empleados que hayan intervenido, como el cajero, financiación o postventa.
El listado aparecerá ordenado ascendentemente por el precio de venta del electrodoméstico (en el
listado aparecen antes aquellos que tengan un precio menor). Justifique las opciones y decisiones que
se tomen.
e) [2,0 puntos] Implementar un método (o métodos) que implemente la garantía digital. Esta garantía
consta de toda la información posible acerca de la venta, reparaciones y financiación hechas en el
electrodoméstico. El usuario puede acceder online a este servicio y descargar dicha información.
Justifique las opciones y decisiones que se tomen.
d) [1,5 puntos] Implementar un método (o métodos) que permita gestionar las diferentes ofertas y
promociones que puede ofrecer la tienda: ofertas en los principales periodos de compra (navidades,
días especiales, etc.) y rebajas en los dos periodos típicos (Enero, Julio, Black Friday, etc.).
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA� ESCUELA TÉCNICA SUPERIOR DE
INGENIERÍA INFORMÁTICA
719(U072 � PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA l
TECNOLOGÍAS DE LA INFORMACIÓN)
JUNIO� MODELO A� No ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA TEST [2,5 PUNTOS]:


-

Solo una de las respuestas es válida. Las respuestas correctas se puntuarán con +1.0, mientras que las
respondidas de manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni
positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 14 preguntas iniciales del
test sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de
alguna de las 14 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso
de que una segunda pregunta de las 14 iniciales fuese anulada, entonces la segunda pregunta de reserva
sustituiría a esta segunda pregunta anulada. En aquellos hipotéticos casos en los que se produjese la
anulación de una tercera o sucesivas preguntas de las 14 iniciales, entonces sólo en ese caso, las preguntas
tercera y sucesivas anuladas se considerarían como correctas (al no existir más preguntas de reserva que
las sustituyan).

Pregunta 1: ¿Cuál de las siguientes sentencias se ejecuta de manera correcta?

a. String animales [] = {"Perro", "Gato", " Lobo"};


b. String animales = {"Perro", "Gato", "Lobo"};
c. String animales [] = new String {" Perro" "Gato" " Lobo"};
d. String animales [] = { "Perro" "Gato" "Lobo"};

Pregunta 2: ¿En qué condiciones puede volverse a invocar un constructor de una clase para un objeto
después de que ese objeto haya sido creado?

a. Cuando queremos resetear todos los campos del objeto a sus valores iniciales.
b. Cuando se ha creado un objeto abstracto y se le quiere dar valores iniciales a sus atributos.
c. Cuando se implementa una interfaz para el objeto en cuestión.
d. Nunca.

Pregunta 3: El uso de índices fuera de los límites legales de una matriz hará que se produzca ...

a. Se produce un error en tiempo de ejecución denominado ArraylndexOutOfBoundException


b. Se produce un error en tiempo de compilación denominado ArraylndexOutOfBoundException
c. Se produce un error en tiempo de ejecución denominado ArraylndexOutOfBoundError
d. Se produce un error en tiempo de compilación denominado ArraylndexOutOfBoundError

Pregunta 4: Un método cohesionado ...

a. Será responsable de al menos una tarea bien definida, pero puede serlo de más.
b. Será responsable, idealmente, de una y sólo una tarea o entidad bien definida coherente.
c. Es aquel método abstracto que se ha instanciado en una clase determinada.
d. Es aquel que se crea en una clase interna para ser invocado desde la clase circundante.
Pregunta 5: Sea el siguiente fragmento de código modificado de la clase Mailltem mostrada en el libro de
texto:

1 public class Mailltem {


2 static int num1 = 10;
3 public static void main (String args []) {
4 int num2 = 5;
5 new Mailltem ();
6
7 public Mailltem () {
8 int aux = this.num2;
9 if (aux > 1) {
10 System.out.println(aux);
11
12
13

¿Cuál es el resultado que produce?

a. Se produce un error de compilación.


b. Se produce un error de ejecución.
c. No produce ningún error pero no muestra nada por pantalla.
d. No se produce ningún error y muestra por pantalla el valor 5.

Pregunta 6: Sea el siguiente código modificado de la clase MusicOrganizer mostrada en el libro base:

1 import java.util. *;
2 public class MusicOrganizer {
3 public static void main (String args []) {
4 Arraylist <String> a = new Arraylist ();
5 for (int i=O; i<=5; i++)
6 {
7 a.add("Hola");
8
9 System.out.println("Funciona");
10
11

¿Cuál es el resultado de compilar y ejecutar este código?

a. Se produce un error de ejecución al definir un Arraylist de 5 elementos y querer insertar 6 elementos.


b. No se produce ningún tipo de error y proporciona el resultado por pantalla "Funciona".
c. La línea 4 provoca un warning pero se ejecuta sin problemas proporcionando el resultado por pantalla
"Funciona".
d. La línea 7 provoca un warning pero se ejecuta sin problemas proporcionando el resultado por pantalla
"Funciona".
Pregunta Supongamos que reescribimos el ejemplo BouncingBall del libro de la forma en que se muestra
7:

a continuación:

1 public class BouncingBall {


2 int n;
3 public static void main (String args [])
4 {
5 if (n!=O)
6 {
7 n = n + 1;
8 System.out.println("EI número es " + n);
9
10
11

¿Cuál es la línea que provoca que el código produzca uno o varios errores de compilación?

a. Línea 5.
b. Línea 3.
c. Línea 2.
d. Línea 1.

Pregunta 8: Supongamos que reescribimos el ejemplo BouncingBall del libro de la forma en que se muestra
a continuación:

1 import java.utii.Random;
2 public class BouncingBall {
3 public static void main (String args []) {
4 Random randomGenerator;
5 randomGenerator = new Random();
6 int index = randomGenerator.nextlnt();
7 System.out.println(index);
8
9

¿Cuál es la línea que provoca que el código produzca uno o varios errores de compilación?

a. No se produce error de compilación


b. En la línea 4
c. En la línea 5
d. En la línea 6

Pregunta 9: ¿Cómo se llama el entorno de pruebas que soporta la prueba estructurada de unidades y las
pruebas de regresión en Java?

a. JDK
b. JBoss
c. Javadoc
d. JUnit
Pregunta 10: Respecto al constructor de la subclase ...

a. Debe siempre invocar al constructor de su superclase como primera instrucción. Si no incluye esta
llamada, Java intentará insertar una llamada automáticamente.
b. No debe invocar nunca al constructor de su superclase como primera instrucción. Si la incluye esta
llamada, Java ignorará esta llamada automáticamente.
c. Debe siempre invocar al constructor de su superclase como última instrucción. Si no incluye esta
llamada, Java intentará insertar una llamada automáticamente.
d. Debe siempre invocar al constructor de su superclase como última instrucción. Si no incluye esta
llamada, Java generará un error de compilación.

Pregunta 11: Respecto a las variables polimórficas ...

a. Toda variable de objeto en Java es potencialmente polimórfica.


b. Son aquellas que exclusivamente pertenecen a clases abstractas.
c. Son la instanciación de una clase abstracta, permitiendo sólo almacenar objetos de ese tipo.
d. Son aquellas que implementan una interfaz y que provienen de una clase abstracta.

Pregunta 12: Si una clase B extiende una clase abstracta A que tiene un método abstracto met, ¿qué
podemos afirmar?

a. Que necesariamente B es abstracta.


b. Que si B implementa el método met, entonces seguro que B no es abstracta.
c. Que no puedo crear instancias de A.
d. Que puedo crear instancias de A.

Pregunta 13: Se define como excepción no comprobada ...

a. Aquellas subclases de la clase estándar RunnertimeException


b. Aquellas subclases de la clase estándar RunneableTimeException
c. Aquellas subclases de la clase estándar RunningtimeException
d. Aquellas subclases de la clase estándar RuntimeException

Pregunta 14: Según el texto de la bibliografía básica de la asignatura, ¿cuál de las siguientes afirmaciones
NO es correcta?
a. Los campos almacenan datos de manera no persistente dentro de un objeto.
b. Los constructores son responsables de garantizar que un objeto se configure apropiadamente en el
momento de crearlo por primera vez.
c. Los métodos implementan el comportamiento de un objeto; proporcionan su funcionalidad.
d. Los campos se definen fuera de los constructores y métodos.

RESERVA 1: ¿Cuál de las siguientes es una característica de la clase java.lang.Error?


a. extends Exception.
b. implements Throwable.
c. implements Exception.
d. Ninguna de las anteriores.

RESERVA 2: Según el texto de la bibliografía básica de la asignatura, ¿qué se entiende por abstracción?
a. Proceso de dividir un todo en partes bien definidas que puedan construirse y examinarse por separado
y que interactúen de formas bien definidas.
b. Capacidad de ignorar los detalles de las distintas partes, para centrar la atención en un nivel superior
de un problema.
c. Capacidad de dividir un todo en partes bien definidas ignorando los detalles de las distintas partes.
d. Ninguna de las anteriores.
PARTE PRÁCTICA [6,5 PUNTOS]:

La Práctica del presente curso va a consistir en diseñar e implementar un sistema integrado de gestión de
una tienda de electrodomésticos. Hoy en día las tiendas de electrodomésticos además de disponer de una
gran cantidad de productos en sus tiendas, disponen de diferentes perfiles de empleados (técnicos, cajeros,
financiación y postventa) para atender de la mejor manera posible a sus clientes. Además, los clientes
disponen de un perfil que además de sus datos personales incluyen un historial de compras, generación de
facturas, descarga de manuales, comprobación de estado de garantía y promociones. De esta forma, la
práctica consiste en desarrollar un sistema de gestión que englobe todas estas características teniendo en
cuenta un diseño orientado a objetos.

En general, las funciones que tienen un sistema de gestión de una tienda de electrodomésticos son varias:

• Venta de un electrodoméstico (cajero): cuando un cliente pasa por la línea de cajas es


necesario generar una ficha de cliente en el caso de que no disponga de ella. El
identificador principal es el DNI y los datos más importantes son el nombre, apellidos, dni,
domicilio y número de teléfono. Esta ficha tendrá disponible un histórico de los productos
comprados y su fecha de adquisición. En el caso de solicitar financiación, deberá constar en
la ficha y el cliente debería pasar por la oficina de financiación para obtener el visto bueno.
• Financiación (financiación): El empleado de la oficina de financiación recibirá clientes que
previamente hayan pasado por la línea de cajas para comprar productos y analizará la ficha
de financiación. Solicitará la última nómina al cliente, dejando constancia de la cantidad en
la ficha del cliente y en caso de que el cargo mensual no supere el 15% de la nómina en un
máximo de financiación de 60 meses, la financiación se aprobará.
• Reparación de Electrodomésticos (técnico): Los clientes podrán llevar sus productos
comprados en la tienda a reparar. Las condiciones de reparación serán las siguientes:
reparación gratuita en los dos primeros años. A partir de esa fecha, se cargará un importe
al cliente dependiendo de la reparación efectuada.
• Devolución de electrodoméstico (postventa): Un cliente, presentando su DNI, podrá
devolver uno o varios electrodomésticos en el caso de que el periodo de compra no supera
los 3 meses.
• Gestión comercial (comercial): Este empleado generará una serie de comunicaciones con el
cliente ofreciendo diferentes posibilidades de compra.
• Gestión de usuarios: altas, bajas, modificaciones de las personas que figuran en el sistema
(empleados -- técnicos, cajeros, financiación, postventa y comerciales -- y clientes). La
primera vez que acude un cliente a la tienda hay que darle de alta en el sistema.
• Gestión de clientes: Cada uno de los empleados tendrán un tipo de relación con el cliente
teniendo que dejar constancia en la ficha del cliente la operación realizada y sus detalles
(cliente, empleado que atiende, tipo de operación, productos involucrados, fecha, etc.)

Se pide realizar las siguientes tareas:

a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios para la
aplicación explicada de la práctica durante el curso. Es necesario identificar la estructura y las
relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de las clases necesarias
para almacenar y gestionar esta información. Debe hacerse uso de los mecanismos de herencia
siempre que sea posible. Se valorará un buen diseño que favorezca la reutilización de código y facilite
su mantenimiento.
b) [2,0 puntos] Implementar un método (o métodos) que permita generar un listado por fabricante de los
electrodomésticos que hay en stock, indicando, para cada uno de los fabricantes, el número total de
electrodomésticos diferentes existente. El listado aparecerá ordenado descendentemente por el
nombre del fabricante, y dentro de él, los electrodomésticos de ese fabricante aparecerán ordenados
ascendentemente por precio de venta del electrodoméstico (en el listado aparecen antes aquellos que
tengan un precio menor). Justifique las opciones y decisiones que se tomen.

e) [2,0 puntos] Implementar un método (o métodos) que desarrolle una tarjeta de puntos del cliente.
Cada cliente acumulará el 10% del precio de cada compra realizada, de modo que esa cantidad puede
ser usada en una próxima compra. Cuando se va a comprar, si hay disponible puntos, podrán usarse
hasta para pagar el 50% de la siguiente compra. Por ejemplo, si tenemos 240 puntos acumulados y
compramos un lavavajillas de 300 €, podremos usar hasta 150 puntos (el 50% del precio total de la
compra), y pagar el resto (150 €) en dinero. De este modo, al finalizar la compra, se habrán consumido
150 puntos y se habrán pagado 150 €, quedando en la tarjeta de puntos del cliente 90 puntos restantes
(a los 240 puntos que tenía se le han descontado los 150 puntos empleados en la compra). Justifique
las opciones y decisiones que se tomen.

d) [1,5 puntos] Implementar un método (o métodos) gestionar la facturación de un cliente. Así, el sistema
generará, para un cliente determinado, un listado de todas las facturas que el cliente ha generado
entre dos meses suministrados a la aplicación, y proporcionará también la información de las diferentes
ofertas que se le han aplicado al mismo. La información la mostrará desglosada por meses, así como el
resumen global. Justifique las opciones y decisiones que se tomen.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA� ESCUELA TÉCNICA SUPERIOR DE
INGENIERÍA INFORMÁTICA
71901072 �PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA 1
TECNOLOGÍAS DE LA INFORMACIÓN)
SEPTIEMBRE 2018 �MODELO B � NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL

PARTE TEÓRICA - TEST [2,5 PUNTOS]:


Solo una de las respuestas es válida. Las respuestas correctas se puntuarán con + 1.0, mientras que las
respondidas de manera incorrecta se puntuarán con -0.25. Las no contestadas no tendrán influencia ni
positiva ni negativa en la nota.

Las preguntas de reserva sólo tendrán utilidad en el caso de que alguna de las 14 preguntas iniciales del
test sea anulada por cualquier circunstancia. Caso de ocurrir este hecho, si se produjera la anulación de
alguna de las 14 preguntas iniciales, la primera pregunta de reserva sustituiría a la pregunta anulada. Caso
de que una segunda pregunta de las 14 iniciales fuese anulada, entonces la segunda pregunta de reserva
sustituiría a esta segunda pregunta anulada. En aquellos hipotéticos casos en los que se produjese la
anulación de una tercera o sucesivas preguntas de las 14 iniciales, entonces sólo en ese caso, las preguntas
tercera y sucesivas anuladas se considerarían como correctas (al no existir más preguntas de reserva que
las sustituyan).

Pregunta 1: Dado el siguiente fragmento de código:

l. public class Suma {


2. static int n;
3. public static void main (String args []) {
4. for (int j = O ; j++; j < 10) {
5 • if ( n! =O) {
6. n = n + j;
7. System.out.println("El número es " + n);
8. }
9. }
10. }
11. }

¿Cuál es la línea que provoca que el código produzca uno o varios errores de compilación?
a. No se produce error de compilación
b. En la línea 4
c. En la línea 5
d. En la línea 6

Pregunta 2: Dado el siguiente fragmento de código:


int A = 12 ;
float e = 9.9F;
char B = 'a';

System.out.println(A + B < 12 );
System.out.println(A >= 8 11 e != 'w');
System.out.println((e == 'e') && ((A + B) 12 ));

Indica cual será la salida por pantalla (cada valor en una línea diferente):
a. true false true
b. false true false
c. true false false
d. False false false
Pregunta 3: Dada la siguiente jerarquía de herencia:

Electrodomestico

Televisor Lavavajillas

Indica cual de las siguientes asignaciones es correcta:

a. Electrodomestico el= new Lavavajillas();


b. Televisor t1 = new Electrodomestico();
c. Lavavajillas 11 = new Electrodomestico();
d. Todas las asignaciones anteriores son correctas.

Pregunta 4: Un método de modificación o mutador:

a. Devuelve siempre información sobre el estado de un objeto.


b. Permite modificar el estado únicamente de los campos públicos de la clase.
e. Habitualmente devuelve void.
d. Permite acceder al constructor de la clase que lo define.

Pregunta 5: Se dice que un objeto es inmutable si:

a. Existirá más que una copia de su contenido o estado después de su creación.


b. Su contenido o estado es visible fuera de la clase en la que esta definido.
c. Su contenido o estado cambia después de su creación.
d. Su contenido o estado no puede cambiarse después de su creación.

Pregunta 6: Según el texto de la bibliografía básica de la asignatura, ¿qué almacenan las variables
declaradas a partir de una clase?

a. Objetos.
b. Copias de objetos.
c. Referencias a objetos.
d. Ninguna de las anteriores.
Pregunta 7: Queremos compilar el siguiente código que se puede encontrar en el texto base de la
asignatura y que ha sido modificado convenientemente. ¿Cuál es el resultado que obtenemos al compilar?

public class Prueba {


public static void main (String args[])
String cadenal = new String("ejemPLO");
String cadena2 = new String("ejemplo");
cadenal.toLowerCase();
if (cadenal.toString() .equals(cadena2.toString()))
System.out.println("Son iguales");

else {
System.out.println("Son diferentes");

a. Se produce una excepción y la ejecución falla.


b. Se imprime por pantalla el mensaje: Son diferentes.
c. Se imprime por pantalla el mensaje: Son iguales.
d. Ninguna de las anteriores.

Pregunta 8: Según el texto de la bibliografía básica de la asignatura, ¿cuál de las siguientes afirmaciones SÍ
es correcta respecto al texto de una clase?

a. El propósito principal del envoltorio exterior es proporcionar un constructor a la clase.


b. El envoltorio exterior permite sobrecargar cualquier método de la clase.
c. El envoltorio exterior contiene la cabecera de la clase.
d. Ninguna de las anteriores.

Pregunta 9: Para lograr que una clase entre en el depurador en BlueJ a hacer una instancia en BlueJ, ¿qué
hay que hacer con el código fuente?:
a. Compilarlo de nuevo con la opción Debug activado.
b. Lanzar directamente el depurador.
c. Meter un punto de ruptura.
d. Se hace automáticamente al encontrar un error en el código.

Pregunta 10: ¿Qué significa el siguiente fragmento de código Java?: int uno(int i) { return 1 + i;}

a. Hay un método "int uno" que no recibe ningún parámetro de entrada y devuelve el valor l.
b. Hay un método "uno" que recibe un parámetro de entrada i y devuelve un entero cuyo valor es 1 + l.
c. Hay una variable "int" cuyo valor es "uno(int i) { return 1 + i; }"
d. El fragmento no representa un fragmento de código legal en Java.

Pregunta 11: Un método cohesionado ...

a. Será responsable de al menos una tarea bien definida, pero puede serlo de más.
b. Es aquel método abstracto que se ha instanciado en una clase determinada.
c. Es aquel que se crea en una clase interna para ser invocado desde la clase circundante.
d. Será responsable de una y sólo una tarea bien definida.
Pregunta 12: ¿Cuál de las siguientes sentencias se ejecuta de manera correcta?

a. String electrodomesticos [] = new String {"Bosh" "Balay" "Siemens"};


b. String electrodomesticos [] = {"Bosh", "Balay", "Siemens" } ;
c. String electrodomesticos = {"Bosh", "Balay", "Siemens" } ;
d. String electrodomesticos [] = { "Bosh" "Balay" "Siemens" } ;

Pregunta 13: Indica cual de las siguientes afirmaciones es correcta:

a. Los campos también son conocidos como variables de estado.


b. El alcance de una variable define la sección de código desde donde la variable puede ser declarada.
c. El tiempo de vida de una variable describe el número de veces que es utilizada en un método.
d. Los constructores permiten que cada objeto sea preparado adecuadamente cuando es creado.

Pregunta 14: ¿Cuál sería la salida del siguiente código?

public class Agenda {

public final void metodoAgregarContacto(){


System.out.println("Agregar Elemento");
}
}

public class MiAgenda {

public static void main(String argv[]){


Agenda agenda = new Agenda();
agenda.metodoAgregarContacto();
}
}

a. Error en tiempo de ejecución indicando que Agenda no ha sido definida como final.
b. Error en tiempo de compilación indicando que una clase con métodos finales deben ser declarada
también como final.
c. Error en tiempo de compilación indicando que no se puede heredar de una clase con métodos finales.
d. Éxito en la compilación y salida "Agregar Elemento".

RESERVA 1: Indica cual de las siguientes afirmaciones es correcta:

a. Una aserción es una expresión que establece una condición que esperamos que resulte verdadera.
b. Un seguimiento es la actividad de trabajar a través de un segmento de código línea por línea, mientras
se observan cambios de estado y otros comportamientos de la aplicación.
c. La prueba es la actividad de descubrir si una pieza de código produce el comportamiento pretendido.
d. Todas las respuestas anteriores son correctas.
RESERVA 2: Sea el siguiente fragmento de código modificado de la clase Mailitem mostrada en el libro
de texto:

1 public class Mailitem {


2 static int num1 5; =

3 public static void main (String args []) {


4 int num2 10; =

5 new Mailitem ();


6 }
7 public Mailitem () {
8 int aux this.num1;
=

9 if (aux > 1) {
10 System.out.println(aux);
11 }
12 }
13 }

¿Cuál es el resultado que produce?


a. Se produce un error de compilación.
b. No se produce ningún error y muestra por pantalla el valor 5.
c. No produce ningún error pero no muestra nada por pantalla.
d. No se produce ningún error y muestra por pantalla el valor 10.

PARTE PRÁCTICA [6,5 PUNTOS]:

La Práctica del presente curso va a consistir en diseñar e implementar un sistema integrado de gestión de
una tienda de electrodomésticos. Hoy en día las tiendas de electrodomésticos además de disponer de una
gran cantidad de productos en sus tiendas, disponen de diferentes perfiles de empleados (técnicos, cajeros,
financiación y postventa) para atender de la mejor manera posible a sus clientes. Además, los clientes
disponen de un perfil que además de sus datos personales incluyen un historial de compras, generación de
facturas, descarga de manuales, comprobación de estado de garantía y promociones. De esta forma, la
práctica consiste en desarrollar un sistema de gestión que englobe todas estas características teniendo en
cuenta un diseño orientado a objetos.

En general, las funciones que tienen un sistema de gestión de una tienda de electrodomésticos son varias:

• Venta de un electrodoméstico (cajero): cuando un cliente pasa por la línea de cajas es necesario
generar una ficha de cliente en el caso de que no disponga de ella. El identificador principal es el DNI y
los datos más importantes son el nombre, apellidos, dni, domicilio y número de teléfono. Esta ficha
tendrá disponible un histórico de los productos comprados y su fecha de adquisición. En el caso de
solicitar financiación, deberá constar en la ficha y el cliente debería pasar por la oficina de financiación
para obtener el visto bueno.
• Financiación (financiación): El empleado de la oficina de financiación recibirá clientes que previamente
hayan pasado por la línea de cajas para comprar productos y analizará la ficha de financiación.
Solicitará la última nómina al cliente, dejando constancia de la cantidad en la ficha del cliente y en caso
de que el cargo mensual no supere el 15% de la nómina en un máximo de financiación de 60 meses, la
financiación se aprobará.
• Reparación de Electrodomésticos (técnico): Los clientes podrán llevar sus productos comprados en la
tienda a reparar. Las condiciones de reparación serán las siguientes: reparación gratuita en los dos
primeros años. A partir de esa fecha, se cargará un importe al cliente dependiendo de la reparación
efectuada.
• Devolución de electrodoméstico (postventa): Un cliente, presentando su DNI, podrá devolver uno o
varios electrodomésticos en el caso de que el periodo de compra no supera los 3 meses.
• Gestión comercial (comercial): Este empleado generará una serie de comunicaciones con el cliente
ofreciendo diferentes posibilidades de compra.
• Gestión de usuarios: altas, bajas, modificaciones de las personas que figuran en el sistema (empleados­
- técnicos, cajeros, financiación, postventa y comerciales -- y clientes). La primera vez que acude un
cliente a la tienda hay que darle de alta en el sistema.
• Gestión de clientes: Cada uno de los empleados tendrán un tipo de relación con el cliente teniendo que
dejar constancia en la ficha del cliente la operación realizada y sus detalles (cliente, empleado que
atiende, tipo de operación, productos involucrados, fecha, etc.)

Se pide realizar las siguientes tareas:

a) [1,0 puntos] Diseñar utilizando un paradigma orientado a objetos, los elementos necesarios para la
aplicación explicada de la práctica durante el curso. Es necesario identificar la estructura y las
relaciones de herencia (mediante el uso de un diagrama de clases) y de uso de las clases necesarias
para almacenar y gestionar esta información. Debe hacerse uso de los mecanismos de herencia
siempre que sea posible. Se valorará un buen diseño que favorezca la reutilización de código y facilite
su mantenimiento.

b) [1,5 puntos] Implementar un método (o métodos) para gestionar la devolución de electrodomésticos


(postventa): Un cliente, presentando su DNI, podrá devolver uno o varios electrodomésticos en el caso
de que el periodo de compra no supera a los 3 meses.

e) [1,5 puntos] Implementar un método (o métodos) para gestionar el plan Renove de Electrodomésticos
que ofrece descuentos a los usuarios clientes para la sustitución de frigoríficos, lavadoras o lavavajillas
con el etiquetado energético de clase A+++. Dicha oferta va en función del tipo de electrodoméstico:
frigoríficos (150€), lavadoras (80€), o lavavajillas (110€). El sistema debería almacenar los datos del
electrodoméstico, del cliente y del aparato antiguo.

d) [2,5 puntos] Se quiere extender el negocio de la tienda a la venta en línea a través de una página Web.
No es necesario desarrollar el sitio Web. Lo que se pide es el método (o métodos) que gestiona(n) un
catálogo para el sitio Web. Además de los datos técnicos de los electrodomésticos, fotos, etc., tendrá
que contener datos sobre las opiniones de los clientes de la tienda en línea sobre ellos.