Versions Compared

Key

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

...

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.

...

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  som følger en klasse , og og alle objektene i listen (den observerbare listen). Det innebærer at AbstractObservableListhåndtere endringer i observatører (dermed bør noe av funksjonaliteten til HighscoreList flyttes opp til superklassen). Klassen skal også implementere grensenittet Iterable<Comparable>, som gjør at man kan iterere over resultatene i den observerbare listen.

AbstractObservableList har i tillegg metoder for å legge og fjerne elementer i den observerbare listen i subklassen:

  • abstract List getList() - returnerer den observerbare listen i subklassen.
  • int size() - returnerer størrelsen på den observerbare listen.
  • abstract boolean acceptsElement(Object) - returnerer hvorvidt subklassen aksepterer et objekt i den observerbare listen (f.eks. aksepterer HighscoreList kun int og /Integer objekter).
  • Object getElement(int) - henter elementet i den observerbare listen på posisjonen angitt av argumentet.
  • void addElement(int, Object) - legger til et element i den observerbare listen på posisjonen angitt av argumentet.
  • void removeElement(int) - fjerner et element i den observerbare listen på posisjonen angitt av argumentet.
  • void fireListChanged(int, int) - informerer alle observerende ListListeners om endringer i den observerbare listen og hvilke elementer i den observerbare listen som er endret.

Hint: En AbstractObservableList har ikke direkte tilgang til den observerbare listen til subklassen. Hvilken inngangsmetode kan man benytte for å gjøre endringer i den observerbare listen?Husk at metodene bør være innkapslet så stramt som mulig.

Ekstraoppgave

Implementer en HighscoreList for TicTacToe, Sokoban eller Sudoku. Etter hvert ferdige spill skal spilleren få mulighet til å legge inn resultatene i en highscore-liste, som består av navn på spilleren og antall trekk. Hvert resultat lagres som et eget objekt, og denne resultatobjektklassen må implementere Comparable-grensesnitt. Resultatobjektet legges inn i highscore-listen, som printes etter at spilleren har fått mulighet til å registrere sitt resultat.

...