...
| Lag en hovedprogramklasse kalt HighscoreProgram, som tester at HighscoreList-klassen din virker som den skal. La den opprette en HighscoreList-instans, lese inn tall fra konsollet (f.eks. med en Scanner og nextInt-metoden) og legge disse inn i lista. Sørg for at HighscoreProgram implementerer ListListener-grensesnittet og registrerer seg som lytter på HighscoreList-instansen. La lyttermetoden listChanged skrive ut informasjon og resultatene i HighscoreList-instansen og posisjonsargumentet, slik at du ser at alt virker som det skal. Vi foreslår følgende metoder og oppførsel:
Klassediagrammet til venstre viser hvordan klassene henger sammen, og vårt forslag til metoder. |
Del 3:
...
ObservableList
| Den abstrakte superklassen ObservableList skal legges til som en generell superklasse for observerbare lister, som HighscoreList skal arve fra. Denne klassen skal både holde |
...
AbstractObservableList har i tillegg metoder for å legge og fjerne elementer i den observerbare listen:
...
en liste med objekter (Object) og håndtere registrering av lyttere, altså en liste med ListListener-instanse som får beskjed om endringer i lista (slik at lista dermed er observerbar). Dette betyr at ObservableList overtar håndtering av både resultater og lyttere fra HighscoreList-klassen. For å gjøre ObservableList mer generell og gjenbrukbar, så lar vi den håndtere Object-instanser (heller enn Integer). Samtidig deklarerer den en abstrakt metode acceptsElement, som subklasser må redefinere for å bestemme hva slags objekter det skal være lov å legge inn. HighscoreList vil f.eks måtte redefinere den slik at bare Integer-objekter aksepteres. ObservableList skal ha følgende metoder (noen er altså overtatt fra HighscoreList):
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
HighscoreList skal endres slik at den i størst mulig grad bruker metodene som arves fra ObservableList, men forøvrig ikke endre oppførsel. Klassediagrammet til venstre viser hvordan klassene henger sammen, og hvor metodene nå er deklarert/implementert. Merk at addElement- og removeElement-metodene er angitt som protected (ruter-symbolet), slik at kun subklasser skal kunne bruke dem.
|
JExercise-testkode for denne oppgaven finner du her: patterns/observable/ObservableListTest.java. Original-koden (jextest) finner du her: patterns/observable/ObservableList.jextestHusk 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.
...