Imperatief Programmeren werkcollege Hoofdstuk 13:1-3 Implementatie van Collection-klassen Bekijk de interfaces Collection en List in sectie 13.2 (blz. 177 in de nieuwste druk van het diktaat). De klasse ArrayList is een implementatie van beide interfaces. Deze klasse wordt in de library gedefinieerd. Maar stel dat de klasse nog niet bestaat: definieer hem dan nu zelf! a. b. c. d. e. f. g. De klasse ArrayList gebruikt ‘achter de schermen’ toch een array. In de constructormethode wordt de array aangemaakt met een lengte van 10. En, zoals gebruikelijk, we nemen een extra int-variabele die het aantal waardes dat al in gebruik is. Schrijf de klasse-header, en de constructor-methode. Schrijf de methode add zoals gespecificeerd in de interface Collection. Deze voegt een element aan het eind toe. Maar als er geen ruimte meer is, wordt er eerst een grotere array aangemaakt, waarin de al bestaande elementen worden gekopieerd. Schrijf de methode clear, die de lijst leegmaakt, en de methode contains die kijkt of een bepaald element in de lijst staat. Schrijf de methodes get en set zoals gespecificeerd in de interface List. Neem aan dat de opgegeven index kleiner is dan het huidige aantal elementen. De methode set retourneert het oorspronkelijke element dat op deze plaats staat. Schrijf de methode add uit de interface List. Deze voegt een element in op een bepaalde plaats, en schuift de rest op (en maakt extra ruimte als dat nodig is). De klasse LinkedList gebruikt ‘achter de schermen’ een andere representatie: een verwijzing naar het eerste en laatste element van een keten, en eventueel ook het aantal elementen. Die keten bestaat uit ‘schakels’, waarbij elke schakel 3 verwijzingen bevat: naar de volgende schakel, naar de vorige schakel, en naar het eigenlijke element (zie de illustratie hiernaast). Opgave (moeilijk): schrijf zo veel mogelijk methodes van deze klasse. Vooral add is een uitdaging... Probeer een implementatie van SortedSet te maken, bijvoorbeeld gebaseerd op de ArrayList uit onderdeel a-e, of op de LinkedList uit opgave f. De methode add werkt nu anders: het element wordt op de juiste plaats toegevoegd. Gebruik de methode compare om de elementen te vergelijken, zoals gespecificeerd in de interface Comparator. Deze methode levert 0 op als de objecten gelijk zijn, en +1 of -1 als de ene kleiner dan de andere, of de ander kleiner dan de ene is. In SortedSet zijn verder methoden first en last nodig. Opgaven uit het eindtentamen van vorig jaar a. In de body van methode paint met parameter Graphics g kun je gebruik willen maken van anti-aliasing. Welke opdracht is er nodig om dit te doen? En wat is anti-aliasing? b. Eén van de volgende drie declaraties-met-toekenningen is correct. Welke is dat, en waarom zijn de andere twee niet correct? ArrayList a = new Collection(); // versie 1 Collection c = new ArrayList(); // versie 2 Collection c = new Collection(); // versie 3 Beschrijf een situatie waarin de correcte versie van bovenstaande regels een voordeel heeft , vergeleken met het in ieder geval ook correcte: ArrayList a = new ArrayList(); // versie 4 c. De syntax van de while-opdracht is: while (voorwaarde) opdracht De semantiek ervan is dat de opdracht steeds opnieuw wordt uitgevoerd zolang de voorwaarde true is. Opgave: beschrijf nu zelf de syntax en semantiek van de try-opdracht. Leg daarbij ook uit hoe er gekozen wordt uit meerdere catch-gedeeltes. d. Wat is een abstracte methode? Abstracte methodes kunnen gedefinieerd worden in een abstracte klasse. In wat voor soort situaties kan dat nuttig zijn? e. In de userinterface van een programma kun je menu’s gebruiken. Vergelijk aan de hand van de klasse-hiërarchie de manier waarop dat in AWT en Swing gebeurt. Waarom heeft men in AWT niet voor de Swing-aanpak kunnen kiezen?
© Copyright 2024 ExpyDoc