UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA )
ENERO / FEBRERO 2005 NO ESTÁ PERMITIDO PERMITIDO EL USO DE MATERIAL ADICIONAL PRIMERA SEMANA
• • • •
Para la nota del examen, el Test vale el 30% y el Problema vale el 70%. El Test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el Test en una hoja de lectura óptica . El código de asignatura es 621040 y el tipo A. Resuelva el Problema en una hoja aparte ( máximo 2 caras ), indicando su nombre y el Centro Asociado en el que ha realizado la práctica.
Primera Parte: Test 1. ¿Cuántos Terabytes hay en un Gigabyte? a. 1/2 b. 2 c. 1/1024 d. 1024. 2. ¿Qué es la memoria RAM? a. Memoria permanente de acceso aleatorio. b. Memoria de sólo lectura. c. Memoria volátil de acceso directo. d. Memoria donde donde se almacena almacena la configuración de de los componentes componentes del ordenador. 3. ¿Cuál de las siguientes afirmaciones es falsa? a. Programar con lenguajes de bajo nivel exige conocer la estructura del equipo. b. Se llama lenguaje máquina al lenguaje ensamblador. c. El lenguaje ensamblador es de bajo nivel. d. Los lenguajes lenguajes orientados orientados a objetos son de alto nivel. 4. Supongamos que necesitamos hacer una compra de un billete de avión por Internet. ¿Qué proceso sería el más adecuado para que se llevara a cabo la compra? a. Proceso on-line. b. Proceso en lotes. c. Proceso en tiempo compartido. d. Proceso en tiempo real. 5. Dado el siguiente programa, programa, indicar qué resultado daría por pantalla: for (int i=1;i<5;i++) { System.out.print(i); if ((i + 1) = = 3) continue; if ( i = = 3) break; System.out.print(i+1); }
a. b. c. d.
12234 1223 12233445 122
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA )
ENERO / FEBRERO 2005 NO ESTÁ PERMITIDO PERMITIDO EL USO DE MATERIAL ADICIONAL
6. ¿En qué punto comienza comienza la ejecución de un programa programa en Java? a. En un un método método estático cualquiera, que hay hay que definir previamente. b. En el constructor de una de las clases. c. En el método estático main. main. d. En el método estático begin. begin. 7. Sea la clase: Persona persona1 = new Persona(); Persona persona2; persona1.setNombre(”Pepe”); persona2 = persona1; System.out.print(persona1.getNombre()); System.out.print(persona2.getNombre()); persona2.setNombre(“Juan”); System.out.print(persona1.getNombre()); System.out.print(persona2.getNombre());
Indicar lo que se imprimiría en pantalla: a. PepePepePepePepe b. PepePepePepeJuan c. PepePepeJuanPepe d. PepePepeJuanJuan 8. Dada una clase declarada con la palabra palabra reservada reservada extends, extends, indicar de cuántas clases padre puede heredar directamente: a. De ninguna. b. De una. c. De menos de 5. d. De todas las que se necesiten. 9. ¿Qué tipos de acceso puede tener el atributo de una clase? a. public, private, protected, package b. public, private, associated c. public, private, protected d. public, private, protected, associated 10. ¿Cómo se crea un objeto de la clase Calendar de Java? a. Primero hay que programar programar el código de la clase adaptándolo al sistema horario local. Después se usa new Calendar( ); ); b. El objeto se crea con new Calendar( ); ); c. El objeto objeto se crea con Calendar.getInstance( ); d. Se crea con new Calendar( ); ) ; pero antes de usarlo es necesario ejecutar Calendar.getInstance( );
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA )
ENERO / FEBRERO 2005 NO ESTÁ PERMITIDO PERMITIDO EL USO DE MATERIAL ADICIONAL
Segunda Parte: Problema Se desea diseñar un programa que tendrá que ser capaz de gestionar obras cinematográficas, literarias y musicales, permitiendo la creación, modificación y acceso de las diferentes obras y sus autores, así como la impresión por pantalla de sus datos más característicos. De todas las obras necesitamos saber su título, su autor y año de edición. Además, en concreto, de los libros nos interesa su editorial y su número de páginas; de los discos queremos saber la discográfica que lo edita y el número de canciones; y de las películas interesan los intérpretes y la productora. Todos los autores de una obra, así como los intérpretes de una película, se consideran artistas. De cada artista queremos saber su nombre y su año de nacimiento. Por último, se desea poder imprimir en pantalla todos los datos de cada obra. Se pide: 1. Dibujar un esquema con las clases necesarias para este programa, indicando los atributos y métodos que tiene cada una (sólo indicarlos, sin escribir su código). El esquema debe reflejar gráficamente la herencia de clases en caso de que la haya. (3,5 puntos) 2. Codificar la clase correspondiente a las películas. (3,5 puntos)
Supongamos a partir de ahora que estamos programando el método “main”, y que hemos creado los siguientes objetos:
Clase Artista Artista Artista Libro
Nombre objeto gonzaloSuarez carmeloGomez maribelVerdu ciudadanoSade
Datos Nombre: “Gonzalo “Gonzalo Suárez”; Año Año de nacimiento: 1954 Nombre: “Carmelo “Carmelo Gómez”; Año Año de nacimiento: 1962 Nombre: “Maribel “Maribel Verdú”; Año de de nacimiento: 1970 Título: “Ciudadano Sade”; Autor: gonzaloSuarez; Año de producción: 1999; Editorial: “Plaza&Janés”; “Plaza&Janés”; Número de páginas: 256
3. Escribir el código necesario para crear el objeto correspondiente a la película "El portero" (Gonzalo Suárez, 2000, Lola Films, interpretada por Carmelo Gómez y Maribel Verdú). (1,5 puntos) 4. Codificar en una sola línea exactamente la siguiente modificación: "la fecha de nacimiento del autor de la película 'El Portero' es 1934". Si a continuación imprimimos por pantalla los datos del libro "Ciudadano Sade", ¿qué fecha de nacimiento se imprimirá en pantalla para el autor? Razonar la respuesta. (1,5 puntos)
PROBLEMA DE LA PRIMERA SEMANA Solución al apartado 1: Obra
private String titulo; private Artista autor; private int añoEdicion; String getTitulo() void setTitulo(String) Artista getAutor() void setAutor(Artista) int getAñoEdicion() void setAñoEdicion(int)
Libro
Artista
private String nombre; private int añoNacimiento; Artista(String, int) int getAñoNacimiento() void setAñoNacimiento(int) String getNombre() void setNombre(String)
Disco
Pelicula
private String editorial; private int nPaginas;
private String discografica; private int nCanciones;
private String productora; private Artista[] interpretes;
Libro(String, Artista, int, String, int) String getEditorial() void setEditorial(String) int getNPaginas() void setNPaginas(int) void imprimir()
Disco(String, Artista, int, String, int) String getDiscografica() void setDiscografica(String) int getNCanciones() void setNCanciones(int) void imprimir()
Pelicula(String, Artista, int, String, Artista[]) Artista[] getInterpretes() void setInterpretes(Artista[]) String getProductora() void setProductora(String) void imprimir()
Solución al apartado 2: public class Pelicula extends Obra { private Artista[] interpretes; private String productora; public Pelicula(String titulo, Artista autor, int año, String productora, Artista[] interpretes) { this.setTitulo(titulo); this.setAutor(autor); this.setAñoProducción(año); this.productora = productora; this.interpretes = interpretes; } public void imprimir() { System.out.print("OBRA: " + this.getTitulo() + "; AUTOR: " + this.getAutor() + "; AÑO DE PRODUCCIÓN:" + this.getAñoProducción() + "; PRODUCTORA: " + this.productora + "; INTÉRPRETES:"); int i; for (i=0; i
Esta solución es posible porque no hemos definido ningún constructor para la clase Obra, por lo que sigue disponible su constructor por defecto. En otro caso habría que programar el constructor de la siguiente forma: public Pelicula(String titulo, Artista autor, int año, String productora, Artista[] interpretes) { super(titulo, autor, año); this.productora = productora; this.interpretes = interpretes; }
Solución al apartado 3: Artista[] interpretes_portero = new Artista[2]; interpretes_portero[0] = carmeloGomez; interpretes_portero[1] = maribelVerdu; Pelicula elPortero = new Pelicula("El portero", gonzaloSuarez , 2000, "Lola Films", interpretes_portero);
Solución al apartado 4:
Si se han declarado los atributos “private” y se han definido para ellos métodos “get” y “set” (opción más correcta): elPortero.getAutor().setAñoNacimiento(1934);
En caso contrario: elPortero.autor.añoNacimiento=1934;
Al imprimir datos del libro, la fecha de nacimiento del autor sería 1934, ya que la modificación hecha con la línea anterior afecta permanentemente al objeto “gonzaloSuarez”.
Solución Text Sem. 1ª: 1)c 2)c 3)b 4)d 5)b 6)c 7)d 8)b 9)c 10)c
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA ) ENERO/FEBRERO 2005 NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL SEGUNDA SEMANA
• • • •
Para la nota del examen, el Test vale el 30% y el Problema vale el 70%. El Test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el Test en una hoja de lectura óptica . El código de asignatura es 621040 y el tipo A. Resuelva el Problema en una hoja aparte ( máximo 2 caras), indicando su nombre y el Centro Asociado en el que ha realizado la práctica.
Primera Parte: Test 1. Los buses de control, ¿qué función realizan? a. Controlan qué instrucción se carga en la Unidad de Control para ser ejecutada. b. Comunican los periféricos con el procesador (CPU). c. Llevan los datos de la RAM al procesador. d. Llevan los datos que han sido procesados por la CPU de la RAM al disco duro. 2. Indicar a. b. c. d.
cuál de las siguientes afirmaciones sobre memoria es errónea: Hay tres tipos de memoria temporal: RAM, caché y virtual. La memoria ROM es permanente y su contenido no se pierde al apagar el ordenador. El acceso a la memoria virtual es más rápido que el acceso a RAM. Se suele llamar memoria principal a la combinación de ROM y RAM.
3. ¿Cuál es la característica fundamental que diferencia a un sistema operativo multitarea? a. Permite que varios usuarios puedan trabajar simultáneamente. b. Permite gestionar dos o más procesadores. c. Permite que se ejecuten varios procesos a la vez. d. Permite ejecutar procesos en tiempo real. 4. El administrador de memoria se encarga de: a. Seleccionar el proceso que se va a ejecutar a continuación b. Dejar en memoria principal alguno de los componentes del SO. c. Asignar memoria a los diferentes procesos. d. Procesa los programas que se encargan de las entradas y salidas relacionadas con los periféricos. 5. ¿Qué diferencia fundamental existe entre vectores y arrays? a. Los vectores no se tienen que declarar y los arrays sí. b. Los vectores pueden redimensionar su tamaño mientras que los arrays no. c. No hace falta crear instancias de vectores porque se encuentran en librerías predefinidas de java, cosa que en los arrays sí ocurre. d. Los vectores pueden tener varias dimensiones, es decir se puede crear un vector de vectores (por ejemplo una matriz), mientras que en arrays no.
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA ) ENERO/FEBRERO 2005 NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL
6. ¿Qué ocurre cuando en un método se pasa un parámetro por valor? a. Que los cambios que se producen sobre el parámetro dentro del método permanecen cuando se termina su ejecución. b. Que los cambios que se producen sobre el parámetro dentro del método no permanecen cuando se termina su ejecución. c. Que sea cual sea el tipo del parámetro se convierte en un valor entero. d. Que la variable de salida debe ser del mismo tipo que el parámetro. 7. Un método de clase (static), ¿se podría llamar sin instanciarse un objeto de la clase? a. No, siempre hay que declarar el objeto y luego llamar al método. b. No, siempre hay que declarar el objeto, crearlo y a continuación llamar al método. c. Sí, se podría llamar al método desde la misma clase. d. Sí, se podría llamar al método pero sólo si la clase es abstracta. 8. ¿Cuándo se utilizaría la estructura de repetición do-while? a. Cuando se desea ejecutar el bloque de código que está en esa estructura al menos una vez aunque no se cumplan las condiciones. b. Cuando se desea ejecutar el bloque de código sólo si se cumplen unas condiciones. c. Cuando se desea ejecutar un bloque una vez al menos pero sólo si las condiciones se cumplen. d. Ninguna de las anteriores. 9. Si tenemos el siguiente programa: public class Arit{ public int sumar2(int sum){ return sum + 2; } public String sumar2(String sum){ return sum + 2; } public static void main (String[] args){ Arit x = new Arit(); System.out.println(x.sumar2("2")); } }
¿Qué mostraría el siguiente código? a. Un error de compilación por sobrecarga. b. 4 c. “22” d. Un error de ejecución por no poder sumar un tipo string con el literal 2. 10. En relación al enunciado de la práctica, indicar cuál de las siguientes cabeceras es la correcta: a. class Camion extends Vehiculo { … b. class Vehiculo extends Camion { … c. class Vehiculo (extends Camion) { … d. extended class Camion { …
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA ) ENERO/FEBRERO 2005 NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL
Segunda Parte: Problema Una empresa de telecomunicaciones nos encarga realizar la primera versión de un programa para gestionar mensajes de texto en diferentes formatos: e-mail, SMS (mensajes cortos de telefonía móvil) y chat (mensajería instantánea). Todos los mensajes, independientemente del formato, tienen un usuario emisor, un usuario receptor y un texto de mensaje. Además, en particular, un e-mail tiene un Asunto (de tipo texto) y un conjunto de usuarios a los que llegará copia del mensaje; un SMS tiene un número del centro servidor, y un mensaje instantáneo tiene un protocolo de mensajería. De cada usuario podemos necesitar su nombre, su dirección de correo electrónico, su número de teléfono móvil y su dirección IP. Los mensajes pueden enviarse, y al hacerlo se escribe por pantalla el cuerpo del mensaje independientemente de su formato. 1. Dibujar un esquema con las clases necesarias para este programa, indicando los atributos y métodos que tiene cada una (sólo indicarlos, sin escribir su código). No es necesario incluir métodos “get” y “set”. El esquema debe reflejar gráficamente la herencia de clases en caso de que la haya. (3 puntos)
La empresa nos explica ahora que al enviar un SMS debe haber un comportamiento especial (el resto de formatos de mensaje mantienen su comportamiento): si el usuario receptor no tiene móvil, debe imprimirse un mensaje de error. Además, si el mensaje SMS ocupa más de 145 caracteres, antes de imprimirlo debemos irlo reduciendo hasta que no sobrepase ese tamaño. La reducción se hace con el método “String reduce(String cadena)”, programado por otra empresa e incluido en el “package” smstools. Cada vez que se ejecuta este método, mediante un diccionario de abreviaturas se reduce levemente la longitud del texto. 2. Explicar, en relación al concepto de herencia, cuál sería la mejor solución para encajar en el diseño anterior este comportamiento particular del método “enviar” para los SMS. Indicar una solución alternativa sin utilizar herencia y comentar sus ventajas o inconvenientes. (3 puntos) 3. Codificar el constructor de la clase correspondiente a los SMS. La presencia o ausencia de constructor en una clase padre, ¿afecta de alguna manera a la clase que hereda? (2 puntos) 4. Codificar el método que permite enviar mensajes SMS. (2 puntos)
PROBLEMA DE LA SEGUNDA SEMANA Solución al Apartado 1: Usuario private String nombre; private String email; private String movil; private String ip; Usuario(String, String, movil, ip)
Email
Mensaje private Usuario emisor; private Usuario receptor; private String texto; void enviar()
Sms
Chat
private String asunto; private Usuario[] receptores;
private int servidor;
private String cliente;
Email(Usuario, Usuario, String, boolean, int)
Sms(Usuario, Usuario, String, int)
Chat(Usuario, Usuario, String, String)
Solución al Apartado 2:
Habría que reescribir el método “enviar” en la clase “Sms”, de forma que el método “enviar” original permaneciera en la clase Mensaje. Así, cuando se imprima un email o un mensaje instantáneo, se recurrirá al método heredado de la clase padre, pero cuando se imprima un SMS se ejecutará el método redefinido. La alternativa sin herencia sería eliminar el método “enviar” de la clase padre y escribirlo individualmente para cada formato de mensaje. Sin embargo, esta solución es peor, porque implica duplicar información al escribir un mismo código varias veces (en este caso dos, pero podrían ser más), con la consiguiente dificultad para mantener la coherencia en caso de un cambio en el código. Solución al Apartado 3:
Al crear un objeto de la clase que hereda, lo primero que se hace es llamar implícitamente al constructor por defecto de la clase padre, por lo que no es necesario escribir código adicional: public Sms(Usuario emisor, Usuario receptor, String texto, boolean multimedia, int servidor) { this.setEmisor(emisor); this.setReceptor(receptor); this.setTexto(texto); this.servidor = servidor; }
Sin embargo, si hemos definido un constructor con argumentos para la clase padre, el constructor por defecto deja de estar accesible y por tanto es necesario llamar explícitamente al constr uctor de la clase padre que hemos creado: public Sms(Usuario emisor, Usuario receptor, String texto, boolean multimedia, int servidor) { super(emisor,receptor,texto); this.servidor = servidor; }
Solución al Apartado 4: public void enviar() { if (this.getReceptor().getMovil()== null) { System.out.println("ERROR: El receptor carece de móvil."); } else { while(this.getTexto().length()>145) { this.setTexto(Smstools.reduce(this.getTexto())); } System.out.println(this.getTexto()); } }
Solución Text Sem. 2ª: 1)b 2)c 3)c 4)c 5)b 6)b 7)c 8)a 9)c 10)a
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA ) SEPTIEMBRE 2005 NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL ORIGINAL
• • •
•
Para la nota del examen, el Test vale el 30% y el Problema vale el 70%. El Test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el Test en una hoja de lectura óptica . El código de carrera es 62, el de la asignatura 104 y examen es de tipo A. Resuelva el Problema en una hoja aparte ( máximo 2 caras), indicando su nombre y el Centro Asociado en el que ha realizado la práctica.
Primera Parte: Test 1. La placa madre a. es siempre compatible con cualquier nuevo componente. b. es independiente de la CPU. c. está compuesta por las unidades de almacenamiento y los buses. d. integra todos los componentes que colectivamente proporcionan la funcionalidad del equipo. 2. ¿Qué se imprime al ejecutarse el siguiente código? int resultado = 0; int suma = 1; while (suma < 5) resultado+= suma; System.out.print (resultado);
a. b. c. d.
0 5 1234 No imprimiría nada
3. ¿Qué es la tecnología “”plug-and-play”? a. Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que funcione sólo sería necesario enchufar el dispositivo e instalar los drivers adecuados que vienen con dicho dispositivo. La asignación del número de interrupción asociada al dispositivo se hace de forma automática. b. Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que funcione sólo sería necesario enchufar el dispositivo ya que los drivers los detecta de forma automática. La asignación del número de interrupción asociada al dispositivo se hace de forma manual. c. Un sistema que permite la instalación de nuevos dispositivos con facilidad. Para que funcione sólo sería necesario enchufar el dispositivo ya que los drivers los detecta de forma automática. La asignación del número de interrupción asociada al dispositivo se hace de forma automática. d. Un sistema que permite la instalación de nuevos dispositivos. Para que funcione se tendría que enchufar el dispositivo además de instalar un conversor para que pueda trabajar de analógico a digital.
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA ) SEPTIEMBRE 2005 NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL 4. Cual de estas afirmaciones es falsa: a. Un array puede estar constituido por objetos de cualquier clase. b. El valor inicial por defecto de un array es null. c. Es posible redimensionar el tamaño de un array una vez instanciado. d. Un array puede ser creado en la misma línea en la que se declara. 5. Una máquina virtual … a. hace que un computador se comporte como si fuera otro distinto. b. es un computador en la red. c. es un compilador de alto nivel. d. es un compilador de bajo nivel. 6. Sean “Mamífero” y “Gato” dos clases que mantienen una relación de herencia padre-hijo. ¿Qué habría que modificar para que el siguiente código sea correcto y por qué? Animal a; /*Línea 1*/ Gato b; /*Línea 2*/ a= new Animal(); /*Línea 3*/ b=a; /*Línea 4*/
a. Nada. Es correcto. b. No se puede asignar un objeto a otro de otra clase, luego cambiamos la línea 2: Animal b; c. Es necesario explicitar el tipo cuando asignamos un objeto a otro objeto perteneciente a una clase hija, luego cambiamos la línea 4: b = (Gato)a; d. Es necesario explicitar el tipo y crear una nueva instancia cuando asignamos un objeto a otro objeto perteneciente a una clase hija, luego cambiamos la línea 4: b = new (Gato) a;
7. Un sistema operativo... a. gestiona los recursos del sistema de forma eficiente. b. es básicamente un compilador. c. es un componente hardware. d. convierte el procesador en multi-procesador. 8.
Dada una clase alumno: public class Alumno{ private int edad; public int darEdad(){ return this.edad; } public Alumno(int edad){ this.edad=edad; } }
¿Cuál sería la forma correcta de acceder a la edad de un objeto “a” de tipo “Alumno” desde otra clase? a. int x=Alumno.edad; b. int x= a.edad; c. int x=Alumno.darEdad(a); d. int x=a.darEdad(); 9. En la práctica del Rent a Car, ¿qué opción sería mejor para representar un contrato?
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA ) SEPTIEMBRE 2005 NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL a.
Se crearía la clase contrato definiendo como atributos los datos de éste y la composición de las clases vehículo y cliente. b. Se crearía la clase contrato definiendo como atributos los datos de éste y los atributos que se necesiten del vehículo y el cliente. c. Se crearía la clase contrato definiendo como atributos los datos de éste. En el programa main se definirían las relaciones necesarias entre el objeto contrato y los objetos vehículo y cliente. d. No haría falta la clase contrato, dentro del programa principal se pueden crear variables que almacenan las fechas del contrato y se relacionen con la creación de un objeto cliente y un objeto coche por ejemplo.
10. Sea la clase A
class A { void imprimir () {System.out.print(“3”);} } y la clase B que hereda de A.
class B extends A { void imprimir () {super .imprimir();System.out.print(“5”);} public static void main (String [] args) { B varB = new B(); A varA = varB; varA.imprimir(); } } ¿Qué se imprimiría en pantalla? a. 3 b. 5 c. 35 d. Hay un error de compilación ya que no se puede asignar un objeto de la clase hija a otro objeto de la clase padre.
UNIVERSIDAD N ACIONAL DE EDUCACIÓN A DISTANCIA. ESCUELA DE INGENIERÍA TÉCNICA INDUSTRIAL
EXAMEN DE FUNDAMENTOS DE INFORMÁTICA (ESPECIALIDAD ELECTRÓNICA ) SEPTIEMBRE 2005 NO ESTÁ PERMITIDO EL USO DE MATERIAL ADICIONAL
Segunda Parte: Problema Un controlador que regula la automatización de una lavadora cuenta con una serie de componentes que son: una válvula, un tambor, un motor y una bomba. El motor se caracteriza por el tiempo de duración del ciclo, que se expresa en segundos (por defecto es de 30), por el estado del motor: encendido o apagado, y por el sentido del giro, que puede ser: a izquierdas o a derechas. La variable de sentido de giro determina el movimiento del motor de la lavadora. El motor funciona mediante ciclos de lavado. Durante la primera mitad del ciclo el motor se encuentra en sentido a izquierdas, y durante la segunda mitad del ciclo el motor se encuentra en sentido a derechas. Al final del ciclo, el motor queda en reposo. Además, el tambor tiene un estado que puede ser lleno o vacío. La válvula realiza la acción de dar agua al tambor y la bomba realizar la función de sacar agua del tambor. El controlador también se caracteriza por tener un detector de nivel que indica si el tambor está lleno o no. Se pide: 1. Dibujar un esquema con las clases necesarias para describir el controlador, indicando los atributos y métodos que tiene cada una (sólo indicarlos, sin escribir su código). (4 puntos) 2. Supongamos ahora que se quiere introducir en el controlador la funcionalidad programa de Lavado en Frío. Este programa debería ejecutar los siguientes pasos: a. La válvula permite el paso del agua al tambor. b. Se comprueba que el tambor está lleno y se indica en el detector de nivel (mientras el tambor permanece vacío no se indica en el detector de nivel) c. El motor realiza 50 ciclos de lavado, asignando al motor 40 segundos de duración de ciclo. d. La bomba vacía al tambor de agua. e. Se comprueba que el tambor está vacío y se indica en el detector de nivel (mientras el tambor permanece lleno no se indica en el detector de nivel) Escribir el código de dicho método. (6 puntos)
Solución Text: 1)d 2)d 3)c 4)c 5)a 6)c 7)a 8)d 9)a 10)c
Solución al apartado 1: Controlador private boolean detectorNivel private Motor motor; private Tambor tambor;
Tambor private String estado; String getEstado() void setEstado(String)
private Bomba bomba; private Valvula valvula; boolean getDetectorNivel() void setDetectorNivel(boolean) Motor getMotor() void setMotor(Motor) Tambor getTambor() void setTambor(Tambor) Bomba getBomba() void setBomba(Bomba) Valvula getValvula() void setValvula(Valvula)
Valvula
void llenarTambor(Tambor)
Motor private String sentGiro; private Boolean estado; private int segundos;
Bomba
void vaciarTambor(Tambor)
String getSentGiro() void setSentGiro(String) Boolean getEstado() void setEstado(Boolean) int getSegundos() void setSegundos(int) void setGiro(String) void realizarCiclo()
Nota: En esta solución hemos dejado el constructor por defecto por lo que no aparece en el diseño anterior.
Solución al apartado 2: public void lavado_en_frio (){ // 1. Llenar el tambor de agua mediante la válvula valvula.llenarTambor(tambor); // 2. Detectar que el tambor esté lleno indicándolo en el detector de nivel. while (tambor.getEstado().equals("vacio")) System.out.println("Todavía no se ha llenado el tambor"); detectorNivel = true; // 3. Hacer que el motor realice 50 ciclos asignando al motor 40 seg. por cada sentido del giro. motor.setSegundos(40); for (int nCiclos = 0; nCiclos < 50; nCiclos++) motor.realizarCiclo(); // 4. Vaciar el tambor de agua mediante la bomba. bomba.vaciarTambor(tambor); // 5. Detectar que el tambor esté vacío indicándoselo en el detector de nivel. while (tambor.getEstado().equals("lleno")) System.out.println("Todavía no se ha vaciado el tambor"); detectorNivel = false; }
Solución Primera Semana Feb 2006 Solución apartado 1 Obra (Abstract)
Venta private Vector obras_vendidas = new Vector(); public Venta () public Venta (Vector obras_vendidas) public void addObra(Obra obra) public double importeVenta()
private int id; private String nombre; private String autor; private String editorial; private int añoEdiccion; private double precio; public Obra(int id, String nombre, String autor, String editorial, int añoEdiccion, double precio) public abstract double calcularImporte()
Comic
Revista
private String nDibujante; private static final double iva = 10;
private int numSerie; private static final double iva = 7;
public Obra(int id, String nombre, String autor, String editorial, int añoEdiccion, double precio, String nDibujante) public double calcularImporte()
public Revista(int id, String nombre, String autor, String editorial, int añoEdiccion, double precio, int numSerie) public double calcularImporte()
Libro private static final double iva = 3; public Libro(int id, String nombre, String autor, String editorial, int añoEdiccion, double precio) public double calcularImporte()
No se han puesto en el esquema pero también serían necesarios los métodos get y set de cada atributo en cada clase.
Solución apartados 2 y 3.
i mpor t j ava. ut i l . Vect or ; publ i c c l as s Vent a { pr i vat e Vect or obr as_vendi das = new Vec t or ( ) ; publ i c Vent a ( ) {} publ i c Vent a ( Vect or obr as_vendi das) {t hi s. obr as_vendi das = obr as_vendi das; } publ i c voi d addObr a( Obr a obr a) {obr as_vendi das. addEl ement ( obr a) ; } publ i c Vect or get Obr as_vendi das( ) {r e t u r n obr as_vendi das; } publ i c voi d set Obr as_vendi das( Vect or obr as_vendi das) {t hi s. obr as_vendi das = obr as_vendi das; } publ i c doubl e i mport eVent a( ) { doubl e cost eTot al = 0; Obr a ob; f or ( i nt i =0; i < obr as_vendi das. si ze( ) ; i ++) { ob = ( Obr a) obr as_vendi das. el ement At ( i ) ; cost eTot al += ob. cal cul ar I mpor t e( ) ; } r e t u r n cost eTot al ; } }
La estructura más adecuada sería la del Vector ya que no se sabe a priori las ventas que se van a realizar. Solución Text Sem. 1ª: 1)c 2)b 3)a 4)a 5)b 6)a 7)d 8)c 9)d 10)d
PROBLEMA Una planta de tratamiento de piedras dispone de un conjunto de máquinas, siendo éstas de dos tipos: cortadoras y pulidoras. Un tipo de piedra se caracteriza por su nombre y su resistencia. Cada maquina se caracteriza por su identificador. Por otro lado, todas las máquinas se caracterizan por un límite máximo de resistencia de la piedra que aceptan. Las cortadoras en particular requieren además un mínimo de resistencia de la piedra para que esta no se deshaga. Con el objetivo de controlar la usabilidad de las máquinas de la planta, se desea disponer de un sistema que, ante un tipo de piedra, pueda mostrar la lista de identificadores de máquinas de la planta, y para cada identificador, si acepta o no dicho tipo de piedra. Se pide 1. Realizar un esquema indicando las clases y relaciones necesarias para la implementación del sistema. Indicar también los atributos y métodos necesarios y sus tipos. (4 puntos) 2. Implementar la clase que gestione la lista de máquinas (“planta”) y el método que muestra la lista. (3 puntos) 3. Sobre el sistema diseñado, generar el código que permita: i. Crear un nuevo tipo de piedra de resistencia 5 y una nueva máquina pulidora con resistencia máxima de piedra 4. (1 punto) ii. Crear Crear un objeto tipo “Planta” y añadirle dicha máquina. (1 punto) iii. Comprobar si la máquina acepta la piedra. (1 punto) Requisitos de diseño del ejercicio 1. El diseño de las clases es independiente de criterios de eficiencia. 2. El objetivo del sistema es concreto: controlar la usabilidad de las máquinas. 3. No hay ambigüedad en cuanto a modelos posibles. Objetivos del ejercicio: 1. El alumno debe identificar la jerarquía de herencia dada por los tipos de máquina, con peso_máximo y resistencia_máxima como atributos comunes, y resistencia_mínima como atributo particular de las pulidoras. 2. El alumno debe definir una clase “planta” con un vector de ”máquinas”, no de ”pulidoras” ni “cortadoras”, dado que para el control de la usabilidad sólo interesan los identificadores de máquinas. 3. El alumno debe introducir un método “admitePiedra” en la superclase máquina y en la subclase “pulidora”. Este método no puede estar en la clase “planta” porque la relación de herencia no le da acceso al atributo “resistencia mínima” de la subclase “pulidora”. En la superclase ”máquina” si es necesario dado que a este método se accede desde la clase “planta”. En la subclase “pulidora” es tambien necesario dado que el método ha de considerar un atributo propio de la subclase. (Una opción alternativa es definir un método “admitePeso” solo en la superclase, y un método “admiteResistencia” en ambas clases). 4. El alumno debe saber implementar un recorrido simple sobre los elementos de un vector.
Piedra private String nombre; private int resistencia;
Planta private Vector maquinas;
public void Piedra(String, int) public void setResistencia(int) public int getResistencia() public void setNombre(String) public String getNombre()
public void mostrarLista() public void añadirMaquina(maquina)
Maquina private String id; private int resistenciaMax; public void maquina(id,int) public String getId() public void setId(String) public int getResistenciaMax() public void setResistenciaMax(int) public boolean aceptaPiedra(Piedra)
Cortadora private int resistenciaMin; public void Cortadora(id,int,int) public int getResistenciaMin() public void setResistenciaMin(int) public boolean aceptaPiedra(Piedra)
Nota: La
clase Maquina y Pulidora tendrían los mismos atributos y métodos. Al no diferenciarse se podría decir que una pulidora es una máquina, no siendo necesario crear una clase Pulidora.
IMPLEMENTACIÓN DE LA CLASE PLANTA
Import java.util.Vector; public class Planta{ private Vector maquinas; public void añadirMaquina(Maquina maquina){ this.maquinas.add(maquina); } public void mostarLista(Piedra p){ Maquina maquina; for (int i=0;i < maquinas.length();i++) { maquina = (Maquina) maquinas.elementAt(i); if (maquina.aceptaPiedra(p)) { System.out.println” MAQUINA”+ maquina.getId()+” SI”; } else { System.out.println” MAQUINA”+maquina.getId()+” NO”; } } } LLAMADAS A MÉTODOS
/* DEFINICIÓN DE VARIABLES*/ Piedra piedra; Maquina pulidora; Planta planta; boolean acepta; /*INSTANCIACION DE VARIABLES*/ piedra=new Piedra(”marmol”,5); pulidora=new Maquina(“m1”,”4”); planta=new Planta(); planta.añadirMaquina(pulidora); if (pulidora.aceptaPiedra(piedra)) System.out.prinln(“La piedra es aceptada”); else System.out.prinln(“La piedra no es aceptada”); Solución Text Sem. 2ª: 1)b 2)c 3)b 4)c 5)d 6)a 7)b 8)b 9)a 10)b
ORIGINAL
Solución tipo A: 1)C 2)A 3)C 4)D 5)B 6)C 7)C 8)C 9)C 10)C
FUNDAMENTOS DE LA INFORMÁTICA SOLUCIÓN AL EJERCICIO DE EXAMEN DE SEPTIEMBRE 2006 Se necesita una aplicación informática para la venta de entradas en un multi-cine. Cada sesión se caracteriza por la película proyectada, la sala en la que se proyecta, el día y la hora de comienzo de la película, y el número de entradas vendidas. Todas las salas tienen el mismo número de asientos numerados del uno al cien. Una sesión puede ser numerada o no. Si la sesión es numerada es necesario recordar qué asientos han sido vendidos. Si es no numerada basta con llevar el recuento de entradas vendidas. La funcionalidad del sistema debe incluir: 1. Un método “sugerir_asiento” para sesiones numeradas que proponga el primer asiento no vendido (según su numeración). Si la sala está completa el método debe imprimir “sala completa”. 2. Un método “comprar_entrada” que, para sesiones no numeradas incremente el número de asientos vendidos. Si no quedan asientos libres el método debe imprimir “sala completa”. Para sesiones numeradas el método recibe como entrada un número de asiento. Si el asiento está libre lo vende. Si está vendido imprime “asiento vendido”. Se pide: 1. Dibujar un esquema con las clases necesarias para este programa, indicando y comentando brevemente los atributos, métodos y relaciones entre clases (sólo indicarlos, sin escribir código) (3 puntos)
Comentarios al esquema: -
Las sesiones numeradas y no numeradas se comportan de manera distinta (distintos métodos y atributos), luego deberían ser dos clases distintas. Ambas clases comparten algunos atributos, luego definimos una clase padre sesión. Solo existen sesiones numeradas o no numeradas, por lo que la clase padre sesión es abstracta. Además, esta clase padre no tiene constructor. Las sesiones numeradas necesitan una estructura de almacenamiento, mientras que en las sesiones no numeradas basta con un contador de entradas vendidas, por lo que el recuento de asientos no en un atributo común en ambas clases. El método comprar entrada posee argumentos de entrada distintos en cada subclase, por lo que se trata en realidad de métodos distintos aunque se llamen de la misma forma y no pueden definirse en la clase padre.
public abstract class Sesión private String película; private int sala; private int dia; private int hora public SesionNumerada(String película, int sala, int dia, int hora)
public class SesiónNumerada
public class SesiónNoNumerada
private boolean[] asientosVendidos
private int numntradasVendidas;
public SesionNumerada(String película, int sala, int dia, int hora) public int sugerirAsiento(); public void comprarntrada(int);
public SesionNoNumerada(String película, int sala, int dia, int hora) public void comprarntrada();
2. ¿Qué estructura sería la más adecuada para poder almacenar qué asientos han sido reservados? ¿Por qué? (1 punto)
La estructura de datos más adecuada sería un ARRAY, dado que el número de asientos máximo es conocido y no mucho mayor que el número de asientos que se ocuparán.
2. Implementar el/los métodos “comprar entrada” e indicar su localización en las clases. (3 puntos)
En la clase SesiónNoNumerada tendríamos public void comprarntrada()! i" (this#NumntradasVendidas$%&'')! Sstem#out#println(Sala *ompleta+); else! this#NumntradasVendidas-%&;
En la clase SesiónNumerada: public void comprarntrada(int numAsiento)! i" (numAsiento$&'')! Sstem#out#println(Solo se dispone de &'' asientos+); else! i" (this#asientosVendidos[numAsiento])! Sstem#out#println(Asiento .cupado+); else! this#asientosVendidos[numAsiento]%true;
3. Escribir el código necesario para: a. Crear una sesión numerada de la película “ET” el día 5 a las 18 horas. SesionNumerada sesion&%ne/ SesionNumerada( 0+,&,1,&2)
b. Crear una sesión no numerada de la película “COMANDO” el día 5 a las 20 horas. SesionNumerada sesion3% ne/ SesionNoNumerada( *.4AN5.+,&,1,3')
c. Comprar 2 entradas con asientos 1 y 5 en la sesión numerada. sesioncomprarntrada(&); sesioncomprarntrada(3);
d. Pedir al sistema que sugiera un asiento para la sesión numerada. ¿Cuál sería la respuesta del sistema? sesionsugerirAsiento(); 5evolvería el asiento 3#
Reserva
Reserva
Solución tipo A Reserva: 1)A 2)B 3)C 4)B 5)C 6)B 7)B 8)D 9)B 10)C
SOLUCIÓN EXAMEN RESERVA 2006 1. Diseño de clase CARTERA
DEUDA (Abstract)
static private int identificador = 0; private Vector deudas; public Cartera () public int getIdentificador () public void addDeuda(Deuda deuda) public double calcularTotalIntereses (GregorianCalendar fecha)
protected GregorianCalendar gcFechaSuscripcion; protected int iTipoInteres; protected int iValor; public GregorianCalendar getGcFechaSuscripcion() public double getDTipoInteres() public int getIValor() public setGcFechaSuscripcion(GregorianCalendar gcFechaSuscripcion) public void setDTipoInteres(double dTipoInteres) public void setIValor(int iValor) abstract public double calcularInteres (GregorianCalendar fecha)
LETRA
BONO
final private int iañosPlazo = 2;
final private int iañosPlazo = 5;
public Letra (GregorianCalendar gcFechaSuscripcion, int dTipoInteres,int iValor) public double calcularInteres (GregorianCalendar fecha)
public Bono (GregorianCalendar gcFechaSuscripcion, int dTipoInteres,int iValor) public double calcularInteres (GregorianCalendar fecha)
2. Implementar la clase Letra del tesoro. i mpor t j ava. ut i l . Gr egor i anCal endar ; i mpor t j ava. ut i l . Cal endar ; publ i c c l as s Letra ext ends Deuda { f i nal pr i vat e i nt i añosPl azo = 2; publ i c Let r a ( Gr egor i anCal endar gcFechaSuscr i pci on, i nt dTi poI nt er es, i nt i Val or ) { t hi s. gcFechaSuscr i pci on = gcFechaSuscr i pci on; i f ( ( dTi poI nt er es > 0) &&( dTi poI nt er es <= 100) ) t hi s. dTi poI nt er es = dTi poI nt er es; el s e Syst em. out . pr i nt l n( " El i nt er és debe est ar ent r e 0 y 100. " ) ; t hi s. i Val or = i Val or ; } publ i c doubl e cal cul ar I nt er es ( Gr egor i anCal endar f echa) { Cal endar gcFechaFi nPl azo = gcFechaSuscr i pci on; / / Suma dos años a l a f echa de suscr i pci ón gcFechaFi nPl azo. add( Cal endar . DATE, 2) ; i f ( gcFechaFi nPl azo. get Ti meI nMi l l i s( ) <= f echa. get Ti meI nMi l l i s( ) ) r e t u r n ( i Val or * ( dTi poI nt er es / 100) ) ; el se r e t u r n 0; }
3. Resolviendo el ejemplo de Manuel a. Ejemplo: Gr egor i anCal endar f echa1 = new Gr egor i anCal endar ( 2005, 10, 1) ; Gr egor i anCal endar f echa2 = new Gr egor i anCal endar ( 2004, 6, 1) ; Let r a l et r a1 = new Let r a( f echa1, 4, 500) ; Let r a l et r a2 = new Let r a( f echa2, 5, 900) ; Gr egor i anCal endar f echa3 = new Gr egor i anCal endar ( 2003, 6, 10) ; Bono bono1 = new Bono( f echa3, 7, 3000) ; Bono bono2 = new Bono( f echa3, 7, 3000) ; Car t er a car t er a1 = new Car t er a( ) ; car t er a1. addDeuda( l et r a1) ; car t er a1. addDeuda( l et r a2) ; car t er a1. addDeuda( bono1) ; car t er a1. addDeuda( bono2) ;
b. Implementar el método calcularTotalIntereses, método de la clase Cartera. publ i c doubl e cal cul ar Tot al I nt er eses ( Gr egor i anCal endar f echa) { doubl e t ot al Deudas = 0; Deuda auxDeuda; f or ( i nt i =0; i
TIPO A
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el test en una hoja de lectura óptica . No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen. Resuelva el Problema en una hoja aparte ( máximo 2 caras ), indicando su nombre y el Centro Asociado en el que ha realizado la práctica. FEBRERO 2007 Primera semana
Apellidos……………………………………………………..Nombre……………………..DNI……………
Prim era Parte: Test 1. ¿Cuál de las siguientes memorias no es volátil? a. Memoria caché. b. Memoria RAM. c. Memoria virtual. d. Memoria ROM. 2. ¿Qué es un hub? a. Es un dispositivo de distribución de comunicaciones que permite la conexión de más periféricos. b. Es un bus como PCI. c. Es un protocolo de comunicación como los puertos serie y paralelo. d. Es un comunicador unidireccional entre el computador y los periféricos. 3. Entre las funciones fundamentales del sistema operativo no está: a. El control de los procesos de entrada/salida. b. La asignación de recursos a los procesos. c. La gestión de ficheros. d. Traducir código fuente a código objeto. 4. De las siguientes sentencias, ¿cuál es la que mejor describe la funcionalidad del programa controlador de trabajo? a. Carga el monitor en memoria al iniciarse el trabajo del sistema. b. Carga en memoria los módulos de programa que necesite el proceso de ejecución. c. Se encarga de planificar la secuencia de los diferentes trabajos, repartir la memoria y controlar la cola de tareas y las interrupciones. d. Se encarga de optimizar el uso de la memoria al asignar la misma a los diferentes programas. 5. ¿Qué estructura se utilizaría mejor en la práctica a la hora de almacenar los modelos dentro de la clase GestiónMaquinaria? a. Un array de tamaño N. b. Una array de tamaño ilimitado. c. Un ArrayList. d. Una matriz de N x N. 6. ¿Cuál de los siguientes tipos no es primitivo? a. 1.32 b. false c. ‘b’ d. “mundo”
7.
¿Es correcta la siguiente sentencia?
Syst em. out . pr i nt l n( Mat h. sqr t ( 25) ) ; a. No es correcta ya que no se puede llamar a un método de una clase sin crearse previamente un objeto. b. No es correcta ya que la clase Math se tiene que importar previamente. c. Es correcta porque la clase Math es una clase predefinida. d. No es correcta ya que la clase Math carece del método sqrt(int). 8. ¿Es correcta la implementación de la siguiente clase?
publ i c c l as s A { pr i vat e i nt x; pr i vat e i nt y; publ i c A( i nt x) {t hi s. x=x; } publ i c A( i nt x, i nt y) {t hi s. x=x; t hi s. y=y; } } a. b. c. d.
No, ya que dentro de una clase sólo se puede implementar un constructor. No, ya que no se ha implementado el constructor por defecto. Si, es correcta. No, porque los parámetros d entrada a los constructores no se pueden llamar de la misma forma que los atributos de la clase.
9. ¿Es correcto el siguiente código?
publ i c c l as s B{pr i vat e i nt b; } publ i c c l as s C ext ends B {pr i vat e i nt c; } publ i c c l as s D ext ends B {pr i vat e i nt d; } Dent r o del mét odo mai n se r eal i zan l as si gui ent es sent enci as: D oD = new D( ) ; C oC = ( C) oD; a. Si, ya que al ser C y D clases hijas de la clase padre B por polimorfismo se puede reconvertir un objeto de la clase D en otro de la clase C. b. No, porque no se pueden crear dos clases hijas de una misma clase padre. c. No, porque una clase hija no se puede reconvertir a otra clase hija por tanto hay incompatibilidad de tipos. d. No, porque no se ha creado previamente el objeto oC con la sentencia C oC = new C( ) ; . Sin esta sentencia previa no se puede asignar otros objetos al objeto oC.
10. ¿Qué resultado da la siguiente estructura de control? El operador % es el operador resto.
i nt x = 2; do { try { i f ( x%2 == 0) throw new Except i on( ) ; x++; } cat ch( Except i on e) {x- - ; } f i nal l y { x=x+2; Syst em. out . pr i nt ( x + " " ) ; } } whi l e ( x < 10) ; a. b. c. d.
3 4 3 3
6 6 5 6
7 8 7 8
10 10 9 10
Segunda Parte: Probl ema Un circuito eléctrico puede estar formado, al menos, por una serie de resistencias eléctricas (R) medidas en ohmios y una fuente eléctrica que es capaz de generar una diferencia de potencial V (que es la que se almacena en el circuito). Dentro de los circuitos podemos ver que hay dos tipos, los circuitos en serie y los circuitos en paralelo. Los circuitos en serie calculan la intensidad con la siguiente fórmula de la ley de Ohm V= I(R1 + ... + Rn) mientras que los circuitos en paralelo calculan la intensidad con la siguiente formula I= V (1/R1 + …+ 1/Rn). 1. Dibujar un diagrama de clases con los atributos y métodos necesarios, incluidos los métodos constructores. (2 puntos) 2. Implementar la clase circuito serie. (2 puntos) 3. Implementar la creación del siguiente objeto de un circuito en serie: a. Circuito con 3 resistencias de 3, 5 y 6 ohmios y una fuente de alimentación cuyo potencial es medido a 4 voltios. (1 punto) b. Hacer la llamada al método correspondiente. ¿Qué resultado daría por pantalla? (1 punto) 4. Definimos un circuito mixto como una composición donde puede haber circuitos en serie y/o circuitos en paralelo. Implementar un método de la clase circuito mixto que calcule la suma de las intensidades de todos los circuitos que componen el circuito mixto. Pista: Para este apartado se ha de tener en cuenta el polimorfismo. (4 puntos)
Solución test febrero 2007 primera semana tipo A: 1D, 2A, 3D, 4C, 5C, 6D, 7C, 8C, 9C, 10A
Problema 1 semana Febrero 2007 Electrónica-Electricidad Apartado 1 CircuitoMixto private ArrayList
circuitos = new ArrayList (); public void addResistencia(double r) public void removeCircuito(Circuito c) public double calcularIntensidadTotal()
Circuito (Abstract) protected ArrayList resistencias = new ArrayList (); protected double v; public Circuito () public Circuito (double v) public double getV() public void setV(double v) public void addResistencia(double r) public void removeResistencia(double r) public abstract double calcularIntensidadCircuito();
CircuitoSerie
Apartado 2
CircuitoParalelo
public CircuitoSerie ()
public CircuitoParalelo ()
public CircuitoSerie (double v)
public CircuitoParalelo (double v)
public double calcularIntensidadCircuito()
public double calcularIntensidadCircuito()
i mpor t j ava. ut i l . Ar r ayLi s t ; publ i c c l as s Ci r c ui t oSer i e ext ends Ci r cui t o { publ i c Ci r c ui t oSer i e ( ) {super ( ) ; } publ i c Ci r c ui t oSer i e ( doubl e v) { super ( v ) ; } publ i c doubl e c al c ul ar I nt ens i dadCi r c ui t o( ) { doubl e t ot al Resi st enci as = 0; doubl e i nt ensi dad; f or ( doubl e r : r es i s t enci as ) t ot al Resi st enci as += r ; i nt ensi dad = v / t ot al Resi st enci as; r e t u r n i nt ensi dad; } }
Apartado 3 publ i c st at i c voi d mai n ( St r i ng[ ] ar gs) { / / 3. a. Se crea un ci r cui t o en ser i e Ci r cui t oSer i e cs = new Ci r c ui t oSer i e( ) ; / / Se añaden l as r esi st enci as una a una cs. addResi st enci a( 3) ; cs. addResi st enci a( 5) ; cs. addResi st enci a( 6) ; / / Se añade el V c s. s et V( 4) ; / / 3. b. Ll amada a cal cul ar I nt ensdi dad y se i mpr i me por pant al l a Sys t e m. out . pr i nt l n( c s. c al c ul ar I nt ens i dadCi r c ui t o( ) ) ; }
Apartado 4 publ i c doubl e cal cul ar I nt ensi dadTot al ( ) { doubl e i nt ensi dadTot al = 0; f or ( Ci r c ui t o c: ci r c ui t os ) i nt ensi dadTot al += c. cal cul ar I nt ensi dadCi r cui t o( ) ; r e t u r n i nt ensi dadTot al ; }
TIPO A
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el test en una hoja de lectura óptica . No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen. Resuelva el Problema en una hoja aparte ( máximo 2 caras ), indicando su nombre y el Centro Asociado en el que ha realizado la práctica. FEBRERO 2007 Segunda Semana
Apellidos……………………………………………………..Nombre……………………..DNI……………
Prim era Parte: Test 1. ¿Cuál de las siguientes memorias no es volátil? a. Memoria caché. b. Memoria RAM. c. Memoria virtual. d. Memoria ROM. 2. ¿Qué es un hub? a. Es un dispositivo de distribución de comunicaciones que permite la conexión de más periféricos. b. Es un bus como PCI. c. Es un protocolo de comunicación como los puertos serie y paralelo. d. Es un comunicador unidireccional entre el computador y los periféricos. 3. Entre las funciones fundamentales del sistema operativo no está: a. El control de los procesos de entrada/salida. b. La asignación de recursos a los procesos. c. La gestión de ficheros. d. Traducir código fuente a código objeto. 4. De las siguientes sentencias, ¿cuál es la que mejor describe la funcionalidad del programa controlador de trabajo? a. Carga el monitor en memoria al iniciarse el trabajo del sistema. b. Carga en memoria los módulos de programa que necesite el proceso de ejecución. c. Se encarga de planificar la secuencia de los diferentes trabajos, repartir la memoria y controlar la cola de tareas y las interrupciones. d. Se encarga de optimizar el uso de la memoria al asignar la misma a los diferentes programas. 5. ¿Qué estructura se utilizaría mejor en la práctica a la hora de almacenar los modelos dentro de la clase GestiónMaquinaria? a. Un array de tamaño N. b. Una array de tamaño ilimitado. c. Un ArrayList. d. Una matriz de N x N. 6. ¿Cuál de los siguientes tipos no es primitivo? a. 1.32 b. false c. ‘b’ d. “mundo”
7.
¿Es correcta la siguiente sentencia?
Syst em. out . pr i nt l n( Mat h. sqr t ( 25) ) ; a. No es correcta ya que no se puede llamar a un método de una clase sin crearse previamente un objeto. b. No es correcta ya que la clase Math se tiene que importar previamente. c. Es correcta porque la clase Math es una clase predefinida. d. No es correcta ya que la clase Math carece del método sqrt(int). 8. ¿Es correcta la implementación de la siguiente clase?
publ i c c l as s A { pr i vat e i nt x; pr i vat e i nt y; publ i c A( i nt x) {t hi s. x=x; } publ i c A( i nt x, i nt y) {t hi s. x=x; t hi s. y=y; } } a. b. c. d.
No, ya que dentro de una clase sólo se puede implementar un constructor. No, ya que no se ha implementado el constructor por defecto. Si, es correcta. No, porque los parámetros d entrada a los constructores no se pueden llamar de la misma forma que los atributos de la clase.
9. ¿Es correcto el siguiente código?
publ i c c l as s B{pr i vat e i nt b; } publ i c c l as s C ext ends B {pr i vat e i nt c; } publ i c c l as s D ext ends B {pr i vat e i nt d; } Dent r o del mét odo mai n se r eal i zan l as si gui ent es sent enci as: D oD = new D( ) ; C oC = ( C) oD; a. Si, ya que al ser C y D clases hijas de la clase padre B por polimorfismo se puede reconvertir un objeto de la clase D en otro de la clase C. b. No, porque no se pueden crear dos clases hijas de una misma clase padre. c. No, porque una clase hija no se puede reconvertir a otra clase hija por tanto hay incompatibilidad de tipos. d. No, porque no se ha creado previamente el objeto oC con la sentencia C oC = new C( ) ; . Sin esta sentencia previa no se puede asignar otros objetos al objeto oC.
10. ¿Qué resultado da la siguiente estructura de control? El operador % es el operador resto.
i nt x = 2; do { try { i f ( x%2 == 0) throw new Except i on( ) ; x++; } cat ch( Except i on e) {x- - ; } f i nal l y { x=x+2; Syst em. out . pr i nt ( x + " " ) ; } } whi l e ( x < 10) ; a. b. c. d.
3 4 3 3
6 6 5 6
7 8 7 8
10 10 9 10
Segunda Parte: Probl ema Un circuito eléctrico puede estar formado, al menos, por una serie de resistencias eléctricas (R) medidas en ohmios y una fuente eléctrica que es capaz de generar una diferencia de potencial V (que es la que se almacena en el circuito). Dentro de los circuitos podemos ver que hay dos tipos, los circuitos en serie y los circuitos en paralelo. Los circuitos en serie calculan la intensidad con la siguiente fórmula de la ley de Ohm V= I(R1 + ... + Rn) mientras que los circuitos en paralelo calculan la intensidad con la siguiente formula I= V (1/R1 + …+ 1/Rn). 1. Dibujar un diagrama de clases con los atributos y métodos necesarios, incluidos los métodos constructores. (2 puntos) 2. Implementar la clase circuito serie. (2 puntos) 3. Implementar la creación del siguiente objeto de un circuito en serie: a. Circuito con 3 resistencias de 3, 5 y 6 ohmios y una fuente de alimentación cuyo potencial es medido a 4 voltios. (1 punto) b. Hacer la llamada al método correspondiente. ¿Qué resultado daría por pantalla? (1 punto) 4. Definimos un circuito mixto como una composición donde puede haber circuitos en serie y/o circuitos en paralelo. Implementar un método de la clase circuito mixto que calcule la suma de las intensidades de todos los circuitos que componen el circuito mixto. Pista: Para este apartado se ha de tener en cuenta el polimorfismo. (4 puntos) Solución test febrero 2007 segunda semana tipo A: 1A, 2A, 3A, 4A, 5D, 6C, 7A, 8A,9C, 10C
Se desea implementar un sistema para la gestión de zonas de tala. Cada zona se caracteriza por el número de árboles que posee, pero además, hay dos tipos de zonas, las zonas de tala anual y las zonas de tala esporádica . Las zonas de tala esporádica se talan completamente cada 10 años, y se caracterizan por el año de la última poda. Las zonas de tala anual se talan todos los años pero sólo un cierto porcentae de árboles. Cada zona de tala anual tiene asociada dicho porcentae. Sabiendo que la cantidad de madera promedio que se obtiene de un árbol es de 1000 !ilo"ramos, el sistema debe permitir calcular, dado un año, la cantidad de madera que se espera obtener dicho año en el conunto de zonas "estionadas. 1. #ibuar un esquema con las clases necesarias para este pro"rama, indicando los atributos y m$todos en caso de haberlos %sólo indicarlos, sin escribir su códi"o&. %' puntos& (. )mplementar el*los m$todos que calculen la cantidad de madera e+trada dado un año en una zona determinada y en todas las zonas. -#ónde se encontrara cada uno de dichos m$todos%' puntos& /. )mplementar en códi"o 2 la creación de los si"uientes obetos %( puntos&3 a. 4na zona de tala esporádica que con 1000 árboles que se taló en 1556. b. 4na zona de tala anual con (000 árboles en donde se tala anualmente un 107 de los árboles. c. 4n obeto "estión de zonas que incluya ambas zonas.
EJERCICIO 1: Zona
GestorZonas private ArrayList zonas;
private String nombre; private int numArboles;
public GestorZonas(); public int calcula#g!a"era(int a$o) public voi" a$a"irZona(Zona zona)
public Zona(String nombre, int numArboles); /!eto"os get y set/ public int calcula#g!a"era(int a$o)
Zona%ala&spora"ica private int ultimoA$o%ala; public Zona(String nombre, int numArboles); public int getltimoA$o%ala(); public voi" setltimoA$o%ala(int a$o); public int calcula#g!a"era(int a$o);
Zona%alaAnual private int porcenta'e; public Zona(String nombre, int numArboles); public int getorcenta'e(); public voi" setorcenta'e(int porcent); public int calcula#g!a"era(int a$o);
EJERCICIO 2 En primer lugar, será necesario un método en la clase “estion!onas" #ue sume la madera recogida en las distintas zonas #ue gestiona$ public void calculaKgMadera (int año){ int kgs=0; for (int i=0;i < zonas.size();i++){ kgs=kgs+this.zonas.get(i).calculaKgMadera(año); } } return kgs; }
%ado #ue el método #ue calcula la cantidad de madera generada en un a&o en una zona depende del tipo de zona, este método de'e estar implementado en am'as clases (i)as de !ona$ *demás, este método tendrá #ue estar tam'ién de+inido en la clase padre !ona, para #ue pueda aplicarse polimor+irsmo$ Es decir, para #ue pueda accederse al método sin necesidad de conocer a #ué su'clase re+erencia el o')eto$ En la clase !onaalaEsporádica tendr-amos public int calculaKgMadera(int año){ int kgs=0; /*Si el año fue un año de tala (la diferencia ente el último año de tala y el año en cuestión es múltiplo del intervalo entre talas 10)*/ if ((año-ultimo_año_tala)%10)==0){ kgs=numArboles*1000; } return kgs; }
En la clase !onaala*nual tendr-amos: public int calculaKgMadera(int año){ int kgs=0; kgs=numArboles*porcentaje*10; // porcentaje/100 * 1000 } return kgs; }
EJERCICIO .: !ona a/ne0 !ona“*",134 a$set5ltimo*&oala166734 !ona a/ne0 !ona“8",234 a$set9orcenta)e134 estor!onas gz/ne0 estor!onas34 gz$a&adir!onaa34 gz$a&adir!ona'34 O*: am'ién podr-a (a'erse de+inido un constructor #ue inclu;era como parámetro de entrada los atri'utos “ultimo*&oala" ; “porcenta)e"$ o ser-a necesario en ese caso llamar al método set correspondiente$
SEPTIEMBRE 2007
TIPO A
Na (ele)
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el test en una hoja de lectura óptica. No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen. Resuelva el Problema en una hoja aparte (máximo 2 caras), indicando su nombre y el Centro Asociado en el que ha realizado la práctica. Rellene sus datos en esta hoja y entréguela junto a la de lectura óptica. Apellidos……………………………………………..Nombre……………………..DNI………
Primera Parte: Test 1. Indica, de las siguientes opciones, aquella que no es un componente dela placa madre: a. Puertos de entrada salida. b. Inter fa ce IDE. c. Tar jetas de memoria. d. Fuente de alimentación. 2. ¿Afecta la memoria caché a la cantidad de instrucciones que un computador ejecuta en un cierto tiempo? a. No, dado que depende únicamente de la f recuencia de reloj. b. Sí, dado que amplía la memoria de almacenamiento permantente. c. Sí, dado que acelera los accesos a datos en memoria. d. No. La memoria caché solo preserva los datos ante una caída del sistema. 3. El proceso en tiempo compartido (time-sharing) consiste en: a. Distribuir los procesos en dif erentes procesadores. b. Sincronizar los relojes de dif erentes pr ocesadores. c. Asignar a los procesos ranuras de tiempo en el procesador central. d. Que los procesos compartan los canales de entrada/salida. 4. Indica cuál de los siguientes programas NO es un programas de control de un sistema operativo: a. Cargador de módulos. b. Controlador de tareas. c. Administrador de memoria. d. Compilador. 5. La composición entre clases sirve para: a. Establecer mecanismos de herencia entre clases. b. Implementar constructores por defecto. c. Definir atributos de una clase como instancias de otras clases. d. Implementar una lista de enteros (int).
6. ¿Cómo diseñaría un sistema que gestione productos en un supermercado de f or ma que el vendedor pueda introducir nuevas marcas de productos en su sistema? a. Definiendo cada nueva marca como una nueva clase hija de producto. b. Definiendo “marca como un valor (String) de un atributo de la clase producto. c. Definiendo cada nueva marca como un nuevo atributo (booleano) de la clase producto. d. No es posible que el usuario introduzca nuevas marcas sin implementar de nuevo el sistema. ”
7. La herencia es un mecanismo muy útil para: a. La reutilización de código en la implementación de nuevos sistemas. b. Implementar estructuras dinámicas de almacenamiento. c. Generar código portable a otros sistemas oper ativos. d. La implementación de bucles. 8. ¿Que secuencia de valores impr imir ía el siguiente código?
… for (int i=1;i<3;i++){ for (int j=1;j<3;j++){ System.out.println(i); System.out.println(j); } } …
a. 1,1,2,1,1,2,2,2 b. 1,1,2,2,2,1,1,2 1,1,1,2,2,1,2,2 d. 1,2,1,2 c.
9. Indica cuál de las siguientes afirmaciones es correcta: a. En Java, un bloque try{...} sólo puede tener asociado un bloque catch{...}, cuyo código se ejecutará siempre que salte una excepción en el tr y{...}. b. En Java, un bloque try{...} puede tener asociados varios bloques catch{...} y, en caso de que salte una excepción en el try{...}, se ejecutará primero, y mientras sea posible, el código del bloque catch{...} secuencialmente más cercano. c. En Java, un bloque try{...} puede tener asociados varios bloques catch{...} y, en caso de que salte una excepción en el try{...}, se ejecutará el código del bloque catch que capture dicha excepción. d. En Java, un bloque try{...} puede tener asociados varios bloques catch{...} y, en caso de que salte una excepción en el try{...}, se ejecutarán todos los códigos de los bloques catch asociados a dicho bloque. 10. ¿En qué clase se implementa el método comprobar_máquina_plantación en la práctica de este año?
a. b. c. d.
En la clase GestiónMaquinar ia. En la clase Plantación. En la clase Modelo_de_máquina En la clase Producto.
Segunda Parte: Problema Se desea implementar un sistema para el control de gastos de cambio de piezas en los automóviles de una empresa de transporte. Cada año, los conductores que consideren que se requiere un cambio de pieza por desgaste pedirán una revisión en el taller de mantenimiento de la flota. El encargado del taller anotará la información relativa a las revisiones realizadas. De cada revisión se anotará la fecha de revisión, la matrícula del automóvil y el conjunto de piezas sustituídas. De cada pieza es necesario conocer su código y coste. El sistema de control de revisiones debe disponer de un método que permita calcular el coste total de todas las piezas de una revisión. Además, el sistema debe tener en cuenta que, a efectos de facturación, existen tres tipos de piezas: las importadas, las de fabricación nacional y las de desguace. A las importadas hay que añadirles un porcentaje por gastos de envío, específico para cada pieza. A las de fabricación nacional el porcentaje de IVA fijo, y a las de desguace no se les añade ningún porcentaje. Se pide: 1. Dibujar un diagrama de clases con los atributos y métodos necesarios, incluidos los métodos constructores. Justificar en qué clase o clases se implementaría el o los métodos para calcular el coste final de UNA pieza. (5 puntos) 2. Implementar el método necesario para calcular el coste total de una revisión. (3 puntos) 3. En un código aparte, escribir las instrucciones necesarias (creación de objetos y llamadas a métodos) para (2 puntos): a. Crear dos objetos que representen una revisión y una pieza de importación nacional (con valores arbitrarios en sus atributos). b. Incluir en la revisón la pieza instanciada. c. Calcular el coste total de la revisión.
Solución test septiembre 2007, tipo A: 1 d), 2 c), 3 c), 4 d), 5 c), 6 b), 7 a), 8 c), 9 c), 10 c)
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN SEPTIEMBRE 2007, ESPECIALIDAD MECÁNICA Se desea implementar un sistema para el control de gastos de cambio de piezas en los automóviles de una empresa de transporte. Cada año, los conductores que consideren que se requiere un cambio de pieza por desgaste pedirán una revisión en el taller de mantenimiento de la flota. El encargado del taller anotará la información relativa a las revisiones realizadas. De cada revisión se anotará la fe!" #e revisión, $" %"&r'($" #e$ "(&)%óvi$ * e$ )n+(n&) #e ie-"s s(s&i&('#"s. De cada pieza es necesario conocer su ó#i.) y )s&e. El sistema de control de revisiones debe disponer de un mtodo que permita "$($"r e$ )s&e &)&"$ #e &)#"s $"s ie-"s de una revisión. !demás, el sistema debe tener en cuenta que, a efectos de facturación, e"isten tres tipos de piezas# las i%)r&"#"s , las de f"/ri"ión n"i)n"$ y las de #es.("e. ! las importadas $ay que añadirles un porcenta%e por gastos de env&o, espec&fico para cada pieza. ! las de fabricación nacional el porcenta%e de '(! fi%o, y a las de desguace no se les añade ning)n porcenta%e. Se pide# *. Dibu%ar un diagrama de clases con los atributos y mtodos necesarios, incluidos los mtodos constructores. +ustificar en qu clase o clases se implementar&a el o los mtodos para calcular el coste final de -! pieza. / puntos0 1. 'mplementar el mtodo necesario para calcular el coste total de una revisión. 2 puntos0 2. En un código aparte, escribir las instrucciones necesarias creación de ob%etos y llamadas a mtodos0 para 1 puntos0# a. Crear dos ob%etos que representen una revisión y una pieza de importación nacional con valores arbitrarios en sus atributos0. b. 'ncluir en la revisón la pieza instanciada. c. Calcular el coste total de la revisión.
EJERCICIO 1: Revisión
Pieza private #trin$ códi$o; private int coste; ublic Pieza(String codigo, int coste); *Metodos get y set*/ public int calculaCoste(int año)
Pieza!"portada private int $astos_envio; public PiezaImportada( String codigo, int coste, int gastos_envio); public int $et&astos_envio(); public void set&astos_envio(int $); public int calculaCoste();
private ArrayList piezas_sustituidas;
public Revisón(); public int calculaCosteotal() public void añadirPieza(Pieza p)
Pieza_!"p_%acional public static int iva; public PiezaImportada( String codigo, int coste); public int calculaCoste();
COMENTARIOS DEL EQUIPO DOCENTE:
1.Dado que existen diferentes tipos de piezas con diferentes atributos, como los gastos de envío o el IVA, y diferente comportamiento en sus mtodos, como el c!lculo del coste, es indispensable establecer una "erencia entre clases para seguir el paradigma de programaci#n orientada a ob$etos. %n caso de implementar todos ellos en una sola clase &ieza, sería necesario reimplementar el sistema para incluir en un futuro nuevos tipos de piezas en el sistema. 'in embargo, aplicando "erencia bastaría con extender una nueva clase "i$a. (.'iguiendo el paradigma de programaci#n orientada a ob$etos es importante que el proceso de c!lculo de costes sea invisible para la clase )evis#n, de forma que no sea necesario reimplementar esta clase para introducir nuevos tipos de piezas.
*.+a clase )evisi#n se relaciona por composici#n con &ieza mediante el atributo piezassustituidas. -ste es un Vector din!mico Array+ist/ que contendr! ob$etos de la clase &ieza. 0o debe ser un array, dado que no conocemos a priori el nmero de piezas que conlleva una revisi#n. 2.0o es estrictamente necesario implementar una clase "i$a para las piezas de desguace si consideramos que enca$a con el comportamiento por defecto de la clase padre. %sto es posible dado que las piezas de desguace no poseen atributos ni mtodos que no aparezcan en el resto de las clases "i$as. 3.&ara que el mtodo calcula4oste de la clases tipo &ieza sea accesible desde )evisi#n, debe implementarse para la clase padre que es con la que se relaciona )evisi#n. Adem!s, el mtodo debe reescribirse en las clases "i$as, ya que en stas el mtodo va a comportarse de diferente modo. 5.A diferencia del atributo gastosenvío, el IVA es un atributo cuyo valor lo comparten todas las instancias ob$etos/ de la clase &iezaImp0acional. %s decir, si se modifica el IVA para una instancia de la clase, se modifica para todas. %sto se implementa definiendo IVA como variable estatica.
EJERCICIO 2
EJERCICIO 3: Revision r=new Revision(! Pie"# $=new Pie"#%I&$%N#'ion#()*we+12,-,3++,! r.#/#0irPie"#($! in 'ose=r.'#'#rCoseTo#(!
FEBRERO 2008 Primera Semana
Solución test Febrero 2008 Primera Semana(Tipo A): 1-A, 2-B, 3-A, 4-B, 5-D, 6-C, 7-D, 8-A, 9-B, 10-D
FEBRERO 2008 Segunda Semana
Solución test Febrero 2008 Segunda Semana(Tipo A): 1-A, 2-B, 3-B, 4-D, 5-C, 6-B, 7-C, 8-A, 9-A, 10-D
Septiembre 2008 tipo A (electrónica)
TIPO A • • •
•
•
ORIG (elec)
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el test en una hoja de lectura óptica . No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen. Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado la práctica. Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.
Primera Parte: Test 1. ¿Cómo se llama la técnica que utiliza un área del disco duro para almacenar datos destinados a la memoria RAM cuando no queda espacio libre en ésta? a) Memoria física. b) Memoria virtual. c) Memoria estática. d) Memoria caché. 2. Un puerto USB: a) Evita el uso de tarjetas especializadas para cada periférico. b) Establece una conexión directa entre los dispositivos periféricos. c) Establece un nivel hardware entre el sistema operativo y el compilador. d) Es un hub que interconecta conjuntos de máquinas. 3. Un lenguaje orientado a objetos frente a un ensamblador: a) Permite un manejo más directo de los registros del computador. b) Es más cercano al lenguaje natural. c) Es más fiable ante caídas del sistema. d) Evita la necesidad de compiladores complejos. 4. Cuál de las siguientes funciones no depende sistema operativo: a) Gestión de ficheros. b) Gestión del arranque del computador. c) Gestión de la memoria. d) Planificación de trabajos.
5. ¿Qué es una clase interna? a) Una clase cuya definición está dentro de otra clase. b) Una clase definida dentro de un paquete. c) Una clase que hereda de otra. d) Una clase que extiende a otra (utilizando el mecanismo de extensión).
6. ¿Que secuencia de valores imprimiría el siguiente código? public class Prueba { main(String[] args) { public static void
for (int i = 1; i < 3; i++) { int j = 0; do { System. out.println(j); j++; } while (j <= 1); System.out.println(i);
} } } a) 0,1,2,0,1,2 b) 0,1,1,0,1,2 c) 0,1,1,0,1,1 d) 2,1,1,2,2,1
7. ¿Qué clases pueden acceder a un atributo declarado con el modificador 'protected'? a) Sólo la propia clase. b) Sólo las clases dentro del mismo paquete. c) Las clases dentro del mismo paquete y los descendientes de la propia clase. d) Sólo los descendientes de la propia clase. 8. Se tiene este código para un determinado método, ¿Qué salida daría por pantalla? public void
imprime(String Nombre) {
this. nombre=nombre; nombre= this.nombrePila; System.out.println(this.nombre); }
a) El valor del atributo “nombre” de la clase. b)El valor del parámetro de entrada “nombre”. c) El valor de la variable “nombre” en el contexto del método. d)El valor del atributo “nombrePila” de la clase.
9. Dado el siguiente código, sabiendo que la clase Alumno hereda de Persona, y que Persona dispone de un método imprimirDNI se ejecutaría: ... Alumno a = new Alumno(726382-L); Persona b = a; b.imprimirDNI();
... a) El método imprimirDNI de la clase Persona. b)Nada. Un error de compilación. c) imprimirDNI pero sólo si está redefinido en la clase Alumno. d)Nada. Aparecería un error de ejecución (Null pointer exception)
10. En la práctica obligatoria, el tipo de cuerda se representó mediante un tipo: a) String. b)Enumerado. c) Object. d)Se empleó una clase distinta para cada tipo de cuerda.
Apellidos……………………………………………..Nombre……………………..DNI………...…… Centro asociado ……………………………………………..
Segunda Parte: Problema Se desea gestionar las citas en un hospital. El centro debe administrar su lista de citas con especialistas y de citas para pruebas médicas. Tanto las citas con especialistas como las citas para pruebas medicas deben incluir su hora y día y nombre del paciente. Las citas con especialistas incluyen además el nombre del especialista y su especialidad. Las citas para pruebas incluyen el nombre de la prueba. El sistema debe de ser capaz de imprimir en pantalla todas las citas existentes para un especialista concreto o para todos, y para una o todas las pruebas. Además, debe de ser posible crear una nueva cita introduciendo los datos de la misma (strings). Antes de proceder al diseño leanse las tres cuestiones siguientes:
Se pide: 1. (2 puntos) Dibujar un esquema con las clases necesarias para este programa, indicando los atributos y métodos que tiene cada una (sólo indicarlos, sin escribir su código), aplicando los principios de la programación orientada a objetos. 2. (1 punto) Implementar el método que permite imprimir las citas de un determinado especialista. 3. (2 puntos) Explicar justificadamente cómo se haría para, sin modificar el sistema existente y aplicando los principios de la programación orientada a objetos, reutilizar el código para hacer un nuevo programa que gestione otro hospital análogo que incluya además la posibilidad de modificar una cita. ¿Qué clases han de extenderse y con qué nuevos métodos y atributos? ¿Qué métodos se reutilizan?
Solución al test septiembre 2008 tipo A (electrónica): 1-b, 2-a, 3-b, 4-b, 5-a, 6-b, 7-c, 8-a, 9-a, 10-b
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN SEPTIEMBRE 2008, ESPECIALIDAD ELECTRÓNICA Se desea gestionar las citas en un hospital. El centro debe administrar su lista de citas con especialistas y de citas para pruebas médicas. Tanto las citas con especialistas como las citas para pruebas medicas deben incluir su hora y día y nombre del paciente. Las citas con especialistas incluyen además el nombre del especialista y su especialidad. Las citas para pruebas incluyen el nombre de la prueba. El sistema debe de ser capaz de imprimir en pantalla todas las citas existentes para un especialista concreto o para todos, y para una o todas las pruebas. Además, debe de ser posible crear una nuea cita introduciendo los datos de la misma !strings". Antes de proceder al dise#o leanse las tres cuestiones siguientes$ Se pide$ %. (2 puntos) &ibu'ar un es(uema con las clases necesarias para este programa, indicando los atributos y métodos (ue tiene cada una !s)lo indicarlos, sin escribir su c)digo", aplicando los principios de la programaci)n orientada a ob'etos. *. ( punto) +mplementar el método (ue permite imprimir las citas de un determinado especialista. . (2 puntos) Explicar 'usti-icadamente c)mo se haría para, sin modi-icar el sistema existente y aplicando los principios de la programaci)n orientada a ob'etos, reutilizar el c)digo para hacer un nueo programa (ue gestione otro hospital análogo (ue incluya además la posibilidad de modi-icar una cita. /ué clases han de extenderse y con (ué nueos métodos y atributos0 /ué métodos se reutilizan0
EJERCICIO 1:
Hospital protected List citasEspecialista; protected List citasPrueba; public List imprimirCitasEspecialista(String nombre); public List imprimirCitasEspecialista(); public List imprimirCitasPruebas(String nombre); public List imprimirCitasPruebas(); public void CrearCitaEspecialista(String hora, String da, String nombrePaciente, String nombreEspecialista, String especialidad); public void CrearCitaPrueba(String hora, String da, String nombrePaciente, Strin nombrePrueba
abstract Cita private String hora; private String da; private String nombrePaciente; !"#$todos get % set"!
Cita
CitaEspecialista
Cita
CitaPruebas
private String nombreEspecialista; private String especialidad;
private String nombrePrueba
public CitaEspecialista( String hora, String da, String nombrePaciente, String nombreEspecialista, String especialidad);
public CitaPrueba( String hora, String da, String nombrePaciente, String nombrePrueba);
!"#$todos get % set"!
!"#$todos get % set"!
PRIMER PROBLEMA:
1. Dado que todas las citas son o de especialista o de prueba, la clase genérica cita debe de ser abstracta. 2. Para poder imprimir conjuntos de citas es necesario crear una estructura de composición mediante una lista sobre las clases CitaPrueba y CitaEspecialista. 3. Dado que las listas de pruebas y citas de especialista se imprimen de manera independiente, el parmetro de salida de los métodos !imprimir" debe de ser una lista de pruebas o citas de especialistas, no de la clase genérica Cita, que adems es abstracta. #. $a creación de una nue%a cita requiere dos métodos &dependiendo del tipo de cita' en la clase (ospital que a)ada un elemento a su lista. SEGUNDO PROBLEMA
El método debe recorrer la lista de citas de especialista, atributo de la clase (ospital. Por cada elemento de la lista &%ariable c', el método debe comprobar que el nombre de especialista se corresponda con el parmetro de entrada nombreEspecialista, y si es as*, imprimir los atributos de la cita. El código ser*a el siguiente+ public %oid imprimirCitasEspecialista &tring nombreEspecialista'or &int i/0i tis.citasEspecialista.si4e&'i55'CitaEpecialista c/&tis.citasEspecialista.getElement6t&i'' i &c.get7ombreEspecialista&'/nombreEspecialista'ystem.out.println&c.get7ombre(ora&'' ystem.out.println&c.get7ombreDia&'' ystem.out.println&c.get7ombre7ombrePaciente&'' 8 8 8 TERCER PROBLEMA
Para modiicar una cita ser*a necesario un nue%o método en la clase (ospital anlodo a !crearCitaEspecialista" o !crearCitaPrueba". Podr*a crearse un método o dos, cada uno de ellos especiali4ado en cada tipo de cita. En general, no es necesario reimplementar de nue%o el sistema. 9astar*a con crear una clase ija de (ospital en la que se implemente este nue%o método, reutili4ando el resto de métodos. i nos adentramos a ms ni%el de detalle, cabr*a decir que esto solo es posible si los atributos citasEspecialista y citasPrueba estn deinidos como !protected" y no como !pri%ate", ya que como !pri%ate" no podr*an ser modiicados por la clase ija. En general, esto no suele ser un problema en la reutili4ación de código. Para los atributos !pri%ate", las clases suelen incluir todos los métodos necesarios para modiicar el atributo. Por ejemplo, bastar*a un que ubiera de antemano un metodo !borrarCita".
Septiembre 2008 tipo A (mecánica)
TIPO A • • •
•
•
ORIG (mec)
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el test en una hoja de lectura óptica . No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen. Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado la práctica. Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo
Primera Parte: Test 1. ¿Cómo se llama la técnica que utiliza un área del disco duro para almacenar datos destinados a la memoria RAM cuando no queda espacio libre en ésta? a) Memoria física. b) Memoria virtual. c) Memoria estática. d) Memoria caché. 2. Un puerto USB: a) Evita el uso de tarjetas especializadas para cada periférico. b)Establece una conexión directa entre los dispositivos periféricos. c) Establece un nivel hardware entre el sistema operativo y el compilador. d) Es un hub que interconecta conjuntos de máquinas. 3. Un lenguaje orientado a objeto, frente a un ensamblador: a) Permite un manejo más directo de los registros del computador. b) Es más cercano al lenguaje natural. c) Es más fiable ante caídas del sistema. d)Evita la necesidad de compiladores complejos.
4. Cuál de las siguientes funciones no depende sistema operativo: a) Gestión de ficheros. b) Gestión del arranque del computador. c) Gestión de la memoria. d) Planificación de trabajos.
5. ¿Qué es una clase interna? a) Una clase cuya definición está dentro de otra clase. b)Una clase definida dentro de un paquete. c) Una clase que hereda de otra. d)Una clase que extiende a otra (utilizando el mecanismo de extensión).
6. ¿Que secuencia de valores imprimiría el siguiente código? public class Prueba { public static void main(String[] args) { for (int i = 1; i < 3; i++) { int j = 0; do { System. out.println(j); j++; } while (j <= 1); System.out.println(i);
} } } a) 0,1,2,0,1,2. b) 0,1,1,0,1,2. c) 0,1,1,0,1,1. d) 2,1,1,2,2,1.
7. ¿Qué clases pueden acceder a un atributo declarado con el modificador 'protected'? a) Sólo la propia clase. b) Sólo las clases dentro del mismo paquete. c) Las clases dentro del mismo paquete y los descendientes de la propia clase. d) Sólo los descendientes de la propia clase. 8. Se tiene este código para un determinado método, ¿Qué salida daría por pantalla? public void
imprime(String Nombre) {
this.nombre=nombre; nombre= this.nombrePila; System.out.println(this.nombre); }
a) El valor del atributo “nombre” de la clase. b)El valor del parámetro de entrada “nombre”. c) El valor de la variable “nombre” en el contexto del método. d)El valor del atributo “nombrePila” de la clase.
9. Dado el siguiente código, sabiendo que la clase Alumno hereda de Persona, y que Persona dispone de un método imprimirDNI se ejecutaría: ...
Alumno a = new Alumno(726382-L); Persona b = a; b.imprimirDNI();
... a) El método imprimirDNI de la clase Persona. b)Nada. Un error de compilación. c) El método imprimirDNI, pero sólo si está redefinido en la clase Alumno. d)Nada. Aparecería un error de ejecución ( Null pointer exception)
10. En la práctica obligatoria, el tipo de cuerda se representó mediante un tipo: a) String. b)Enumerado. c) Object. d)Se empleó una clase distinta para cada tipo de cuerda.
Apellidos……………………………………………..Nombre……………………..DNI………...…… Centro asociado ……………………………………………..
Segunda Parte: Problema Se desea implementar un sistema JAVA para la gestión de una fábrica de vehículos donde se fabrican motores de tres tipos: gasolina, diésel y eléctricos. De cada motor se tiene como información característica la relación de compresión y su cilindrada, así como un identificador único de la marca y el modelo del motor. En el caso de motores de gasolina y diesel se debe guardar información relativa a la resistencia que presenta el combustible cuando es comprimido dentro del motor: el índice de octanaje en el caso de la gasolina y el índice de cetano en los motores diésel. Los motores de gasolina pueden ser de inyección o de carburación. En el caso de los motores de gasolina con carburador deberá guardarse también el tamaño de la cuba como información característica, y para los motores diésel y los de gasolina de inyección, el tipo de inyeccion (directa o indirecta) y el número de inyectores. De los motores eléctricos se desea almacenar la información relativa a la corriente y el par de arranque. Por último, y dado que la fábrica está preparada para la construcción de diferentes modelos de coches, se desea que la aplicación a desarrollar sea capaz de recuperar, para un modelo de coche dado, el conjunto de motores compatibles con su chásis.
Se pide: −
−
−
2'5 puntos. ¿Cómo modelarías este problema para que la aplicación soporte todas la especificación requerida? Realiza el diseño de clases correspondiente. 1'5 puntos . ¿Dónde definirías el método necesario para devover, dado un modelo de coche, el conjunto de motores compatibles con su chásis? Razona tu respuesta. 1 puntos . Implementa el código necesario para instanciar un motor de gasolina de inyección directa.
Solución al test septiembre 2008 tipo A (mecánica): 1-b, 2-a, 3-b, 4-b, 5-a, 6-b, 7-c, 8-a, 9-a, 10-b
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN SEPTIEMBRE 2008, ESPECIALIDAD MECÁNICA Se desea implementar un sistema JAVA para la gestión de una fábrica de vehículos donde se fabrican motores de tres tipos: gasolina, diésel y eléctricos !e cada motor se tiene como información característica la relación de compresión y su cilindrada, así como un identificador "nico de la marca y el modelo del motor #n el caso de motores de gasolina y diesel se debe guardar información relativa a la resistencia $ue presenta el combustible cuando es comprimido dentro del motor: el índice de octana%e en el caso de la gasolina y el índice de cetano en los motores diésel &os motores de gasolina pueden ser de inyección o de carburación #n el caso de los motores de gasolina con carburador deberá guardarse también el tama'o de la cuba como información característica, y para los motores diésel y los de gasolina de inyección, el tipo de inyeccion (directa o indirecta) y el n"mero de inyectores !e los motores eléctricos se desea almacenar la información relativa a la corriente y el par de arran$ue *or "ltimo, y dado $ue la fábrica está preparada para la construcción de diferentes modelos de coches, se desea $ue la aplicación a desarrollar sea capa+ de recuperar, para un modelo de coche dado, el con%unto de motores compatibles con su chásis Se pide: (-./ puntos) 01ómo modelarías este problema para $ue la aplicación soporte todas la especificación re$uerida2 3eali+a el dise'o de clases correspondiente - (./ puntos) 0!ónde definirías el método necesario para devover, dado un modelo de coche, el con%unto de motores compatibles con su chásis2 3a+ona tu respuesta 4 ( punto) 5mplementa el código necesario para instanciar un motor de gasolina de inyección directa
EJERCICIO 1:
abstract Motor
GestionMotores
private String marca; private String modelo; private Double relComp;
private &ist 'Motor listaMotores;
public compatibilidad (String c)asis /*Métodos get y set*/
/*Métodos get y set*/
Cita
MotorGasolina
Cita
MotorDiesel
Cita
Motor#lec
private Double resistencia; private Double indOct;
private Double resistencia; !rivate String tipo"ny;
private Double corriente; private Double par$rran%ue;
public MotorGasolina( String marca, String Modelo, Double relComp Double resistencia, Double indOct; /*Métodos get y set*/
public MotorDiesel( String marca, String Modelo, Double relComp Double resistencia, String tipo"ny;
public Motor#lec( String marca, String Modelo, Double relComp Double corriente, Double par$rran%ue;
Cita
MotorGasolina"ny
/*Métodos get y set*/
Cita
MotorGasolinaCarb
!rivate String tipo"ny
!rivate int tamCuba
public MotorGasolina"ny( String marca, String Modelo, Double relComp Double resistencia, Double indOct String tipo"ny;
public MotorGasolinaCarb( String marca, String Modelo, Double relComp Double resistencia, Double indOct int tamCuba;
/*Métodos get y set*/
/*Métodos get y set*/
/*Métodos get y set*/
PRIMERA PREGUNTA:
En general, la jerarquía viene dada por la tipología de motores descrita en el enunciado. Sobre ésta, basta con situar cada atributo en las clases correspondientes. Si un atributo es compartido por todas las clases hijas, entonces se añade únicamente en la clase padre. Hemos introducido como parámetros de entrada en cada constructor todos los atributos de la clase. tra posibilidad es contar con el constructor por de!ecto "sin parámetros de entrada# e incluir métodos get $ set para dar valor a los atributos del objeto creado.
SEGUNDO PROBLEMA
En cuando al problema de la compatibilidad entre chasis $ motores, es necesario disponer de alguna lista de motores sobre la que comprobar la compatibilidad $ devolver la lista reducida que se pide en el enunciado. %ara incorporar esta lista de motores se requiere una nueva clase &'estion(otores) "no tiene sentido que una clase contenga una lista de elementos de su misma clase#. *asta entonces con incluir en dicha clase un método que recorra la lista $ compruebe la compatibilidad chasis+motor. TERCER PROBLEMA
ado que todos los atributos vienen dados como parámetros de entrada en el constructor, basta con una línea de c-digo en el que se cree el objeto pedido mediante una llamada a su constructor. (otor'asolinan$ motorEjemplo / ne0 (otor'asolinan$"&pel),&1orsa),2.3,2.4,2.5,)directa)#6
Septiembre de 2008 tipo A (reserva)
TIPO A • • •
•
•
RES(elec/mec)
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Responda el test en una hoja de lectura óptica . No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen. Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado la práctica. Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.
Primera Parte: Test
1. Para mejorar la velocidad de procesamiento sobre un gran conjunto de datos necesitarías:
a) Más memoria ROM. b) Más memoria RAM. c) Más memoria en el disco duro. d)Un sistema operativo multiusuario. 2. ¿Cuál es la función de un modem?
a) Convertir datos digitales a analógicos para permitir la comunicación entre ordenadores por medio de una red de área local. b)Convertir datos digitales a analógicos para permitir la comunicación entre ordenadores por medio de una línea telefónica. c) La compresión de datos digitales para permitir la comunicación entre ordenadores por medio de una red de área local. d)La compresión de datos analógicos para permitir la comunicación entre ordenadores por medio de una línea telefónica. 3. El sistema operativo:
a) Gestiona los tiempos de CPU asignados a los procesos. b)Se encarga de la compilación de todos los programas ejecutados en el computador. c) Se encarga de interconectar los elementos de la placa madre. d)Es el componente hardware principal del computador. 4. El software es:
a) El conjunto de componentes físicos del ordenador. b)La placa madre y sus componentes. c) El conjunto de programas que nos permiten hacer uso del ordenador. d)El conjunto de programas instalados en el ordenador, salvo el sistema operativo.
5. ¿Que secuencia de valores imprimiría el siguiente código?
for (int i=0; i < 3; i++ ) { if ( i == 0 ) { i++; } System.out.println(i); } a) 0, 1, 2. b)1, 2. c) 1, 2, 3. d) 0, 1. 6. Al crear una clase ¿siempre debe implementarse al menos un constructor?
a) Sí, porque si no tiene constructores no se puede saber cómo inicializar los objetos. b)Sí, de hecho debe tener al menos dos constructores: uno con parámetros y otro sin ellos. c) No, es posible crear clases que no tengan implementado ningún constructor; en ese caso se ejecutará el constructor por defecto. d)No, porque siempre es posible instanciar un objeto sin ejecutar ningún constructor. 7. La palabra clave extends se usa para:
a) Declarar una superclase. b)Declarar una subclase. c) Componer un conjunto de objetos. d)Componer un conjunto de clases. 8. Se tiene este código para un determinado método:
Public void suma(int a,b){ this.suma = this.suma+this.a; this.suma = this.suma+this.b; System.out.println(this.suma); } ¿Qué salida daría por pantalla?
a) La suma de los parámetros de entrada “a” y “b”. b)La suma de los parámetros de entrada “a” y “b” más el valor del atributo “suma” de la clase. c) La suma de los atributos “a”, “b” y “suma” de la clase. d)La suma de los objetos “a” y “b”.
9. Dado el siguiente código:
public class Pedido { public Pedido(int cantidad) { ... } public static void main(String[] args) { Pedido pedido = new Pedido(); } } a) El código es correcto. b)La creación del objeto 'pedido' es incorrecta. c) Un método static no permite la creación de objetos. d)Falta declarar el tipo que devuelve el método 'Pedido'. 10.En la práctica obligatoria, ¿en qué clases aparece el método getPrecio() ?
a) Únicamente en la clase Guitarra. b)Únicamente en la clase GuitarraOferta. c) En la clase Catalogo. d)En las clases Guitarra y GuitarraOferta.
Apellidos……………………………………………..Nombre……………………..DNI………...…… Centro asociado ……………………………………………..
Segunda Parte: Problema Un proveedor distribuye distintos tipos de piezas a una serie de clientes. Cada cliente adquiere un número de piezas determinado cada mes, información que pueden alterar en cualquier momento. Para ello el distribuidor almacena la información relativa a los clientes en cuentas. Cada cuenta tiene un titular y un pedido. Cada pedido se compone de un conjunto de piezas, cada una de las cuales tendrá un identificador y un precio, y un método para calcular el precio total del pedido. Se pide:
−
−
−
2'5 puntos . Diseñar el diagrama de clases para una aplicación que permita gestionar las cuentas de cliente
y los pedidos, teniendo en cuenta que se han de poder añadir, eliminar y modificar dichas cuentas y pedidos. 1'5 puntos . Modificar el diseño para que en el conjunto de piezas se distingan dos tipos de piezas. El primero de ellas, las bielas, contendrá información acerca del diámetro de sus dos agujeros, así como su longitud. El segundo tipo, el cigüeñal, debe almacenar el número de apoyos que tenga dicho cigüeñal. ¿Qué mecanismo has utilizado para introducir la modificación solicitada en este apartado? ¿Por qué? 1 puntos . Escribe el código necesario para calcular el precio total de un pedido según el diseño resultante del apartado anterior.
Solución al test de septiembre de 2008 tipo A (reserva): 1-b, 2-b, 3-a, 4-c, 5-b, 6-c, 7-b, 8-c, 9-b, 10-d
SOLUCIÓN PARTE PRÁCTICA DEL EXAMEN DE RESERVA EN SEPTIEMBRE 2008, Un proveedor distribuye distintos tipos de piezas a una serie de clientes. Cada cliente adquiere un número de piezas determinado cada mes, información que pueden alterar en cualquier momento. Para ello el distribuidor almacena la información relativa a los clientes en cuentas. Cada cuenta tiene un titular y un pedido. Cada pedido se compone de un conjunto de piezas, cada una de las cuales tendrá un identificador y un precio, y un método para calcular el precio total del pedido. e pide! ". #$% #$% punt puntos os.. &ise &ise'a 'arr el dia( dia(ra rama ma de clas clases es para para una una apli aplica caci ción ón que que permit permita a (estio (estionar nar las cuenta cuentas s de client cliente e y los pedidos, pedidos, tenien teniendo do en cuenta que se )an de poder a'adir, eliminar y modificar dic)as cuentas y pedidos. #. "$% "$% punt puntos os.. *odi *odifi fica carr el dise dise'o 'o para para que que en el conj conjun unto to de piez piezas as se distin(an dos tipos de piezas. +l primero de ellas, las bielas, contendrá info inform rmac ació ión n acer acerca ca del del diám diámet etro ro de sus sus dos dos a(uj a(ujer eros os,, as as como como su lon(it lon(itud. ud. +l se(un se(undo do tipo, tipo, el ci(-e' ci(-e'al, al, debe debe almace almacenar nar el númer número o de apoyos que ten(a dic)o ci(-e'al. /ué mecanismo )as utilizado para introducir la modificación solicitada en este apartado0 Por qué0 1. " punto punto.. +scrib +scribe e el códi( códi(o o necesa necesario rio para calcul calcular ar el precio precio total total de un pedido se(ún se(ún el dise'o resultante del apartado anterior.
EJERCICIO 1:
GestionCuentas private List listaCuentas;
public List getCuentas(); public void removeCuenta(Cuenta c); public void addCuenta(Cuenta c); /*Métodos get y set*/
Cuenta private tring Cliente; private List pedido; public void Cuenta(tring cliente); public List get!edido(); public void remove!ie"a(!ie"a p); public void add!ie"a(!ie"a p); public int calcula!recio#otal!edido(); calcula!recio#otal!edido(); /*Métodos get y set*/
!ie"a !rivate tring identi$icador; !rivate int precio; public void !ie"a( tring identi$icador% int precio); /*Métodos get y set*/
PRIMERA PREGUNTA: DISEÑO DE CLASES
Para poder añadir o eliminar cuentas, es necesario una clase que contenga al menos una lista de cuentas sobre las que poder oper operar ar. . Ésta Ésta es la clas clase e “Ges “Gesti tion onCu Cuen enta tas” s”. . Dado Dado que que exis existe te un único pedido por cada cada cuenta, ambos conceptos se pueden pueden abstraer como como una una únic única a clas clase, e, sien siendo do “ped “pedid ido” o” un atri atribu buto to tipo tipo list lista a dentro de la clase “Cuenta”. Otra opcin consistir!a en de"inir dos clases independientes que mantengan una relacin de composicin. Para Para poder poder modi"i modi"icar car pedido pedidos, s, es necesa necesario rio poder poder borrar borrar o añad añadir ir pie# pie#as as de la list lista a “Ped “Pedid idos os”. ”. Para Para ello ello, , de"i de"ini nimo mos s los los m$todos correspondientes correspondientes en la clase “Cuenta”. SEGUNDO PROBLEMA
Para añadir dos subtipos de “Pie#a” no es necesario modi"icar lo establecido en el esquema de clases anterior. %asta con añadir dos dos nue& nue&as as clas clases es que que 'ere 'erede den n de “Pie “Pie#a #a”. ”. Por Por la prop propie ieda dad d de poli polimo mor" r"is ismo mo, , las las clas clases es desc descri rita tas s en el esqu esquem ema a ante anteri rior or que que operan sobre precios de pie#as, seguir(n comport(ndose de la misma "orma, independientemente del tipo de pie#a a que corresponda cada elemento de la lista “pedido”. !ie"a private tring identi$icador; private int precio; public void !ie"a( tring identi$icador% int precio); /*Métodos get y set*/
&iela private int diametro; private int longitud; public void !ie"a( tring identi$icador% int precio% int diametro% int longitud); /*Métodos get y set*/
Cig'eal private int puntospoyo; public void !ie"a( tring identi$icador% int precio% int puntospoyo); /*Métodos get y set*/
TERCER PROBLEMA
)iendo cuenta*+ un ob+eto “Cuenta” a instanciado con elementos dentro del atributo “pedido” bastar!a con escribirint preciootal / cuenta*+.calculaPreciootal012
FEBRERO 2009 Primera Semana mod I •
Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•
El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•
Responda el test en una hoja de lectura óptica . No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen.
•
Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado la práctica.
•
Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.
Primera Parte: Test
1. ¿Dónde se integran todos los componentes que proporcionan funcionalidad al computador? a) En la controladora USB. b) En la BIOS. c) En la placa base. d) En las interfaces IDE.
2. Indique cuál de las siguientes afirmaciones NO es correcta. La máquina virtual de java: a) Permite ejecutar un mismo código en diferentes plataformas. b) Se necesita una versión de la máquina virtual para cada sistema operativo (Windows, Linux, MacOS, etc.). c) Es el compilador de Java que transforma código fuente en código máquina. d) Interpreta el bytecode (.class) de un programa Java y lo transforma en código máquina.
3. La memoria principal de un ordenador está compuesta por la combinación de: a) Memoria RAM y memoria virtual . b) Memorias ROM y RAM . c) Discos duros, unidades extraibles . d) Memoria caché de niveles 1 y 2 .
4. En la práctica realizada este año, ¿qué relación existe entre las clases Tren y Vagón? a) Composición. b) Herencia. c) Abstracción. d) Encapsulación.
5. En la práctica realizada este año, para dibujar la carga de un vagón en función de su peso sería necesario modificar el método Draw de la clase: a) Tren. b) Vagón. c) Figura. d) Locomotora.
6. Indique cuál de las siguientes afirmaciones es correcta: a) Pueden existir múltiples objetos a partir de una misma clase. b) Pueden existir múltiples clases a partir de un mismo objeto. c) Por cada clase puede existir un único objeto. d) Los conceptos clase y objeto son equivalentes.
7. Se tiene un sistema informático en JAVA para la gestión de una tienda, compuesto por una clase Tienda y otra clase Cliente de la que heredan dos: ClienteHabitual y ClienteEsporádico. Si quisiéramos disponer de una lista de Clientes, ¿dónde sería correcto incluirla? a) En la clase cliente b) En la clase Tienda c) En cualquiera de las clases que heredan de Cliente d) No sería posible la inclusión de listas con el diseño dado.
8. Si existe código duplicado en dos clases diferentes, indique el mecanismo que utilizaria en Java para evitar el problema: a) Composición de clases. b) Polimorfismo. c) Herencia. d) Estructuras de control.
9. ¿Qué secuencia numérica imprimiría el siguiente código? ... for (int i=0; if (
i < 10; i=i+2) {
i > 2 ) { System.out.println(i);
} }
a) 0, 2, 4, 6, 8. b) 0, 2. c) 4, 6, 8. d) 4, 6, 8, 10.
10. La finalidad de los métodos de acceso (get) a campos (atributos) en una clase JAVA es: a) Dar información sobre el estado del objeto a otras clases. b) Modificar los campos de una clase. c) Permitir que las clases hijas hereden los campos. d) Redefinir el tipo de los campos.
………………………………...……..
……………………..
………...……
Partiendo del siguiente diagrama de clases:
Se desea diseñar un gestor para la compra de billetes de tren. Dicho gestor almacenará todos los trenes disponibles en un momento dado y permitirá la adquisición de billetes para un tren dado su destino. Cada tren se caracteriza por su destino y por los vagones que lo componen. Cada vagón tiene un límite de plazas y un número de plazas libres. Cada billete tendrá asociados un nombre y un DNI correspondientes a su comprador. a) (1,5 Puntos) Dado el diagrama, completar la clase tren para que sea coherente con el diseño y además proporcione métodos para saber el número de plazas totales en un tren, las ocupadas, las libres y además incluya un método adquirirPlaza. b) (1,5 Puntos) Extender el diagrama para incluir el Gestor de Billetes y los Billetes. Para comprar un billete a través del gestor es necesario un método que permita especificar el destino, de forma que se pueda identificar el tren correspondiente para comprobar si existen plazas libres, y en su caso, adquirir una. Dicho método devolverá un objeto de la clase Billete. c) (1 Punto) Describa de forma ordenada cómo se buscaría un tren con un destino concreto según su diseño, especificando la clase o clases dónde se realizaría dicha búsqueda y las estructuras de control que sería necesario utilizar. d) (1 Punto) Dado un tren concreto, describa de forma ordenada el proceso que llevará a cabo el método adquirirPlaza (buscar una plaza libre en el tren y ocuparla), especificando las estructuras de control necesarias en cada paso y las llamadas a métodos que serían necesarias.
Solución febrero de 2009 - Primera semana (TIPO A): 1 c), 2 c), 3b), 4 a), 5b), 6a) -se admite también como correcta 6 c)-, 7b), 8c), 9 c), 10 a)
FEBRERO 2009 Segunda Semana TIPO A
mod II
•
Para la nota del examen, el test vale el 30% y el Problema vale el 70%.
•
El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo.
•
Responda el test en una hoja de lectura óptica . No olvide rellenar en dicha hoja el código de carrera, el de la asignatura y el tipo de examen.
•
Resuelva el Problema en el cuadernillo indicando su nombre y el Centro Asociado en el que ha realizado la práctica.
•
Entregue la hoja de lectura óptica, enunciados y el cuadernillo completo.
Primera Parte: Test
1. ¿Qué elemento NO afecta a la velocidad a la que se ejecuta un programa? a) La frecuencia de reloj de la placa madre. b) La memoria caché. c) La memoria RAM disponible. d) La bios.
2. La máquina virtual de JAVA es: a) Un traductor de codigo intermedio a codigo objeto. b) Un sistema operativo independiente de plataforma. c) Un gestor de memoria. d) El mecanismo que permite la herencia.
3. Indica cuál de los siguientes programas de control no son componentes de un sistema operativo : a) Cargador de módulos (System Loader) b) Traductores (compiladores e intérpretes) c) Controlador de trabajo (Job Control) d) Administración de memoria.
4. En la práctica realizada este año, ¿cuántos vagones puede llegar a tener un tren? a) Un número ilimitado. b) Un número constante. c) Uno por cada tipo de carga. d) Depende de la potencia de la locomotora.
5. En la práctica realizada este año, a los métodos de la clase Pizarra se accede desde las clases hijas de: a) Figura. b) Vagón. c) Locomotora. d) Tren.
6. Considerando la instanciación c = new Casa(), y sabiendo que la clase Casa tiene un método definido como public int getSuperficie(), indique cuál de las siguientes sentencias devolvería la superficie de una casa concreta: a) Casa.getSuperficie(); b) Casa().getSuperficie(); c) getSuperficie(c); d) c.getSuperficie();
7. Cuando una clase tiene como atributo (campo) una lista de objetos de otra clase decimos que entre ambas existe una relación de: a) Herencia. b) Abstracción. c) No existe ninguna relación. d) Composición
8. Cual de estas siguientes afirmaciones es FALSA. El mecanismo de herencia permite: a) Reutilizar programas sin tocar su código (extensibilidad). b) Reducir la cantidad de código redundante al diseñar un sistema. c) Eliminar campos de una clase previamente implementada. d) Crear una clase similar a otra previamente implementada pero con nuevos campos y métodos.
9. ¿Que secuencia de valores imprimiría el siguiente código? ... int j
= 0;
for (int i
= 1; i < 3; i++) {
do{ int j
= j + 3;
System.out.println(j); }
while (j
< 10);
}
a) 3,6,9,12 b) 1,3,6,10,15 c) 0,1,3,6 d) 1,2,4,8
10. Una variable local es: a) La que se define fuera de los métodos y no es visible desde otras clases. b) La que se define en el encabezado del método. c) La que se define dentro de un método. d) La que se define fuera de los métodos y es visible desde otras clases.
Apellidos& & & & & & & & & & & & & & & & ..Nombre& & & & & & & & ..DNI& & & . . . & &
Una empresa de log í stica quiere informatizar su actividad. Esta empresa se dedica a la organizaci ón y distribución de flujos de mercanc í as por v í a terrestre, en particular, por ferrocarril. Se deberá poder tratar un conjunto de solicitudes de clientes, cada una de las cuales deberá tener un identificador de cliente, un tipo de carga contratada y la cantidad que se quiere transportar. A partir de cada solicitud, se deberá fletar un tren (en nuestro caso, esto es instanciar un objeto de la clase Tren) para el transporte de esa mercancía, con un número de vagones que dependerá de la cantidad y tipo de mercancía a transportar. Al igual que en la práctica de este año, cada tren está formado por una locomotora y un conjunto de vagones. Se pide:
1. (1,5 puntos) A partir de la clase Tren mostrada en la figura, representar el diagrama de clases necesario para llevar a cabo las acciones descritas en el enunciado. No es necesario especificar las clases Locomotora y Vag ón, ni sus métodos. Por tanto, deber án indicarse todos los campos y m étodos necesarios s ólo en la clase o clases que se definan.
2. (2 puntos) Explique en detalle c ómo deberí a implementarse un m étodo capaz de acceder al conjunto de solicitudes que se tengan almacenadas en un momento dado, e ir fletando trenes con las caracter í sticas requeridas en cada caso. 3. (1'5 puntos) Crear los objetos y hacer las llamadas necesarias para instanciar dos solicitudes
(Pepe quiere desplazar 5000kg de madera y Juan desea enviar 6000Kg de hierro), as í como gestionlas, es decir, fletar trenes que puedan realizar ambos transportes. Solución febrero de 2009 - Segunda semana (TIPO A): 1d), 2a), 3b), 4d), 5a), 6d), 7d), 8c), 9a), 10c) NOTA: Se ha detectado una errata en la pregunta 9 del test. A efectos de calificacion se ha considerado la opción a) como correcta, pero cualquier otra opción NO se ha considerado como error.
FUNDAMENTOS DE INFORMÁTICA Junio 2012
-
1
IE_1s
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el Problema en una hoja aparte ( máximo 2 caras), indicando su nombre y DNI.
• • •
TIPO A
Primera Parte: Test 1. Indique cuál de las siguientes afirmaciones, relativas a la BIOS de un PC, es correcta: a. Contiene el menú de selección de los sistemas operativos instalados en la máquina. b. Es el componente hardware donde se guarda la información de las cuentas de usuario de la máquina. c. Contiene información sobre la configuración y arranque de la máquina. d. Es el componente hardware donde los sistemas operativos guardan su configuración. 2. Tenemos varios programas ejecutando simultáneamente en una máquina. Queremos que una de las ejecuciones tenga preferencia sobre la otra. Para ello, tendríamos que configurar: a. el sistema operativo. b. el compilador. c. el ensamblador. d. la BIOS. 3. Indica cuál de las siguientes afirmaciones es correcta: a. En las llamadas Redes de Difusión (también llamadas Redes Multipunto) es necesario que se fije qué camino seguirá la información para poder ser recibida en el punto de destino, ya que para ir desde un nodo origen a un nodo destino existen múltiples caminos. b. En las llamadas Redes de Conmutación de Circuitos (también llamadas Redes Punto a Punto) un equipo emisor manda la información a la red a través de su tarjeta y, en este caso, se dispone de un único camino entre el origen y el destino . c. En las llamadas Redes de Conmutación de Paquetes la información se divide en fragmentos que se envían a la red, de modo que circulan por ella hasta que llega a su destino. d. En las llamadas Redes de Difusión (también llamadas Redes Multipunto) la información se divide en fragmentos que se envían a la red, de modo que circulan por ella hasta que llega a su destino. 4. En la práctica obligatoria, ¿qué mecanismo se utiliza para que todos los tipos de notas escriban sus características particulares (título, comentarios, etc.) por pantalla? a. Composición. b. Polimorfismo. c. Excepciones. d. Ninguno, lo hace únicamente la clase Nota. 5. ¿Qué tipos de acceso puede tener el atributo de una clase? a. Public, associated, protected. b. Public, private, associated. c. Public, private, protected. d. Private, protected, associated.
6. Indica cuál de las siguientes afirmaciones, relativas a la sobreescritura de métodos, es correcta: a. Cuando se sobreescribe un método en Java, se ejecuta la definición más baja en la jerarquía de herencia respecto al objeto al que pertenece el método. b. Cuando se sobreescribe un método en Java, se ejecuta la definición más alta en la jerarquía de herencia respecto al objeto al que pertenece el método. c. Un método en Java no puede reescribirse. d. Un método en Java sólo puede reescribirse si antes ha sido definido como final. 7. Indique cuál de las opciones siguientes se correspondería con la salida del siguiente código: for (int i=1;i<3;i++){ for (int j=1; j<4;j++){ System.out.print(j); } System.out.print(i); }
a. 11322333 b. 12112212 c. 12311232 d. 23134245 8. Si queremos añadir añadir un nuevo dato dato "Fecha de término de contrato" a una clase "Empleados", ¿es necesario modificar las clases ya ya implementadas? a Sí, si queremos asegurar la consistencia. b No. Podríamos extender la clase "Empleado" con un nuevo nuevo atributo o campo. c Sí, pero tendríamos que aplicar herencia. d No. Siempre bastaría con modificar los parámetros de entrada. 9. Una variable polimórfica: a. no puede ser accedida desde fuera de la clase. b. puede contener objetos del tipo declarado o de cualquier subtipo de éste. c. sólo puede ser accedida desde un método de la misma clase. d. no puede ser accedida por más de una clase. 10. Indica cuál de las siguientes afirmaciones en Java es FALSA: a. Una clase padre es una clase a partir de la cual se crea otra clase mediante el mecanismo de herencia. b. Una clase hija es una clase creada a partir de otra clase mediante el mec anismo de herencia. c. Una clase padre asume los campos y métodos del conjunto de sus subclases. d. Una clase hija hereda los campos y métodos de una superclase.
Apellidos!!!!!!!!!!!! !!!!!!!!!!!!... ...!! !!.. ..Nombre!!!!!!!! !!!!!!!!.. ..DNI!!! !!!... ...!! !!
Segunda Parte: Problema Se desea implementar un gestor de pedidos para una fábrica de aceitunas y encurtidos. Esta fábrica ofrece 2 productos: aceitunas negras y aceitunas verdes, donde las últimas pueden ser con sabor anchoa o no. Cada producto de un pedido está formado por la cantidad de botes que se piden, existiendo únicamente tres tipos de botes de 100gr., 500gr y 1 kg., respectivamente. Cada pedido está identificado por la fecha en la que se realiza, un identificador de pedido (compuesto por un número) y la lista de productos que se solicitan. Se requiere que el gestor sea capaz de: 1. Añadir un nuevo pedido. 2. Eliminar un pedido completo, para lo que necesitaremos el identificador del pedido. 3. Mostrar por pantalla los pedidos realizados en una determinada fecha.
NOTA: podemos asumir que existe una clase
Fecha,
cuyo constructor es Fecha(String fecha) , donde el parámetro representa la fecha como un String. Esta clase contiene un método cuya signatura es boolean esIgual(Fecha fecha), que devuelve cierto en caso de que las fechas sean iguales y falso en caso contrario. Antes de comenzar a responder lea con atención todos los apartados. Se pide:
1. (4 puntos) Dibujar un esquema con las clases necesarias para realizar este gestor de pedidos, indicando los atributos y métodos que tiene cada una de ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la programación orientada a objetos.
SOLUCIÓN Pedido
GestorPedidos
private int id private Fecha fecha private List productos /* metodos set y get de los atributos */
Producto
/* metodos set y get de los atributos */
AceitunasNegras
private boolean saborAnchoa /* metodos set y get de los atributos */
public void añadir(Pedido pedido) public boolean eliminar(int id) public void mostrarPedidos(Fecha fecha)
«enumeration»
private TipoEnvase envase private int cantidad
AceitunasVerdes
private List pedidos
/* metodos set y get de los atributos */
TipoEnvase 100gr 500gr 1kg
2. (4 puntos) Supongamos ahora que la fábrica desea ampliar los productos que ofrece con uno nuevo denominado Encurtidos, éste tiene las mismas características que el resto excepto que pueden ser picantes o no. Explicar justificadamente qué debería realizarse para que, sin modificar el gestor, se permita realizar pedidos que incluyan el nuevo producto ofrecido.
SOLUCIÓN Pedido
GestorPedidos
private int id private Fecha fecha private List productos
private List pedidos public void añadir(Pedido pedido) public boolean eliminar(int id) public void mostrarPedidos(Fecha fecha)
/* metodos set y get de los atributos */
Producto
«enumeration»
TipoEnvase
private TipoEnvase envase private int cantidad
100gr 500gr 1kg
/* metodos set y get de los atributos */
AceitunasVerdes
AceitunasNegras
private boolean saborAnchoa /* metodos set y get de los atributos */
Encurtido private boolean picante
/* metodos set y get de los atributos */
* metodos set y get de los atributos */
Para solucionar este apartado utilizaremos la herencia. De este modo, crearemos una nueva clase Encurtido que al ser otro tipo de producto y, por tanto, compartir parte de sus atributos y funcionalidad, heredará de la propia propia clase Producto.
3. (2 punto) Escribir el código del método que nos permite mostrar por pantalla todos los pedidos de una determinada fecha.
SOLUCIÓN public void mostrarPedidos(Fecha fecha) { for (Pedido p : this.pedidos) { if (p.getFecha().esIgual(fecha) (p.getFecha().esIgual(fecha) { System.out.println(p.toString()); } } }
FUNDAMENTOS DE INFORMÁTICA Junio 2012 - 2 Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el Problema en una hoja aparte (máximo ( máximo 2 caras), caras), indicando su nombre y DNI.
• • •
TIPO A
Primera Parte: Test 1. La memoria caché funciona sobre el principio de: a. una memoria de acceso rápido pero más pequeña para datos usados con frecuencia. b. una memoria de acceso lento pero más grande para grandes tamaños de datos. c. una memoria de acceso robusto ante fallos para procesos críticos. d. una memoria con un sistema operativo independiente. 2. Indica cuál de las siguientes no es función del del Sistema Operativo: a. Control de errores b. Control de concurrencia. c. Control de seguridad d. Control de depuración de programas. 3. La programación orientada a objetos se caracteriza porque: a. no requiere proceso de compilación. compilación. b. no requiere sistema operativo. c. permite reutilizar código. código. d. es la más rápida en tiempo de de ejecución. 4. En la práctica obligatoria, la clase GestorLibretas: a. hereda de la clase Libreta. b. se compone de elementos de la clase Libreta. c. se compone de elementos de la clase Nota. d. es padre de la clase Libreta, es decir, Libreta hereda de ella. 5. Indique cuál de las siguientes afirmaciones es correcta: a. El tipo de dato de los campos se define en los objetos. b. Todos los objetos de una misma clase tendrán los mismos campos. c. Todos los objetos de una misma clase tendrán los mismos valores en sus campos. d. No todos los objetos de una clase tendrán los mismos métodos. 6. ¿Puede un método llamar a otro método de la misma clase? a. Sólo si la clase está definida como "public". b. Sólo si la clase está definida como "private". c. Siempre puede llamarse a un método de la misma clase. d. Siempre que se instancie un nuevo objeto de la misma clase.
IE_2s
7. El mecanismo denominado polimorfismo en un método en Programación Orientada a Objetos permite: a. el almacenamiento de objetos en otros objetos. b. la creación de una nueva clase como extensión de otra. c. que el mismo método pueda invocar en diferentes momentos diferentes métodos. d. clases abstractas sin implementación. 8. Indique cuál de las opciones siguientes se correspondería con la salida del siguiente código int i=0; while (i<3){ for (int j=0; j<3; j++){ System.out.print(i+j); } i++; }
a. 123234345 b. 000102101 c. 001020011 d. 012123234 9. Teniendo en cuenta el siguiente código: public class Animal { private int patas; private void setPatas(int p) { patas = p; } } public class Perro extends Animal { public Perro(int p){ super.setPatas(p); } }
Indique cuál de las siguientes afirmaciones es correcta: a. Todos los objetos que se creen de la clase Animal tendrán las mismas patas que los que se creen de la clase Perro. b. Todos los objetos de la clase Perro tendrán las mismas patas que los objetos de la clase Animal. c. El código es incorrecto porque no podemos acceder al método setPatas porque está declarado como private. d. El código es correcto porque el método setPatas está declarado como private y puede ser accedido desde las clases que hereden de la clase Animal. 10. En el diseño de un programa JAVA relativo a vehículos, existen coches, motos y autobuses. Todos ellos tienen algún atributo que no comparten con ningún otro vehículo. ¿Se puede aplicar herencia? a. No, dado que ninguno de los tres vehículos puede ser padre del resto. b. No, dado que no se puede extender atributos de un vehículo a otro. c. Sí, definiendo una clase abstracta como clase padre. d. Sí, aplicando composición entre los vehículos.
Apellidos!!!!!!!!!!!!...!!..Nombre!!!!!!!!..DNI!!!...!!
Segunda Parte: Problema Se desea desarrollar un programa informático que permita la gestión y control de la compra-venta de inmuebles. Cada inmueble tendrá un precio, un tamaño expresado en metros cuadrados y un campo de texto asociado en el que se describan sus principales características. Por cada inmueble se desea almacenar información relativa al vendedor y posibles compradores (usuarios que manifiestan su interés por el inmueble). Deberá poderse guardar información relativa a sus datos personales (nombre, apellidos y DNI). La aplicación deberá ser capaz de: 1. Devolver los inmuebles que un determinado vendedor tiene a la venta, así como la de los inmuebles que han sido objeto de interés por parte de un determinado comprador. 2. Devolver los inmuebles que han sido objeto de interés por parte del conjunto total de compradores.
Antes de responder lea con atención todos los apartados. Se pide:
a)[4 puntos]. Realice un diagrama de clases capaz de cubrir el total de requisitos especificados en el enunciado, indicando los atributos y métodos que tiene cada clase (sólo indicarlos, sin escribir su código) y siguiendo los principios de la Programación Orientada a Objetos. SOLUCIÓN
GestorInmuebles Inmueble
private List inmuebles private List compradores private List vendedores
private int precio private int metros2 private String caracteristicas private Usuario vendedor private List compradores
public List inmueblesComprador(Usuario comprador) public List inmueblesVendedor(Usuario vendedor) public List inmueblesCompradores() /* necesitaría métodos para añadir inmuebles, compradores y vendedores */
/* metodos set y get de los atributos */
Usuario
private String nombre private String apellidos private String dni /* metodos set y get de los atributos */
b)[4 puntos]. Describa, sin implementar el código pero indicando las llamadas a métodos en cada clase y su funcionalidad (incluyendo las estructuras de control necesarias, iteraciones sobre listas, etc.), cómo se implementaría el método capaz de devolver la lista de inmuebles que han sido objeto de interés por parte de algún comprador. SOLUCIÓN En primer lugar deberíamos invocar el correspondiente método de la clase GestorInmuebles. Dicho método recorrerá la lista de inmuebles que tiene almacenada, para lo cual utilizará una estructura for , recorriendo la lista completamente. Dentro del bucle for , obtendremos un objeto inmueble concreto y mediante el uso de una estructura if comprobaremos si la lista de compradores de dicho inmueble está vacía o no. Es decir, en la condición del if invocaremos el método getCompradores de la clase inmueble y sobre la lista de compradores que nos devuelva invocaremos el método size() para comprobar si su tamaño es distinto de cero. En caso afirmativo, es decir, el tamaño de la lista es distinto de cero, quiere decir que existe algún posible comprador y por tanto ese inmueble tenemos que almacenarlo en una lista auxiliar de inmuebles que será la que al finalizar este método devolveremos. En otro caso, si la lista de compradores es cero, no haremos nada y seguiremos comprobando el siguiente inmueble. Al finalizar el bucle for , tendremos todos los inmuebles que tienen algún comprador almacenados en una lista que habremos creado al comienzo de la ejecución y en este punto ejecutaremos el comando return devolviendo dicha lista de inmuebles.
c)[2 puntos]. Se desea incluir un nuevo tipo de inmuebles, los chalets. La diferencia es que en este caso se dispone de una parcela. ¿Cómo habría que modificar el diseño para cubrir este nuevo tipo de inmueble con el menor número de cambios posibles? SOLUCIÓN GestorInmuebles Inmueble
private List inmuebles private List compradores private List vendedores
private int precio private int metros2 private String caracteristicas private Usuario vendedor private List compradores
public List inmueblesComprador(Usuario comprador) public List inmueblesVendedor(Usuario vendedor) public List inmueblesCompradores() /* necesitaría métodos para añadir inmuebles, compradores y vendedores */
/* metodos set y get de los atributos */
Chalet
private int parcela /* metodos set y get de los atributos */
Usuario
private String nombre private String apellidos private String dni /* metodos set y get de los atributos */
Para solucionar este apartado utilizaremos la herencia. De este modo, crearemos una nueva clase Chalet que al ser otro tipo de inmueble y, por tanto, compartir parte de sus atributos y funcionalidad, heredará de la propia clase Inmueble inicial.
FUNDAMENTOS DE INFORMÁTICA
2012 Junio 1 A MEC
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el Problema en una hoja aparte ( máximo 2 caras), indicando su nombre y DNI.
• • •
TIPO A
Primera Parte: Test 1. Indique cuál de las siguientes afirmaciones es correcta: a. La memoria SRAM (Static RAM) es más rápida que la memoria DRAM (Dynamic RAM) b. La memoria DRAM (Dynamic RAM) es más rápida que la memoria SRAM (Static RAM) c. La memoria virtual es más rápida que la memoria SRAM (Static RAM). d. La memoria virtual es más rápida que la memoria DRAM (Dynamic RAM). 2. La máquina virtual de JAVA: a. ejecuta código en JAVA. b. ejecuta código intermedio (Bytecode). c. ejecuta código máquina. d. No ejecuta. Sólo compila. 3. Indicar cuál de las siguientes funciones NO es propia de un sistema operativo: a. Control de la ejecución de programas. b. Gestión de permisos y de usuarios. c. Impresión y escaneado. d. Administración de periféricos. 4. En la práctica obligatoria, la relación entre una libreta y las notas que contiene es de: a. herencia. b. composición. c. polimorfismo. d. sobrecarga. 5.¿Es correcto el siguiente código? public class B { private int total; public int B() { return total; } }
a. No, ya que un método no puede llamarse igual que la clase si no es el constructor. b. Sí, es correcto. c. No, ya que no está inicializado el campo total. d. No, porque no podemos acceder al campo total en el método B ya que está declarado como private.
IE_1s
6. La declaración de atributos de tipo privado sirve para: a. evitar que éstos sean accedidos desde el código de otras clases. b. evitar que métodos no privados accedan a ellos. c. fijar qué atributos son inicializados por el constructor por defecto. d. definir atributos de clase. 7. Si en la signatura de un método aparece la palabra void significa.. a. que el método no puede ser invocado desde otra clase. b. que el método devuelve un tipo de datos desconocido. c. que el método no devuelve ningún resultado. d. que el método es estático.
8. Indique cuál de las opciones siguientes se correspondería con la salida del siguiente código: int j=0; for (int i=3;i<5;i++) { do{ System.out.print(i+j); j++; }while (j<3); }
a. b. c. d.
345 357 3457 345456
9. Indica, a partir de la siguiente definición, cuál de las siguientes afirmaciones es correcta: public class A extends B
a. Las clases A y B son equivalentes b. La clase A hereda de B c. La clase B hereda de A d. La clase A se compone de B. 10. Indica cuál de las siguientes afirmaciones es correcta: a. El polimorfismo en Java permite manipular un objeto como si éste fuera de una clase más general. b. El polimorfismo en Java permite manipular un objeto como si éste fuera de una clase más específica. c. La composicion de objetos en Java permite manipular un objeto como si éste fuera de una clase más general. d. La composicion de objetos en Java permite manipular un objeto como si éste fuera de una clase más específica.
Apellidos!!!!!!!!!!!!...!!..Nombre!!!!!!!!..DNI!!!...!!
Segunda Parte: Problema Se desea diseñar un sistema simplificado para gestionar los gastos de los clientes de un Hotel. El cliente podrá realizar diferentes gastos que luego se incluirán en la factura final. Estos gastos se pueden realizar en diferentes zonas del Hotel (restaurante, piscina, spa, etc.) cada una de las cuales dispondrá de un terminal de venta (TPV) para registrar dichos gastos. Para ello, se han de cubrir las siguientes funcionalidades:
1. Un cliente ha de poder reservar una habitación, momento en el cual se introducen sus datos en el sistema. 2. Un Cliente tiene asociados su nombre, apellidos, DNI y número de habitación. En nuestro sistema un Cliente sólo estará asociado a una habitación. 3. El Hotel tendrá diversos terminales de venta (llamados TPV). El sistema gestor debe funcionar independientemente del número de TPVs que se utilicen. 4. Cada uno de los TPVs deberá almacenar una serie de gastos de los clientes. 5. Un Gasto asocia una cantidad de dinero con un Cliente del Hotel. 6. El Gestor debe poder acceder a todos los gastos del Cliente y presentar la cantidad total adeudada por el cliente.
Lea atentamente el ejercicio completo antes de comenzar a contestar las preguntas. Se pide:
a) (4 Puntos) Realice el esquema de clases correspondiente al sistema que se desea implementar. Indique claramente relaciones, atributos y métodos en cada clase.
SOLUCIÓN GestorHotel TPV
private String zona private List gastos public void añadirGasto(Gasto g) /* metodos set y get de los atributos */
private List tpvs private boolean[] habitaciones private List clientes public GestorHotel(int habitaciones) public int gastosCliente(Cliente c) public void imprimirEstadoHabitaciones()
Cliente Gasto
private Cliente cliente private int importe /* metodos set y get de los atributos */
private String nombre private String apellidos private String dni private int habitacion /* metodos set y get de los atributos */
b) (3 Puntos) Describa, sin implementar el código, pero indicando las llamadas a métodos en cada clase y su funcionalidad (incluyendo las estructuras de control necesarias, iteraciones sobre listas, etc.), cómo se calcularían los gastos de un cliente cuando éste deja el Hotel. (1,5 puntos)
SOLUCIÓN Para calcular los gastos de un cliente lo primero que debemos hacer es invocar el método correspondiente de la clase GestorHotel ( gastosCliente(Cliente c) ). En el cuerpo de este método recorreremos la lista de TPVs que tiene el hotel, para ello utilizaremos un bucle for , ya que deseamos recorrer la lista entera. Dentro del bucle debemos recorrer la lista de gastos que tiene almacenada cada TPV, para lo cual utilizaremos otro bucle for anidado en el bucle anterior. De esta manera, comprobaremos mediante el uso de una estructura if, si existe algún gasto en dicho TPV realizado por el cliente que estamos comprobando. En caso afirmativo, si en la lista de gastos existe un gasto de este cliente, obtendremos el importe del gasto y lo almacenaremos en una variable auxiliar que nos permitirá guardar el total de todos los gastos realizados por el cliente en todos los TPVs. Al finalizar los dos bucles, que nos permiten recorrer los TPVs y los gastos de un TPV, devolveremos el gasto total almacenado en la variable auxiliar, mediante la instrucción return.
c) (3 Puntos) Describa, sin implementar el código, pero indicando las llamadas a métodos en cada clase y su funcionalidad (incluyendo las estructuras de control necesarias, iteraciones sobre listas, etc.), cómo se podría obtener un listado de las habitaciones libres y ocupadas del Hotel. (1,5 puntos)
SOLUCIÓN Esta funcionalidad se llevaría a cabo en el método imprimirEstadoHabitaciones() de la clase GestorHotel . Como podemos observer en la solución propuesta, hemos modelado la lista de habitaciones como un array de boolean , cuyo tamaño será el número de habitaciones del hotel, que como podemos observar se indica como parámetro del constructor de la propia clase. Esta solución nos permite almacenar mediante un valor booleano el estado de cada habitación, por ejemplo asignando un true en las habitaciones que están ocupadas . De esta forma, para obtener el estado de las habitaciones, lo que deberíamos hacer es, primero recorrer mediante un bucle for todo el array de habitaciones y, segundo, acceder al valor de cada una de las posiciones de dicho array, que corresponderá con el número de habitación y en caso de tener almacenado el valor true mostraremos por pantalla que la habitación está ocupada , o libre en caso de tener asignado en dicha posición el valor false.
FUNDAMENTOS DE INFORMÁTICA Junio 2012 2 A
MEC
Elec_sem1_A
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el Problema en una hoja aparte ( máximo 2 caras), indicando su nombre y DNI.
• • •
TIPO A
Primera Parte: Test 1. ¿Qué puerto permite transferir datos más rápidamente de un dispositivo externo al disco duro? a. Puerto paralelo. b. Puerto FireWire 800. c. Puerto USB 2. d. Puerto Serie. 2. Un programa tiene que realizar cálculos sobre una matriz de n*n números almacenados en el disco duro. Vemos que se ralentiza cuando n es demasiado grande. Para solucionarlo podríamos: a. aumentar la memoria del disco duro. b. aumentar la memoria RAM. c. aumentar la memoria ROM. d. aumentar la memoria de la BIOS. 3. Indica cuál de las siguientes afirmaciones es correcta. a. Un compilador de C es un proceso. b. Un programa se compone de un código y un conjunto de datos, ambos cargados en la memoria ejecutándose. c. Un proceso es un programa en ejecución. d. El término proceso se refiere al código fuente de un programa. 4. El planificador del sistema operativo: a. planifica el uso de la memoria RAM. b. planifica el uso de los periféricos. c. planifica el uso de la información por parte de los usuarios. d. planifica la ejecución de los procesos.
5. En la práctica obligatoria, una Alerta: a. hereda de la clase Fecha. b. hereda de la clase Libreta. c. hereda de la clase Nota. d. hereda de la clase Hora.
6. Indica cuál de las siguientes afirmaciones en Java es FALSA: a. La composición permite que atributos tomen como valor instancias de otras clases. b. La herencia permite extender clases con nuevos atributos. c. Puede existir herencia entre una clase y ella misma. d. Puede haber composición entre una clase y ella misma. 7. Indica, a partir de la siguiente declaración, la expresión correcta en Java (asumiendo que existe un método public int getKm() en la clase: Coche miCoche = new Coche();
a. Coche.getKm(); b. miCoche.getKm(); c. getKm(miCoche); d. Coche.miCoche.getKm(); 8. ¿Que secuencia de valores imprimiría el siguiente código? … for
(int i=1;i<3;i++){ for (int j=1;j<=i;j++ ){ System.out.print(i); System.out.print(j); }
} …
a. 11212 b. 12112 c. 11122 d. 11212 9. ¿Qué clases pueden acceder a un campo declarado como “protected”? a. No se puede acceder a un campo declarado como protected. b. Sólo la propia clase donde se declara. c. Sólo las clases que heredan de la clase donde se declara. d. Las clases dentro del mismo paquete y las clases que heredan de la propia clase donde se define. 10. Teniendo en cuenta el siguiente código, y dada la clase Hombre que extiende la clase Persona a través de herencia, indique cuál de las siguientes afirmaciones es correcta. public class Persona { private int edad; }
a. Desde la clase Hombre se puede acceder al atributo edad para mostrar su valor. b. Desde la clase Hombre se puede modificar el valor del atributo edad. c. Desde la clase Hombre no se puede acceder al atributo edad. d. No se puede extender la clase Persona porque no tiene constructor.
Apellidos!!!!!!!!!!!!...!!..Nombre!!!!!!!!..DNI!!!...!!
Segunda Parte: Problema Se desea implementar un sistema gestor encargado de la asignación de pistas de aterrizaje a los distintos vuelos que aterrizan en un aeropuerto. Un aeropuerto se identifica por su nombre y una lista de pistas de aterrizaje que tiene a su disposición. A su vez, cada pista de aterrizaje está identificada por un número y tendrá una lista de vuelos asignados que realizarán el aterrizaje en ella. Por otro lado, cada vuelo está identificado por un código (un número), tiene un origen, un destino y una fecha de llegada (donde está incluida la hora). Existen 2 tipos de vuelos: comercial, que además de las características previas, también está identificado por la aerolínea a la que pertenece y vuelos privados, que en lugar de una aerolínea requieren el nombre de la empresa o persona dueña del mismo. De esta manera, un aeropuerto debe permitir las siguientes funcionalidades: 1. Añadir una pista de aterrizaje 2. Asignar una pista de aterrizaje a un vuelo
3. Mostrar los vuelos que van a aterrizar en una determinada pista en una fecha concreta. NOTA: podemos asumir que existe una clase Fecha, cuyo constructor es Fecha(String fecha, String hora), donde el primer parámetro representa la fecha como un String y el segundo la hora también como un String. Un ejemplo de uso sería: new Fecha(“9/6/2012”, “10:00”) Antes de responder lea con atención todos los apartados. Se pide:
a) (4 puntos) Diseñar el sistema especificado, representando el esquema de clases que muestre las clases, atributos y métodos (sólo indicarlos, sin escribir su código), así como las relaciones entre las propias clases, aplicando los principios de la programación orientada a objetos.
SOLUCIÓN Aeropuerto
PistaAterrizaje
private String nombre private List pistas
private int id private List vuelos public PistaAterrizaje(int id) public boolean asignar(Vuelo vuelo) /* metodos set y get de los atributos */
Vuelo private int codigo private String origen private String destino private Fecha fechaLlegada public Vuelo(int codigo) /* metodos set y get de los atributos */
Comercial
Privado
private String aerolinea
private String dueño
/* metodos set y get de los atributos */
/* metodos set y get de los atributos */
public Aeropuerto(String nombre) public void añadir(PistaAterrizaje pista) public boolean asignarPista(vuelo Vuelo, int pista) public void mostrarVuelos(int pista, Fecha fecha)
b) (2 punto) Escribir el código necesario para crear un nuevo aeropuerto llamado “Barajas”, que tiene 3 pistas de aterrizaje: pistas 1, 2 y 3. Además, escriba el código para crear un vuelo comercial con código 12, de la aerolínea “IBERIA”, con origen “New York”, destino “Madrid” y fecha de aterrizaje el 9/6/2012 a las 10:02 horas y asígnelo al aeropuerto “Barajas”, en su pista de aterrizaje 2.
SOLUCIÓN Aeropuerto barajas = new Aeropuerto(“Barajas”); PistaAterrizaje pista1 = new Pista(1); PistaAterrizaje pista2 = new Pista(2); PistaAterrizaje pista3 = new Pista(3); barajas.añadir(pista1); barajas.añadir(pista2); barajas.añadir(pista3); Comercial vuelo1 = new Comercial(12); vuelo1.setAerolinea(“IBERIA”); vuelo1.setOrigen(“New York”); vuelo1.setDestino(“Madrid”); vuelo1.setFechaLlegada(new Fecha(“9/6/2012”, “10:02”)); aeropuerto1.asignar(vuelo1, 2);
c) (4 puntos) Se desea ahorrar gastos, para lo que se ha decidido que los vuelos militares también puedan aterrizar en los aeropuertos públicos. Estos vuelos tienen las mismas características que el resto de vuelos, excepto que requieren el país al que pertenecen. Explicar justificadamente cómo podría el sistema gestor asignar los vuelos militares a una pista de aterrizaje de un aeropuerto, sin modificar las clases aeropuerto y pista de aterrizaje.
SOLUCIÓN Aeropuerto
PistaAterrizaje
private String nombre private List pistas
private int id private List vuelos public PistaAterrizaje(int id) public boolean asignar(Vuelo vuelo) /* metodos set y get de los atributos */
public Aeropuerto(String nombre) public void añadir(PistaAterrizaje pista) public boolean asignarPista(vuelo Vuelo, int pista) public void mostrarVuelos(int pista, Fecha fecha)
Vuelo private int codigo private String origen private String destino private Fecha fechaLlegada public Vuelo(int codigo) /* metodos set y get de los atributos */
Comercial
Privado
Militar
private String aerolinea
private String dueño
private String pais
/* metodos set y get de los atributos */
/* metodos set y get de los atributos */
* metodos set y get de los atributos */
Para solucionar este apartado utilizaremos la herencia. De este modo, crearemos una nueva clase Militar que representará a los vuelos militares y ya que comparte todas las característi cas del resto de tipos de vuelos, heredará de la propia clase Vuelo.
FUNDAMENTOS DE INFORMÁTICA Septiembre 2012 - 1
sept12-M1
Para calcular la nota del examen, el test supone el 30% y el problema el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el Problema en una hoja aparte ( máximo 2 caras ), indicando su nombre y DNI.
• • •
Primera Parte: Test 1) Indique qué tipo de memoria permite un almacenamiento permanente: a. La memoria RAM. b. La memoria ROM. c. La memoria SRAM. d. La memoria DRAM.
2) ¿Qué es un hub? a. Es un bus de comunicaciones que permite compartir una red de datos o la conexión de varios periféricos. b. Es un dispositivo de distribución de comunicaciones que permite compartir una red de datos o la conexión de varios periféricos. c. Es un protocolo de comunicación que permite compartir una red de datos o la conexión de varios periféricos. d. Es un sistema de comunicación unidireccional entre el computador y los periféricos conectados a él.
3) La máquina virtual de JAVA se caracteriza por permitir la ejecución de: a. código intermedio en diferentes sistemas operativos. b. código fuente en diferentes sistemas operativos. c. codigo objeto JAVA sobre memoria virtual. d. código objeto JAVA en sistemas operativos multi-tarea.
4) ¿Cuál es la secuencia de pasos necesaria para la compilación de un programa desde un código fuente a código objeto? a. Análisis léxico, análisis semántico y generación del código. b. Análisis léxico, análisis semántico y análisis sintáctico. c. Análisis léxico, análisis semántico, análisis sintáctico y generación del código. d. Análisis léxico, análisis sintáctico, análisis semántico y generación del código.
5) ¿Qué valor imprimiría el siguiente código? int c=0; for (int i=1;i<4;i++){ c=c+i; } System.out.println(c);
a. 3 b. 4 c. 5 d. 6 6) En la práctica obligatoria, la clase Nota: a. hereda de la clase Libreta. b. se compone de objetos de la clase Libreta. c. se compone de Alerta , Libro, Película y Discos . d. es la clase de la que heredan Alerta, Libro, Película y Disco. 7) Indique cuál de las siguientes afirmaciones es correcta: a. Una clase puede tener más de un constructor, independientemente de sus parámetros. b. Una clase nunca puede tener más de un constructor. c. Una clase puede tener más de un constructor, siempre que sus parámetros sean distintos. d. Sólo las clases abstractas pueden tener más de un constructor. 8) Dado el siguiente método: public void suma(int a, int b){ this.a=a+b; }
a. Actualiza el campo a de la clase a la que pertenece el método. b. Modifica el parámetro de entrada a. c. No compila por estar la misma variable a ambos lados del símbolo =. d. Devuelve la suma de a y b a la clase que realiza la llamada al método. 9) Dos clases contienen algunos métodos y campos duplicados. Según la metodología de orientación a objetos, lo más apropiado sería: a. Eliminar una de las clases. b. Establecer relaciones de herencia. c. Establecer relaciones de composición. d. Definir una clase como campo de la otra. 10) ¿Puede un método llamar a métodos de otros objetos? a. Sí, usando la notación de punto sobre el nombre de la clase a la que pertenece el objeto. b. Sí, usando la notación de punto sobre el nombre del objeto. c. No, desde un método sólo se puede llamar a otros métodos del propio objeto. d. No, desde un método nunca se puede llamar a otro método.
Segunda Parte: Problema Una empresa que vende piscinas quiere desarrollar una aplicación informática para la gestión de sus ventas y beneficios. Esta empresa vende dos tipos de piscinas: de obra y autoportantes. En el primer caso la depuradora podrá ser de cloración salina o convencional (cloro), y empleará siempre filtros de arena. En el caso de las autoportantes, la depuración siempre será por medio de cloro y, en este caso, podrán emplearse filtros de arena o de papel. Todas las piscinas, independientemente del tipo que sean, tienen una capacidad y un precio de compra. La empresa vende las piscinas añadiendo el porcentaje siguiente al precio de compra inicial: - Piscina de obra: 25% - Piscina autoportante: 10% Realizar el diseño de la aplicación de gestión de ventas para que, al menos, permita: - Indicar el número total de piscinas vendidas. - Listar el número total de piscinas autoportantes vendidas con filtro de arena. - Calcular el total de ingresos obtenido por la venta de todas las piscinas, así como los beneficios totales de la empresa obtenidos por la venta de las mismas.
Lea atentamente el ejercicio completo antes de comenzar a contestar las preguntas. Se pide: a) (4 puntos) Realice un diagrama de clases capaz de cubrir el total de requisitos especificados en el enunciado, indicando los atributos y métodos que tiene cada clase (sólo indicarlos, sin escribir su código) y siguiendo los principios de la Programación Orientada a Objetos.
SOLUCIÓN Piscina
GestorPiscinas
private int capacidad private int precioCompra private static final int porcentaje = 25 protected TDepuracion depuracion
private List piscinasVendidas private List piscinasAutoportantesVendidas public int totalPiscinasVendidas() public void piscinasAutoportantesVendidasFiltroArena() public int calcularIngresos() public int calcularBeneficios()
/* metodos set y get de los atributos */ public int precioVenta() «enumeration»
TDepuracion salina cloro PAutoportante private static final int porcentaje = 10 protected static final TDepuracion depuracion = cloro protected TFiltro filtro /* metodos set y get de los atributos */ public int precioVenta()
«enumeration»
TFiltro arena papel
b) (3 puntos) Escriba cómo se implementaría un método capaz de devolver el total de beneficios que ha obtenido la empresa por la venta de piscinas autoportantes.
SOLUCIÓN public int beneficiosPisicinasAutoportantes() { int beneficios = 0; for (PAutoportantes p : this.piscinasAutoportantesVendidas) { beneficios += (p.getPrecioCompra() * (p.getPorcentaje() / 100)); } return beneficios; }
c) (3 puntos). Si ahora la empresa quisiera modificar el porcentaje de beneficio de las piscinas autoportantes con filtro de arena del 10% al 15%, ¿Cómo habría que modificar el diseño de la aplicación para cubrir esta nueva situación? Razone su respuesta.
SOLUCIÓN Piscina
GestorPiscinas
private int capacidad private int precioCompra private static final int porcentaje = 25 protected TDepuracion depuracion
private List piscinasVendidas private List piscinasAutoportantesVendidas public int totalPiscinasVendidas() public void piscinasAutoportantesVendidasFiltroArena() public int calcularIngresos() public int calcularBeneficios()
/* metodos set y get de los atributos */ public int precioVenta() «enumeration»
TDepuracion
salina cloro PAutoportante
private static final int porcentaje = 10 protected static final TDepuracion depuracion = cloro protected TFiltro filtro /* metodos set y get de los atributos */ public int precioVenta()
«enumeration»
TFiltro PAutoportanteArena
arena papel
private static final int percentaje = 15 protected static final TFiltro filtro = arena /* metodos set y get de los atributos */ public int precioVenta()
Para abordar los nuevos requisitos utilizaremos el mecanismo de herencia. Para ello crearemos una nueva clase que representará a las piscinas autoportantes con filtro de arena que heredará de la propia clase piscina autoportante (PAutoportante). En este caso redefiniremos su atributo filtro para asignarle el valor arena, igualmente que el porcentaje de beneficios.
FUNDAMENTOS DE INFORMÁTICA
spet12-M2
Para calcular la nota del examen, el supone el 30% y el problema el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el Problema en una hoja aparte ( máximo 2 caras), indicando su nombre y DNI.
• • •
Primera Parte: Test 1) ¿Con cuál de las siguientes memorias NO se pierde la información una vez se apaga un ordenador? a. Memoria caché. b. Memoria ROM. c. Memoria virtual. d. Memoria RAM.
2) ¿Qué se entiende por dispositivos perifericos? a. Programas auxiliares del sistema operativo. b. Dispositivos independientes conectados a la CPU. c. Puertos USB. d. Componentes externos del compilador.
3) ¿Cuál de estas situaciones podemos descartar si se detiene la ejecución de un programa JAVA? a. La memoria RAM no es suficiente. b. El sistema operativo ha relegado el proceso frente a otras tareas. c. Un error de compilación. d. Un bucle sin condición de terminación.
4) ¿Qué parte del sistema operativo se encarga de organizar la información en archivos y directorios? a. El gestor de memoria. b. El sistema de ficheros. c. La memoria virtual. d. El gestor de entrada/salida.
5) ¿Qué secuencia de valores imprimiría el siguiente código? … int n = 1; for (int i=0; i<4; i++) { System.out.print(i+n); n++; }
a. 0135 b. 1357 c. 1235 d. 1347
6) En la práctica obligatoria, el polimorfismo aparece en: a. el método que permite crear una nueva Libreta. b. el método que añade una Libreta al GestorLibretas . c. el método que establece el ISBN de un Libro. d. el método que escribe por pantalla una Nota.
7). Un método declarado como private: a. sólo puede ser invocado desde la clase donde se define y sus hijas. b. sólo puede ser invocado desde la clase donde se define. c. sólo puede ser invocado desde las clases del paquete en el que está declarado. d. sólo puede ser invocado desde el constructor de la clase donde está definido.
8) Sin más información a priori, ¿cuál sería la forma más apropiada de modelar los méritos académicos en un currículum? a. Por composición, definiendo un campo meritosAcademicos tipo Lista en la clase Curriculum. b. Por herencia, donde la clase MeritosAcademicos hereda de Curriculum . c. Por composición, mediante un campo meritosAcademicos tipo Array de tamaño N. d. Con un método curriculum en la clase MeritosAcademicos.
9) Dos métodos necesarios en una clase tienen parte de su código duplicado. Según la metodología de orientación a objetos, lo más apropiado en este caso sería: a. Eliminar los métodos y crear uno sólo que realice las funciones de los dos. b. Añadir nuevos métodos que realicen las funciones solapadas. c. Crear una clase hija para cada método. d. Definir los métodos como privados.
10) Dadas las clases public class A{ public int mult(int a,int b){ return a*b } } public class B extends A { public int mult(int a, int b, int c){ return mult(a,b)*c; } }
¿Qué devolvería el siguiente código? B b = new B(); System.out.println(b.mult(2,2,3));
a. Error, el método mult ha sido sobreescrito y han de usarse 3 parámetros en la llamada. b. Error, no pueden existir dos métodos con el mismo nombre y diferente número de parámetros. c. El código de la clase B provocaría la ejecución de un bucle infinito. d. 12
Segunda Parte: Problema Se desea implementar un simulador de una de una red P2P (peer-to-peer) para compartir ficheros. Estas redes se caracterizan por estar compuestas por un conjunto de nodos, definidos por un identificador formado por un número entero. Cada nodo, a su vez, dispone de un conjunto de ficheros que desea compartir. Cada uno de los ficheros se identifica mediante un nombre y un tamaño (expresado en megas). Cada uno de los nodos tiene una lista de vecinos, que almacena los nodos a los que puede realizar una petición para descargarse un fichero. Teniendo en cuenta estos requisitos, se desea que el simulador sea capaz de: • • •
Añadir un nuevo nodo. Eliminar un nodo, a partir de su identificador. Mostrar por pantalla el identificador de los nodos que hay en el simulador.
Antes de comenzar a responder lea con atención todos los apartados. Se pide: a) (4 puntos) Dibujar un esquema con las clases necesarias para realizar el simulador, indicando los atributos y métodos que tiene cada una de ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la programación orientada a objetos.
SOLUCIÓN
Nodo
private int id private List ficheros private List vecinos /* metodos set y get de los atributos */
Fichero
private String nombre private int tamaño /* metodos set y get de los atributos */
Simulador
private List nodos public void añadirNodo(Nodo n) public boolean eliminarNodo(int id) public void mostrarNodos()
b) (2 punto) Escribir el código del método que nos permite mostrar por pantalla el identificador de los nodos que hay en el simulador.
SOLUCIÓN public void mostrarNodos() { for (Nodo n : this.nodos) { System.out.println(n.getId()) } }
c) (4 puntos) Supongamos que ahora deseamos ampliar el simulador. En concreto queremos añadir el concepto de “mensaje”. Para ello, debemos tener en cuenta que los nodos envían mensajes a sus vecinos; en concreto, pueden enviar dos tipos de mensajes distintos: mensajes denominados Request (utilizados para pedir un fichero a sus vecinos) y mensajes denominados Piece (utilizados para enviar un fichero). Todos los mensajes se caracterizan por: un identificador formado por un número; un emisor, representado por un número que identifica al nodo que envía el mensaje; y por un receptor, igualmente representado por un número que identifica al nodo que recibirá el mensaje. Los mensajes Request están compuestos por el nombre de un fichero que se desea solicitar, mientras que los mensajes Piece contienen el fichero que se envía. Modifique el esquema de clases realizado en el apartado a) para tener en cuenta esta nueva funcionalidad. Recuerde que deben aplicarse los principios de la programación orientada a objetos.
SOLUCIÓN
Nodo
Simulador
private int id private List ficheros private List vecinos
private List nodos public void añadirNodo(Nodo n) public boolean eliminarNodo(int id) public void mostrarNodos()
public void enviar(Nodo vecino, Mensaje msg) /* metodos set y get de los atributos */
envia
«abstract»
Mensaje Fichero private String nombre private int tamaño
private int id private int emisor private int receptor
/* metodos set y get de los atributos */
/* metodos set y get de los atributos */
contiene
Piece
Request
private Fichero fichero
private String nombreFichero
/* metodos set y get de los atributos */
/* metodos set y get de los atributos */
Como podemos observar, para solucionar este apartado hemos creado una clase abstracta llamada Mensaje de la cual heredarán los dos tipos de mensajes que queremos tener en cuenta, representados por las clases Piece y Request, respectivamente.
• •
•
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI. Junio 2013 - 1 TIPO A
Primera Parte: Test 1. Un componente de almacenamiento permanente es aquél que mantiene la información: a. b. c. d.
Durante la ejecución de un programa. Durante la compilación de un programa. Sin ser modificada en ningún momento. Aunque el computador no esté funcionando.
2. Las funciones principales de un sistema operativo se pueden resumir en las siguientes: a. Control de la ejecución de programas, administración de periféricos, gestión de permisos y de usuarios, control de concurrencia y de errores, administración de memoria y control de seguridad. b. Control de la ejecución de programas, administración de periféricos, gestión de permisos y de usuarios, visualización de fotografías y videos, administración de memoria y control de seguridad. c. Control de la ejecución de programas, administración de periféricos, gestión de permisos y de usuarios, realización de video-llamadas, administración de memoria y control de seguridad. d. Control de la ejecución de programas, administración de periféricos, gestión de permisos y de usuarios, manejo de la agenda de contactos, administración de memoria y control de seguridad.
3. En la práctica de este curso la clase GestorTiradas dispone de un método que: a. Permite modificar la ruta de acceso y el nombre del fichero asociado a un cartel. b. Permite modificar sólo la ruta de acceso al fichero. c. Permite modificar sólo el nombre del fichero. d. Ninguna de las anteriores.
4. En Java: a. Está permitido definir varios métodos con el mismo nombre siempre que tengan diferentes parámetros de entrada. b. Está permitido definir varios métodos con el mismo nombre siempre que éstos sean constructores y tengan diferentes parámetros de entrada. c. No está permitido definir varios métodos con el mismo nombre. d. No está permitido definir varios métodos con el mismo nombre, salvo que sean de tipo 'static' y tengan diferentes parámetros de entrada.
5. ¿Qué secuencia imprimiría el siguiente código? for (int i = 0; i < 3; i++) { int j = 1; do { System.out.println(j); j++; } while (j <= 1); System.out.println(i); } a. b. c. d.
101112 202122 021222 021022
6. Si tenemos una clase A con un método m1, ¿cómo debemos definirlo para que éste sólo pueda ser invocado desde la misma clase A y desde las subclases de la misma? a. No se puede hacer eso, ya que en Java no se permite la herencia múltiple. b. El método debe definirse con acceso protegido (protected). c. El método debe definirse con acceso público (public ). d. El método debe definirse con acceso privado (private).
7. Nos descargamos de la red una clase ReservaEntradaTeatro en formato .class con un método imprimeEntrada. Queremos reutilizar dicha clase, pero modificando el formato de la entrada impresa. Para ello podemos: a. Aplicar herencia y sobreescritura de métodos. b. Aplicar composición añadiendo un nuevo método en el código .class original. c. Crear una nueva instancia de la clase. d. No es posible. Es necesario implementar la clase completa de nuevo.
8. ¿Cuál es la diferencia principal en Java entre listas (List) y arrays (o arreglos)?: a. En Java no existen las listas. b. Que el tamaño de la lista está predefinido y no se pueden redimensionar, mientras que los arrays sí. c. Que el tamaño de los arrays está predefinido, mientras que las listas no y, por tanto, pueden ser redimensionadas. d. Un array sirve para almacenar tipos predefinidos, mientras que una lista sirve para almacenar objetos.
9. Supongamos que reescribimos un método de la clase padre en la clase hija con distinto número de parámetros de entrada. Entonces: a. Tendremos siempre un error en tiempo de ejecución. b. Se ejecutará el nuevo método cuando se le llame con los parámetros de entrada correspondientes. c. Es incorrecto. Sólo se puede reescribir un método de la clase hija en la clase padre. d. Es incorrecto, dado que la reescritura de métodos requiere una relación de composición entre clases.
10. ¿Cómo debería definirse un método para que se pudiera acceder a él desde una subclase de otro paquete? a. b. c. d.
Como 'public' o 'protected' Como 'public' o 'static' Como 'public' o 'private' Como 'public' o 'default'
Apellidos!!!!!!!!!...!!..Nombre!!!!!!!DNI!.......!!...
Segunda Parte: Problema Una tienda de fotografía desea informatizar su negocio. En esta primera versión desea realizar la gestión de sus pedidos on-line. En concreto, se podrán realizar pedidos que incluyan dos tipos de producto: impresión de fotos y cámaras fotográficas. Un pedido estará identificado por la fecha, el cliente, el número de tarjeta de crédito y la lista de productos que se piden. Por otro lado, cada producto está identificado por un número. Además, para el caso particular de las impresiones, se desea almacenar si ésta es a color, el ancho y el largo (en cm.) y la lista de fotos que se quieren imprimir. En cuanto a las cámaras, están identificadas por la marca y el modelo. Como ya hemos dicho anteriormente, en esta primera versión se desean gestionar los pedidos, de manera que la aplicación permita: • • •
añadir nuevos pedidos; eliminar un pedido realizado por un cliente en una fecha concreta; y mostrar por pantalla todos los pedidos realizados por un cliente.
NOTA: Para resolver el problema se hará uso de una clase denominada Foto , definida por un constructor Foto(String fichero) y un método print() que muestra los datos de una foto.
Foto
public Foto(String fichero) public void print()
Antes de comenzar a responder, lea con atención todos los apartados. Se pide:
!" (5 puntos) Dibujar un esquema con las clases necesarias para realizar el diseño del problema, indicando los atributos y métodos que tiene cada una de ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la programación orientada a objetos.
#$%&'()* !" , -" Pedido private int id private String cliente private String fecha private int tarjeta private List productos public void print() /* metodos set y get de los atributos */
GestorPedidos private List pedidos public void añadir(Pedido pedido) public boolean eliminar(String cliente, String fecha) public void mostrarPedidos(String cliente)
«abstract»
Producto protected int id public abstract void print() /* metodos set y get de los atributos */
ImpresionFotos Foto public Foto(String fichero) public void print()
private boolean color private int ancho private int largo private List fotos public void print() /* metodos set y get de los atributos */
Camara private String marca private String modelo public void print() /* metodos set y get de los atributos */
." (4 puntos) Escribir el código necesario (en las clases que sea necesario) para mostrar por pantalla todos los pedidos realizados por un cliente. De manera que se muestren siguiendo el siguiente formato (los datos de las fotos de una solicitud de impresión se mostrarán utilizando el método print() de la clase Foto):
Cliente: “Pepito” Pedidos: Fecha: “19/03/2013” Tarjeta: 12345678910 Productos: Id: 13 Impresión de fotos Color: si Ancho: 13 cm Largo: 18 cm Fotos: Foto1.jpg, Foto2.jpg Id: 14 Cámara fotográfica Marca: Nikon Modelo: d5100
#$%&'()* /0123450676318 mostrarPedidos (String cliente) { System.out .println("Cliente: " + cliente); (Pedido p : .pedidos) { (p.getCliente().equals(cliente)) { p.print(); } }
}
5067638 () { print System.out .println("Fecha: " + .fecha); System.out .println("Tarjeta: " + .tarjeta); System. out .println("Productos:"); (Producto p : .productos) { p.print(); } }
54369:238 (); print
(;<4017=>?3231" /* * (non-Javadoc) * @see Producto#print() */ @Override () { print System.out .println("Id: " + .id); System.out .println("Revelado de fotos"); System.out .println("Color: " + .color); System.out .println("Ancho: " + .ancho); System.out .println("Ancho: " + .largo); System.out .print("Fotos: "); (Foto f : .fotos) { f.print(); System.out .print(" "); } }
'@;A4A8 /* * (non-Javadoc) * @see Producto#print() */ @Override () { print System.out .println("Id: " + .id); System.out .println("Camara fotogr!°fica"); System.out .println("Marca: " + .marca); System.out .println("Modelo: " + .modelo);
}
-" (1 punto) Después de tener en funcionamiento la aplicación, se ha detectado una importante limitación. Con los requisitos especificados no se pueden distinguir entre potenciales pedidos realizados por el mismo cliente, con los mismos productos, en la misma fecha. ¿Qué modificaciones se podrían realizar para distinguir estos casos?
#$%&'()* Para realizar la solución más sencilla bastaría con añadir un nuevo atributo a la clase Pedido, que permita identificar a cada uno de los pedidos. En este caso se ha añadido un atributo denominado id de tipo entero.
• •
•
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI. - 2 TIPO A
Primera Parte: Test 1. Si accedemos a un sitio web por medio de un PC conectado a la red y nos encontramos con un mensaje "error de ejecución en el servidor", esto indicaría que: a. b. c. d.
Ha habido un fallo en la red. Nuestro navegador no es compatible. Nuestro sistema operativo no es compatible. El programa en la máquina remota no ha podido ejecutarse correctamente.
2. El software de sistema: a. Permite la manipulación y tratamiento de fotografías. b. Permite la edición de videos. c. Permite aislar al usuario de los detalles del computador particular (características de la memoria, dispositivos, etc.). d. Permite al usuario llevar a cabo tareas específicas, como por ej. el uso de aplicaciones ofimáticas.
3. En la práctica de este curso: a. b. c. d.
La clase Cartel tiene como atributo un objeto Tirada. La clase Tirada tiene como atributo un objeto Cartel. La clase Tirada tiene como atributo un conjunto de objetos Cartel. La clase Cartel tiene como atributo una lista de objetos Tirada.
4. ¿Qué valores imprimiría el siguiente código? int [] a = { 1, 2, 3, 4 }; for (int i = 1; i < a.length; i++) { a[i - 1] = a[i]; } System.out.print(a[ 0]);
a. b. c. d.
1,2 2 1 3
5. Si un campo está definido como Private: a. Es necesario que se ejecute uno de los métodos de su clase para que sea modificado. b. No se puede modificar una vez compilado el programa. c. Requiere permisos para ser modificado. d. Se puede acceder directamente desde cualquier subclase. 6. Indique cuál de las siguientes afirmaciones es correcta en la programación orientada a objetos: a. b. c. d.
Los Las Las Los
objetos definen el tipo de atributos dentro de una clase. clases definen el tipo de objetos. clases definen el estado actual de un objeto. objetos definen el estado actual de una clase.
7. Teniendo en cuenta las siguientes definiciones de clases: public class Persona { } public class Hombre extends Persona { } public class Mujer extends Persona { }
¿Las siguientes instrucciones son correctas? List personas = new ArrayList(); personas.add( new Hombre()); personas.add( new Mujer()); personas.add( new Persona());
a. No, ya que en una lista de la clase Persona no se podrían añadir objetos de la clase Hombre y Mujer . b. No, ya que la clase Persona no se puede instanciar. c. Sí, ya que las clases Hombre y Mujer heredan de la clase Persona. d. Sí, si quitamos la última instrucción (personas.add( new Persona());) ya que la clase Persona no se puede instanciar.
8. ¿Cuál de estas afirmaciones es falsa? El tratamiento de errores mediante excepciones en un objeto en Java permite capturar un error e imprimir un mensaje indicando: a. El tipo de error. b. La zona del código donde se produjo el error. c. En su caso, el nombre del fichero de lectura que ha producido el error. d. Los valores de los campos de todos los objetos instanciados en ese momento.
9. Indique cuál de las siguientes afirmaciones es FALSA. En Java: a. Por medio de la herencia es posible reutilizar código. b. Por medio de la composición es posible reutilizar código. c. En las clases abstractas no es posible acceder al valor de sus campos desde objetos de otra clase. d. No es posible instanciar objetos de una clase abstracta.
10. Un método polimórfico en Java, permite: a. b. c. d.
Que dicho método no devuelva ningún resultado. Que el método sólo sea accesible desde la propia clase. Java no admite polimorfismo a nivel de método. Que se puedan invocar distintos métodos en diferentes momentos.
Apellidos!!!!!!!!!...!!..Nombre!!!!!!!!..DNI!!!...
Segunda Parte: Problema De manera genérica, un sitio de opiniones está compuesto por un conjunto de usuarios que vierten opiniones sobre distintos objetos. Un ejemplo de estos sistemas es la famosa web TripAdvisor , donde los usuarios pueden expresar sus opiniones sobre hoteles. En este problema se desea modelar este tipo de sistemas. En nuestro caso, un usuario estará caracterizado por su nombre o nick y por las opiniones que ha realizado en el sistema. Al mismo tiempo, el sistema estará compuesto por un conjunto de objetos sobre los que se puede opinar, los propios usuarios y las opiniones que éstos han vertido en el sistema. Por otro lado, una opinión estará definida por la fecha en la que se realizó, el usuario que la realizó, el objeto sobre el que se está opinando, una valoración representada por un número entero y un texto que almacena la justificación de la propia opinión. Nuestro sistema, internamente, agregará todas las opiniones vertidas sobre un objeto concreto, calculando su valoración general. Del mismo modo, puede devolver un ranking (una lista ordenada), de todos los objetos, en función de su valoración global, de tal manera que el primer objeto de la lista es el mejor valorado, etc. Queremos modelar este problema, de modo que el sistema de opinión contenga la funcionalidad explicada, es decir: • •
•
Permita añadir nuevas opiniones expresadas por usuarios sobre objetos. Permita consultar la valoración global de un objeto concreto, expresada como un número real. Permita obtener un ranking de objetos, proporcionando una lista con todos los objetos sobre los que se ha opinado, ordenados en función de su valoración global.
Antes de comenzar a responder lea con atención todos los apartados. Se pide:
!" (4 puntos) Dibujar un esquema con las clases necesarias para realizar el diseño del problema, indicando los atributos y métodos que tiene cada una de ellas (sólo indicarlos, sin escribir su código), aplicando los principios de la programación orientada a objetos.
#" (2 puntos) Supongamos que queremos utilizar el sistema de opinión modelado en el apartado anterior, para un sitio web donde los objetos a valorar sean libros. Los libros estarán caracterizados por un título, un autor y la editorial. Siguiendo los principios de la programación orientada a
objetos, ¿qué modificaciones habría que realizar en el diseño del apartado 1, para adaptar el diseño a este nuevo requisito? Razone su respuesta.
$%&'()*+ !" - #" SistemaOpinion Usuario private String nombre private List opiniones public void añadir(Opinion op) /* metodos set y get de los atributos */
private List usuarios private List objectos private List opiniones public public public public public
void añadir(Usuario usuario) void añadir(Objecto obj) void añadir(Opinion op) doble getValoracionGlobal(Objecto obj) List getRanking()
Opinion private private private private private
String fecha Usuario usuario Objeto objeto int valoracion String justificacion
/* metodos set y get de los atributos */
Objeto private int id /* metodos set y get de los atributos */
Libro public String titulo public String autor public String editorial /* metodos set y get de los atributos */
Para resolver el apartado 2, utilizaremos herencia, creando una nueva clase Libro que herede de la clase Objeto
." (2 puntos) Escriba el código necesario para instanciar una opinión expresada por el usuario con nombre “Pepito”, sobre el libro con título “El guardián entre el centeno”, cuyo autor es “J.D. Salinger”, de la editorial “Alianza”, identificado con el identificador 1, valorada con un 5, en la fecha “19/03/2013” y cuya justificación textual dice: “Libro muy entretenido”. (Para la fecha se puede utilizar el tipo de datos String). Añada la opinión al sistema de opinión (suponga que éste ha sido previamente instanciado en la variable “sistemaOpinion”) y, a continuación, consulte la valoración global del mismo libro.
$%&'()*+ // Creación del usuario Usuario u = Usuario(“Pepito”); // Creación del objeto libro Libro libro1 = Libro(1); libro1.setTitulo(“El guardián entre el centeno”); libro1.setAutor(“J.D. Salinger”); libro1.setEditorial(“Alianza”); // Creación de la opinión Opinion op1 = Opinion(); op1.setUsuario(u); op1.setObjeto(libro1); op1.setValoracion(5); op1.setFecha(“19/03/2013”); op1.setTexto(“Libro muy entretenido”); // Incorporación de la opinión en el sistema de reputación sistemaOpinion.añadir(op1); // Consulta de la reputación del libro valoracionGlobal = sistemaOpinion.getValoracionGlobal(libro1);
/" (2 puntos) Escriba el código de un nuevo método del sistema, que permita mostrar por pantalla todas las opiniones expresadas por un usuario concreto.
$%&'()*+ public void mostrarOpiniones(Usuario u) { // Recorremos las opiniones almacenadas for (Opinion op : this.opiniones) { if (op.getUsuario.getNombre().equals(u.getNombre())) { System.out.println(“Opnion expresada por el usuario: “ + u.getNombre() + “ en la fecha: “ + op.getFecha() + “sobre el objeto: “ + op.getObjeto() + “ valorado con un: “ + op.getValoracion() + “ y su justificación es: “ + op.getJustificacion() ); } }
• •
•
Para la nota del examen, el test vale el 30% y el Problema vale el 70%. El test es eliminatorio y se necesitan 7 respuestas correctas para superarlo. Resuelva el problema en una hoja aparte (máximo 2 caras), indicando su nombre y DNI. TIPO A
Primera Parte: Test 1. ¿Qué es la placa base o madre de un computador? a. Es el componente hardware donde se integran todos los componentes que colectivamente proporcionan la funcionalidad del computador. b. Es el componente hardware del computador que permite realizar operaciones aritméticas y lógicas. c. Es el componente hardware donde se almacena la información de manera permanente. d. Es el componente hardware donde se almacena la información de manera temporal. 2. Los requisitos de un sistema incluyen disponer de 8 GigaBytes de memoria principal. ¿Cuál es la menor de estas memorias que satisface dicho requisito? a. b. c. d.
900 MegaBytes 109 Bytes 9*109 Kbytes 9*109 Bytes
3. ¿Qué significa que un sistema operativo es multitarea?: a. Que es capaz de atender las peticiones de múltiples usuarios al mismo tiempo. b. Que es capaz de ejecutar los programas secuencialmente. c. Que es capaz de ejecutar varios programas a la vez. d. Que es capaz de gestionar varios procesadores. 4. ¿Cuál es la secuencia correcta de un compilador?: a. A partir del código objeto genera el código fuente, que a continuación es interpretado. b. A partir del lenguaje máquina genera un código fuente que es ejecutado. c. A partir de un código fuente genera un código objeto que, a continuación, se traduce en código ejecutable. d. Toma una instrucción del código fuente, la traduce a código ejecutable, la ejecuta y repite la fase con las siguientes instrucciones.
5. En la práctica del presente curso, ¿cuál de las siguientes funcionalidades NO es cubierta por la clase Gestora? a. Listar todas las tiradas e imágenes correspondientes, mostrando la información relativa a cada tirada. b. Devolver la ruta y acceso de un cartel dado un identificador. c. Añadir un objeto de tipo Tirada a la lista. d. Crear una copia de un cartel. 6. Indique qué se imprimiría por pantalla tras la ejecución del siguiente código: public static void main(String args[]){ int numero = 4557888; int digitos = 0; do { numero = numero / 10; digitos++; } while ( numero > 0 ); System.out.println(digitos); }
a. b. c. d.
6 7 8 Nada, porque se ejecutaría un bucle infinito.
7. En un programa orientado a objetos, cada persona tiene asociado dos progenitores de la clase Persona. Varias personas pueden tener asociado un mismo progenitor. Si modificamos el nombre de una persona, ¿es necesario modificarlo en todos sus hijos? a. Siempre es necesario. b. No, porque hay una relación de herencia entre progenitores e hijos. c. No es necesario. d. Sólo cuando no haya un campo identificador único del progenitor.
8. ¿Qué distingue a las diferentes instancias de una clase? a. b. c. d.
El conjunto de campos de los que dispone. Los valores de sus campos. La definición de los métodos. La clase de la que hereda.
9. Indique cuál de las siguientes afirmaciones es falsa: a. Todos los métodos deben devolver un tipo de valor. Si el método no devuelve ningún valor, el tipo se define como void. b. Todos los métodos deben de tener, al menos, un parámetro. Éstos deberán ir entre paréntesis y separados por comas, especificando para cada uno de ellos su tipo. c. Todos los métodos en java pueden generar excepciones. d. Un método puede devolver un tipo primitivo, un array o lista, un String o un objeto.
10. Dadas las siguientes clases: public class A { public void escribir(String a) { System.out.print(a); } } public class B extends A { public void escribir(String a) { System.out.println(“El valor es: “ + a); } }
¿Qué devolvería el siguiente código?: A a = new B(); a.escribir(“Hola”);
a. El valor es: Hola b. Hola c. No devolvería nada puesto que no podemos asignar un objeto de clase A en una variable del tipo B. d. No devolvería nada puesto que se produciría un error ya que no se pueden sumar dos Strings.
Apellidos!!!!!!!!!...!!..Nombre!!!!!!!DNI!.......!!...
Segunda Parte: Problema Una empresa de paquetería quiere implantar un sistema para gestionar las reclamaciones que le pueden realizar sus clientes como consecuencia de posibles problemas en el servicio que ofrecen. La empresa tiene almacenados a sus clientes con su dni, el nombre, los apellidos y una dirección de correo electrónico. Éstos podrán poner una reclamación sobre un envío concreto, identificado por un número y añadir un comentario donde explique el motivo de su reclamación. Las reclamaciones interpuestas por los clientes serán identificadas por un número y deben de ser almacenadas, para poder gestionarlas. En concreto el sistema debe permitir: 1. Añadir una nueva reclamación. 2. Indicar todas las reclamaciones que un determinado cliente ha interpuesto. 3. Eliminar una reclamación a partir de su número. 4. A partir de un número de reclamación y un texto que explique la solución dada al cliente, cerrar una reclamación, añadiendo dicho texto como contestación a la reclamación. Lea atentamente el ejercicio completo antes de comenzar a contestar las preguntas. Se pide: 1. (4 Puntos) Realice el esquema de clases correspondiente al sistema que
se desea implementar, indicando los atributos y métodos que tiene cada una de las clases (sólo indicarlos, sin escribir su código), aplicando los principios de la programación orientada a objetos.
!"#$%&'( *+ , -+ Reclamacion private int numero private Cliente cliente private int num_envio private String comentario private boolean cerrada private String solucion /* metodos set y get de los atributos */
GestorReclamaciones private List reclamaciones private List clientes public void añadir(Reclamacion r) public boolean eliminar(int num) public void getReclamaciones(String cliente) public void cerrarReclamacion(int num, String solucion)
Cliente
Sugerencia
private String DNI private String nombre private String apellidos private String email
private String Departamento /* metodos set y get de los atributos */
/* metodos set y get de los atributos */
2. (4 Puntos) Escribir el código del método que realice la funcionalidad
número 4 (cerrar una reclamación añadiendo la solución proporcionada a una reclamación). !"#$%&'( public void cerrarReclamacion(int num, String solucion) { for (Reclamacion r : this.reclamaciones) { if (r.getNumero() == num) { r.setSolucion(solucion); r.setCerrada(true); } } }
3. (2 Puntos) Ampliar el diseño del primer apartado, sin modificar las clases
ya implementadas, para permitir que el sistema pueda gestionar también sugerencias. Las sugerencias se caracterizan por estar puestas por un cliente en relación a un envío concreto, tener un número identificativo, el texto de la sugerencia y un destinatario donde se introduce el departamento al que van referidas. Dichas sugerencias podrán ser contestadas. !"#$%&'( Para resolver el apartado 3 utilizaremos herencia, crearemos una nueva clase Sugerencia, heredando de la clase Reclamación, de manera que comparten todos los atributos y, por tanto, sólo será necesario añadir el nuevo atributo departamento de tipo String, que nos permita añadir el nombre del departamento sobre el que se realiza la sugerencia.
Fundamentos de Informática Ing. Eléctrica 1ª Semana 2015
Plantilla soluciones 1C, 2C, 3C, 4B, 5C, 6C, 7D, 8B, 9C, 10C
Fundamentos de Informática Ing. Eléctrica 2ª Semana 2015
Fundamentos de Informática Ing. Mecánica 1ª Semana 2015
Plantilla soluciones 1C, 2B, 3B, 4C, 5B, 6A, 7D, 8C, 9D, 10A
Fundamentos de Informática Ing. Mecánica 2ª Semana 2015