Ausgangspunkt
Mit dem neuen Lehrplan am wieder neunjährigen Gymnasium lernen die Schüler und Schülerinnen am naturwissenschaftlich-technologischen Zweig in diesem Schuljahr zum ersten Mal bereits in der 9. Klasse eine objektorientierte Programmiersprache – Java, in aller Regel.
Weil ich zwei 9. Klassen habe, und weil es sich so ergeben hat, habe ich mir diesmal alles aufgeschrieben. Und ich bin so zufrieden von den Lernfortschritten, dass ich mir vorstellen kann, in den nächsten Jahren ähnlich vorzugehen. Endlich eine dieser Lehrkräfte sein, die nur ihren Ordner vom letzten Jahr herausziehen und immer das gleiche machen!
Das habe ich nämlich noch nie gemacht, in keinem Fach und keiner Klasse. Vielleicht bin ich zu unorganisiert, vielleicht ist der Leidensdruck einfach nicht groß genug, vielleicht würde mich das auch zu sehr langweilen, vielleicht macht es Sinn, die Eigenheiten der Klasse zu berücksichtigen. Deutsch und Englisch eignen sich dafür auch nicht so wie Mathematik, glaube ich. Mit Informatik 9 probiere ich das mal – nachdem ich in in Informatik 10 jedes Jahr andere Ansätze ausprobiert habe und nie damit zufrieden war.
Meine Reihenfolge
Die Inhalte sind arg miteinander verknüpft. Bevor man das eine kann, muss man erst das andere kümmern. Ich habe mir das mal so zusammengeschrieben:

Das erste Projekt
Der Anfang ist dieses fast leere Greenfoot-Projekt:

Da kann man wiederholen: was Klassen sind (rechts) und was Objekte (links); wie man Objekte per Mausklick erzeugt und auf dem Spielfeld platziert, wie man eine gegebene Methode aufruft und wie man eine Unterklasse per Mausklick anlegt. Code dazu ist eigentlich maximal:
- public void act() { }
- move(1)
- turn(1)
- setLocation( getX(), get(Y)+1))
Schwerpunkt ist der Unterschied zwischen dem Anlegen einer Methode und dem Aufruf einer Methode. Damit hat man schon Äpfel, Bananen und Cupcakes, die nach unten oder schräg unten fallen und sich dabei eventuell auch noch drehen. Zu einem vollständigen ersten Spiel fehlt nicht mehr, als man in der zweiten Doppelstunde zeigen kann; geübt wird das dann frei in einer dritten Doppelstunde:
- if (Greenfoot.getRandomNumber(50)==0)
- addObject( new Apfel(), Greenfoot.getRandomNumber(600), 0)
- if (isAtEdge())
- getWorld().removeObject(this)
- if (isTouching(Banane.class))
- removeTouching(Banane.class)
- Greenfoot.stop()
Das kann man zusammenbauen zu einem Bären, der Obst fängt und Hindernissen ausweichen muss. (Die Steuerung des Bären gebe ich durch die Oberklasse vor.) Geübt und varriert wurde das in der dritten Doppelstunde; ich hatte das Gefühl, dass das alles halbwegs sitzt. Die einen haben dabei bereits die Vorteile von Vererbung vorweggenommen (isTouching(Actor.class)), die anderen wollen Punktezähler (dieser Wunsch erleichtert später das Einführen von Attributen) oder den Bären nicht immer von Hand anlegen müssen (womit man bei Konstruktoren ist).

Und schon hat man ein erstes kleines Spiel. Eingeführt dabei: Anlegen von Klassen, Anlegen einer Methode ohne Rückgabeyp und ohne Parameter, Aufruf von Methoden, mit Argumenten oder ohne, erste einfache bedingte Anweisungen, erzeugen von Objekten mit dem new-Operator.
Funktionales Programmieren
All das geht ohne zu deklarierende Attribute oder lokale Variablen. Die schiebe ich diesmal so weit nach hinten wie möglich – und man kann ja in Greenfoot halbwegs Spiele programmieren ohne sie. Das rein funktionale Programmieren ist den Schülern und Schülerinnen ja ohnehin noch von der Tabellenkalkulation her vertraut.
Deshalb ist der nächste Schritt dann auch das Anlegen von Methoden mit Parametern und Rückgabetypen – aber immer noch ohne lokale Variablen. Da werden dann auch bedingte Anweisungen noch einmal aufgegriffen und gefestigt.
Weiterführen des Projekts
Vererbung bietet sich an, und der Bär kann ja jetzt schon schießen, wenn man mit der Tastaturabfrage etwas hilft – und zwar weiterhin alles ohne Variablen. Bären schießen zwar üblicherweise nicht, aber das Bären-Fangspiel ist ja auch nur dann eines, wenn man sich das mit der Grafik so vorstellt. Das exakt gleiche Spielprinzip hat man ja auch bei einem Spiel, in dem man eine Rakete steuert, die von oben herabstürzenden Meteoriten ausweichen oder sie abschießen muss. (Ein Laserstrahl ist ja eigentlich auch nur eine Banane, die nach oben fliegt.) Und es ist genau das gleiche wie ein Auto, das man aus Draufsicht steuert und dabei anderen Verkehrsteilnehmenden ausweichen muss.






Weil Schüler und Schülerinnen nun mal sind, was sie sind, gibt es da auch Katzen, Bomben, Blutflecke im Zusammenhang mit Katzen, Schutzschilde. Die Bilder stammen von Spielen aus der 10. Klasse, die schon weiter sind und insbesondere auch schon Variablen kennen – und die Kommunikation zwischen Objekten, die in 9 ganz außen vor bleibt. (Geholfen habe ich nur mit der automatisch scrollenden Hintergrundgrafik fürs Autorennen, die für das Spiel irrelevant ist, aber hübsch aussieht.) Das waren kleine Zwischendurchprojekte, nicht das größere Projekt zum Schuljahresende.
Später dann mal: Wiederholungen
Hübsche Aufgaben, um das Erlernen von Zählschleifen zu motivieren: Das Aufstellen von Figuren.









(Die letzten drei Aufstellungen benutzen Zufall für Zeilen oder Spalten oder überhaupt.) Spätestens, wenn man das auf ein 20×20-Spielfeld erweitert, wünschen sich die Schüler und Schülerinnen wahrscheinlich eine Abkürzung.
Weitere Spiele ohne Kommunikation zwischen Objekten und ohne Variablen
Ohne heißt: Möglichst wenig jedenfalls. Variablen können und sollen sie später ja anwenden, das mit der Kommunikation zwischen Objekten – also der eigentliche Sinn hinter den ja auch im Lehrplan stehenden leidigen Getter- und Setter-Methoden – kommt erst im Jahr darauf.
So viel Spiele gibt es nicht. Breakout geht noch – aber mehr Möglichkeiten hat man auch da natürlich, wenn die Objekte miteinander kommunizieren dürfen.
Schreibe einen Kommentar