| |
Boletín de problemas 2
Fecha de entrega: viernes 22
de febrero de 2002
En este boletín describirá
el funcionamiento de un ascensor en varias situaciones.
Problema 1. Un solo ascensor [35%]
Escriba la clase Ascensor de acuerdo
con los siguientes métodos:
- El constructor toma 3 argumentos:
- Servicio en el último
piso (por lo general el primer piso)
- Servicio en el piso más
alto
- Piso actual del ascensor
- El constructor toma 2 argumentos:
- Servicio en el último
piso
- Servicio en el piso más
alto
- Asumir que el piso actual
es el piso más bajo en el inicio
- El constructor toma 1 argumento:
- Servicio en el piso más
alto
- Asumir que el piso más
bajo = 1, y el piso actual = el piso más
bajo desde el inicio
- Petición, que toma 1
argumento, el piso solicitado, y no devuelve nada:
- Si el piso solicitado es mayor
que el piso más alto, menor que el piso más
bajo, o igual al piso actual, no hacer nada
- O si el piso solicitado está
por encima del piso actual, llevar el ascensor al
piso solicitado. Imprima una línea que indique
el piso actual, a continuación líneas
(posiblemente multiples) que indiquen que el ascensor
sube por cada piso intermedio, y por último
una línea que indique que el ascensor paró
en el piso solicitado.
- O si el piso solicitado está
por debajo del piso actual, proporcione un resultado
similar que muestre el avance del ascensor.
Escriba un método
main() en la clase AscensorTest:
- Utilizando un JOptionPane, solicite
al usuario que introduzca el piso más alto
al que da servicio el ascensor.
- Utilizando el constructor de
un argumento, cree un objeto Ascensor.
- En un bucle, utilizando un JOptionPane,
solicite al usuario que introduzca los pisos que llaman
al ascensor. Avise al usuario que introduzca
1 para finalizar el programa.
- Invoque el método de
llamada para desplazar el ascensor y producir un resultado.
Problema 1A. Ascensores
múltiples, sin control coordinado [0%]
(Este problema es opcional; no
hay que entregarlo, pero merece la pena hacerlo para
asegurarse de que está preparado para continuar
con el problema 2)
Escriba un método main()
revisado para crear una plataforma de dos o tres ascensores,
utilizando la clase Ascensor que escribió más
arriba. Haga que cada ascensor funcione por separado,
respondiendo sólo a las llamadas dirigidas a
él. (No hay coordinación entre los ascensores).
Cerciórese de que entiende cómo se crean,
se denominan y se accede a múltiples objetos
de una clase.
Problema 2. Ascensores múltiples
con control integrado [65%]
Tiene que crear y poner en práctica
un programa que permita a un usuario llamar a un ascensor
desde un piso. Desde una plataforma de ascensores, uno
de ellos, el que esté más cerca, responderá
a la llamada. En este problema, el número
de ascensores de la plataforma es 3 y todos ellos dan
servicio a los mismos pisos. Todavía no
hemos visto las matrices (arrays), por tanto,
tendrá que hacer un seguimiento individual de
los ascensores. La clase "controlador integrado"
sólo necesita trabajar con tres ascensores; no
necesita ser más general.
Este problema es un poco menos
estructurado que los vistos hasta ahora. Debe diseñar
una nueva clase (Controller), con sus métodos
y miembros variables, éstas últimas han
de ser privadas. La clase debe tener un constructor
y unos métodos. Escribirá también
la clase AscensorTest2 que sólo tiene un método
main(), con un tratamiento de los datos a través
de JOptionPanes, creando objetos e invocando métodos
sobre ellos, pero sin implementar una lógica
de programa detallada. También ampliará
la clase Ascensor existente para que sea compatible
con el controlador. Puede copiar el programa del problema
1 en un nuevo archivo fuente Java como punto de
partida de este problema.
Las peticiones se introducen, como
antes, a través del JOptionPane. Cuando
se realiza una petición:
- Mostrar la ubicación
actual de los tres ascensores
- Mostrar el ascensor elegido
para satisfacer la petición
- Haga que el ascensor muestre
su movimiento como en el problema 1
Utilice el constructor Ascensor
de "2-argumentos" en su método main(). Probablemente
tendrá que añadir un argumento a los 3
constructores con un nombre para cada ascensor, de modo
que pueda mostrar qué ascensor atiende la llamada,
etc. Así, su constructor de "2-argumentos"
se convertirá en uno de 3-argumentos, etc.
La clase Controller modela el control
integrado de los tres ascensores. Tendrá un método
clave que obtenga el piso actual de cada ascensor (necesitará
añadir un método accesorio a Ascensor),
calcule el ascensor más cercano e invoque el
método request() del ascensor elegido para satisfacer
la petición del usuario.
Al al
final del programa, muestre el número total de
peticiones, el número de peticiones satisfechas
por cada ascensor, el número total de pisos que
se ha desplazado cada ascensor y el promedio de pisos
por petición que se ha desplazado cada ascensor.
Modifique la clase Ascensor que escribió en el
problema 1 para que cada ascensor registre la cantidad
de peticiones recibidas y el número de pisos
que se ha desplazado, y pueda informar de los totales
cuando se le solicite. Ignore las peticiones no válidas
(peticiones de pisos demasiado altos o demasiado bajos,
o el piso actual) en los totales.
Entrega del trabajo
Requisitos
- Problema 1: solamente por correo
electrónico. No es necesario entregarlo en
papel.
- Problemas 2 y 3: copia en papel
y copia electrónica de TODOS los códigos
fuente (todos los archivos con la extensión
.java).
- Incluya en TODOS los archivos
que presente su nombre, el nombre de usuario, la sección,
el nombre del profesor ayudante, el número
de trabajo y una relación de las personas con
las que haya comentado el boletín de problemas.
- NO entregue copias electrónicas
o en papel de código compilado (archivos .class).
Sanciones
- Por pérdida de copia
en papel: -10% de la puntuación del boletín
de problemas.
- Por pérdida de copia
electrónica: -30% de la puntuación del
boletín de problemas.
- Por entrega fuera del plazo:
-20% de la puntuación del boletín de
problemas si es un día de retraso. Por
más de un día de retraso = NO SE PUNTUARÁ
|