Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Excerpt

Oppgaven handler om en StopWatch-klasse, som implementerer en stoppeklokke med funksjoner for å starte, ta mellomtider og stoppe.rundetider og stoppe.

Klassen skal implementere logikken ofte funnet på stoppeklokker på smarttelefoner.

For å holde styr på tiden som går vil StopWatch-klassen bli kalt utenfra (altså noe du slipper å implementere i denne oppgaven) på en tick(int)-metode. I dataverdenen er et tick minste målbare diskret tidsenhet. I denne oppgaven er 1 tick = 1 millisekund. F.eks. vil et kall tick(3) fortelle en StopWatch-instans at 3 ticks har gått siden sist gang tick() ble kalt.

StopWatch skal fungere på følgende måte:

  • Klokken startes når man ønsker å starte tidtakningen.
  • Alle ticks etter at klokken har blitt startet skal medregnes i tidtakningen.
  • Klokken stoppes når man ønsker å stoppe tidtakningen. Da er tidtakningen helt ferdig. Det er ikke en pause i tidtakningen - klokken skal ikke startes igjen.
  • Det skal være mulig å ta rundetider.
  • Første rundetid startes når klokken starter.
  • Under tidtakningen kan man starte en ny rundetid.
  • Siste rundetid avsluttes når klokken stoppes.

StopWatch-klassen må ha metoder for å spørre om tilstanden og metoder for å endre tilstanden.

Klassen skal ha følgende spørremetoder:

  • boolean isStarted() - returner true om klokken har blitt startet eller false om den ikke har blitt startet
  • boolean isStopped() - returner true om klokken har blitt stoppet eller false om den ikke har blitt stoppet. NB! Her snakker vi om at klokken har blitt stoppet, ikke om klokken går eller ikke.
  • int getTicks() - returnerer det totale antall ticks (millisekunder) som har gått i levetiden til klokken uavhengig om klokken har vært startet eller stoppet. Hvis ingen ticks har gått returner -1.
  • int getTime() - returnerer antall ticks som har gått under tidtakningen. Hvis ingen ticks har gått returner -1.
  • int getLapTime() - returnerer antall ticks som har gått under nåværende rundetid. Hvis ingen tid har gått returner -1.
  • int getLastLapTime() - returnerer lengden på forrige ferdigmålte rundetid. Hvis det ikke er noen tidligere rundetider returner -1.

Klassen skal ha følgende metoder for å endre tilstanden:

  • void tick(int ticks) - forteller klokken at ticks tick har gått.
  • void start() - starter klokken
  • void lap() - starter en ny rundetid
  • void stop() - stopper klokken

Del 1 - tilstandsdiagram

Tegn et objekttilstandsdiagram for en tenkt bruk av StopWatch-klassen. Velg en sekvens av kall som både starter klokken, tar rundetider og stopper klokken.

Del 2 - Java-kode

Skriv Java-kode for StopWatch-klassen med oppførsel som er beskrevet over.

Lag en passende toString()-metode og et hovedprogram, slik at du kan sjekke at oppførselen stemmer med tilstandsdiagrammet (bruk samme sekvens av kall).

JExercise-testkode for denne oppgaven finner du her: stateandbehavior/StopWatchTest.javaOriginal-koden (jextest) finner du her: stateandbehavior/StopWatch.jextest.


Include Page
Bunntekst for JExercise-oppgaver
Bunntekst for JExercise-oppgaver