Im Stoff der 11. Klasse sind Listen Thema, genauer: einfach verkettete Listen. Die Klassen und Methoden dazu erstellen die Schüler in liebevoller Handarbeit selber, und das ist auch sinnvoll, weil sie dann wissen, wie solche Listen prinzipiell funktionieren.
Aber natürlich bringt die Programmiersprache Java bereits verschiedene Listen-Klassen mit, die wichtigsten sind Vector, ArrayList, LinkedList
. Die letzte davon ist der Schülerliste recht nahe. Man kann schnell neue Elemente zu einer LinkedList
hinzufügen oder welche entfernen, dafür dauert es etwas länger, das – sagen wir – zwölfte Element der Liste herauszusuchen. Bei den anderen beiden Klassen geht das effektiver, dafür dauert das Einfügen und Entfernen länger. (Warum das so ist, weiß ein Schüler nach der 11. Klasse, warum das wichtig ist, nach der 12.)
Im Programmierprojekt der elften Klassen – ich werde noch davon erzählen – sollen die Schüler auch solche Listen verwenden, laut Lehrplankommentar die selbst angefertigten. Das haben wir uns geschenkt, stattdessen habe ich den Schülern gezeigt, wie die entsprechenden Java-Klassen funktionieren, und die Schüler haben damit gearbeitet.
Als Überblick für die Schüler und gleichzeitig als ein Einblick in den Aufbau von Java habe ich diese Grafik erstellt:
Schön sieht man die Zusammenhänge zwischen Vererbung, Schnittstellen (rot) und abstrakten Klassen (grün). ArrayList, Vector
und LinkedList
erben manche Methoden von der abstrakten Oberklasse AbstractList
(die wiederum von AbstractCollection
erbt), angesprochen werden können die Listenklassen über die gemeinsame Schnittstelle List
.
Die Klasse LinkedList
kann dabei auch über das Interface Queue
angesprochen werden, ebenso wie die Klasse PriorityQueue
, obwohl beide von ganz anderen Klassen abstammen.
Erstellt habe ich die Grafik mit dem offenen UML-Editor StarUML. Hier ist die Quelldatei dafür, falls jemand an der Grafik weiterbasteln möchte.
— Fußnote: Alle Listen in Java implementieren die Schnittstelle Collection
, ebenso wie Mengen und Warteschlangen. Alle Collections, aber nicht nur die, implementieren ihrerseits die Schnittstelle Iterable
– das heißt, sie sind jeweils ein Haufen von Elementen, die man der Reihe nach durchgehen kann. Das geht zum Beispiel mit der eleganten for-each-Schleife:
for (Listenelement l : liste) {
l.aktionAusfuehren();
}
Man liest sie so: Für jedes Element l in der Sammlung namens liste, tue Folgendes: lass l eine bestimmte Methode ausführen.
Vielleicht ist das auch was für die Schüler der 10. Klasse, die mit Arrays und Zählschleifen große Probleme haben.
Schreibe einen Kommentar