Navrhněte výtahový systém
.
Návrh softwaru pro výtahový systém
Jako většina vývojářů pracovala na některých modulech během své kariéry, je pro ně těžké pochopit a realizovat kompletní návrh softwaru, ale věřím, že se to každý může naučit !!
Poznámka: Otázky k pohovoru pro iOS , podívejte se na tento odkaz – Nejlepší otázky k pohovoru pro iOS, na které se musíte připravit v roce 2018
Panel:
Vy: Prosím, řekněte mi návrh výtahového systému:
Podle níže uvedeného postupu zjistíte, zda panel zajímá návrh tříd a jejich vztah, nebo se zajímá o backend, jak se zdá Jedná se o poměrně širokou otázku.
Z pohledu vývojáře aplikace bychom měli říci třídy a jejich vztah, diagramy tříd & Sequence flow. Všichni známe nedostatek času během technické diskuse a někdy je těžké, co od nás ten druhý očekává.
Z obecného hlediska je možné, že váš panel má zájem o návrh backendu, takže si s ním musíte vyjasnit, co od vás očekává?
Snímek řídicího systému výtahu
Náš výtah má základní funkce, které mají všechny výtahové systémy, jako je pohyb nahoru a dolů, otevírání a zavírání dveří a samozřejmě nabírání cestujících.
Výtah má být používán v budově, která má patra očíslovaná od 1 do MaxFloor, kde první patro je hala. V kabině jsou tlačítka pro přivolání kabiny(výtahu) odpovídající jednotlivým patrům. Pro každé patro s výjimkou nejvyššího patra a haly jsou ve výtahu dvě tlačítka pro přivolání haly, která cestující přivolávají pro jízdu nahoru a dolů. V nejvyšším patře je pouze jedno tlačítko pro vyvolání haly dolů a jedno tlačítko pro vyvolání haly nahoru v hale. Když vůz zastaví v některém patře, otevřou se dveře a rozsvítí se svítilna označující aktuální směr jízdy vozu, aby se cestující mohli dozvědět aktuální směr jízdy vozu. Vůz se mezi patry pohybuje rychle, ale měl by být schopen zpomalit dostatečně brzy, aby zastavil v požadovaném patře. Aby byla certifikována bezpečnost systému, bude spuštěna nouzová brzda a vůz bude nucen zastavit při jakýchkoli nebezpečných podmínkách.
Všechny systémy jsou v interakci s lidskými nebo automatizovanými subjekty, které systém používají za nějakým účelem, a jak člověk, tak subjekty očekávají, že se systém bude chovat předvídatelným způsobem.
Na základě současného požadavku výtahového systému existuje sedm případů užití, jak je znázorněno na obrázku 1:
- Zpracování volání vozu/výtahu: Tento případ užití zahrnuje několik scénářů, které budou podrobně popsány v dalších částech tohoto dokumentu. Tyto scénáře zahrnují, že výtah přijímá volání výtahu/vozu od cestujících, zapíná nebo vypíná osvětlení tlačítek volání výtahu/vozu, aktualizuje záznam o volání výtahu/vozu uložený v řídicích částech systému atd.
- Zpracovat volání haly: Tento případ užití zahrnuje podobně jako zpracování volání výtahu/vozu to, že výtah přijímá volání haly od cestujících, rozsvěcuje nebo zhasíná světlo tlačítek volání haly, aktualizuje záznam volání haly uložený v řídicích částech systému atd.
- Pohyb/zastavení vozu:
- Ukazování směru jízdy: Hlavní funkce výtahu bude zahrnovat změnu rychlosti jízdy, způsob rozhodování o zastavení a směry jízdy vozu:
- Indikace polohy vozu: Výtah by měl mít tento mechanismus, aby cestující věděli o aktuálním směru pohybu vozu, aby se mohli rozhodnout, zda do vozu nastoupí, nebo ne:
- Otevřít/zavřít dveře:
- Výtah by měl podobně informovat cestující o tom, zda již dosáhl svého cílového patra, aby se cestující mohl rozhodnout, zda vůz opustí: Výtah by měl být schopen otevřít a zavřít dveře, aby cestující mohli nastoupit a vystoupit. Funkční oblasti tohoto případu užití by měly také umožnit cestujícím provést zpětný chod dveří, když se dveře zavírají a cestující chce nastoupit do vozu.
- Spustit nouzovou brzdu: V kabině je bezpečnostní mechanismus, který zajišťuje, aby přechodně nevznikl nebezpečný stav.
S tímto pochopením výtahového systému můžeme začít identifikovat třídy potřebné k návrhu systému.
Identifikace tříd/objektů:
- ElevatorControl: Centrální řídicí objekt výtahového systému. ElevatorControl komunikuje a řídí všechny ostatní objekty v systému.
- Dveře: Dveře: V systému jsou dvoje dveře, „boží“ objekt – ElevatorControl – dává dveřím příkazy k otevírání a zavírání.
- Vůz/výtah:
- Tlačítko: Vůz je řízen tak, aby se pohyboval nahoru a dolů (různou rychlostí), aby v případě potřeby zastavoval v patrech.
- Tlačítko: Třída ElevatorControl řídí také třídu tlačítek, která dále zobecňuje dvě podtřídy CarCallButton a HallCallButton. Řídicí objekt komunikuje s objekty Button, získává informace o tom, zda je tlačítko stisknuto, a následně řídí osvětlení světel Button.
- Indicator: V systému existují dva druhy indikátorů, CarPositionIndicator a CarDirectionIndicator (tj. CarLantern). Indikátory jsou ovládány tak, aby zobrazovaly informace o aktuální poloze a směru pohybu vozu.
- Bezpečnost: Kdykoli dojde k mimořádné události, dává ElevatorControl příkaz třídám Safety
Controller:
- DoorControl řídí činnost DoorMotor. DoorMotor může dostat příkaz k otevření, zavření nebo provedení reverzace dveří.
- DriveControl ovládá výtah Drive, který funguje jako hlavní motor pohybující kabinou nahoru a dolů a v případě potřeby zastavuje v patrech.
- LanternControl jsou v počtu dvou, CarPositionIndicator a CarDirectionIndicator.
- HallButtonControl existuje v páru na každém patře, kde jeden ovládá HallCallButton Up a druhý Down. HallButtonControl přijímá ovládací prvky tlačítek volání haly a také dává zpětnou vazbu světlům volání haly.
- CarButtonControl je jeden pro každé patro a všechny se nacházejí ve výtahu/vagoně. CarButtonControl přijímá volání CarCallButton a má na starosti zapnutí/vypnutí příslušných světel pro volání výtahu/kabiny.
- CarPositionIndicator dává hodnotu CarPositionIndicator, aby cestující mohli znát aktuální polohu výtahu/kabiny.
- Dispečer neovládá skutečné součásti výtahu, ale je důležitý v softwarovém systému. Pro každý výtah/kabinu existuje jeden Dispatcher, jehož hlavní funkcí je vypočítat cílový směr pohybu a cíl výtahu/kabiny a také udržovat dobu otevření dveří. Dispečer komunikuje téměř se všemi řídicími objekty v systému kromě LanternControl.
Doufám, že doposud vše probíhalo v pořádku, pojďme vše pochopit pomocí některých sekvenčních diagramů.
Sekvenční tok
Může být těžké vysvětlit to slovně, ale pokud jasně chápete, jak to bude fungovat, můžete nakreslit několik sekvenčních diagramů a pokusit se paralelně vysvětlit tok na několika příkladech.
- Volání procesní haly : Pro tento případ použití existují dva scénáře:
1.1 výtah se pohybuje stejným směrem jako cílová stanice cestujícího.
1.2 výtah se pohybuje opačným směrem než cílová stanice cestujícího.
2. Přesun/zastavení vozu:
3. Indikace směru jízdy:
4. Spuštění nouzové brzdy : Pro tento případ použití existuje pět scénářů:
1. Pokud je dán příkaz k zastavení, ale vůz nezastaví na požadované podlaze, spustí se nouzová brzda.
2. Pokud je dán příkaz k pohybu, ale vůz se nepohybuje, spustí se nouzová brzda.
3. Pokud je dán povel k otevření dveří, když vůz zastaví na podlaze, ale dveře se neotevřou, spustí se nouzová brzda.
4. Pokud se dveře otevřou, když se vůz pohybuje, spustí se nouzová brzda.
5. Pokud se dveře otevřou, když se vůz pohybuje, spustí se nouzová brzda. Pokud vůz pokračuje v jízdě, když je dosaženo limitu cesty zvedáku, spustí se nouzová brzda.
Pro případ 5 budu uvádět pouze jeden sekvenční diagram.
Očekávám, že většina věcí se vám v mysli vybaví a snadno se zapamatuje i vysvětlí. Pro návrh backendu , prosím, sledujte sérii Návrh systému
Doufám, že se vám vysvětlení bude líbit. Pro další otázky týkající se návrhu , prosím, počkejte a sledujte mě.