INF 5120 Modellering med objekter Obligatorisk oppgave nr. 1 Gruppe 4 Problem: Det skal designes en kaffemaskin til bruk blant de ansatte hos en bedrift. Eieren av bedriften ønsker en enkel og billig maskin. Maskinen skal tilby kaffe med eller uten fløte/sukker til kr. 5,-. Etter en enkel samtale blir det bestemt at kaffemaskinen skal ha en myntslot, returveksel skuff, myntreturknapp og fire andre knapper: 1) svart, 2) med fløte, 3) med sukker og 4) med fløte og sukker. 1
Problem Vi blir bedt om å gjøre følgende forandring på kaffemaskinen: De ansatte skal kunne bruke sine magnetkort for å trekke kaffekjøpet direkte på lønnen. Vi legger til en kortleser. Maskinen skal håndtere en ukens drikk. Det skal være mulig å legge til nye drikker (f.eks. buljong og sjokolade) og forandre priser på en enkel måte. Gjør de nødvendige endringer og oppdater designet. Presenter et klassediagram (struktur) og et sekvensdiagram (oppførsel) som beskriver de viktigste aspektene ved designet. Forutsetninger Vi har tatt følgende forutsetninger: Vi har tatt utgangspunkt i et generisk design, og ikke tatt stilling til type input (knapper/ nummertastatur osv.) Det er mulig å ha ulik pris på de ulike drikkene. Kaffemaskinen har et display Kaffemaskinen har koppdispenser Kaffemaskinen har kun varme drikker Nivåfølere finnes i dispenserene Rutiner rundt påfylling er ikke tatt med 2
Forutsetninger Kaffemaskinen er ikke online med lønnsystemet. Hvordan brukt beløp for kort lagres og hvordan lønningskontoret henter opplysningene er ikke tatt med Når kort dras, sjekkes ingen saldo Feilhåndtering er ikke tatt med (knapp virker ikke, bruker trykker feil kombinasjon av knapper, display viser feil...) Overordnet UC-diagram Kjøpe drikk Operatør Oppdatere maskin Kunde returnkopp() Utføre vedlikehold 3
Use Case Kjøp drikke Primær aktør: Kunde Mål: Kunde kjøper og får en drikk Omfang: Kaffemaskin Nivå: Kunde mål Start betingelse: Minst en drikk og kopp må være tilgjengelig Use Case Kjøp drikke - hovedflyt 1. Kunde: Velger en drikk 2. System: Display viser pris 3. Kunde: Betaler med kort 4. System: Betalingsinformasjon lagres 5. System: Kopp blir levert 6. System: Nødvendige ingredienser mixes 7. System: Vann helles på 8. Kunde: Tar koppen med drikke Slutt betingelse: Drikk mottatt, kortbetaling lagret 4
Use Case Kjøp drikke Alternativ flyt 1: 3A. Kunde: betaler med kort, men kort aksepteres ikke 4A. System: Kaffemaskin resettes Slutt betingelse: Operasjon avbrutt, maskin resatt Alternativ flyt 2: 3B. Kunde: putter på penger, display viser beløp fortløpende 4B. System: Betaling akseptert Slutt betingelse: Drikke mottatt, betaling mottatt Use Case realisering for "Kjøpe drikke" : Kunde : FrontPanel : Display : CashBox : CardReader : CardInfo : Mixer : CupDispenser : CoffeeDispenser : WaterDispenser 1 velgdrikk() finnpris() 2 vis ValgOg Pris() aktiver(double) aktiver(double) 3,4 3a En av dissesekvens ene utføres avhengig av hva brukeren velger å gjøre leskort() visbetalingsinfo() betalingok() registrerkortinfo( ) reset() Hvis, betaling ikke er OK, resettes maskinen og scenariet kjører fra begynnelsen mottapenger() 3b 4b Repeteres til ønsket beløp er nådd visbetalingsinfo() beregnveksel() return veksel betalingok() reset() Egentlig ikke nødvendig ettersom objektet ikke er aktivt igjen før neste gang scenariet kjøres 5 6 reset() lagdrikk(string) miksingferdig() hentkopp() hentpulver() hentvann( ) 7 returnkopp( ) 8 Her er det en switch-case, etter hvilken drikkinfo som kommer inn 5
Use Case Oppdater kaffemaskin Primær aktør: Mål: Omfang: Nivå: Administrator Endre priser og drikk Kaffe maskin Start betingelse: Kaffemaskinen skal endre tilbud Use Case Oppdater kaffemaskin Hovedflyt: 1. Admin: Velg enhet som skal endres 2. Admin: Sett navn 3. Admin: Sett pris 4. Admin: Resett kaffemaskin 5. System: Alle opplysninger lagres Sluttbetingelse: Kaffemaskin er oppdatert og ferdig til bruk 6
: FrontPanel : Mixer : Operatør aktiverendring(endringsenhet ) settpris( ) settnavn() settdrikkinfo() CardReader les Kort()() aktiver() reset()() Display vis ValgOg Pris()() visbetalingsinfo()() CashBox mottapenger()() beregnveksel()() aktiver() reset()() FrontPanel CardInfo registrerkortinfo() velgdrikk()() finnpris()() visbetalingsinfo()() betalingok()() settnavn()() miksingferdig()() reset() aktiverendring() settpris() OK() Mixer lagdrikk() settdrikkinfo()() SugarDispenser CupDis penser hentkopp()() CoffeeDispenser hentpulver()() W aterdis penser hentvann() CreamDispenser Dispenser 7
designkommentarer CardReader/Display og KontrollPanel må vite om hverandre, ikke så bra. Mulig løsning: La KontrollPanel sende med referanse til displayet i metoden aktiver, da blir det bare en avhengighet. UI-kontroller bør kontrollere flyten mellom cashbox, kortleser og kontrollpanel Dårlig lagdeling, løses bl.a. Med UI-kontroller. KonrollPanel har dårlig kohesjon, bør derfor deles opp. 8