Vamos a escribir una clase Ascensor para representar el movimiento de un ascensor cuando se le llama desde una planta (no nos ocupamos de los botones de dentro del ascensor). Para representar el estado del ascensor necesitamos conocer en cada momento:
- El piso en el que se encuentra (un número mayor o igual que 0).
- Si tiene las puertas abiertas o cerradas.
- Si hay algún botón de llamada pulsado, y si lo hay a qué piso corresponde. Nunca puede haber más de un botón pulsado; el ascensor sólo "atiende" a una pulsación cada vez.
La clase debe contener los atributos que se consideren necesarios y al menos los siguientes métodos:
- Una constructora sin parámetros. Al crearse un objeto de tipo Ascensor, éste debe encontrarse en la planta 0, con las puertas cerradas y se supone que no hay ningún botón de llamada pulsado.
- puertasAbiertas: devuelve true si las puertas están abiertas, y false si están cerradas.
- pisoActual: Devuelve el piso en el que se encuentra el ascensor.
- libre: Devuelve true si no hay botón pulsado, o false si sí lo hay.
- pulsado: Recibe como parámetro un entero n indicando el número de piso en el que se ha pulsado el botón de llamada. Si el ascensor no está libre no hace nada. Si sí está libre, apunta que el botón pulsado es n (con lo que deja de estar libre). En cualquier caso el piso actual no cambia, ni tampoco se abren/cierran las puertas.
- mueve: Método sin parámetros que simula el movimiento del ascensor. Si el ascensor está libre no hará nada. Si hay alguno pueden darse dos situaciones:
- El piso de llamada corresponde con el piso actual. En este caso se abren las puertas (para que entré quien llamó) y se indica que no hay ningún botón pulsado (porque la llamada ya ha sido atendida).
- El piso de llamada es distinto al piso actual. En este caso el ascensor se asegura de que tiene las puertas cerradas y se mueve un piso en la dirección adecuada. Por ejemplo, si estaba en el 3 y se le llama desde el 6, tras la llamada a este método el ascensor se encontrará en el piso 4.
- Un método sin parámetros toString que devuelve un String indicando en qué piso se encuentra el ascensor, si está libre u ocupado, y si tiene las puertas abiertas o cerradas, lo que se representará respectivamente por "] [" y por "[ ]".
Escribir además un programa principal que utilice la clase Ascensor. El programa debe mostrar en cada momento el piso del ascensor, si está libre o ocupado y si las puertas están abiertas o cerradas. Después de mostrar el estos datos el programa presentará un menú que permitirá mover el ascensor, pulsar un botón o salir del programa. El proceso se repetirá hasta que el usuario decida acabar, como en el siguiente ejemplo:
Piso 0 - Libre - [ ]
0.- Salir
1.- Mover
2.- Pulsar
2
Piso en el que se pulsa el botón de llamada: 2
Piso 0 - Ocupado - [ ]
0.- Salir
1.- Mover
2.- Pulsar
1
Piso 1 - Ocupado - [ ]
0.- Salir
1.- Mover
2.- Pulsar
1
Piso 2 - Ocupado - [ ]
0.- Salir
1.- Mover
2.- Pulsar
1
Piso 2 - Libre - ] [
0.- Salir
1.- Mover
2.- Pulsar
0