Modelização de um elevador por meio de análise orientada a objetos e projeto [fechado]

Há um conjunto de perguntas que parecem ser comumente usadas em entrevistas e aulas quando se trata de design e análise orientada a objetos. Este é um deles; infelizmente, meu professor de OOP na faculdade nunca deu uma resposta a isso, e então eu tenho estado me perguntando.

o problema é o seguinte: desenha um conjunto básico de objectos/métodos a utilizar para simular um banco de elevadores. Quais são os objetos e seus atributos/métodos?

[1] para o bem da discussão, vamos suponha que o nosso edifício tem vinte andares; o andar inferior é o lobby, e o segundo andar liga-se ao Parque de estacionamento (portanto, as pessoas vão entrar/sair do edifício no andar inferior ou no segundo andar). Há um banco de elevador que atende todos os andares; há três poços de elevador no banco de elevador, e um elevador por eixo.

Qual seria a maneira correta de modelar isso em um modelo orientado a objetos?

Author: Saurav Sahu, 2009-01-29

7 answers

Primeiro há uma aula de elevador. Tem uma direcção (para cima, para baixo, para baixo, para cima, para baixo, para manutenção), um piso actual e uma lista de pedidos de piso ordenados na direcção. Recebe um pedido deste elevador. Então há um banco. Contém os elevadores e recebe os pedidos dos andares. Estes são programados para todos os elevadores ativos (não em manutenção).

A programação será do tipo:

    Se estiver disponível, escolha um elevador de pé para isto. andar. Senão, escolhe um elevador que se mova para este andar. Senão, escolhe um elevador num outro andar. Senão escolhe o elevador com a carga mais baixa.
Cada elevador tem um conjunto de Estados.
    Manutenção: o elevador não reage a sinais externos (apenas aos seus próprios sinais). O elevador está fixo num chão. Se receber uma chamada. E o elevador está naquele andar, as portas abrem-se. Se estiver noutro andar, move-se para dentro. sentido. O elevador sobe. Sempre que chega a um andar, verifica se precisa de parar. Se assim for, pára e abre as portas. Ele espera por um certo tempo e fecha a porta (a menos que alguém se mova através deles. Em seguida, retira a palavra da lista de Pedidos e verifica se há outro pedido. Se assim for, o elevador começa a mover-se novamente. Senão, entra no estado. Para baixo: para cima, mas para trás.

Existem sinais:

    Alarme. O elevador pára. E se estiver num andar, as portas abrem, a lista de Pedidos é limpa, os pedidos são transferidos de volta para o banco. Porta aberta. Abre as portas se o elevador estiver no chão e não se mexer. A porta fecha-se. Fecharam a porta se estiverem abertas.

Editar: Alguns elevadores não começam no fundo / no início. no caso de arranha-céus.

[[1]}Min_floor & max_floor são dois atributos adicionais para o elevador.
 148
Author: Toon Krijthe, 2016-07-19 18:16:08
Donald Knuth é a arte da programação computacional Vol.1 tem uma demonstração de elevador e as estruturas de dados. Knuth apresenta uma discussão e um programa muito minuciosos.

Knuth (1997) "Information Structures", The Art of Computer Programming Vol. 1 páginas 302-308

 17
Author: vine'th, 2011-08-01 08:18:55
Já vi muitas variantes deste problema. Uma das principais diferenças (que determina a dificuldade) é se existe alguma tentativa centralizada de ter um "sistema inteligente e eficiente" que teria balanceamento de carga (por exemplo, enviar mais elevadores ociosos para lobby de manhã). Se for esse o caso, o projeto incluirá um subsistema inteiro com design realmente divertido. Um design completo é obviamente demasiado para apresentar aqui e há muitos altenatives. A amplitude também não é clara. Numa entrevista, vão tentar descobrir como pensarias. No entanto, estas são algumas das coisas que você precisa:
  1. Representação do controlador central (assumindo que existe um).

  2. Representações dos elevadores

  3. Representações das unidades de interface do elevador (estas podem ser diferentes de elevador para elevador). Obviamente também os botões de chamada em todos os andares, etc.

  4. Representações das setas ou indicadores em cada andar (quase uma "vista" do modelo do elevador).

  5. Representação de um ser humano e carga (pode ser importante para factoring em cargas máximas)

  6. Representação do edifício (em alguns casos, como certos pisos podem ser bloqueados por vezes, etc.)

 17
Author: Uri, 2013-06-13 00:32:05

Ver:

Lu Luo, A UML Documentation for a Elevator System
Distributed Embedded Systems, Fall 2000
Ph.D. Project Report
Carneghie Mellon University

Relação

 7
Author: Arun, 2012-12-05 17:04:15
 4
Author: some_other_guy, 2012-09-17 10:30:08
A coisa tem de ser considerada enquanto projectamos o sistema do elevador.
Elevator
Floor/Location Identifier
Number of steps
Rotation speed
Daterange
InstallationDate
MaintainenceDate
Department Identifier
AllowedWeight
Detail / Description
Poison Ratio (Statistics)
Start
Stop
SetDirection
SetRotationSpeed
EmergencyStop = Stop + Alert
EmergencyAccidentSenser Handler
Cada botão de pressão resulta num pedido de elevador que tem de ser atendido. Cada um desses pedidos é rastreado em um lugar global O número de elevadores no edifício será determinado pelo utilizador. O edifício conterá um número fixo de pisos. O número de passageiros que podem caber no elevador será corrigido. Os passageiros serão contados quando saírem do elevador. Piso de destino. O piso de destino será determinado usando um intervalo "aleatório" Poisson. Quando todos os passageiros do elevador chegarem aos pisos de destino, o elevador regressará ao átrio para recolher mais passageiros.
 2
Author: user2603625, 2013-07-21 06:30:22
A principal preocupação é como notificar o elevador que precisa de subir ou descer. e também se você vai ter uma classe centralizada para controlar esse comportamento e como você poderia distribuir o controle. Parece que pode ser muito simples ou muito complicado. Se não tomarmos a concorrência ou o tempo para um elevador chegar a um lugar, então parece que vai ser simples, uma vez que só precisamos verificar os estados do elevador, como ele está se movendo para cima ou para baixo, ou parado. Mas se fizermos o elevador implementar Runnable, e constantemente verificar e sincronizar uma fila (linkedList). Uma classe de controlador irá atribuir qual andar para ir na fila. Quando a fila estiver vazia, o método run() irá esperar (fila.espera ()), quando um piso é atribuído a este elevador, ele vai chamar a fila.notify() to wake up the run() method, and run () method will call goToFloor (queue.pop()). Isto tornará o problema demasiado complicado. Tentei escrever no papel, mas não penses. obra. Parece que realmente não precisamos levar em conta a questão da concorrência ou do tempo aqui, mas precisamos de alguma forma usar uma fila para distribuir o controle. Alguma sugestão?
 2
Author: user3216886, 2014-02-11 18:13:08