Zustandsautomaten in der 10. Klasse

Erst etwas Theorie, später gibt es etwas zu sehen.

In der 10. Klasse entwirft und programmiert man einfache Zustandsautomaten. Die sehen auf dem Papier gerne mal so aus:

Der Automat (hier ein Fahrstuhl) kann sich in verschiedenen Zuständen befinden. Er beginnt im Zustand Erdgeschoss (deshalb zeigt da ein Pfeil hin). Es gibt noch zwei weitere Zustände, Keller und 1. Stock. Der Automat kann seinen Zustand ändern, das sind die Pfeile zwischen den Zuständen. Wenn der Automat im Zustand „Erdgeschoss“ ist und die Aktion „Pfeil nach oben drücken“ eintritt, dann springt der Automat in den Zustand „1. Stock“.

Es geht aber auch noch komplizierter:

In diesem Automaten geht es um ein Marsmännchen, das im Zustand Mars (Nr. 4) beginnt. Je nach Aktion (j für Jupiter, p für Pluto, w für Weltall und so weiter) springt das Marsmännchen in einen neuen Zustand, wenn dieser Zustandsübergang laut Diagramm möglich ist.
Allerdings gibt es noch zwei Feinheiten:
1. Für manche Zustandsübergänge gibt es eine Bedingung, die erfüllt sein muss. Diese Bedingungen sind in rot angegeben. Das Marsmännchen hat nämlich eine gewisse Sprungkraft, am Anfang 10. Vom Mars zum Jupiter springen kann es nur, wenn (neben der auslösenden Aktion j) seine Kraft mindestens 1 beträgt, sonst wird nichts daraus.
2. Und zuletzt gibt es manchmal, in dunkelgrün angegeben, noch weitere Aktionen, die neben dem Zustandsübergang ausgelöst werden. Im Fall vom Sprung von Mars zu Jupiter steht da etwa, dass sich die Kraft um 1 verringert, beim Sprung vom Weltall (Nr. 7) zum Mars (Nr. 4) sind es sogar 5 Punkte. Manche Reisen sind allerdings umsonst. Auftanken kann man nur auf dem Mond, wenn man den erreicht, wir die Kraft wieder auf 10 gesetzt. Wenn man irgendwo auf einem Planeten festsitzt und nicht genug Kraft hat um wegzukommen, ja, dann hat man Pech gehabt.

Einfacher ist das, wenn man es ausprobiert (Java-Applet, läuft also nicht überall):

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

Möglich sind die Eingaben: j, p, w (für Weltall), e, n (für Neumond), m und s – aber natürlich führen nicht alle immer zu einem Zustandsübergang.

Programmiert und gezeichnet haben den Marsmännchen-Automaten (abgesehen von der Ausgabe in einem Fenster, dazu später mehr) zwei Schülerinnen aus der 10. Klasse. Entstanden sind aber auch noch andere Automaten:

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.
Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

Weitere Automaten:

Programmiert haben die Schüler dabei nur den Automaten, und da vor allem die Zustandsübergangsmethode. Um die grafische Ausgabe habe ich mich gekümmert, und zwar so (siehe Eintrag zu MVC):


(Das ist kein Klassendiagramm, sondern die BlueJ-Oberfläche, gibt aber einen Eindruck der Verhältnisse wieder.)

  • Das Marsmännchen (oder was auch immer) hat eine Methode aktionEmpfangen(char). Je nach empfangener Aktion, abgekürzt durch einen einzelnen Buchstaben, ändert es seinen Zustand und teilt das daraufhin der Welt mit. Das Marsmännchen erbt nämlich vom Automaten auch die Sende-Fähigkeit.
  • Das Sekretariat (das auch ein Empfänger ist) empfängt die Nachricht über den neuen Zustand und wählt, dem Zustand entsprechend, eine neue Grafik aus, die dargestellt werden soll. Das ist die einzige Klasse, in der Schüler etwas schreiben müssen: die Namen der Grafiken.
  • Die Hauptarbeit der Darstellung übernimmt das Fenster. Der Fensterboss ist nur dazu da, damit man ein- und dasselbe Programm sowohl als Applet (also in einer Webseite) wie auch als eigenes Programm ausführen kann. Das Fenster stellt Textfelder und Knöpfe zur Verfügung. Wenn ein Knopf gedrückt wird, die Information und eventuell der Inhalt des Textfelds an die Steuerung.
  • Die Steuerung wertet die Eingabe aus. Standardmäßig werden nur Eingaben angenommen, die 1 Zeichen lang sind; alles andere führt zu einer Rückmeldung, dass etwas nicht stimmt. Dieses eine Zeichen wird dann an den Automaten, also das Marsmännchen, weitergeleitet, das daraufhin eventuell seinen Zustand ändert – und immer so weiter. (Man könnte die Steuerung auch zu einem echten Übersetzer machen: dann müsste der Benutzer ganze Wörter eintippen, also etwa „Gehe zum Jupiter“, und die Steuerung würde das in ein ‚j‘ übersetzen und das an den Automaten schicken.

Auf Interfaces (und Beobachtermuster) und Zustandsmodellierung mit eigenen Klassen habe ich verzichtet. Es reicht, wenn die Schüler in der 10. ein bisschen hineinschnuppern. Herunterladen kann man das BlueJ-Projekt hier (neue Version), es ist aber sehr spärlich kommentiert (auch die readme.txt lesen!), und im Fall des Fensters auch eher schlampig. GUIs interessieren mich wenig.
Wenn es nur um einfache Automaten ginge, könnte man den Schülern auch eine Benutzeroberfläche schreiben, wo sie nur ihre Bildernamen speichern und die Übergänge mit Mausklicks auswählen müssen, aber es geht ja auch darum, Programmierung zu üben.
Zustandsautomaten kann man immer mal brauchen. Aus einem Kommentar beim Kollegen embee habe den Hinweis auf die Rolle von Zustandsautomaten bei Comptuerspielen.

Wichtig war mir ansonsten auch, dass die Schüler ihr Produkt in einem kleinen Video vorstellen, auch wenn ich die nicht alle hier veröffentlichen darf.

Tagged: Tags

5 Thoughts to “Zustandsautomaten in der 10. Klasse

  1. Coooool! Und beruhigend, dass das in der elften Klasse vorbereitet wurde. Meine Zehntklässler kämpfen noch mit so rudimentären Probleme wie Zählschleifen.
    Zustandsautomaten wie hier dargestellt kenne ich jetzt nur aus der zwölften Klasse. Da habe meine Schüler unterschiedliche Implementierungen ausprobieren lassen: Verschachtelte if-then-elsif, switch, Zustands-Entwurfsmuster. Aber deine Idee finde ich super! Wenn gleich ich die Oberfläche merkwürdig finde. Warum sind rechts so viele Buttons?
    Ich hatte ürbigens gleich eine weitere Idee: Textadventures! Statt der Bilder werden die Räume beschrieben in die man gehen kann. Vielleicht kann man dann noch die theoretische Informatik in Bezug auf Sprachen in der zwölften so ein bisschen motivieren. Denn den Text, den der User oben dann eingeben kann muss eine bestimmte Struktur haben: „Gehe links“, „Gehe rechts“, „nehme Gegenstand“ usw. Mal drüber nachdenken.

  2. Meine Zehntklässler können noch gar keine Zählschleifen. Bei diesem meinem vierten Versuch in dieser Jahrgangsstufe hebe ich mir das Schwierige am Programmieren geschlossen fürs zweite Halbjahr auf: Schleifen und Arrays und Algorithmik. Ich trenne das probeweise mal von der Objektorientierung an sich – sinnvoll wäre meiner Meinung nach ohnehin, Schleifen, Arrays und Algorithmik in der 9. Klasse vorzubereiten, und zwar weitgehend ohne OO.

    Die Oberfläche: damit habe ich mir nicht viel Mühe gegeben, aber sie ließe sich ja leicht ersetzen. Die vier leeren Knöpfe sind dazu da, um Schüler auf die Idee zu bringen, man könnte doch da slästige Eintippen etwa von n, s, o und w durch entsprechende Knöpfe ersetzen. Hat aber keiner verlangt, also gab’s das auch nicht.

    Textadventures: Es gibt ein BlueJ-Musterprojekt dazu, das man erweitern könnte. Ich habe es mal erweitert und aktualisiert, aber nie damit gearbeitet.
    Denn: fürs ernsthafte Programmieren von Spielen – also nicht primär als Didaktikinstrument – gibt es TADS 3 (klassische OO-Sprache zum Entwickeln), ADRIFT (nur Windows, mit Drag-and-Drop-Oberfläche statt Syntaxfehlern) und, wenn deine Schüler Englisch können und du dir ungläubig die Augen reiben möchtest, Inform 7 – zu letzterem hoffe ich dringend mal einen Aufsatz zu schreiben.

    („Nehme Gegenstand“: dafür müsste es in Grammatikkreisen inzwischen einen eigenen Begriff geben, „IT-Imperativ“ oder so ähnlich. Der verdrängt das alte „nimm“ nach und nach.)

    –Ach ja, eben Fehler verbessert: oben stand an einer Stelle im Text 11. Klasse, aber das war natürlich auch in der 10. Klasse. Man könnte eventuell in 12 noch einmal darauf zurückkommen.

  3. Ganz großes Tennis!
    Besonders toll finde ich die Bilder zur schnellen Charakterisierung eines Zustands und als Konsequenz davon die Möglichkeit, solche tollen Videos machen zu lassen. Sehr beeindruckend.

  4. Ich habe auch rechtlange ohne Schleifen, Arrays etc. durchgehalten. Aber ohne geht es einfach nicht. Ich will nämlich demnächst auch Spiele mit meinen Schülern in der Zehnten entwickeln und dazu brauchen die das.

    TADS3 sieht interessant aus, auch weil es auf Macs läuft.

    ADRIFT sieht ähnlich aus und läuft immerhin unter Linux.

    Inform7 sieht am besten aus, da OSX ganz oben steht ;) Würde ich daher auch mal am ehesten austesten.

    Wenn es sonst um Spiele geht, nehme ich Scratch in der siebten Klasse und sonst mal GameMaker. Bei beiden brauche ich nicht wirklich zu Programmieren. Vor allem bei GameMaker brauche ich wenig.

    Das mit dem Verschieben der Schleifen in die neunte Klasse sehe ich ürbigens ähnlich. Wegen mir könnte man das Programmieren in der siebten Klasse streichen und lieber Grundlagen von Excel oä. machen, das brauchen nämlich alle(!) später in Mathematik/Physik bei „der Methode der kleinen Schritte“. Dann könnte man in 9/1 in DB einführen und Klassen und Klassendiagramme schön einführen. In 9/2 dann prozedurales Programmieren mit Schleifen und Arrays. Somit wäre in der zehnten Klasse genügend Zeit sich in Ruhe aufs Modellieren und Programmieren und vor allem auf ein schönes(!), komplexes Pojekt mit GUI und DB zu konzentrieren.

  5. Wenn ich Deutschlehrer wäre, würde ich im Rahmen von „Kreatives Schreiben“ vielleicht auch mal http://www.renpy.org/ ausprobieren. Bietet auf den ersten Blick erst mal nur sehr wenig Interaktion, dafür viel Multimedia und eine super einfache Beschreibungssprache. Und hat Python in der Hinterhand, wenn man, was ich vermute, recht schnell an die Grenzen der DSL stößt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.