Suunnittele hissijärjestelmä
Hissijärjestelmän ohjelmistosuunnittelu
Koska suurin osa kehittäjistä on työskennellyt joidenkin moduulien parissa läpi uransa, heidän on vaikea ymmärtää ja toteuttaa täydellistä ohjelmistosuunnittelua, mutta uskon, että jokainen voi oppia!!
Huomautus: iOS-haastattelukysymykset , tarkista tämä linkki – Top iOS-haastattelukysymykset, jotka sinun on valmisteltava vuonna 2018
Paneeli:
Sinä:
Sovelluskehittäjän näkökulmasta meidän pitäisi kertoa luokat ja niiden suhde, luokkakaaviot & Sequence flow. Me kaikki tiedämme aikapulan teknisen keskustelun aikana ja joskus sen vaikeaa, mitä toinen kaveri odottaa meiltä.
Yleisestä näkökulmasta katsottuna voi olla mahdollista, että paneelisi on kiinnostunut backend-suunnittelusta, joten sinun on selvitettävä hänen kanssaan, mitä he odottavat sinulta?
Tilannekuva hissin ohjausjärjestelmästä
Hissillämme on perustoiminnot, joita kaikilla hissijärjestelmillä on, kuten liikkuminen ylös ja alas, ovien avaaminen ja sulkeminen ja tietenkin matkustajien ottaminen kyytiin.
Hissiä on tarkoitus käyttää rakennuksessa, jonka kerrokset on numeroitu 1:stä MaxFlooriin, jossa ensimmäinen kerros on aula. Hississä on jokaista kerrosta vastaavat korin(hissin) kutsupainikkeet. Jokaisessa kerroksessa, paitsi ylimmässä kerroksessa ja aulassa, on kaksi hallikutsupainiketta, joita matkustajat voivat kutsua ylös- ja alasajoa varten. Ylimmässä kerroksessa on vain yksi alasmenopainike ja aulassa yksi ylösmenopainike. Kun vaunu pysähtyy johonkin kerrokseen, ovet avataan ja vaunun lyhty, joka osoittaa vaunun kulkusuunnan, syttyy, jotta matkustajat saavat tietää vaunun kulkusuunnan. Auto liikkuu nopeasti kerrosten välillä, mutta sen pitäisi pystyä hidastamaan vauhtia riittävän ajoissa pysähtyäkseen haluttuun kerrokseen. Järjestelmän turvallisuuden varmentamiseksi hätäjarru laukeaa ja auto pakotetaan pysähtymään kaikissa vaarallisissa olosuhteissa.
Kaikki järjestelmät ovat vuorovaikutuksessa ihmisen tai automatisoitujen toimijoiden kanssa, jotka käyttävät järjestelmää johonkin tarkoitukseen, ja sekä ihminen että toimijat odottavat, että järjestelmä käyttäytyy ennustettavalla tavalla.
Hissijärjestelmän nykyisiin vaatimuksiin perustuvia käyttötapauksia on seitsemän kappaletta, kuten kuviossa 1 on esitetty:
- Käsittele hissin/ hissin kutsut: Tämä käyttötapaus sisältää useita skenaarioita, jotka kuvataan yksityiskohtaisesti tämän asiakirjan myöhemmissä osissa. Näihin skenaarioihin kuuluu, että hissi vastaanottaa hissi-/vaunukutsuja matkustajilta, sytyttää tai sammuttaa hissi-/vaunukutsupainikkeiden valot, päivittää järjestelmän ohjaaviin osiin tallennetun hissi-/vaunukutsutietueen jne.
- Käsittele hallikutsuja: Samanlainen kuin hissi-/autokutsujen käsittely, tämä käyttötapaus sisältää sen, että hissi vastaanottaa hallikutsuja matkustajilta, sytyttää tai sammuttaa hallikutsupainikkeiden valon, päivittää järjestelmää ohjaaviin osiin tallennetun hallikutsujen tietueen jne.
- Siirrä/pysäytä kori:
- Liikkumissuunnan osoittaminen: Hissin päätehtäviin kuuluvat ajonopeuden muuttaminen, pysähtymispäätöksen tekeminen ja auton ajosuunnat.
- Liikkumissuunnan osoittaminen: Hississä pitäisi olla tämä mekanismi, jotta matkustajat tietäisivät hissin senhetkisen kulkusuunnan, jotta matkustaja voisi päättää, meneekö hän hissin kyytiin vai ei.
- Hissin sijainnin ilmaiseminen: Vastaavasti hissin tulisi antaa matkustajille tieto siitä, onko hänen kohdekerroksensa saavutettu, jotta matkustaja voi päättää poistua hissistä.
- Avaa/sulje ovet: Hissin pitäisi pystyä avaamaan ja sulkemaan ovet, jotta matkustajat pääsevät sisään ja ulos hissistä. Tämän käyttötapauksen toiminnallisilla osa-alueilla olisi myös mahdollistettava ovien peruuttaminen, kun ovet ovat sulkeutumassa ja matkustaja haluaa nousta kyytiin.
- Trigger Emergency Brake: Autossa on turvamekanismi, jolla varmistetaan, että vaarallinen tila ei synny ohimenevästi.
Näin paljon ymmärrystä hissijärjestelmästä, voimme alkaa yksilöidä tarvittavat luokat sitä varten, jotta voimme suunnitella järjestelmän.
Identifying Classes/Objects:
- ElevatorControl: Hissijärjestelmän keskeinen ohjaava objekti. ElevatorControl kommunikoi ja ohjaa kaikkia muita järjestelmän objekteja.
- Ovi: Järjestelmässä on kaksi ovea, ”jumala”-objekti – ElevatorControl – käskee ovia avautumaan ja sulkeutumaan.
- Car/Lift: Autoa ohjataan liikkumaan ylös ja alas (eri nopeuksilla), pysähtymään tarvittaessa kerroksissa.
- Button: ElevatorControl-luokka ohjaa myös button-luokkaa, joka edelleen yleistää kaksi alaluokkaa CarCallButton ja HallCallButton. Ohjausobjekti kommunikoi Button-objektien kanssa, saa tiedon siitä, onko nappia painettu ja ohjaa puolestaan Button-valojen valaistusta.
- Indicator: Järjestelmässä on kahdenlaisia ilmaisimia, CarPositionIndicator ja CarDirectionIndicator (eli CarLantern). Indikaattoreita ohjataan näyttämään tietoa auton senhetkisestä sijainnista ja liikkumissuunnasta.
- Turvallisuus: Aina kun tapahtuu hätätilanne, ElevatorControl käskee Safety
Controller-luokkia:
- DoorControl ohjaa DoorMotorin toimintaa. DoorMotor voidaan käskeä avaamaan, sulkemaan tai tekemään oven peruutus.
- DriveControl ohjaa hissin Drive-ajoa, joka toimii päämoottorina, joka liikuttaa hissikoria ylös ja alas ja pysähtyy tarvittaessa kerroksiin.
- LanternControl-luokkia on kaksi, CarPositionIndicator ja CarDirectionIndicator.
- HallButtonControl-luokkia on olemassa pareittain kummassakin kerroksessa, jossa toinen ohjaa Up HallCallButtonia ylöspäin, ja toinen alas. HallButtonControl hyväksyy hallin kutsupainikkeiden painallukset sekä antaa palautetta hallin kutsuvaloille.
- CarButtonControl on yksi jokaisessa kerroksessa ja kaikki sijaitsevat hississä/vaunussa. CarButtonControl hyväksyy CarCallButton-painikkeiden painallukset ja vastaa vastaavien hissin/vaunun kutsuvalojen kytkemisestä päälle/pois.
- CarPositionIndicator antaa arvon CarPositionIndicatorille, jotta matkustajat tietäisivät hissin/vaunun senhetkisen sijainnin.
- Dispatcher ei ohjaa varsinaisia hissin komponentteja, mutta se on tärkeä ohjelmistojärjestelmässä. Kullekin hissille/vaunulle on yksi Dispatcher, jonka päätehtävänä on laskea hissin/vaunun liikkumissuunta ja määränpää sekä ylläpitää ovien aukioloaikaa. Dispatcher on vuorovaikutuksessa lähes kaikkien järjestelmän ohjausobjektien kanssa lukuun ottamatta LanternControlia.
Toivottavasti kaikki on mennyt hyvin tähän asti, ymmärretäänpä nyt kaikki joidenkin sekvenssikaavioiden avulla.
Sekvenssivirta
Se voi olla vaikea selittää suullisesti, mutta jos ymmärrät selvästi, miten se tulee toimimaan, voit piirtää joitakin sekvenssikaavioita ja yrittää selittää virran joidenkin esimerkkien avulla rinnakkain.
- Prosessihallin kutsut : Tässä käyttötapauksessa on kaksi skenaariota:
1.1 hissi liikkuu samaan suuntaan kuin matkustajan määränpää.
1.2 hissi liikkuu vastakkaiseen suuntaan kuin matkustajan määränpää.
2. Auton siirtäminen/pysäyttäminen:
3. Liikkumissuunnan ilmoittaminen:
4. Hätäjarrun laukaiseminen : Tässä käyttötapauksessa on viisi skenaariota:
1. Jos autoa käsketään pysähtymään, mutta se ei pysähdy haluttuun kerrokseen, hätäjarru laukeaa.
2. Jos autoa käsketään liikkumaan, mutta se ei liiku, hätäjarru laukeaa.
3. Jos autoa käsketään liikkumaan, mutta se ei liiku, hätäjarru laukeaa. Jos ovet käsketään avautumaan, kun auto pysähtyy johonkin kerrokseen, mutta ovet eivät aukea, hätäjarru laukeaa.
4. Jos ovet avautuvat, kun auto liikkuu, hätäjarru laukeaa.
5. Jos ovet avautuvat, kun auto liikkuu, hätäjarru laukeaa. Jos auto jatkaa matkaa, kun nostotien raja on saavutettu, hätäjarru laukeaa.
Näytän vain yhden sekvenssikaavion tapauksesta 5.
Odotan, että useimmat asiat jäävät mieleesi kuviksi ja ne on helppo muistaa sekä selittää. Backend-suunnittelua varten seuraa System Design -sarjaa
Toivottavasti pidät selityksestä. Jos haluat lisää suunnittelukysymyksiä , odota ja seuraa minua.