Progettare un sistema di ascensori
Progettazione software per un sistema di ascensori
Come la maggior parte degli sviluppatori ha lavorato su alcuni moduli durante la sua carriera, è difficile per loro capire e implementare un design completo per un software, ma credo che tutti possano imparare!
Nota: Per le domande di intervista su iOS, controlla questo link – Top iOS Interview Questions You Must Prepare In 2018
Pannello: Per favore dimmi il design per un sistema di ascensore.
Tu: Segui il seguente approccio per identificare se il pannello è interessato al design delle classi e alla sua relazione o interessato al backend come sembra Questa è una domanda piuttosto ampia.
Dalla prospettiva dello sviluppatore di applicazioni, dovremmo dire le classi e la sua relazione, diagrammi di classe &Flusso di sequenza. Conosciamo tutti la scarsità di tempo durante una discussione tecnica e alcune volte è difficile capire cosa l’altro ragazzo si aspetta da noi.
In prospettiva generale, è possibile che il tuo pannello sia interessato alla progettazione del backend, quindi devi chiarire con lui, cosa si aspettano da te?
Un’istantanea del sistema di controllo dell’ascensore
Il nostro ascensore ha la funzione di base che hanno tutti i sistemi di ascensore, come muoversi su e giù, aprire e chiudere le porte, e naturalmente, raccogliere i passeggeri.
Si suppone che l’ascensore sia usato in un edificio con piani numerati da 1 a MaxFloor, dove il primo piano è la hall. Ci sono dei pulsanti di chiamata nella cabina corrispondente ad ogni piano. Per ogni piano, eccetto l’ultimo piano e l’atrio, ci sono due pulsanti di chiamata di corridoio che i passeggeri possono chiamare per salire e scendere. C’è solo un pulsante di chiamata per scendere all’ultimo piano e un pulsante di chiamata per salire nell’atrio. Quando l’auto si ferma ad un piano, le porte vengono aperte e la lanterna che indica la direzione corrente dell’auto si illumina in modo che i passeggeri possano conoscere la direzione corrente dell’auto. L’auto si muove velocemente tra i piani, ma dovrebbe essere in grado di rallentare abbastanza presto per fermarsi al piano desiderato. Al fine di certificare la sicurezza del sistema, il freno di emergenza sarà attivato e l’auto sarà costretta a fermarsi in qualsiasi condizione non sicura.
Tutti i sistemi interagiscono con attori umani o automatizzati che usano il sistema per qualche scopo, e sia gli umani che gli attori si aspettano che il sistema si comporti in modi prevedibili.
Ci sono sette casi d’uso basati sui requisiti attuali del sistema ascensore, come mostrato nella Figura 1:
- Process Car/Lift Calls: Questo caso d’uso include diversi scenari, che saranno descritti in dettaglio nelle sezioni successive di questo documento. Questi scenari includono che l’ascensore riceve le chiamate di ascensore/auto dai passeggeri, accende o spegne la luce dei pulsanti di chiamata di ascensore/auto, aggiorna il record delle chiamate di ascensore/auto memorizzato nelle parti di controllo del sistema, ecc.
- Process Hall Calls: Simile all’elaborazione delle chiamate all’ascensore/auto, questo caso d’uso include che l’ascensore riceve le chiamate di corridoio dai passeggeri, accende o spegne la luce dei pulsanti di chiamata di corridoio, aggiorna il record delle chiamate di corridoio nelle parti di controllo del sistema, ecc.
- Spostare/Fermare la cabina: La funzione principale di un ascensore includerà il cambiamento della velocità di guida, come prendere la decisione di fermarsi, e le direzioni di guida della macchina.
- Indicazione della direzione di movimento: L’ascensore dovrebbe avere questo meccanismo per permettere ai passeggeri di conoscere l’attuale direzione di marcia della macchina in modo che il passeggero possa decidere se entrare nella macchina o no.
- Indicare la posizione della macchina: Allo stesso modo, l’ascensore dovrebbe far sapere ai passeggeri se il suo piano di destinazione è stato raggiunto in modo che il passeggero possa decidere di lasciare la cabina.
- Aprire/chiudere le porte: L’ascensore dovrebbe essere in grado di aprire e chiudere le porte per permettere ai passeggeri di entrare e uscire dalla cabina. Le aree funzionali di questo caso d’uso dovrebbero anche permettere ai passeggeri di fare inversioni di porta quando le porte si stanno chiudendo e il passeggero vuole salire in macchina.
- Azionare il freno di emergenza: C’è un meccanismo di sicurezza all’interno dell’auto per assicurarsi che uno stato non sicuro non sia generato transitoriamente.
Con questo molto di comprensione del sistema dell’ascensore, possiamo iniziare a identificare le classi necessarie per progettare un sistema.
Identificare le classi/oggetti:
- ElevatorControl: L’oggetto di controllo centrale nel sistema dell’ascensore. ElevatorControl comunica e controlla tutti gli altri oggetti nel sistema.
- Porta: Ci sono due porte nel sistema, l’oggetto “dio” – ElevatorControl – comanda l’apertura e la chiusura delle porte.
- Car/Lift: L’auto viene controllata per muoversi su e giù (in diverse velocità), per fare fermate ai piani quando necessario.
- Button: La classe ElevatorControl controlla anche la classe Button, che generalizza ulteriormente due sottoclassi CarCallButton e HallCallButton. L’oggetto di controllo comunica con gli oggetti Button, ottiene l’informazione se un pulsante è premuto e a sua volta controlla l’illuminazione delle luci Button.
- Indicatore: Ci sono due tipi di indicatori nel sistema, il CarPositionIndicator e il CarDirectionIndicator (cioè il CarLantern). Gli indicatori sono controllati per mostrare le informazioni sulla posizione corrente e la direzione di movimento della macchina.
- Sicurezza: Ogni volta che si verifica un’emergenza, ElevatorControl comanda le classi Safety
Controller:
- DoorControl controlla l’azione del DoorMotor. DoorMotor può essere comandato per aprire, chiudere, o fare un’inversione di porta.
- DriveControl controlla il Drive dell’ascensore, che agisce come il motore principale che muove la macchina su e giù, e si ferma ai piani quando necessario.
- LanternControl sono nel numero di due, CarPositionIndicator e il CarDirectionIndicator.
- HallButtonControl esiste in coppia su ogni piano, dove uno controlla il Up HallCallButton e l’altro Down. Il HallButtonControl accetta i controlli dei pulsanti di chiamata della sala e dà un feedback alle luci di chiamata della sala.
- CarButtonControl è uno per ogni piano e tutti si trovano nell’ascensore/auto. Il CarButtonControl accetta le chiamate CarCallButton e si occupa di accendere/spegnere le corrispondenti luci di chiamata dell’ascensore/auto.
- CarPositionIndicator dà valore al CarPositionIndicator in modo che i passeggeri possano conoscere la posizione attuale dell’ascensore/auto.
- Dispatcher non controlla i componenti effettivi dell’ascensore, ma è importante nel sistema software. C’è un Dispatcher per ogni ascensore/auto, la cui funzione principale è quella di calcolare la direzione di movimento e la destinazione dell’ascensore/auto, oltre a mantenere il tempo di apertura delle porte. Il Dispatcher interagisce con quasi tutti gli oggetti di controllo nel sistema eccetto LanternControl.
Spero che tutto stia andando bene fino ad ora, cerchiamo di capire tutto con alcuni diagrammi di sequenza.
Flusso di sequenza
Può essere difficile da spiegare verbalmente ma se si capisce chiaramente come funzionerà, si possono disegnare alcuni diagrammi di sequenza e provare a spiegare il flusso con alcuni esempi in parallelo.
- Chiamate di corridoio di processo: Ci sono due scenari per questo caso d’uso:
1.1 l’ascensore si muove verso la stessa direzione della destinazione del passeggero.
1.2 l’ascensore si muove verso la direzione opposta alla destinazione del passeggero.
2. Spostare/Fermare l’auto:
3. Indicare la direzione di movimento:
4. Azionare il freno di emergenza: Ci sono cinque scenari per questo caso d’uso:
1. Se l’auto è comandata per fermarsi ma non si ferma al piano desiderato, il freno di emergenza sarà attivato.
2. Se l’auto è comandata per muoversi ma non si muove, il freno di emergenza sarà attivato.
3. Se le porte sono comandate per aprire quando l’auto si ferma a un piano, ma le porte non si aprono, il freno di emergenza sarà attivato.
4. Se le porte si aprono quando l’auto è in movimento, il freno di emergenza sarà attivato.
5. Se l’auto continua a muoversi quando viene raggiunto il limite della via di sollevamento, il freno d’emergenza scatta.
Vi mostrerò solo un diagramma di sequenza per il caso 5.
Sto aspettando che la maggior parte delle cose diventino immagini nella vostra mente e facili da ricordare e spiegare. Per la progettazione del backend, si prega di seguire la serie System Design
Spero che vi piaccia la spiegazione. Per altre domande sul design, per favore aspetta e seguimi.