Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso 2019/2020
Entrega 2 – Ejercicio 1
ArrayList<String>
String dni
respuestas P1 P2 P3
“34567892” SI NO EN_BLANCO
“27456213”
SI SI SI
2/5
El mapa de escrutinio de la pregunta 2 sería:
SI 1
NO 1
EN_BLANCO 0
- Votar. Esta operación recibe como parámetro el dni del elector que va a emitir su voto y
una lista con las respuestas para cada una de las preguntas. Este método devuelve un valor
booleano para indicar si se ha podido votar o no. De manera general, para poder votar se
tiene que cumplir que: 1) la consulta esté preparada, 2) la consulta esté activa, 3) el elector
esté en el censo, 4) que el elector no haya votado ya y 5) que el tamaño de la lista de
respuestas que se van a votar coincida con el número de preguntas de la consulta. Si se
cumplen estas condiciones se añade un nuevo voto asociando el dni del elector con la lista
de respuestas por las que vota a cada pregunta. Para la implementación de este método se
debe aplicar el concepto de programación del método plantilla, dado que se tiene que
apoyar en la implementación del método que consulta si la consulta está activa que
depende de las subclases.
- Versión sobrecargada del método ‘votar’ que recibe como parámetro el dni del elector y un
argumento variable con las respuestas a cada pregunta.
- Versión sobrecargada del método ‘votar’ que sólo recibe como parámetro el dni del elector
y se entiende que vota “en blanco” a todas las preguntas de la consulta.
2. Tipos de consultas
La clase que representa las consultas incluye una nueva propiedad denominada activa. Se trata de
una propiedad que indica si la consulta está abierta para poder emitir un voto. La forma de
comprobar si una consulta está activa depende de cada tipo de consulta.
El sistema ofrece dos tipos de consultas: consulta ordinaria y consulta selectiva, cada una con unas
condiciones particulares a la hora de votar y diferentes formas de determinar si la consulta está
activa.
Una consulta ordinaria representa un tipo de consulta que permite que un elector pueda cambiar
el voto, esto es, si un elector que ya ha votado vuelve a hacerlo, se anulará previamente el voto
que ya está registrado y tramitará el nuevo voto. En el caso de que el nuevo voto no sea válido (no
se cumplen alguno de los requisitos establecidos a la hora de votar) se debe restaurar el voto que
se había anulado.
Una consulta ordinaria dispone de las funcionalidades para abrir y cerrar la consulta en cualquier
momento. Por tanto, una consulta ordinaria está activa si está abierta. En el momento de la
construcción la consulta estará cerrada hasta que se abra explícitamente.
Una consulta selectiva es un tipo de consulta que establece como restricción a la hora de votar
que algunas preguntas sólo puedan responderlas las personas nacidas antes de una determinada
fecha. O lo que es lo mismo, las personas nacidas en una fecha posterior a la establecida para la
consulta no pueden contestar a determinadas preguntas, lo que equivale a dejarlas “en blanco”.
3/5
Por tanto, este tipo de consulta añade tres propiedades nuevas:
- fecha umbral: fecha que selecciona qué electores pueden contestar (una respuesta
diferente a “en blanco”) a determinadas preguntas.
- preguntas condicionadas: conjunto con los números de las preguntas condicionadas por la
fecha umbral.
- Censo autorizado: conjunto de electores que pueden responder a todas las preguntas. Esto
es, los que su fecha de nacimiento es anterior a la fecha umbral.
Los nacidos con posterioridad a la fecha umbral sólo tienen la opción de dejar “en blanco” las
preguntas condicionadas, mientras que los nacidos antes de la fecha umbral pueden responder
con cualquiera de las posibles respuestas. Por ejemplo, si se establece como fecha umbral
1/1/2000, y como número de pregunta condicionada la 3, esto significa que los electores que han
nacido en una fecha posterior al uno de enero del año 2000, tienen que contestar “en blanco” a la
pregunta 3 (lo que equivale a que no pueden responder a esa pregunta).
A la hora de votar se tiene que comprobar la edad del elector para, en su caso, comprobar si las
respuestas a las preguntas condicionadas son “en blanco”. En el caso de no cumplirse, el método
deberá devolver false. En el caso de que se cumplan las condiciones particulares de voto de una
consulta selectiva, se tendrá que registrar el voto atendiendo a las condiciones generales de una
consulta.
Además, la consulta selectiva añade como propiedad la fecha en la que se celebra la consulta. Este
tipo de consulta sólo se mantiene activa durante este día, por tanto, una consulta selectiva está
activa si la fecha actual coincide con la fecha de celebración. Esta propiedad se puede cambiar
sólo si la fecha que se va a establecer es posterior a la fecha actual. El método devuelve un valor
booleano para indicar si se ha realizado el cambio.
El constructor de la consulta selectiva recibirá como parámetro, además del título de la consulta,
la fecha umbral y la fecha de celebración. La fecha de celebración se puede omitir y se entenderá
que es el día siguiente de la creación.
La funcionalidad de la clase incluye un método para establecer el conjunto de los números de las
preguntas condicionadas como un argumento variable. Sólo serán aceptados aquellos números
que se correspondan con números de preguntas de la consulta. Los números que no sean válidos
serán descartados.
Implementa el método clone en las clases que representan las consultas de acuerdo con la
semántica de su especificación y siguiendo las recomendaciones de la asignatura. Debe tenerse en
cuenta que:
- Es necesario evitar los casos de aliasing que no sean correctos, en especial los relativos a
las colecciones.
- La copia de una consulta debe tener las mismas preguntas y el mismo censo, pero no se
habrá emitido ningún voto.
- Es conveniente redefinir el método clone en las subclases para aplicar la regla covariante.
4/5
4. Programa
Implementa la clase Programa con un método main que contenga la siguiente funcionalidad:
- Crea los electores:
o "Juan Martínez" con dni "17456789" y fecha de nacimiento 16/12/1998.
o "Pedro López" con dni "34567890" y fecha de nacimiento 18/3/1998.
o “Ana Abenza" con dni "23456812" y fecha de nacimiento 1/5/1995.
o “María Gómez” con dni “23754612” y fecha de nacimiento 1/9/1994.
- Crea una consulta ordinaria que tenga por título “Sobre los exámenes en la universidad” de
dos preguntas.
- Añade a la consulta ordinaria las preguntas:
1. “¿Debemos volver a la convocatoria de septiembre?”
2. “¿Se deben hacer parciales en todas las cuatrimestrales?”
- Crea una consulta selectiva que tenga por título “Sobre las fiestas patronales”, de dos
preguntas, que se celebre hoy y tenga como fecha umbral el 31/12/1997.
- Añade a la consulta selectiva las preguntas:
1. “¿Se debe cerrar el centro el día del patrón?”
2. “¿Se deben recuperar las clases que se pierden en las fiestas?”
- Establece como pregunta condicionada la 1.
- Crea una lista de consultas y añade las dos consultas que se han creado.
- Recorre las consultas y para cada consulta:
o Añade todos los electores a la consulta.
o Abre la consulta si es ordinaria.
o Juan vota “si” a todas las preguntas.
o Pedro vota en blanco a todas las preguntas.
o Ana vota “si” a la primera y “no” a la segunda.
o María vota “no” a todas las preguntas.
o Muestra por la consola:
▪ El título de la consulta.
▪ Si es una consulta selectiva el censo autorizado.
▪ El número de votos emitidos.
▪ El escrutinio para cada pregunta.
- Crea una lista de consultas llamada copias y añade una copia de cada una de las consultas
existentes.
- Recorre la lista de las copias y muestra por la consola la información de cada una de ellas
(toString).
NOTA: implementa el método toString en la jerarquía de consultas.
5/5