Ejercicio del Elevador
Descripción
Se quiere desarrollar una aplicación para modelar el funcionamiento de un elevador. El elevador puede estar en un edificio de n pisos, dentro de un conducto que controla los mecanismos de cada piso. Estos mecanismos consisten en un botón para solicitar al elevador que vaya al piso, y una luz que se prende para indicar si el elevador sube o baja, así como una puerta que que se cierra para evitar que los los usuarios entren al conducto del elevador si el elevador no se encuentra en ese piso. Cuando el usuario solicite que el elevador vaya vaya a un determinado piso, el programa deberá indicar si el elevador va bajando o subiendo (simulando la luz), y mostrar el piso por el que el elevador elevador va pasando. Una vez llegado al piso deseado, el elevador deberá abrir la puerta, tanto la del elevador como la del piso. El programa deberá indicar por medio de algún mensaje, que las puertas se están abriendo. Cada puerta tarda 5 segundos en abrirse, y se abre abre primero primero la del piso, y luego la del elevador. El elevador espera 10 segundos y automáticamente cierra las puertas, iniciando por la la del elevador, y después la del del piso. Una vez cerradas las puertas, el sistema sistema preguntará al usuario a qué piso desea ir, y el programa deberá indicar el movimiento del elevador tal cual se indicó anteriormente. Al llegar al piso especificado, el elevador abrirá las puertas, y se quedará esperando a que se le solicite ir a otro piso, indicando por medio de un mensaje que se presione el piso al que se quiere que el elevador vaya. Si el piso solicitado es el mismo en el que se encuentra el elevador, este esperará 10 segundos, y cerrará la puerta puerta para para después solicitar el piso al que se quiere ir. Se deberá validar que el número de piso indicado no sobrepase los límites, es decir, que no sea menor a 0, el cual indicará la planta baja, ni mayor al total del número de pisos del edificio.
Identificación de objetos o clases potenciales Se quiere desarrollar una aplicación para modelar el funcionamiento de un elevador .
El elevador puede estar en un edificio edificio de n pisos, dentro de un conducto que controla los mecanismos de cada piso. Estos mecanismos consisten en un botón para solicitar al elevador que vaya al piso, y una luz que se prende para indicar si el elevador sube o baja, así como una puerta que se cierra para evitar que los usuarios entren al conducto del elevador si el elevador no se encuentra en ese piso. Cuando el usuario solicite que el elevador vaya a un determinado piso, el programa deberá indicar si el elevador va bajando o subiendo (simulando la luz), y mostrar el piso por el que el elevador elevador va pasando. Una vez llegado al piso deseado, el elevador deberá abrir la puerta, tanto la del elevador como la del piso. El programa deberá indicar por medio de algún mensaje, que las puertas se están abriendo. Cada puerta tarda 5 segundos en abrirse, y se abre abre primero primero la del piso, y luego la del elevador. El elevador espera 10 segundos y automáticamente cierra las puertas, iniciando por la la del elevador, y después la del del piso. Una vez cerradas las puertas, el sistema sistema preguntará al usuario a qué piso desea ir, y el programa deberá indicar el movimiento del elevador tal cual se indicó anteriormente. Al llegar al piso especificado, el elevador abrirá las puertas, y se quedará esperando a que se le solicite ir a otro piso, indicando por medio de un mensaje que se presione el piso al que se quiere que el elevador vaya. Si el piso solicitado es el mismo en el que se encuentra el elevador, este esperará 10 segundos, y cerrará la puerta puerta para para después solicitar el piso al que se quiere ir. Se deberá validar que el número de piso indicado no sobrepase los límites, es decir, que no sea menor a 0, el cual indicará la planta baja, ni mayor al total del número de pisos del edificio.
Identificación de objetos o clases potenciales
Elevador Edificio de n pisos
Conducto del elevador Mecanismos de piso
Botón Luz Puerta
Puerta del elevador
Identificación de objetos o clases potenciales Edificio
ConductoElevador
parte de
pisos : Piso
parte de controlado por
Piso
parte de
parte de
Panel de control
MecanismoPiso
parte de
PuertaPiso
parte de
parte de
PuertaElevador
parte de
BotonPiso
Elevador
LuzPiso
Puerta
Identificación de operaciones
Se quiere desarrollar una aplicación para modelar el funcionamiento de un elevador . El elevador puede estar en un edificio edificio de n pisos, dentro de un conducto que controla los mecanismos de cada piso. Estos mecanismos consisten en un botón para solicitar al elevador que vaya al piso, y una luz que se prende para indicar si el elevador sube o baja, así como una puerta que se cierra para evitar que los usuarios entren al conducto del elevador si el elevador elevador no se encuentra en ese piso. Cuando el usuario solicite que el elevador elevador vaya vaya a un determinado determinado piso piso, el programa deberá indicar si el elevador va bajando o subiendo (simulando la luz), y mostrar el piso por el que el elevador va pasando. Una vez llegado al piso deseado, el elevador deberá abrir la puerta, tanto la del elevador como la del piso. El programa deberá indicar por medio de algún mensaje, que las puertas se están abriendo. Cada puerta tarda 5 segundos en abrirse, y se abre primero la del piso, y luego la del elevador . El elevador espera 10 segundos y automáticamente cierra las las puertas, iniciando por la del elevador, elevador, yy después la del piso. Una vez cerradas las puertas, el sistema preguntará al usuario a qué piso desea ir , y el programa deberá indicar indicar el movimiento movimiento del del elevador elevador tal cual se indicó anteriormente. Al llegar al piso especificado, el elevador abrirá las puertas, y se quedará quedará esperando a que se le solicite ir a otro piso, indicando por medio de un mensaje que se presione el piso al que se quiere que el elevador vaya. Si el piso solicitado es el mismo en el que se encuentra el elevador, este esperará 10 segundos, segundos, y cerrará la puerta para después solicitar el piso al que se quiere ir. Se deberá validar que el número de piso indicado no sobrepase los límites límites, es decir, que no sea menor a 0, el cual indicará la planta baja, ni mayor al total del número de pisos del edificio.
Identificando operaciones Puerta abierta : Boolean nombre : String abrir() cerrar() estaAbierta() : Boolean estaCerrada() : Boolean setNombre(nombre : String) getNombre() : String
Pasando del diseño al código /** * @(#)Puerta.java * Clase que simula una puerta en la simulación del elevador El nombre del archivo y * el del de la case Inicio programa: * @author Oscar M. Rodríguez deben ser * @version 1.00 2007/2/19 Comentarios de iguales descripción Declaración de la clase */ Puerta public class Puerta { protected final boolean ABIERTA = true; protected final boolean CERRADA = false; Inicio del programa: protected String nombre = ""; Comentarios de descripción protected boolean abierta; protected final int espera = 200;
Se debe buscar que los atributos de una clase, sólo sean accesibles dentro de la clase. (Ocultamiento de la información)
Pasando del diseño al código public Puerta() { abierta = CERRADA; } public Puerta(boolean opcion){ if (opcion == ABIERTA){ abierta = ABIERTA; } else abierta = CERRADA; } public Puerta(String nombre) { this(); setNombre(nombre); } public Puerta(String nombre, boolean opcion) { this(opcion); setNombre(nombre); } public Puerta(boolean opcion, String nombre) { this(nombre, opcion);
Constructores
Pasando del diseño al código
public void setNombre(String nombre){ this.nombre = nombre; }
public String getNombre(){ return nombre; } public boolean estaAbierta(){ return (abierta); } public boolean estaCerrada(){ return (!abierta); } public void esperar(int espera){ try{ Thread.sleep(espera); } catch (Exception ex){ ex.printStackTrace(); }
Operaciones de acceso a las propiedades o atributos de una clase
Operaciones para acceder al estado de la puerta
Operación para generar un retardo para simular el tiempo que tarda la puerta en abrir o cerrar.
Pasando del diseño al código public void abrir(){ System.out.println("Abriendo puerta "+nombre); int j = 10; while (j > 0) { String cad = ""; for (int i = 0; i < j; i++){ Simula la apertura de la cad += "*"; puerta } System.out.println(cad); esperar(espera); --j; } abierta = ABIERTA; System.out.println("Puerta "+nombre+" abierta"); }
Pasando del diseño al código public void cerrar(){ System.out.println("Cerrando puerta "+nombre); int j = 0; while (j < 10) { String cad = ""; for (int i = j; i > 0; i--){ Simula el cerrado de la cad += "*"; puerta } System.out.println(cad); esperar(espera); ++j; } abierta = CERRADA; System.out.println("Puerta "+nombre+" abierta"); } }
Prueba de la puerta /** * @(#)PruebaPuerta.java * Programa para probar el funcionamiento de la puerta. * * @author * @version 1.00 2007/2/19 */ Programa que ejemplifica el import java.io.*; uso de la clase Puerta. public class PruebaPuerta { static Puerta puerta; /** * Creates a new instance of PruebaPuerta
. */ public PruebaPuerta() { puerta = new Puerta(); puerta.setNombre("Puerta del elevador"); }
Prueba de la puerta public static void abrir(){ if (puerta.estaAbierta()) System.out.println("La puerta ya está abierta"); else puerta.abrir(); } public static void cerrar(){ if (puerta.estaCerrada()) System.out.println("La puerta ya está cerrada"); else puerta.cerrar(); }
Prueba de la puerta
/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here PruebaPuerta prueba = new PruebaPuerta(); char op = ' '; while (op != 's'){ System.out.print("Oprima: \na para abrir puerta, \nc para cerrar, o“ + “\ns para salir del programa: "); try { op = ((new BufferedReader( new InputStreamReader(System.in) )).readLine()).charAt(0); } catch (Exception ex){ ex.printStackTrace(); } if (op == 'a') abrir(); else if (op == 'c') cerrar(); } }
Tarea
Modelar todas las clases del ejercicio en un programa de modelado en UML, incluyendo atributos y métodos. Las clases deberán ser definidas con el mayor nivel de detalle posible