Diseñar un sistema de ascensor
.
Diseño de software para un sistema de ascensor
Como la mayoría de los desarrolladores han trabajado en algunos módulos a lo largo de su carrera, ¡es difícil para ellos entender e implementar un diseño completo para un software, pero creo que todo el mundo puede aprender!
Nota: Para las preguntas de la entrevista de iOS, revisa este enlace – Top iOS Interview Questions You Must Prepare In 2018
Panel: Por favor, dígame el diseño para un sistema de ascensor.
Usted: Siga el siguiente enfoque para identificar si el panel está interesado en el diseño de la clase y su relación o está interesado en el backend como parece Esta es una pregunta bastante amplia.
Desde la perspectiva del desarrollador de aplicaciones, deberíamos estar diciendo las clases y su relación, diagramas de clase & Flujo de secuencia. Todos sabemos la escasez de tiempo durante una discusión técnica y algunas veces su difícil lo que otro tipo está esperando de nosotros.
En perspectiva general, puede ser posible que su panel está interesado en el diseño de backend por lo que necesita para aclarar con él, ¿qué están esperando de ti?
Una instantánea del sistema de control del ascensor
Nuestro ascensor tiene la función básica que tienen todos los sistemas de ascensores, como subir y bajar, abrir y cerrar puertas y, por supuesto, recoger pasajeros.
Se supone que el ascensor se utiliza en un edificio que tiene pisos numerados del 1 al MaxFloor, donde el primer piso es el vestíbulo. Hay botones de llamada de cabina(Ascensor) en la cabina correspondiente a cada piso. Para cada planta, excepto para la planta superior y el vestíbulo, hay dos botones de llamada de pasillo para que los pasajeros llamen para subir y bajar. Sólo hay un botón de llamada de bajada en la planta superior y un botón de llamada de subida en el vestíbulo. Cuando el vagón se detiene en una planta, se abren las puertas y se ilumina la linterna de la cabina que indica la dirección actual del vagón para que los pasajeros puedan conocer la dirección actual del movimiento del vagón. El coche se desplaza rápidamente entre plantas, pero debe ser capaz de frenar con la suficiente antelación para detenerse en la planta deseada. Para certificar la seguridad del sistema, el freno de emergencia se activará y el coche se verá obligado a detenerse en cualquier condición insegura.
Todos los sistemas interactúan con actores humanos o automatizados que utilizan el sistema para algún propósito, y tanto los humanos como los actores esperan que el sistema se comporte de forma predecible.
Hay siete casos de uso basados en los requisitos actuales del sistema de ascensores, como se muestra en la Figura 1:
- Procesar llamadas de cabina/elevador: Este caso de uso incluye varios escenarios, que se describirán en detalle en secciones posteriores de este documento. Estos escenarios incluyen que el ascensor reciba llamadas de ascensor/coche de los pasajeros, encienda o apague la luz de los botones de llamada de ascensor/coche, actualice el registro de llamadas de ascensor/coche almacenado en las partes de control del sistema, etc.
- Procesar llamadas de pasillo: De forma similar al procesamiento de llamadas de ascensor/coche, este caso de uso incluye que el ascensor recibe las llamadas de pasillo de los pasajeros, enciende o apaga la luz de los botones de llamada de pasillo, actualiza el registro de llamadas de pasillo en las partes que controlan el sistema, etc.
- Mover/parar la cabina: La función principal de un ascensor incluirá el cambio de velocidad de conducción, cómo tomar la decisión de parar, y las direcciones de conducción de la cabina.
- Indicación de la dirección de movimiento: El ascensor debe tener este mecanismo para que los pasajeros conozcan la dirección actual de la cabina, de manera que el pasajero pueda decidir si entra o no en la cabina.
- Indicación de la posición de la cabina: Del mismo modo, el ascensor debe permitir a los pasajeros saber si su planta de destino ha sido alcanzada para que el pasajero pueda decidir abandonar la cabina.
- Abrir/Cerrar las Puertas: El ascensor debe ser capaz de abrir y cerrar las puertas para que los pasajeros entren y salgan de la cabina. Las áreas funcionales de este caso de uso también deben permitir a los pasajeros hacer retroceder las puertas cuando éstas se están cerrando y el pasajero quiere entrar en la cabina.
- Activar el freno de emergencia: Hay un mecanismo de seguridad dentro de la cabina para asegurarse de que un estado inseguro no se genera transitoriamente.
Con esta cantidad de comprensión del sistema de ascensores, podemos empezar a identificar las clases que se requieren para diseñar un sistema.
Identificación de Clases/Objetos:
- ElevatorControl: El objeto de control central en el sistema de ascensores. ElevatorControl se comunica y controla todos los demás objetos del sistema.
- Door: Hay dos puertas en el sistema, el objeto «dios» – el ElevatorControl – ordena que las puertas se abran y se cierren.
- Car/Lift: La cabina está siendo controlada para subir y bajar (en diferentes velocidades), para hacer paradas en los pisos cuando sea necesario.
- Botón: La clase ElevatorControl también controla la clase Button, que además generaliza dos subclases CarCallButton y HallCallButton. El objeto de control se comunica con los objetos Button, obtiene la información de si un botón está pulsado y a su vez controla la iluminación de las luces del Button.
- Indicador: Hay dos tipos de indicadores en el sistema, el CarPositionIndicator y el CarDirectionIndicator (es decir, el CarLantern). Los indicadores se controlan para mostrar la información sobre la posición actual y la dirección de movimiento de la cabina.
- Seguridad: Cuando se produce una emergencia, el ElevatorControl ordena las clases Safety
Controller:
- DoorControl controla la acción de DoorMotor. DoorMotor puede ser comandado para abrir, cerrar o hacer una inversión de la puerta.
- DriveControl controla el Drive del ascensor, que actúa como el motor principal que mueve la cabina hacia arriba y hacia abajo, y se detiene en los pisos cuando es necesario.
- LanternControl están en el número de dos, CarPositionIndicator y el CarDirectionIndicator.
- HallButtonControl existe en par en cada piso, donde uno controla el Up HallCallButton y el otro Down. El HallButtonControl acepta los controles de las pulsaciones de los botones de llamada del vestíbulo, así como la retroalimentación de las luces de llamada del vestíbulo.
- CarButtonControl es uno para cada piso y todos se ubican en el ascensor / cabina. El CarButtonControl acepta las llamadas del CarCallButton y se encarga de encender/apagar las luces de llamada del ascensor/cabina correspondientes.
- CarPositionIndicator da valor al CarPositionIndicator para que los pasajeros puedan conocer la posición actual del ascensor/cabina.
- Dispatcher no controla los componentes reales del ascensor, pero es importante en el sistema de software. Hay un Dispatcher para cada ascensor/cabina, cuya función principal es calcular la dirección de movimiento y el destino del ascensor/cabina, así como mantener el tiempo de apertura de las puertas. El Dispatcher interactúa con casi todos los objetos de control en el sistema, a excepción de LanternControl.
Si todo va bien hasta ahora, vamos a entender todo con algunos de los diagramas de secuencia.
Flujo de secuencia
Puede ser difícil de explicar verbalmente, pero si usted entiende claramente cómo va a funcionar, puede dibujar algunos diagramas de secuencia y tratar de explicar el flujo con algunos ejemplos en paralelo.
- Llamadas de sala de proceso : Hay dos escenarios para este caso de uso:
1.1 el ascensor se mueve hacia la misma dirección que el destino del pasajero.
1.2 el ascensor se mueve hacia la dirección opuesta al destino del pasajero.
2. Mover/parar el coche:
3. Indicar la dirección de movimiento:
4. Activar el freno de emergencia : Hay cinco escenarios para este caso de uso:
1. Si se ordena que el coche se detenga pero no se detiene en un piso deseado, se activará el freno de emergencia.
2. Si se ordena que el coche se mueva pero no se mueve, se activará el freno de emergencia.
3. Si se ordena la apertura de las puertas cuando el coche se detiene en un piso, pero las puertas no se abren, se activará el freno de emergencia.
4. Si las puertas se abren cuando el coche está en movimiento, se activará el freno de emergencia.
5. Si el coche sigue avanzando cuando se alcanza el límite de la vía de elevación, se activará el freno de emergencia.
Sólo mostraré un diagrama de secuencia para el caso 5.
Espero que la mayoría de las cosas se conviertan en una imagen en su mente y sean fáciles de recordar así como de explicar. Para el diseño del backend, por favor siga la serie de diseño del sistema
Espero que le guste la explicación. Para más preguntas de diseño, por favor espere y sígame.