Design a Elevator System
Desenho de software para um sistema de elevador
Como a maioria dos desenvolvedores trabalhou em alguns módulos ao longo de sua carreira, é difícil para eles entenderem e implementarem um design completo para um software, mas acredito que todos podem aprender!!
Nota: Para perguntas de entrevista iOS , veja este link – Top iOS Interview Questions You Must Prepare In 2018
Panel: Por favor, diga-me o design para um sistema de elevador.
Você: Siga a abordagem abaixo para identificar se o painel está interessado no design da classe e sua relação ou interessado em backend como parece Esta é uma questão bastante ampla.
Da perspectiva do desenvolvedor da aplicação, devemos estar dizendo as classes e sua relação, diagramas de classes & Fluxo de sequência. Todos nós sabemos a escassez de tempo durante uma discussão técnica e, em algum momento, é difícil o que outro cara está esperando de nós.
Em perspectiva geral, pode ser possível que seu painel esteja interessado no desenho de backend, então você precisa esclarecer com ele, o que eles estão esperando de você?
Um instantâneo do sistema de controlo do elevador
O nosso elevador tem a função básica que todos os sistemas de elevador têm, como subir e descer, abrir e fechar portas e, claro, levantar passageiros.
O elevador é suposto ser usado num edifício com andares numerados de 1 a MaxFloor, onde o primeiro andar é o lobby. Existem botões de chamada de carro(Elevador) no carro correspondentes a cada andar. Para cada andar, exceto para o andar superior e o lobby, há dois botões de chamada do corredor para os passageiros chamarem para subir e descer. Há apenas um botão de chamada para o último andar e um botão de chamada para o corredor superior no átrio. Quando o carro pára num andar, as portas são abertas e a lanterna do carro indicando a direção atual do carro é iluminada para que os passageiros possam conhecer a direção atual do carro. O carro se move rapidamente entre andares, mas deve ser capaz de desacelerar o tempo suficiente para parar em um andar desejado. A fim de certificar a segurança do sistema, o freio de emergência será acionado e o carro será forçado a parar em quaisquer condições inseguras.
Todos os sistemas interagem com os atores humanos ou automatizados que usam o sistema para algum propósito, e tanto os humanos quanto os atores esperam que o sistema se comporte de forma previsível.
Existem sete casos de uso baseados na necessidade atual do sistema de elevador, como mostrado na Figura 1:
- Chamadas de carro de processo/elevador: Este caso de uso inclui vários cenários, que serão descritos em detalhes em seções posteriores deste trabalho. Estes cenários incluem que o elevador recebe chamadas de elevador/elevador dos passageiros, acende ou apaga a luz dos botões de chamadas de elevador/elevador, atualiza o registro de chamadas de elevador/elevador armazenadas no sistema de controle de peças, etc.
- Processar Chamadas de Salão: Similar ao processamento de chamadas de elevador/autocarro, este caso de uso inclui que o elevador recebe chamadas de corredor dos passageiros, acende ou apaga a luz dos botões de chamadas de corredor, atualiza o registro de chamadas de corredor no sistema de controle de peças, etc.
- Move/Stop the Car: A principal função de um elevador incluirá a mudança da velocidade de condução, como tomar a decisão de parar e as direcções de condução da cabina.
- Indicando a direcção de deslocação: O elevador deve ter este mecanismo para que os passageiros saibam a direcção de deslocação actual da cabina, de modo a que o passageiro possa decidir se entra ou não na cabina.
- Indicando a posição da cabina: Da mesma forma, o elevador deve informar os passageiros se o seu piso de destino é alcançado, para que o passageiro possa decidir deixar a cabina.
- Abrir/Fechar as Portas: O elevador deve ser capaz de abrir e fechar as portas para que os passageiros possam entrar e sair da cabina. As áreas funcionais deste caso de utilização devem também permitir que os passageiros façam inversão de marcha quando as portas estão a fechar e o passageiro quer entrar na cabina.
- Travão de Emergência do Gatilho: Existe um mecanismo de segurança dentro da cabina para garantir que um estado inseguro não é gerado de forma transitória.
Com este grande conhecimento do sistema de elevador, podemos começar a identificar as classes necessárias para desenhar um sistema.
Identificando Classes/Objectos:
- ElevatorControl: O objeto de controle central no sistema de elevadores. ElevatorControl comunica e controla todos os outros objetos do sistema.
- Porta: Há duas portas no sistema, o objeto “deus” – o ElevatorControl – comanda as portas para abrir e fechar.
- Carro/elevador: O carro está sendo controlado para subir e descer (em velocidades diferentes), para fazer paradas nos pisos quando necessário.
- Botão: A classe ElevatorControl também controla a classe do botão, que generaliza ainda mais duas subclasses CarCallButton e HallCallButton. O objeto de controle comunica com os objetos Botão, obtém a informação se um botão é pressionado e por sua vez controla a iluminação das luzes do Botão.
- Indicador: Existem dois tipos de indicadores no sistema, o CarPositionIndicator e o CarDirectionIndicator (ou seja, o CarLantern). Os indicadores são controlados para mostrar as informações sobre a posição atual e direção do carro.
- Segurança: Sempre que acontece uma emergência, o ElevatorControl comanda a Segurança
Classes do Controlador:
- DoorControl controla a acção do DoorMotor. DoorMotor pode ser comandado para abrir, fechar ou fazer uma inversão de porta.
- DriveControl controla o Drive do elevador, que atua como o motor principal movendo a cabina para cima e para baixo, e parando nos pisos quando necessário.
- LanternControl estão no número de dois, CarPositionIndicator e o CarDirectionIndicator.
- HallButtonControl existe em par em cada piso, onde um controla o HallCallButton para cima e o outro para baixo. O HallButtonControl aceita o botão de chamada do hall pressiona os controles, bem como dá feedback às luzes de chamada do hall.
- CarButtonControl é um para cada andar e todos se localizam no elevador/carro. O CarButtonControl aceita chamadas de CarCallButton e é responsável por ligar/desligar as luzes de chamada do elevador/carro correspondente.
- CarPositionIndicator dá valor ao CarPositionIndicator para que os passageiros possam saber a posição atual do elevador/carro.
- Dispatcher não controla os componentes reais do elevador, mas é importante no sistema de software. Existe um Despachador para cada elevador/carro, cuja função principal é calcular a direcção e o destino do elevador/carro, bem como manter o tempo de abertura das portas. O Despachante interage com quase todos os objetos de controle do sistema, exceto LanternControl.
Espera que tudo esteja indo bem até agora, vamos entender tudo com alguns diagramas de seqüência.
Fluxo de sequência
Pode ser difícil explicar verbalmente, mas se você entender claramente como vai funcionar, você pode desenhar alguns diagramas de sequência e tentar explicar o fluxo com alguns exemplos em paralelo.
- Chamadas de sala de processo : Existem dois cenários para este caso de uso:
1.1 o elevador está se movendo na mesma direção que o destino do passageiro.
1.2 o elevador está se movendo na direção oposta ao destino do passageiro.
2. Mover/Pararar o carro:
3. Indique a direção de deslocamento:
>4. Freio de emergência de acionamento: Há cinco cenários para este caso de uso:
1. Se o carro é comandado para parar mas não pára no piso desejado, o freio de emergência será acionado.
2. Se o carro é comandado para se mover mas não se move, o freio de emergência será acionado.
3. Se as portas forem comandadas para abrir quando o carro pára no chão, mas as portas não abrem, o travão de emergência será accionado.
4. Se as portas abrirem quando o carro está em movimento, o travão de emergência será accionado.
5. Se o carro continuar em movimento quando o limite do caminho de elevação for atingido, o travão de emergência será accionado.
I mostrará apenas um diagrama de sequência para o caso 5.
Eu estou esperando que a maioria das coisas se tornará imagem na sua mente e fácil de lembrar e explicar. Para o design do backend, por favor siga a série System Design
Espere que você goste da explicação. Para mais perguntas sobre design , por favor aguarde e siga-me.