Imperatief Programmeren werkcollege Hoofdstuk 13:1-3

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?