{"id":3538,"date":"2011-12-14T10:53:54","date_gmt":"2011-12-14T09:53:54","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=3538"},"modified":"2023-05-14T11:02:13","modified_gmt":"2023-05-14T09:02:13","slug":"zustandsautomaten-in-der-10-klasse","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2011\/12\/zustandsautomaten-in-der-10-klasse.htm","title":{"rendered":"Zustandsautomaten in der 10. Klasse"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2011\/12\/zustandsautomaten-in-der-10-klasse.htm#comments'>5 Kommentare.<\/a>)<\/small> <\/div>\n<p>Erst etwas Theorie, sp\u00e4ter gibt es etwas zu sehen.<\/p>\n\n\n\n<p>In der 10. Klasse entwirft und programmiert man einfache Zustandsautomaten. Die sehen auf dem Papier gerne mal so aus:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"250\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatAufzug.jpg\" alt=\"\" class=\"wp-image-3539\" title=\"automatAufzug\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatAufzug.jpg 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatAufzug-150x68.jpg 150w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/figure>\n\n\n\n<p>Der Automat (hier ein Fahrstuhl) kann sich in verschiedenen Zust\u00e4nden befinden. Er beginnt im Zustand Erdgeschoss (deshalb zeigt da ein Pfeil hin). Es gibt noch zwei weitere Zust\u00e4nde, Keller und 1. Stock. Der Automat kann seinen Zustand \u00e4ndern, das sind die Pfeile zwischen den Zust\u00e4nden. Wenn der Automat im Zustand &#8222;Erdgeschoss&#8220; ist und die Aktion &#8222;Pfeil nach oben dr\u00fccken&#8220; eintritt, dann springt der Automat in den Zustand &#8222;1. Stock&#8220;.<\/p>\n\n\n\n<p>Es geht aber auch noch komplizierter:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatMarsmaennchen.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"387\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatMarsmaennchen-550x387.jpg\" alt=\"\" class=\"wp-image-3540\" title=\"automatMarsmaennchen\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatMarsmaennchen-550x387.jpg 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatMarsmaennchen-150x105.jpg 150w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatMarsmaennchen-1024x720.jpg 1024w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatMarsmaennchen.jpg 1100w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/figure>\n\n\n\n<p>In diesem Automaten geht es um ein Marsm\u00e4nnchen, das im Zustand Mars (Nr. 4) beginnt. Je nach Aktion (j f\u00fcr Jupiter, p f\u00fcr Pluto, w f\u00fcr Weltall und so weiter) springt das Marsm\u00e4nnchen in einen neuen Zustand, wenn dieser Zustands\u00fcbergang laut Diagramm m\u00f6glich ist.<br>Allerdings gibt es noch zwei Feinheiten:<br>1. F\u00fcr manche Zustands\u00fcberg\u00e4nge gibt es eine Bedingung, die erf\u00fcllt sein muss. Diese Bedingungen sind in rot angegeben. Das Marsm\u00e4nnchen hat n\u00e4mlich eine gewisse Sprungkraft, am Anfang 10. Vom Mars zum Jupiter springen kann es nur, wenn (neben der ausl\u00f6senden Aktion j) seine Kraft mindestens 1 betr\u00e4gt, sonst wird nichts daraus.<br>2. Und zuletzt gibt es manchmal, in dunkelgr\u00fcn angegeben, noch weitere Aktionen, die neben dem Zustands\u00fcbergang ausgel\u00f6st 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.<\/p>\n\n\n\n<p>Einfacher ist das, wenn man es ausprobiert (Java-Applet, l\u00e4uft also nicht \u00fcberall):<br><iframe loading=\"lazy\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat\/index.html\" scrolling=\"no\" width=\"500px\" height=\"400px\" frameborder=\"0\"><\/iframe><br>M\u00f6glich sind die Eingaben: j, p, w (f\u00fcr Weltall), e, n (f\u00fcr Neumond), m und s &#8211; aber nat\u00fcrlich f\u00fchren nicht alle immer zu einem Zustands\u00fcbergang.<\/p>\n\n\n\n<p>Programmiert und gezeichnet haben den Marsm\u00e4nnchen-Automaten (abgesehen von der Ausgabe in einem Fenster, dazu sp\u00e4ter mehr) zwei Sch\u00fclerinnen aus der 10. Klasse. Entstanden sind aber auch noch andere Automaten:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Automat: Feuerwehrmann\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/l-WHSqnzKGI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=ExWJaaJYRkU\">https:\/\/www.youtube.com\/watch?v=ExWJaaJYRkU<\/a><\/p>\n\n\n\n<p>Weitere Automaten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/youtu.be\/-c6_v7gd-xA\">Wasser<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=lBVhCLWOH-I\">Hund<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=-4cYuK6RSpQ\">Alltag<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=kI_TBI_T3WI\">Poker<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=0mmG7Nrvqis\">Boxer<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=l78Ot2EoEiI\">Blume<\/a><\/li>\n<\/ul>\n\n\n\n<p>Programmiert haben die Sch\u00fcler dabei nur den Automaten, und da vor allem die Zustands\u00fcbergangsmethode. Um die grafische Ausgabe habe ich mich gek\u00fcmmert, und zwar so (siehe <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2011\/08\/wie-ich-auszog-ein-spiel-zu-programmieren-2-das-mvc-entwurfsmuster.htm\">Eintrag zu MVC<\/a>):<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"698\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat.png\" alt=\"\" class=\"wp-image-3541\" title=\"automat\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat.png 549w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat-117x150.png 117w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/automat-432x550.png 432w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/figure>\n\n\n\n<p><br><small>(Das ist kein Klassendiagramm, sondern die BlueJ-Oberfl\u00e4che, gibt aber einen Eindruck der Verh\u00e4ltnisse wieder.)<\/small><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Das Marsm\u00e4nnchen (oder was auch immer) hat eine Methode <code>aktionEmpfangen(char)<\/code>. Je nach empfangener Aktion, abgek\u00fcrzt durch einen einzelnen Buchstaben, \u00e4ndert es seinen Zustand und teilt das daraufhin der Welt mit. Das Marsm\u00e4nnchen erbt n\u00e4mlich vom Automaten auch die Sende-F\u00e4higkeit.<\/li>\n\n\n\n<li>Das Sekretariat (das auch ein Empf\u00e4nger ist) empf\u00e4ngt die Nachricht \u00fcber den neuen Zustand und w\u00e4hlt, dem Zustand entsprechend, eine neue Grafik aus, die dargestellt werden soll. Das ist die einzige Klasse, in der Sch\u00fcler etwas schreiben m\u00fcssen: die Namen der Grafiken.<\/li>\n\n\n\n<li>Die Hauptarbeit der Darstellung \u00fcbernimmt 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\u00fchren kann. Das Fenster stellt Textfelder und Kn\u00f6pfe zur Verf\u00fcgung. Wenn ein Knopf gedr\u00fcckt wird, die Information und eventuell der Inhalt des Textfelds an die Steuerung.<\/li>\n\n\n\n<li>Die Steuerung wertet die Eingabe aus. Standardm\u00e4\u00dfig werden nur Eingaben angenommen, die 1 Zeichen lang sind; alles andere f\u00fchrt zu einer R\u00fcckmeldung, dass etwas nicht stimmt. Dieses eine Zeichen wird dann an den Automaten, also das Marsm\u00e4nnchen, weitergeleitet, das daraufhin eventuell seinen Zustand \u00e4ndert &#8211; und immer so weiter. (Man k\u00f6nnte die Steuerung auch zu einem echten \u00dcbersetzer machen: dann m\u00fcsste der Benutzer ganze W\u00f6rter eintippen, also etwa &#8222;Gehe zum Jupiter&#8220;, und die Steuerung w\u00fcrde das in ein &#8218;j&#8216; \u00fcbersetzen und das an den Automaten schicken.<\/li>\n<\/ul>\n\n\n\n<p>Auf Interfaces (und Beobachtermuster) und Zustandsmodellierung mit eigenen Klassen habe ich verzichtet. Es reicht, wenn die Sch\u00fcler in der 10. ein bisschen hineinschnuppern. Herunterladen kann man das BlueJ-Projekt hier (<a href=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/MVC_Automat_verbessert.zip\">neue Version<\/a>), es ist aber sehr sp\u00e4rlich kommentiert (auch die readme.txt lesen!), und im Fall des Fensters auch eher schlampig. GUIs interessieren mich wenig.<br>Wenn es nur um einfache Automaten ginge, k\u00f6nnte man den Sch\u00fclern auch eine Benutzeroberfl\u00e4che schreiben, wo sie nur ihre Bildernamen speichern und die \u00dcberg\u00e4nge mit Mausklicks ausw\u00e4hlen m\u00fcssen, aber es geht ja auch darum, Programmierung zu \u00fcben.<br>Zustandsautomaten kann man immer mal brauchen. Aus einem <a href=\"http:\/\/zurueckindieschule.wordpress.com\/2011\/12\/12\/mission-statement\/\">Kommentar beim Kollegen embee<\/a> habe den Hinweis auf die <a href=\"http:\/\/lameness-prevails.com\/?p=62\">Rolle von Zustandsautomaten bei Comptuerspielen<\/a>.<\/p>\n\n\n\n<p>Wichtig war mir ansonsten auch, dass die Sch\u00fcler ihr Produkt in einem kleinen Video vorstellen, auch wenn ich die nicht alle hier ver\u00f6ffentlichen darf.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(5 Kommentare.) Erst etwas Theorie, sp\u00e4ter 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\u00e4nden befinden. Er beginnt im Zustand Erdgeschoss (deshalb zeigt da ein Pfeil hin). Es gibt noch [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":3539,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227,233,85],"class_list":["post-3538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik","tag-programmierprojekte","tag-vorzeigbares"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/automatAufzug.jpg","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3538"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3538\/revisions"}],"predecessor-version":[{"id":56601,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3538\/revisions\/56601"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/3539"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}