Design a Elevator System
.
Proiectarea de software pentru un sistem de ascensoare
Pentru că majoritatea dezvoltatorilor au lucrat la unele module de-a lungul carierei lor, le este greu să înțeleagă și să implementeze o proiectare completă pentru un software, dar cred că toată lumea poate învăța !!
Nota: Pentru întrebările de interviu pentru iOS , consultați acest link – Topul întrebărilor de interviu pentru iOS pe care trebuie să le pregătiți în 2018
Panel: Vă rog să-mi spuneți designul pentru un sistem de ascensor.
Voi: Urmați abordarea de mai jos pentru a identifica dacă panelul este interesat de designul clasei și de relația sa sau este interesat de backend, așa cum pare Aceasta este o întrebare destul de largă.
Din perspectiva dezvoltatorului de aplicații, ar trebui să spunem clasele și relația sa, diagramele de clasă & Fluxul secvenței. Cunoaștem cu toții lipsa de timp în timpul unei discuții tehnice și, uneori, este dificil ce așteaptă celălalt tip de la noi.
Dintr-o perspectivă generală, este posibil ca panoul dvs. să fie interesat de proiectarea backend, așa că trebuie să clarificați cu el, ce așteaptă de la dvs.
Un instantaneu al sistemului de control al ascensorului
Ascensorul nostru are funcția de bază pe care o au toate sistemele de ascensoare, cum ar fi deplasarea în sus și în jos, deschiderea și închiderea ușilor și, bineînțeles, preluarea pasagerilor.
Ascensorul ar trebui să fie utilizat într-o clădire care are etajele numerotate de la 1 la MaxFloor, unde primul etaj este holul. În cabină există butoane de apelare a cabinei(Lift) corespunzătoare fiecărui etaj. Pentru fiecare etaj, cu excepția ultimului etaj și a holului, există două butoane de apelare a sălii pe care pasagerii le pot apela pentru a urca și a coborî. La ultimul etaj există un singur buton de apelare a sălii de coborâre, iar în hol există un buton de apelare a sălii de urcare. Atunci când vagonul se oprește la un etaj, ușile se deschid și se aprinde felinarul care indică direcția în care se îndreaptă vagonul, astfel încât pasagerii pot afla care este direcția curentă de deplasare a vagonului. Mașina se deplasează rapid între etaje, dar ar trebui să fie capabilă să încetinească suficient de devreme pentru a se opri la etajul dorit. Pentru a certifica siguranța sistemului, frâna de urgență va fi declanșată și mașina va fi forțată să se oprească în orice condiții nesigure.
Toate sistemele interacționează cu actori umani sau automatizați care folosesc sistemul în anumite scopuri și atât oamenii cât și actorii se așteaptă ca sistemul să se comporte în moduri previzibile.
Există șapte cazuri de utilizare bazate pe cerința actuală a sistemului de ascensoare, așa cum se arată în figura 1:
- Procesarea apelurilor la cabină/elevator: Acest caz de utilizare include mai multe scenarii, care vor fi descrise în detaliu în secțiunile ulterioare ale acestui document. Aceste scenarii includ faptul că liftul primește apeluri la lift/cabină de la pasageri, aprinde sau stinge lumina butoanelor de apelare a liftului/cabinei, actualizează înregistrarea apelurilor la lift/cabină stocate în părțile de control ale sistemului etc.
- Procesarea apelurilor în hol: Similar cu procesarea apelurilor de lift/cabină, acest caz de utilizare include faptul că liftul primește apeluri de sală de la pasageri, aprinde sau stinge lumina butoanelor de apel de sală, actualizează înregistrarea apelurilor de sală stocate în părțile de control ale sistemului etc.
- Deplasarea/oprirea cabinei: Funcția principală a unui ascensor va include schimbarea vitezei de deplasare, modul în care se ia decizia de oprire și direcțiile de deplasare a cabinei.
- Indicarea direcției de deplasare: Liftul ar trebui să aibă acest mecanism pentru a permite pasagerilor să cunoască direcția curentă de deplasare a cabinei, astfel încât pasagerul să poată decide dacă să intre sau nu în cabină.
- Indicarea poziției cabinei: În mod similar, liftul ar trebui să permită pasagerilor să știe dacă s-a ajuns la etajul său de destinație, astfel încât pasagerul să poată decide să părăsească cabina.
- Deschiderea/închiderea ușilor: Liftul ar trebui să fie capabil să deschidă și să închidă ușile pentru ca pasagerii să poată intra și ieși din cabină. Domeniile funcționale ale acestui caz de utilizare ar trebui, de asemenea, să permită pasagerilor să facă inversarea ușilor atunci când ușile se închid și pasagerul dorește să intre în cabină.
- Declanșarea frânei de urgență: Există un mecanism de siguranță în interiorul mașinii pentru a se asigura că o stare nesigură nu este generată în mod tranzitoriu.
Cu această înțelegere a sistemului de lifturi, putem începe să identificăm clasele necesare pentru a proiecta un sistem.
Identificarea claselor/obiectelor:
- ElevatorControl: Obiectul central de control în sistemul de ascensoare. ElevatorControl comunică și controlează toate celelalte obiecte din sistem.
- Ușă: Există două uși în sistem, obiectul „zeu” – ElevatorControl – comandă ușile să se deschidă și să se închidă.
- Car/Lift: Mașina este comandată să se deplaseze în sus și în jos (în diferite viteze), să facă opriri la etaje atunci când este necesar.
- Button: Clasa ElevatorControl controlează, de asemenea, clasa buton, care generalizează în continuare două subclase CarCallButton și HallCallButton. Obiectul de control comunică cu obiectele Button, obține informația dacă un buton este apăsat și, la rândul său, controlează iluminarea luminilor Button.
- Indicator: Există două tipuri de indicatori în sistem, CarPositionIndicator și CarDirectionIndicator (adică CarLantern). Indicatoarele sunt controlate pentru a afișa informații despre poziția curentă și direcția de deplasare a automobilului.
- Siguranță: Ori de câte ori apare o urgență, ElevatorControl comandă clasele Safety
Controller:
- DoorControl controlează acțiunea DoorMotor. DoorMotor poate fi comandat să se deschidă, să se închidă sau să facă o inversare a ușii.
- DriveControl controlează Drive-ul liftului, care acționează ca motorul principal care mișcă cabina în sus și în jos și se oprește la etaje atunci când este necesar.
- LanternControl sunt în număr de două, CarPositionIndicator și CarDirectionIndicator.
- HallButtonControl există în pereche la fiecare etaj, unde unul controlează butonul HallCallButton Up și celălalt Down. HallButtonControl acceptă comenzile de apăsare a butoanelor de apelare a sălii, precum și oferă feedback pentru luminile de apelare a sălii.
- CarButtonControl există câte unul pentru fiecare etaj și toate se află în lift/cabină. CarButtonControl acceptă apeluri ale butonului CarCallButton și este responsabil de aprinderea/dezactivarea luminilor de apel corespunzătoare liftului/cabinei.
- CarPositionIndicator dă valoare indicatorului CarPositionIndicator astfel încât pasagerii să poată cunoaște poziția curentă a liftului/cabinei.
- Dispecerul nu controlează componentele reale ale ascensorului, dar este important în sistemul software. Există un Dispatcher pentru fiecare ascensor/cabină, a cărui funcție principală este de a calcula direcția de deplasare și destinația țintă pentru ascensor/cabină, precum și de a menține timpul de deschidere a ușilor. Dispatcherul interacționează cu aproape toate obiectele de control din sistem, cu excepția LanternControl.
Sperăm că totul merge bine până acum, să înțelegem totul cu ajutorul unor diagrame de secvență.
Fluxul de secvențe
Poate fi greu de explicat verbal, dar dacă înțelegeți clar cum va funcționa, puteți desena câteva diagrame de secvență și încercați să explicați fluxul cu câteva exemple în paralel.
- Apeluri de procesare în sală : Există două scenarii pentru acest caz de utilizare:
1.1 liftul se deplasează spre aceeași direcție cu destinația pasagerului.
1.2 liftul se deplasează spre direcția opusă destinației pasagerului.
3. Indicarea direcției de deplasare:
4. Declanșarea frânei de urgență : Există cinci scenarii pentru acest caz de utilizare:
1. Dacă mașinii i se ordonă să se oprească, dar nu se oprește la un etaj dorit, se va declanșa frâna de urgență.
2. Dacă mașinii i se ordonă să se deplaseze, dar nu se mișcă, se va declanșa frâna de urgență.
3. Dacă se comandă deschiderea ușilor când mașina se oprește la un etaj, dar ușile nu se deschid, se va declanșa frâna de urgență.
4. Dacă ușile se deschid când mașina se deplasează, se va declanșa frâna de urgență.
5. Dacă mașina continuă să meargă atunci când este atinsă limita căii de ridicare, se va declanșa frâna de urgență.
Voi prezenta doar o singură diagramă secvențială pentru cazul 5.
Aștept ca majoritatea lucrurilor să devină imagine în mintea dumneavoastră și să fie ușor de reținut, precum și de explicat. Pentru proiectarea backend , vă rugăm să urmăriți seria System Design
Sperăm că vă place explicația. Pentru mai multe întrebări de proiectare , vă rog să așteptați și să mă urmăriți.
.