Felvonórendszer tervezése
Szoftvertervezés egy felvonórendszerhez
A legtöbb fejlesztő pályafutása során dolgozott néhány modulon, nehéz számukra megérteni és megvalósítani egy teljes szoftvertervet, de szerintem mindenki képes tanulni !!
Megjegyzés: Az iOS interjúkérdésekhez , nézze meg ezt a linket – Top iOS interjúkérdések, amelyekre fel kell készülnie 2018-ban
Panel:
Ön: Kérem, mondja meg nekem egy liftrendszer tervezését.
Ön:
Az alkalmazásfejlesztő szempontjából az osztályok és azok kapcsolata, osztálydiagramok & Sequence flow. Mindannyian tudjuk, hogy az idő szűkös egy technikai beszélgetés során, és néhány alkalommal nehéz, hogy mit vár tőlünk a másik fickó.
Az általános perspektívában, lehet, hogy a panel érdekli a backend tervezése, így tisztázni kell vele, mit várnak tőled?
A liftvezérlő rendszer pillanatképe
A mi liftünknek megvan az alapfunkciója, amivel minden liftrendszer rendelkezik, mint például a fel- és lehajtás, ajtók nyitása és zárása, és természetesen az utasok felvétele.
A liftet egy olyan épületben kell használni, amelynek emeletei 1-től MaxFloorig vannak számozva, ahol az első emelet az előcsarnok. Az egyes emeleteknek megfelelő kabin(lift) hívógombok vannak a kabinban. A legfelső emelet és az előcsarnok kivételével minden emeleten van két csarnokhívó gomb, amelyeket az utasok hívhatnak fel- és leszálláshoz. A legfelső emeleten csak egy lefelé hívó gomb van, az előcsarnokban pedig egy felfelé hívó gomb. Amikor a kocsi megáll egy emeleten, az ajtók kinyílnak, és a kocsi aktuális haladási irányát jelző lámpa kigyullad, hogy az utasok megismerhessék a kocsi aktuális haladási irányát. A kocsi gyorsan halad az emeletek között, de elég korán le kell tudnia lassítani ahhoz, hogy a kívánt emeleten meg tudjon állni. A rendszer biztonságának igazolása érdekében a vészfék működésbe lép, és a kocsi bármilyen nem biztonságos körülmények között megállásra kényszerül.
Minden rendszer kölcsönhatásba lép emberi vagy automatizált szereplőkkel, akik valamilyen célra használják a rendszert, és mind az ember, mind a szereplők elvárják, hogy a rendszer kiszámítható módon viselkedjen.
A liftrendszer jelenlegi követelményei alapján hét használati eset létezik, amint az az 1. ábrán látható:
- Kabin/lift hívások feldolgozása: Ez a használati eset több forgatókönyvet tartalmaz, amelyeket a tanulmány későbbi részeiben részletesen ismertetünk. Ezek a forgatókönyvek magukban foglalják, hogy a lift fogadja a lift/kabin hívásokat az utasoktól, bekapcsolja vagy kikapcsolja a lift/kabin hívógombok fényét, frissíti a rendszer vezérlő részeiben tárolt lift/kabin hívások rekordját, stb.
- Csarnokhívások feldolgozása: Hasonlóan a lift/kocsihívások feldolgozásához, ez a használati eset magában foglalja, hogy a felvonó csarnokhívásokat fogad az utasoktól, bekapcsolja vagy kikapcsolja a csarnokhívó gombok fényét, frissíti a rendszer vezérlő részeiben tárolt csarnokhívások rekordját, stb.
- Mozgassa/állítsa meg a kocsit: A felvonó fő funkciója magában foglalja a haladási sebesség megváltoztatását, a megállásról szóló döntés meghozatalát és a kocsi haladási irányát.
- Mozgásirány jelzése: A felvonónak rendelkeznie kell ezzel a mechanizmussal, amely tájékoztatja az utasokat a kabin aktuális haladási irányáról, hogy az utas eldönthesse, hogy beszáll-e a kabinba vagy sem.
- A kabin helyzetének jelzése:
- Ajtók nyitása/zárása: A liftnek képesnek kell lennie az ajtók nyitására és zárására, hogy az utasok be- és kiszállhassanak a kabinból. Ennek a használati esetnek a funkcionális területeinek lehetővé kell tennie az utasok számára az ajtók visszafordítását is, amikor az ajtók záródnak, és az utas be akar szállni a kocsiba.
- Vészfék kiváltása: Biztonsági mechanizmus van a kabinon belül, amely biztosítja, hogy egy nem biztonságos állapot nem keletkezik átmenetileg.
A liftrendszer ennyi megértésével elkezdhetjük azonosítani a rendszer tervezéséhez szükséges osztályokat.
Identifying Classes/Objects:
- ElevatorControl: A központi vezérlő objektum a felvonórendszerben. Az ElevatorControl kommunikál és vezérli a rendszer összes többi objektumát.
- Ajtó: Két ajtó van a rendszerben, az “isten” objektum – az ElevatorControl – parancsolja az ajtók nyitását és zárását.
- Kabin/lift: A kocsit úgy vezéreljük, hogy felfelé és lefelé mozogjon (különböző sebességgel), szükség esetén megálljon az emeleteken.
- Button: Az ElevatorControl osztály vezérli a gomb osztályt is, amely tovább általánosítja a CarCallButton és a HallCallButton két alosztályát. A vezérlő objektum kommunikál a Button objektumokkal, megkapja az információt, hogy megnyomtak-e egy gombot, és viszont vezérli a Button lámpák világítását.
- Indicator: A rendszerben kétféle indikátor van, a CarPositionIndicator és a CarDirectionIndicator (azaz a CarLantern). A kijelzők vezérlése a gépkocsi aktuális helyzetére és haladási irányára vonatkozó információk megjelenítésére szolgál.
- Biztonság: Amikor vészhelyzet történik, az ElevatorControl parancsot ad a Safety
Controller osztályoknak:
- DoorControl vezérli a DoorMotor működését. A DoorMotornak lehet parancsolni, hogy nyissa ki, zárja be, vagy végezzen ajtófordítást.
- DriveControl vezérli a lift meghajtását, amely a kocsit fel és le mozgató főmotorként működik, és szükség esetén megáll az emeleteken.
- LanternControl két számban létezik, a CarPositionIndicator és a CarDirectionIndicator.
- HallButtonControl minden emeleten párban létezik, ahol az egyik a Up HallCallButton-t, a másik a Down-t vezérli. A HallButtonControl fogadja a csarnokhívó gombok lenyomását, valamint visszajelzést ad a csarnokhívó lámpáknak.
- A CarButtonControl minden emeleten van egy, és mindegyik a liftben/kocsiban található. A CarButtonControl fogadja a CarCallButton hívásokat, és felelős a megfelelő lift/kabin hívófények be- és kikapcsolásáért.
- CarPositionIndicator értéket ad a CarPositionIndicatornak, hogy az utasok tudhassák a lift/kabin aktuális helyzetét.
- A Dispatcher nem vezérli a tényleges liftkomponenseket, de fontos a szoftverrendszerben. Minden felvonóhoz/kabinhoz egy Dispatcher tartozik, amelynek fő feladata a felvonó/kabin célzott mozgási irányának és célállomásának kiszámítása, valamint az ajtók nyitási idejének fenntartása. A Dispatcher a rendszer szinte minden vezérlőobjektumával kölcsönhatásba lép, kivéve a LanternControlt.
Ha eddig minden jól ment, akkor most néhány szekvenciadiagram segítségével értsünk meg mindent.
Sorozatfolyamat
Ez lehet, hogy szóban nehéz elmagyarázni, de ha világosan értjük, hogyan fog működni, akkor rajzolhatunk néhány szekvencia diagramot, és párhuzamosan néhány példával megpróbálhatjuk elmagyarázni az áramlást.
- Folyamat csarnokhívások : Két forgatókönyv létezik erre a felhasználási esetre:
1.1 a lift az utas célállomásával megegyező irányba halad.
1.2 a lift az utas célállomásával ellentétes irányba halad.
2. A kocsi mozgatása/megállítása: