Versions Compared

Key

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

...

Observatør-observert-teknikken går ut på at det observerte objektet sier ifra til en eller flere observatører om at tilstanden er endret. I denne oppgaven skal vi lage et HighscoreProgram som oppdaterer en HighscoreList etter hvert som ulike resultater blir registrert i konsollen.

Del 1: Implementasjon av HighscoreList

En HighscoreList skal holde styr på alle resultater av typen Comparable i en egen observerbar liste. Listen skal ha en maksimal størrelse, som settes i konstruktøren (f.eks. skal en topp 10 liste settes som HighscoreList(10) ). Klassen skal implementere grensenittet Iterable<Comparable>, som gjør at man kan iterere over resultatene i listen. HighscoreList må ha en metode for å legge til resultater i listen, addItem(Comparable). Denne metoden sorterer resultatet inn på rett plass i listen og hiver ut det siste/dårligste resultatet i listen hvis den er blitt for lang.

HighscoreListen blir observert av ListListeners. Disse objektene skal gis beskjed om endringer i listen og hvilke elementer som er endret. Dette gjøres i metoden fireListChanged(int, int), som forteller alle ListListeners hvilke elementer som har blitt endret (f.eks. fra og med element 3 til og med element 10). HighscoreList må også ha metodene addListListener(ListListener) og removeListListener(ListListener), som henholdsvis legger til og fjerner observerende ListListeners.

Del 2: Hovedprogram HighscoreProgram

Et HighscoreProgram inneholder en HighscoreList med én ListListenerHighscoreProgram. Klassen må derfor implementere grensesnittet ListListener:

...

  • void init() - oppretter en ny HighscoreList og legger til seg selv som ny ListListener.
  • void run() - leser inn tall (resultater) fra konsollen og legger dem til i listen.
  • void listChanged(AbstractObservableList, int, int) - observerer endringen i listen og skriver ut endringene i listen, samt selve listen, til konsollen.

Del 3: AbstractObservableList

Den abstrakte superklassen AbstractObservableList skal legges til som en generell superklasse for observerbare lister, som HighscoreList skal arve fra. Denne klassen skal holde oversikt over alle ListListeners som følger en klasse, og håndtere endringer i observatører (dermed kan noe av funksjonaliteten til HighscoreList flyttes opp til superklassen).

...