Programmierung verteilter Systeme
Programmierung verteilter Systeme
Programmierung verteilter Systeme
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Didaktische Umsetzung des Themas<br />
„<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong>“ für den<br />
Informatikunterricht der S II<br />
Schriftliche Hausarbeit im Rahmen der Ersten Staatsprüfung für das Lehramt<br />
für die Sekundarstufen I und II<br />
Dem Staatlichen Prüfungsamt für Erste Staatsprüfungen für Lehrämter an<br />
Schulen Duisburg vorgelegt von<br />
Niels Pinkwart<br />
(Duisburg, Mai 1999)<br />
Themensteller:<br />
Prof. Dr. H.U. Hoppe<br />
(Gerhard-Mercator-Universität GH Duisburg,<br />
Fachbereich Mathematik, Fachgebiet Informatik)
Inhaltsverzeichnis<br />
Inhaltsverzeichnis<br />
Seite<br />
1 Einleitung 4<br />
2 Verteilte <strong>Systeme</strong> 7<br />
2.1 Geschichtliche Entwicklung 7<br />
2.2 Definition 8<br />
2.3 Eigenschaften <strong>verteilter</strong> <strong>Systeme</strong> 9<br />
2.3.1 Verteilungsgrad 9<br />
2.3.2 Raum und Zeit 10<br />
2.3.3 Architektur 11<br />
2.3.4 Transparenz 12<br />
2.3.5 Kommunikation 13<br />
2.3.6 Schnittstellen und Protokolle 13<br />
2.3.7 Synchronisation und Nebenläufigkeit 15<br />
2.4 Vor- und Nachteile von Verteilung 16<br />
2.4.1 Vorteile 17<br />
2.4.2 Nachteile und Probleme 18<br />
2.5 Beispiele 20<br />
2.5.1 Flugzeugsteuerung 20<br />
2.5.2 Rechnerverbundsystem von Reiseunternehmen 21<br />
2.5.3 E-Mail 22<br />
2.5.4 Groupware 22<br />
3 Didaktik der verteilten <strong>Systeme</strong> 24<br />
3.1 Einordnung in die Fachdidaktik 24<br />
3.2 Behandlung im Unterricht 28<br />
3.2.1 Analytischer Zugang: Vergleich <strong>verteilter</strong> <strong>Systeme</strong> 29<br />
3.2.2 Theoretischer Zugang: Nebenläufige Prozesse 30<br />
3.2.3 Algorithmischer Zugang: Protokolle 31<br />
3.3 Der Programmieransatz 32<br />
3.4 Lehrplanbezug 34<br />
3.4.1 Grundkurs 34<br />
3.4.2 Leistungskurs 35<br />
3.5 Fazit 36<br />
4 Die „Robots“-Umgebung 38<br />
4.1 Kurzbeschreibung 38<br />
4.2 Grundlegende Konzepte des Aufbaus 39<br />
4.2.1 Spielfeld: Positionen und Attribute 39<br />
4.2.2 Akteure: Roboter und Spieler 40<br />
4.2.3 Aktionen 42<br />
4.2.4 Regelwerke 43<br />
4.2.5 Hilfen für den Roboter 45<br />
4.3 Beispiele 46<br />
4.3.1 Roboter 46<br />
4.3.2 Spiel „Goldsuche“ 48<br />
4.3.3 Spiel „Winterspiele“ 49<br />
4.3.4 Spiel „Erobere die Fahne“ 50<br />
5 Einzelheiten zu „Robots“ 52<br />
5.1 Informatische Aspekte 52<br />
5.2 Didaktische Aspekte 54<br />
5.3 Einsatzmöglichkeiten 55<br />
5.3.1 Interaktiv gesteuertes Spiel 55<br />
5.3.2 Algorithmen I: einfache Robotersteuerung 56<br />
Seite 2
Inhaltsverzeichnis<br />
5.3.3 Algorithmen II: kommunizierende Roboter 57<br />
5.3.4 Entwicklung eigener Spiele 58<br />
5.3.5 Java-RMI verstehen: der Quellcode 58<br />
5.4 Grenzen 59<br />
5.4.1 Die lokale Sicht 59<br />
5.4.2 Roboter als autonome Agenten 59<br />
5.4.3 Fazit 60<br />
6 Unterrichtssequenz 61<br />
6.1 Voraussetzungen und Zielgruppe 61<br />
6.2 Grobstruktur 61<br />
6.3 Feinstruktur 63<br />
6.4 Anschlussmöglichkeiten 72<br />
6.4.1 Petri-Netze 72<br />
6.4.2 Datensicherheit 72<br />
6.4.3 Java-RMI 73<br />
6.4.4 Architekturen 73<br />
6.5 Leistungsbewertung 74<br />
6.5.1 Mitarbeit im Unterricht 74<br />
6.5.2 Klausur 75<br />
7 Alternativen 78<br />
7.1 Inhalte 78<br />
7.2 Java MatchMaker 80<br />
7.3 JavaSpaces 82<br />
7.4 AgentSheets 83<br />
8 Zusammenfassung und Ausblick 86<br />
8.1 Zusammenfassung 86<br />
8.2 Einsatzbericht 87<br />
8.2.1 Allgemeines 87<br />
8.2.2 Zeitplanung 88<br />
8.2.3 Entwickeltes Spiel 89<br />
8.2.4 Entwickelter Roboteralgorithmus 91<br />
8.2.5 Schlussfolgerungen 93<br />
8.3 Ausblick 94<br />
8.3.1 Tendenzen <strong>verteilter</strong> <strong>Systeme</strong>: Jini 94<br />
8.3.2 Schulanwendungen 95<br />
8.3.3 Perspektiven in der Robots -Umgebung 96<br />
Anhang A: Robots-Dokumentation 99<br />
A.1 Systemanforderungen und Installation 99<br />
A.2 Server: Starten eines Spiels 100<br />
A.3 Client: Verbinden mit einem Spiel 102<br />
A.4 Struktur des Programms 105<br />
A.5 Wichtigste Variablen und Methoden 110<br />
Anhang B: Literaturverzeichnis 118<br />
Anhang C: Erklärungen 121<br />
Anlage : Diskette mit Robots-Programm<br />
Seite 3
Einleitung<br />
1 Einleitung<br />
Why build distributed systems ?<br />
People are distributed, information is distributed.<br />
(Sape Mullender)<br />
In vielen Bereichen des täglichen Lebens werden heute Computer benutzt –<br />
teils bewusst wie beim Zugriff auf das Internet, teils eher unbewusst wie beim<br />
Fahren eines Autos mit modernen computerunterstützten Fahrhilfen. Bei vielen<br />
dieser Anwendungen kooperieren mehrere, auf verschiedene Rechner verteilte<br />
Prozesse miteinander. Die Untersuchung der Zusammenarbeit dieser Prozesse<br />
ist Gegenstand des Gebiets der verteilten <strong>Systeme</strong>.<br />
Dieses ist in der Informatik kein Neuland mehr. In Bereichen wie Algorithmik,<br />
theoretischer oder technischer Informatik sind Einflüsse der zunehmenden<br />
Vernetzung von Computern mit dem Ziel der Ermöglichung von<br />
kooperierenden und miteinander kommunizierenden Anwendungen deutlich.<br />
Auch stehen Veranstaltungen mit dem Thema „verteilte <strong>Systeme</strong>“ an einigen<br />
Universitäten im Vorlesungsprogramm.<br />
Im Schulbereich hingegen werden verteilte <strong>Systeme</strong> bis heute nicht behandelt,<br />
und auch grundlegende didaktische Untersuchungen über verteilte <strong>Systeme</strong><br />
fehlen noch. Ziel dieser Ausarbeitung ist es, das Gebiet der verteilten <strong>Systeme</strong><br />
als Gegenstand des Informatikunterrichts der Sekundarstufe II zu analysieren<br />
und einen möglichen Ansatz, der auf der <strong>Programmierung</strong> innerhalb einer<br />
verteilten Spielumgebung beruht, aufzuzeigen.<br />
Zunächst werden dazu im folgenden Kapitel die wichtigsten informatischen<br />
Grundlagen <strong>verteilter</strong> <strong>Systeme</strong> angegeben. Neben einer Begriffsdefinition wird<br />
auf die im Nachfolgenden relevanten Eigenschaften (z.B. Architekturform,<br />
Transparenzbegriff, Kommunikationsarten) <strong>verteilter</strong> <strong>Systeme</strong> eingegangen.<br />
Zentrale, für einen Einsatz im Informatikunterricht wichtige Themenbereiche<br />
wie Protokolle und Synchronisation werden ebenso erläutert.<br />
Seite 4
Einleitung<br />
In Kapitel 3 werden dann die didaktischen Aspekte <strong>verteilter</strong> <strong>Systeme</strong><br />
untersucht. Ausgehend von fünf generellen Thesen zum Bildungswert der<br />
Informatik wird eine Einordnung der Relevanz <strong>verteilter</strong> <strong>Systeme</strong> für die<br />
Schulinformatik gegeben. Daran anschließend werden drei kurze Beispiele für<br />
unterschiedliche Unterrichtsszenarien angeführt. Der Ansatz, verteilte <strong>Systeme</strong><br />
über Programmiertätigkeit im Unterricht zu behandeln, wird vorgestellt und<br />
begründet. Weiterhin findet sich in Kapitel 3 eine Darstellung des<br />
Lehrplanbezugs hinsichtlich Grundkurs und Leistungskurs.<br />
In den Kapiteln 4 und 5 wird dann die Robots-Umgebung vorgestellt,<br />
innerhalb derer die <strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong> im Informatikunterricht<br />
ablaufen könnte. Kapitel 4 enthält eine Kurzbeschreibung von Robots sowie<br />
eine Angabe der grundlegenden Konzepte (Spielfeld, Roboter, Aktionen und<br />
Regelwerke). Auch werden Beispiele für Roboter und Spielregeln gezeigt.<br />
In Kapitel 5 werden zunächst einige informatische Aspekte (Struktur des<br />
Programms, Kommunikationsform, Architektur) und didaktische<br />
Möglichkeiten vom Robots-System beschrieben. Nachfolgend werden fünf<br />
Stufen der Verwendung von Robots im Informatikunterricht skizziert, die von<br />
der einfachen Verwendung als Spiel über die <strong>Programmierung</strong> von<br />
kooperierenden Agenten bis hin zur Analyse des RMI-Mechanismus gehen.<br />
Daran anschließend findet sich eine Analyse der Grenzen von Robots<br />
hinsichtlich der realisierbaren Spiele (oder allgemein: Simulationen).<br />
Auf die erzielten Ergebnisse und Analysen aufbauend wird in Kapitel 6 ein<br />
Beispiel für eine Unterrichtsreihe zum Thema „<strong>Programmierung</strong> <strong>verteilter</strong><br />
<strong>Systeme</strong>“ angegeben. Die Reihe ist für einen Informatik-Leistungskurs der<br />
Jahrgangsstufe 12 oder 13 konzipiert und beinhaltet thematisch die<br />
<strong>Programmierung</strong> kooperierender Roboteralgorithmen, den Entwurf und die<br />
Implementierung von Spielregeln sowie die Erstellung von<br />
Synchronisationsstategien für nebenläufige Prozesse. Es werden vier<br />
verschiedene Anschlussmöglichkeiten an die Unterrichtsreihe angegeben und<br />
die Frage der Leistungsbewertung diskutiert.<br />
Seite 5
Einleitung<br />
Kapitel 7 enthält Alternativmodelle zu Robots. Im Rahmen des<br />
Unterrichtsthemas „<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong>“ werden zunächst<br />
andere mögliche Unterrichtsinhalte angegeben und bewertet. Nachfolgend<br />
werden Java MatchMaker und JavaSpaces, zwei Tools zur Unterstützung der<br />
Erstellung von verteilten Anwendungen vorgestellt. Zwar wird keines der<br />
beiden wird im Robots-System verwendet, dennoch stellen sowohl der<br />
MatchMaker als auch JavaSpaces sinnvolle Alternativen zur direkten<br />
Verwendung von Java-RMI dar. Kapitel 7 schließt mit der Beschreibung von<br />
AgentSheets – einer verteilten Umgebung, die in einigen Punkten Ähnlichkeit<br />
mit Robots hat.<br />
In Kapitel 8 werden abschließend die Ergebnisse dieser Ausarbeitung<br />
zusammengefasst und einige Ausblicke gegeben. Weiterhin findet sich hier ein<br />
Bericht über den Einsatz der Robots-Umgebung im Rahmen der<br />
Modellierungswoche 1999 an der Universität Duisburg.<br />
Seite 6
Verteilte <strong>Systeme</strong><br />
2 Verteilte <strong>Systeme</strong><br />
In diesem Kapitel werden die wichtigsten informatischen Aspekte von<br />
verteilten <strong>Systeme</strong>n erläutert. Angefangen mit einer kurzen geschichtlichen<br />
Einordnung, die notwendigerweise übersichtsartig bleibt und keinen Anspruch<br />
auf Vollständigkeit hat, werden Definition und zentrale Eigenschaften<br />
<strong>verteilter</strong> <strong>Systeme</strong> angegeben.<br />
2.1 Geschichtliche Entwicklung<br />
In den letzten Jahrzehnten machten sowohl die Computertechnik als auch die<br />
Informatik rasante Entwicklungen durch. Wichtig für die Entwicklung des<br />
Gebiets der verteilten <strong>Systeme</strong> ist hierbei die Art und Weise, in der Computer<br />
in den einzelnen Zeitabschnitten genutzt worden sind.<br />
In den 50er Jahren wurde die Zeit der Computerbenutzung unter den<br />
Programmierern aufgeteilt. Der jeweilige Benutzer hatte den Computer<br />
innerhalb seines Zeitintervalls für sich zur alleinigen Verfügung.<br />
Dieses Prinzip wurde auch in den 60er Jahren zunächst weiterverfolgt, wenn<br />
auch durch die Entwicklung von Batchsystemen erweitert. Durch diese war es<br />
möglich, Ein- und Ausgabe eines Programms zu unterschiedlichen Zeiten zu<br />
realisieren.<br />
In den 70er Jahren hielten „Tíme-Sharing“-<strong>Systeme</strong> ihren Einzug. An<br />
verschiedenen Terminals konnten mehrere Benutzer zeitgleich auf einem<br />
Großrechner arbeiten. Jeder dieser Benutzer hatte dabei den Eindruck, an<br />
einem eigenen Rechner zu arbeiten, Verbindungen zu anderen Benutzern<br />
existierten nicht.<br />
Dies war auch in den 80er Jahren noch nicht der Fall, in denen die Terminals<br />
durch Arbeitsstationen mit eigenem Prozessor ersetzt wurden. Dieser Schritt<br />
war hauptsächlich wirtschaftlich bedingt. Die Verwendung von vielen<br />
Seite 7
Verteilte <strong>Systeme</strong><br />
Einzelrechnern war sowohl in der Anschaffung als auch beim Aufrüsten des<br />
Systems günstiger als die Benutzung eines Großrechners [Mullender].<br />
In den 90er Jahren wurden die Arbeitsstationen schließlich vernetzt, jeder<br />
Benutzer hatte prinzipiell die Möglichkeit, sowohl auf den eigenen Rechner als<br />
auch auf über das Netz verfügbare Ressourcen (z.B. Festplatten, Drucker,<br />
Rechenzeit) zuzugreifen.<br />
Diese technischen Voraussetzungen bildeten die Basis für die Entstehung von<br />
verteilten <strong>Systeme</strong>n, die über die reine Nutzung von Netzressourcen<br />
hinausgehen und eine Kooperation von verschiedenen, im Netz verteilten<br />
Anwendungen beinhalten.<br />
2.2 Definition<br />
Obwohl mittlerweile eine große Menge von Literatur über verteilte <strong>Systeme</strong><br />
existiert, ist doch eine präzise Definition des Begriffs „verteiltes System“ nur<br />
schwer zu finden. Einige Autoren drücken dies auch direkt aus:<br />
• „Verteilte Verarbeitung ist ein relativ neues Gebiet, und es gibt bisher keine<br />
allgemein gültige Definition.“ [Sloman/Kramer]<br />
• „It is dangerous to attempt an exact definition of a distributed system.“<br />
[Mullender]<br />
• „The distinction between distributed systems and centralized ones is not<br />
precisely defined ... There is no single characteristic or rule that<br />
distinguishes distributed systems.“ [Coulouris/Dollimore]<br />
Die Schwierigkeit einer exakten Definition wird hauptsächlich daraus<br />
abgeleitet, dass das Gebiet der verteilten <strong>Systeme</strong> sehr groß und vielfältig ist<br />
(siehe Beispiele in Abschnitt 2.5) und dass mithin jede Formalisierung eine<br />
künstliche Einschränkung bedeuten würde.<br />
Insbesondere die Fragestellung, welche Komponenten eines Systems (z.B.<br />
Hardware, Daten, Kontrolle oder Verarbeitung) in welchem Grad verteilt sein<br />
Seite 8
Verteilte <strong>Systeme</strong><br />
müssen, damit das System als Ganzes als verteilt bezeichnet werden kann, ist<br />
nur schwer zu beantworten.<br />
Aus diesem Grund ziehen viele Autoren eher eine Merkmalsdefinition heran.<br />
Ein verteiltes System wird durch seine Eigenschaften (siehe 2.3 und 2.4) als ein<br />
solches charakterisiert (z.B. [Mullender], [Coulouris/Dollimore] und [Mattern]).<br />
Im Rahmen dieser Arbeit werde ich eine leicht veränderte Version der von<br />
Sloman/Kramer gegebenen Definition zugrunde legen:<br />
Ein verteiltes System besteht aus mehreren, nicht notwendig<br />
verschiedenen, miteinander kooperierenden Anwendungen, die in der<br />
Regel auf verschiedenen Computern laufen und zusammen in der Lage<br />
sind, ein gemeinsames Ziel zu erreichen.<br />
2.3 Eigenschaften <strong>verteilter</strong> <strong>Systeme</strong><br />
In den folgenden Abschnitten werden Unterscheidungsmöglichkeiten von<br />
verteilten <strong>Systeme</strong>n nach Grad und Art der Verteilung sowie wichtige<br />
Eigenschaften und Charakteristika kurz erörtert. Die Beschreibung bleibt<br />
hierbei auf die wesentlichen, für die nachfolgenden Kapitel bedeutsamen<br />
Punkte begrenzt.<br />
2.3.1 Verteilungsgrad<br />
Wie bereits in 2.2 angedeutet, können <strong>Systeme</strong> auf durchaus verschiedenen<br />
Ebenen verteilt sein. Enslow stellte hierzu ein Modell auf, das die Ebenen der<br />
Hardware, der Kontrolle und der Daten berücksichtigt. Hiernach besitzt ein<br />
System auf jeder dieser Ebenen einen Verteilungsgrad. Die Charakterisierung<br />
eines Systems kann durch die Analyse dieser Grade erfolgen, als „vollständig<br />
verteilt“ wäre ein System mit höchstem Verteilungsgrad auf allen Ebenen zu<br />
bezeichnen.<br />
Seite 9
Verteilte <strong>Systeme</strong><br />
völlig autonome<br />
Prozesse<br />
Master/Slave-<br />
Beziehung<br />
Kontrolle<br />
Daten<br />
Daten vollständig<br />
repliziert<br />
Hardware<br />
alle Komponenten<br />
auf einem Rechner<br />
Dimensionen der Verteilung nach Enslow<br />
nur lokale<br />
Daten<br />
lokal verteilte<br />
Komponenten<br />
In der neueren Literatur (z.B. [Borghoff/Schlichter]) werden dem Modell noch<br />
weitere Ebenen wie die Verarbeitung oder die Last hinzugefügt, an dem<br />
zugrundeliegenden Prinzip ändert sich dadurch jedoch nur wenig. Ein verteiltes<br />
System kann durch seinen Verteilungsgrad in jeder der betrachteten Ebenen<br />
charakterisiert werden.<br />
2.3.2 Raum und Zeit<br />
Eine weitere Charakterisierung <strong>verteilter</strong> <strong>Systeme</strong> ist durch die Komponenten<br />
Zeit und Raum möglich:<br />
• Ist das System dazu gedacht, von den Anwendern überwiegend zeitgleich<br />
genutzt zu werden oder nicht ?<br />
• Befinden sich die potentiellen Benutzer des Systems in räumlicher Nähe<br />
zueinander oder ist das System eher dazu geeignet, unter großer, ggf. bis zu<br />
weltweiter, Benutzerdistanz verwendet zu werden ?<br />
Bei zeitgleicher Nutzung wird das System als synchron, im anderen Fall als<br />
asynchron bezeichnet (detailliertere Darstellung bei Witzel). Dass die zeitliche<br />
Komponente durchaus unabhängig von der räumlichen ist, verdeutlichen<br />
folgende Beispiele:<br />
Seite 10
Verteilte <strong>Systeme</strong><br />
zeitlich<br />
asynchron<br />
zeitlich<br />
synchron<br />
moderne Bürosoftware E-Mail<br />
betriebliche Fertigungssteuerung<br />
Computerintegrierter Klassenraum<br />
Verbundsystem von Reisebüros<br />
Netzwerkspiele<br />
Flugzeugsteuerung Computerkonferenzen<br />
räumliche<br />
Nähe<br />
2.3.3 Architektur<br />
räumliche<br />
Distanz<br />
räumliche und zeitliche (A-)Synchronität in Beispielen<br />
Neben der physikalischen Topologie des von einem verteilten System<br />
benutzten Kommunikationsnetzwerkes lässt sich eine logische Architektur<br />
definieren, in der zwei Komponenten dann miteinander verbunden sind, wenn<br />
zwischen ihnen ein Informationsfluss vorliegt. Wie schon in 2.3.1 unter dem<br />
Aspekt der Kontrolle angedeutet, existieren zwei gegensätzliche<br />
Architekturformen, wobei <strong>Systeme</strong> durchaus auch auf Mischformen dieser<br />
Architekturen aufbauen können:<br />
Ein zentralisiertes System besteht aus einem Server und mehreren Clients. Die<br />
Funktion des Servers kann von der reinen Bereitstellung von Diensten bis hin<br />
zur völligen Kontrolle des Programmablaufs (sog. Master/Slave-Beziehung)<br />
gehen, auch wenn in letzterer Form der Verteilungsgrad des Systems potentiell<br />
eher gering sein dürfte.<br />
Der Informationsfluss in zentralisierten <strong>Systeme</strong>n findet in der Regel nur<br />
zwischen Server und Client statt, ein Nachteil dieser Architektur ist der Ausfall<br />
des Systems bei Serverdefekt. Dafür sind für gewisse Anwendungen ggf.<br />
nötige Ablaufsteuerungen einfach (serverseitig) zu realisieren.<br />
Seite 11
Verteilte <strong>Systeme</strong><br />
In dezentralen <strong>Systeme</strong>n existiert keine globale Kontrollinstanz. Die Prozesse<br />
kommunizieren ohne „Serverumweg“ direkt miteinander. Dieser<br />
Architekturtyp bringt im Vergleich zu zentralisierten <strong>Systeme</strong>n eine bessere<br />
Lastenteilung (kein stark belasteter Server), ein höheres Geschwindigkeits-<br />
potential durch Wegfall des z.T. unnötigen Serverumwegs und einen größeren<br />
Verteilungsgrad, allerdings sind Probleme der Nebenläufigkeit von Prozessen<br />
(siehe 2.3.7) von eminenter Bedeutung [Herrtwich/Hommel].<br />
2.3.4 Transparenz<br />
Eine zentrale Eigenschaft <strong>verteilter</strong> <strong>Systeme</strong> ist deren Transparenz. Unter<br />
Transparenz wird die „Unsichtbarkeit“ der Verteiltheit des Systems für den<br />
Benutzer verstanden: bei Verwendung von Systemkomponenten sollte nicht die<br />
Struktur des Systems im Vordergrund stehen, sondern die Funktionalität.<br />
Konsequenzen werden von Borghoff/Schlichter und Coulouris/Dollimore aufgezeigt.<br />
Beispiele:<br />
• Zugriffstransparenz: Die Syntax des Zugriffs auf lokale<br />
Systemkomponenten unterscheidet sich von der des Zugriff auf<br />
Netzkomponenten nicht (z.B. Zugriff auf Dateien generell über „open“)<br />
• Ortstransparenz: Der Zugriff auf Netzressourcen ist ohne Wissen des<br />
genauen Lagerungsortes möglich. Beispiel: Netzwerkdrucker werden über<br />
Namen angesprochen<br />
• Fehlertransparenz: Das System verheimlicht, wenn möglich, aufgetretene<br />
Fehler vor dem Benutzer, dieser kann normal weiterarbeiten. Bsp.: Ein<br />
System verwendet replizierte Daten, bei Ausfall einer Festplatte wird<br />
automatisch eine der bestehenden Kopien verwendet<br />
Die Transparenz eines Systems charakterisierte Lamport relativ ironisch:<br />
„Verteilte <strong>Systeme</strong> sind <strong>Systeme</strong>, in denen ich durch den Ausfall einer<br />
Komponente, von deren Existenz ich bisher nichts wusste, in meiner Arbeit<br />
beeinträchtigt werde“.<br />
Seite 12
Verteilte <strong>Systeme</strong><br />
2.3.5 Kommunikation<br />
Die Kommunikation zwischen den Teilkomponenten ist eine der wichtigsten<br />
Eigenschaften eines verteilten Systems, da ohne Kommunikation keine echte<br />
Kooperation (siehe Definition in 2.2) möglich ist.<br />
Nach heutigem Stand werden im Wesentlichen drei Techniken zur<br />
Realisierung der Kommunikation eingesetzt:<br />
1. Nachrichten<br />
Die einzelnen Prozesse im System senden sich gegenseitig Nachrichten.<br />
Dabei müssen die Empfängerprozesse Routinen zur Bearbeitung der<br />
Nachrichten zur Verfügung stellen, außerdem ist eine genaue Spezifikation<br />
der Semantik der verwendeten Nachrichten nötig (siehe Schnittstellen,<br />
2.3.6)<br />
2. Remote Procedure Call (RPC)<br />
Beim RPC wie bei der objektorientierten Variante, der Remote Method<br />
Invocation (RMI), veranlasst ein Prozess die Ausführung einer Prozedur<br />
bzw. Methode eines anderen Prozesses, der (allerdings nicht notwendig)<br />
auf einem anderen Rechner läuft. Wie beim Nachrichtenverkehr muss auch<br />
hier die Semantik der aufgerufenen Prozeduren klar definiert sein,<br />
weiterhin müssen Datentypen (Parameter und Ergebnistyp) bekannt sein<br />
(siehe Schnittstellen, 2.3.6).<br />
3. gemeinsame Daten<br />
Bei dieser Kommunikationsform nutzen die Prozesse eine gemeinsame<br />
Datenumgebung. Hier sind Aspekte der Synchronisation und<br />
Nebenläufigkeit (siehe 2.3.7) von besonderer Bedeutung, da die Gefahr von<br />
Dateninkonsistenz oder –verlust droht.<br />
2.3.6 Schnittstellen und Protokolle<br />
Schnittstellen und Protokolle dienen aus informatischer Sicht generell dazu, die<br />
Kommunikationsmöglichkeiten zwischen verschiedenen Komponenten oder<br />
Teilsystemen einer Maschine zu beschreiben.<br />
Seite 13
Verteilte <strong>Systeme</strong><br />
Schnittstellen (von Systemkomponenten) sind dabei Vorrichtungen zum<br />
Informationsaustausch und bestehen aus der Zusammenfassung aller von außen<br />
benötigten (Importschnittstelle) und aller von außen abrufbaren<br />
(Exportschnittstelle) Größen [Duden].<br />
Protokolle sind Sätze von Regeln zum Beherrschen der Kommunikation. Sie<br />
existieren unabhängig von konkreten Systemkomponenten, müssen aber von<br />
diesen beachtet werden, und legen Format und Reihenfolge des<br />
Informationsaustausches fest [Sloman/Kramer].<br />
Beispiele für Schnittstellen und Protokolle finden sich in Computersystemen<br />
annähernd beliebig viele: Hardwareschnittstellen (Verbindungsstecker),<br />
Netzschnittstellen zur Beschreibung des Zugriffs auf das lokale Netzwerk oder<br />
auch Benutzerschnittstellen. Diese legen, heute zumeist über graphische<br />
Oberflächen, die Möglichkeiten fest, die der Benutzer bei der Bedienung eines<br />
Programms hat. Das Protokoll wird hierbei vom Programm direkt vorgegeben,<br />
z.B. durch die Vorgabe einer Reihenfolge zur Bearbeitung der einzelnen<br />
Schritte.<br />
In verteilten <strong>Systeme</strong>n kommt den Softwareschnittstellen der Komponenten<br />
eine besondere Bedeutung zu. Nur durch die genaue Angabe von Syntax und<br />
Semantik der Kommunikationsmöglichkeiten einer Komponente ist eine<br />
Zusammenarbeit mit anderen Komponenten möglich. Konkret muss eine<br />
Softwareschnittstelle z.B. folgendes beinhalten:<br />
• Welche Nachrichten werden verstanden ?<br />
• Was geschieht bei Erhalt einer Nachricht ?<br />
• Welche Nachrichten werden verschickt und welche Reaktion wird vom<br />
Empfänger erwartet ?<br />
• (für RPC): Welche Prozeduren sind aufrufbar und was bewirken sie ?<br />
• Welche Daten sind als Parameter erforderlich und welchen Typ hat das<br />
Resultat ?<br />
Seite 14
Verteilte <strong>Systeme</strong><br />
2.3.7 Synchronisation und Nebenläufigkeit<br />
In Computersystemen, insbesondere in verteilten <strong>Systeme</strong>n, laufen (z.T. auf<br />
verschiedenen Rechnern) eine gewisse, bei komplexen <strong>Systeme</strong>n recht große,<br />
Anzahl von Prozessen. Eine Teilmenge dieser Prozesse lässt sich hinsichtlich<br />
der Bearbeitungsreihenfolge ihrer Elemente klassifizieren:<br />
Typ Bearbeitungsreihenfolge<br />
seriell (sequentiell) Die Prozesse finden nacheinander statt.<br />
parallel Die Prozesse finden gleichzeitig statt<br />
nebenläufig Die Prozesse können unabhängig voneinander<br />
ablaufen, Reihenfolge spielt keine Rolle<br />
Greifen Prozesse auf Systemressourcen zu, die auch von anderen Prozessen<br />
benutzt werden, so können erhebliche Probleme entstehen. Dies betrifft vor<br />
allem nebenläufige Prozesse, da bei seriellen Prozessen der Zugriff auf die<br />
Ressourcen nicht gleichzeitig stattfinden kann und bei parallelen Prozessen die<br />
Gleichzeitigkeit bereits bei der <strong>Programmierung</strong> berücksichtigt wurde.<br />
In nebenläufigen Prozessen hingegen kann es vorkommen, dass<br />
unterschiedliche Prozesse zeitgleich bzw. zeitlich sehr nah beieinander auf eine<br />
gemeinsam genutzte Ressource zugreifen wollen, ohne dass dies direkt gewollt<br />
ist. Konflikte entstehen z.B. beim schreibenden Zugriff auf gemeinsame<br />
Variablen oder Dateien, wie folgendes Beispiel zeigt [Duden]:<br />
Die Prozesse A und B greifen auf die gemeinsam genutzte Variable x zu.<br />
Prozess A Prozess B<br />
(A1) x:= 2x; (B1) x:= x-1;<br />
(A2) write x; (B2) write x;<br />
Abhängig von der Reihenfolge der Ausführung der Befehle A1, A2, B1 und B2<br />
können (bei Startwert x=2) folgende Ausgaben erfolgen:<br />
Seite 15
Verteilte <strong>Systeme</strong><br />
Reihenfolge Ausgabe<br />
A1,A2,B1,B2 4 3<br />
A1,B1,A2,B2 oder A1,B1,B2,A2 3 3<br />
B1,A1,A2,B2 oder B1,A1,B2,A2 2 2<br />
B1,B2,A1,A2 1 2<br />
Mechanismen, welche die Reihenfolge von nebenläufigen Prozessen regeln,<br />
werden als Synchronisation bezeichnet [Mullender]. Während dies in<br />
nichtverteilten <strong>Systeme</strong>n oder auch in stark zentralisierten verteilten <strong>Systeme</strong>n<br />
aufgrund der globalen Kontrollinstanz noch recht einfach realisierbar ist<br />
[Sloman/Kramer], ist bei (auch teilweise) dezentralen verteilten <strong>Systeme</strong>n die<br />
Sachlage ungleich schwieriger.<br />
Synchronisation hat generell zwei durchaus gegenläufige Zielsetzungen:<br />
• Ermöglichen von Prozessparallelität wo immer dies gefahrlos möglich ist<br />
(Ziel: Performancegewinn)<br />
• Erzwingen von Sequentialität falls nötig zur Vermeidung von Konflikten<br />
und Deadlocks (= wechselseitige Blockierung mehrerer Prozesse)<br />
Es existieren eine ganze Anzahl von Synchronisationsansätzen, die z.B. auf<br />
kritischen Abschnitten, wechselseitigen Ausschluss, Semaphoren oder<br />
Synchronisationsphasen beruhen. Ausführlich werden diese Ansätze von<br />
Mattern, Raynal/Helary, Herrtwich/Hommel und Witzel dargestellt.<br />
2.4 Vor- und Nachteile von Verteilung<br />
Verteilte <strong>Systeme</strong> bieten sowohl dem Programmierer als auch dem Anwender<br />
eine ganze Reihe von Vorteilen, insbesondere in Hinsicht auf Flexibilität und<br />
Leistung. Dem gegenüber stehen Nachteile und potentielle Probleme bezüglich<br />
Komplexität und Sicherheit.<br />
Die wichtigsten Vor- und Nachteile werden nachfolgend skizziert. Es ist dabei<br />
zu beachten, dass (vgl. 2.3.1) <strong>Systeme</strong> unterschiedliche Verteilungsgrade<br />
haben. In voller Konsequenz gelten die angesprochenen Punkte größtenteils<br />
nur bei hohem Verteilungsgrad.<br />
Seite 16
Verteilte <strong>Systeme</strong><br />
2.4.1 Vorteile<br />
Ressourcenteilung<br />
Von verschiedenen Benutzern benötigte Ressourcen müssen in verteilten<br />
<strong>Systeme</strong>n nicht auf jedem Rechner lokal vorhanden sein. Dies bezieht sich<br />
sowohl auf Hardwarekomponenten wie Drucker oder Festplattenspeicherplatz,<br />
als auch auf Softwarekomponenten wie Daten und Programme<br />
[Coulouris/Dollimore].<br />
Erweiterbarkeit<br />
Durch die in verteilten <strong>Systeme</strong>n erzwungene Modularität ist es ohne weiteres<br />
möglich, die Leistungsfähigkeit des Systems beispielsweise durch Integration<br />
neuer Arbeitsstationen oder Software schrittweise auszubauen, ohne die<br />
Funktionalität des Gesamtsystems zu unterbrechen, wie dies etwa beim<br />
Austausch eines Großrechners durch einen anderen der Fall wäre<br />
[Sloman/Kramer].<br />
Verfügbarkeit<br />
Durch die in verteilten <strong>Systeme</strong>n im Gegensatz zu auf Großrechnern<br />
basierenden <strong>Systeme</strong>n kostengünstig mögliche Schaffung von Redundanz und<br />
Datenreplikation muss ein Ausfall einer der Komponenten des Systems nicht<br />
zwangsläufig die Verwendbarkeit des Systems beeinträchtigen. Bei Ausfall<br />
einer gesamten Arbeitsstation kann die Arbeit beispielsweise von einer anderen<br />
Station, idealerweise ohne Datenverlust, weitergeführt werden<br />
[Coulouris/Dollimore].<br />
Flexibilität<br />
Durch die in verteilten <strong>Systeme</strong>n erforderliche präzise Schnittstellendefinition<br />
(siehe 2.3.6) ist es möglich, einzelne Teile des Systems durch andere<br />
leistungsfähigere Komponenten mit gleicher Schnittstelle zu ersetzen, ohne<br />
damit die Funktionalität des Gesamtsystems zu stören [Duden].<br />
Seite 17
Verteilte <strong>Systeme</strong><br />
Lastenteilung<br />
Vergleichbar mit der Ressourcenteilung (s.o.), ist in verteilten <strong>Systeme</strong>n auch<br />
die Prozessorbelastung (Rechenzeit) teilbar. Aufwendige Berechnungsroutinen<br />
können auf aktuell nicht ausgelasteten Rechnern oder auch, falls vorhanden,<br />
auf für diese Berechnungen spezialisierten Maschinen ausgeführt werden<br />
[Sloman/Kramer].<br />
lokale Kontrolle<br />
Durch die lokale Souveränität über Daten und Verarbeitung kann das System<br />
besser an die lokalen Anforderungen der einzelnen Arbeitsplätze angepasst<br />
werden (siehe auch Flexibilität), was wiederum Vorteile z.B. in der<br />
Benutzerfreundlichkeit mit sich bringt [Sloman/Kramer].<br />
2.4.2 Nachteile und Probleme<br />
Sicherheitslücken<br />
Zur Ermöglichung von Flexibilität und Erweiterbarkeit werden in verteilten<br />
<strong>Systeme</strong>n notwendigerweise viele Softwareschnittstellen freigelegt und zur<br />
Benutzung durch alle Anwender freigegeben. Stärker als bei möglicherweise<br />
sogar nicht an das lokale Netzwerk angeschlossenen Einzelarbeitsplätzen<br />
besteht hier das Risiko der Verwendung der Routinen und Daten durch<br />
unberechtigte Personen [Coulouris/Dollimore]. Bei sicherheitsrelevanter<br />
Information ist daher die Verwendung von Schutzmechanismen, z.B. die<br />
Verschlüsselung von Daten und Einsatz von Zugriffsberechtigungen sowie<br />
digitalen Signaturen, anzuraten.<br />
Dateninkonsistenz<br />
Bei gemeinsam genutzten Daten, z.B. einer verteilten Datenbank, kann schnell<br />
das Problem der Dateninkonsistenz auftreten. Das System muss, insbesondere<br />
bei zeitgleicher Änderung des Datenbestandes durch verschiedene Benutzer,<br />
geeignete Mechanismen zur Verfügung stellen, damit keine der Änderungen<br />
verloren geht. Auch die Datenreplikation kann hier zum Problem werden.<br />
Seite 18
Verteilte <strong>Systeme</strong><br />
Werden Datenänderungen und Replikationsvorgänge nicht korrekt<br />
synchronisiert, sind Inkonsistenzen unausweichlich.<br />
Komplexität des Systems<br />
Anders als bei lokal auf einem Rechner laufenden Anwendungen, deren<br />
Zustand meist relativ klar definierbar ist (z.B. durch Struktogramme), haben<br />
verteilte <strong>Systeme</strong> auch einen verteilten Zustand, beschrieben durch den<br />
Zustand aller Einzelkomponenten. Berücksichtigt man nun noch die möglichen<br />
extern bewirkten Zustandsänderungen einer Komponente durch<br />
Nachrichtenaustausch mit anderen Komponenten, so wird die erhöhte<br />
Komplexität recht deutlich [Mullender]. Ein Ansatz zur Analyse von Zuständen<br />
in verteilten <strong>Systeme</strong>n ist die Verwendung von Petri-Netzen [Baumgarten], bei<br />
denen genau die Kommunikation zwischen Komponenten mit nachfolgender<br />
Zustandsänderung durch „Transitionen“ beschrieben werden kann.<br />
Zu der erhöhten Zustandskomplexität in verteilten <strong>Systeme</strong>n kommen noch<br />
neue Arten von möglichen Fehlern, z.B. durch Ausfall von nicht-lokalen<br />
Komponenten, die von der Software berücksichtigt werden müssen.<br />
Borghoff/Schlichter kommentieren dies: „Das Testen eines verteilten Systems ist<br />
sehr komplex ... Meist gibt es nur real-life-Tests.“<br />
Abhängigkeit vom Netzwerk<br />
Da in verteilten <strong>Systeme</strong>n die einzelnen Komponenten über ein<br />
Kommunikationsnetzwerk Informationen austauschen, ist die Abhängigkeit<br />
von der Funktion des Netzwerkes offensichtlich. Diese zeigt sich sowohl in der<br />
Beschränkung der maximal erzielbaren Geschwindigkeit als auch im<br />
(zumindest teilweisen) Ausfall des Systems bei Netzwerkdefekten<br />
[Coulouris/Dollimore].<br />
verteilte <strong>Programmierung</strong><br />
Zunächst ist die verteilte <strong>Programmierung</strong> ein positiver Aspekt <strong>verteilter</strong><br />
<strong>Systeme</strong>. Mehrere Programmierer arbeiten lokal an ihrem Rechner und legen<br />
Schnittstellen offen, damit andere Programmierer und Benutzer die erzeugten<br />
Routinen verwenden können.<br />
Seite 19
Verteilte <strong>Systeme</strong><br />
Dieser Ansatz beinhaltet jedoch folgende Probleme [Sloman/Kramer]:<br />
• Die Einigung auf gemeinsame Standards kann bei örtlicher Verteilung der<br />
Programmierer schwierig sein.<br />
• Gewisse Programmmodule werden möglicherweise mehrfach (in<br />
inkompatiblen Versionen) erzeugt und verwendet.<br />
Abhilfe können hier ein zentrales Management, die strikte Einhaltung von<br />
Standards sowie häufiger Informationsaustausch unter den Programmierern<br />
schaffen.<br />
lokal geringere maximale Rechenleistung<br />
Falls ein Programm sehr große Rechenleistung erfordert, ist ein Großrechner<br />
dazu aufgrund der lokal sehr viel größeren Leistung besser in der Lage als eine<br />
normale Arbeitsstation. Insbesondere fällt dieses Argument ins Gewicht, wenn<br />
das zu berechnende Problem strukturell nicht sinnvoll verteilbar ist, z.B. wenn<br />
es aus sehr vielen aufeinander aufbauenden Rechenschritten besteht<br />
[Coulouris/Dollimore].<br />
2.5 Beispiele<br />
Wie bereits in der Einleitung angedeutet, existiert heute eine riesige Anzahl<br />
von verteilten <strong>Systeme</strong>n, die allerdings aufgrund ihrer Transparenz nicht immer<br />
sofort als solche zu identifizieren sind. Ich gebe an dieser Stelle drei Beispiele<br />
für existierende verteilte <strong>Systeme</strong> und stelle kurz das Konzept von Groupware<br />
vor.<br />
2.5.1 Flugzeugsteuerung<br />
In modernen Flugzeugen, und zunehmend auch in Fahrzeugen, existieren eine<br />
ganze Anzahl von computergesteuerten Einheiten. So werden z.B. die<br />
einzelnen Teile der Cockpitanzeigen von anderen Rechnern gesteuert als die<br />
Seite 20
Verteilte <strong>Systeme</strong><br />
eigentlichen Funktionseinheiten, die beispielsweise für die Autopilot-Funktion,<br />
die Notfallprogramme, die computerunterstützte Bremsvorrichtung oder den<br />
Kollisionswarner zuständig sind.<br />
Aus diesen Beschreibungen wird zunächst deutlich, wie extrem bedeutsam hier<br />
das absolut korrekte Zusammenspiel der einzelnen Systemkomponenten ist.<br />
Durch die Verteiltheit des Systems „Flugzeugsteuerung“ werden aber mehrere<br />
Vorteile genutzt, die besonders in den Bereichen der Verfügbarkeit und<br />
Erweiterbarkeit zu finden sind. Nachträgliche Sicherheitseinrichtungen können<br />
leicht integriert werden und bei Ausfall einer Komponente ist das Flugzeug<br />
trotzdem noch in weiten Teilen funktionsfähig.<br />
An diesem Beispiel wird der Aspekt „Transparenz“ besonders deutlich. Wohl<br />
kein Betrachter eines Cockpits wird anhand der Bedieninstrumente erahnen<br />
können, dass hier nicht ein, sondern mehrere Computer am Werk sind.<br />
2.5.2 Rechnerverbundsystem von Reiseunternehmen<br />
In heutigen Reisebüros ist die Abfrage von freien Flügen oder Hotelzimmern<br />
problemlos durch Computereinsatz möglich. Hier liegt offensichtlich ein, wenn<br />
auch stark zentralisiertes, verteiltes System vor, da die Abfrage stets über einen<br />
Zentralrechner erfolgt. Beachtenswert ist die (allein auf Deutschland bezogene)<br />
Größe des Systems, da fast jedes Reisebüro an das System („START“)<br />
angeschlossen ist (siehe [Start]).<br />
Probleme beim Einsatz des Systems treten weniger in der Abfrage noch freier<br />
Kapazitäten (Lesezugriff) auf, sondern bei der Buchung (Schreibzugriff). Da<br />
die einzelnen Rechner in den Reisebüros klassische nebenläufige Prozesse<br />
(siehe 2.3.7) sind, die auf einen gemeinsamen Datenbestand zugreifen müssen,<br />
ist der Effekt der Fehl- oder Doppelbuchungen gut erklärbar - wobei die<br />
Tatsache, dass diese Effekte heute nur noch selten auftreten, für eine gute<br />
Lösung des Synchronisationsproblems im „START“-System spricht.<br />
Seite 21
Verteilte <strong>Systeme</strong><br />
2.5.3 E-Mail<br />
Die Anzahl der an das Internet angeschlossenen Firmen und Privathaushalte<br />
wächst ständig, und fast jeder der Anschlüsse beinhaltet in der Regel<br />
mindestens eine E-Mail-Adresse. Nach Prognosen der Deutschen Telekom<br />
werden im Jahr 2003 bereits die Hälfte aller Deutschen einen Internet-<br />
Anschluss haben [NRZ].<br />
Die Möglichkeit, sich auf elektronischem Wege Nachrichten zu senden, wird<br />
reichlich genutzt, das dafür verwendete System bildet zugleich eines der<br />
größten existierenden verteilten <strong>Systeme</strong>.<br />
Es zeichnet sich durch die für das Internet typische Fehlertoleranz und<br />
Lastenteilung aus. Auch bei Ausfall einiger für die Nachrichtenweiterleitung<br />
wichtige Rechner können alternative Wege gefunden werden, die Nachricht<br />
zum Ziel zu bringen.<br />
Die dezentrale Verteiltheit dieses Systems in diesem Beispiel ist geradezu<br />
zwingend erforderlich. Kein Großrechner könnte die Belastung der weltweit<br />
versendeten E-Mails bewältigen, und die Bandbreite heute existierender<br />
Leitungen würde in Servernähe bei weitem nicht ausreichen.<br />
2.5.4 Groupware<br />
Im Gegensatz zu den vorigen drei Beispielen ist Groupware kein Beispiel für<br />
ein verteiltes System, sondern eine Beschreibung für eine ganze Klasse von<br />
verteilten <strong>Systeme</strong>n.<br />
Ellis definiert Groupware als computerbasierte <strong>Systeme</strong>, die eine Gruppe von<br />
Menschen bei ihrer gemeinsamen Aufgabe unterstützen und die eine<br />
Schnittstelle zu einer gemeinsamen Umgebung bereitstellen.<br />
Die Ähnlichkeit zur Definition <strong>verteilter</strong> <strong>Systeme</strong> (in 2.2) ist offensichtlich,<br />
einschränkende Bedingungen liegen aber in der Festlegung der Benutzer auf<br />
eine (i.a. bekannte) Gruppe und der Forderung einer gemeinsamen Umgebung<br />
sowie einer gemeinsamen Aufgabe. Beispiele wie unter 2.5.1 und 2.5.3 fallen<br />
daher nicht in den Groupware-Bereich.<br />
Seite 22
Verteilte <strong>Systeme</strong><br />
Wichtige vorkommende Groupware-<strong>Systeme</strong> sind:<br />
• Netzwerkspiele<br />
• moderne, die Teamarbeit unterstützende, Office-Pakete, z.B. [Notes]<br />
• Konferenzsysteme<br />
• Fertigungssteuerungssysteme in Betrieben, siehe [Sloman/Kramer]<br />
Im Schulbereich ist Groupware beispielsweise durch einen<br />
computerintegrierten Klassenraum, beschrieben von Hoppe/Luther, sinnvoll<br />
einsetzbar.<br />
Der Bereich der Groupware ist bei weitem zu groß und vielfältig, um an dieser<br />
Stelle ausreichend beschrieben zu werden. Eine gute Übersicht über<br />
informatische Aspekte findet sich bei Borghoff/Schlichter, soziale<br />
Zusammenhänge werden von Rolf erläutert. Bei Lloyd ist eine ganze Anzahl von<br />
Artikeln über mögliche Zukunftstendenzen von Groupware vorhanden.<br />
Seite 23
Didaktik der verteilten <strong>Systeme</strong><br />
3 Didaktik der verteilten <strong>Systeme</strong><br />
Die im vorigen Abschnitt dargelegten Eigenschaften und Möglichkeiten<br />
<strong>verteilter</strong> <strong>Systeme</strong> legen es nahe, über eine Behandlung dieser <strong>Systeme</strong> im<br />
Informatikunterricht an Schulen nachzudenken.<br />
In diesem Kapitel wird zunächst die Bedeutung <strong>verteilter</strong> <strong>Systeme</strong> für die<br />
Didaktik der Informatik allgemein analysiert. Darauf aufbauend werden<br />
spezielle Möglichkeiten für den Unterricht aufgezeigt – eine gewisse<br />
didaktische Reduktion scheint dabei wegen der Komplexität der Thematik<br />
unausweichlich. Insbesondere wird auf die Rolle des Programmierens<br />
eingegangen, die als ein Schlüssel zum Verständnis der Kerngebiete <strong>verteilter</strong><br />
<strong>Systeme</strong> angesehen wird.<br />
3.1 Einordnung in die Fachdidaktik<br />
In diesem Abschnitt wird eine allgemeine Einordnung des Gebiets der<br />
verteilten <strong>Systeme</strong> in die Didaktik der Informatik gegeben, wobei der<br />
Schwerpunkt nicht auf konkrete Unterrichtsinhalte, sondern auf übergeordnete<br />
Aspekte gelegt wird. Dazu werden die in von Hoppe und Hoppe/Luther im<br />
Kontext der Rechtfertigung von Informatik als Schulfach angegebenen Thesen<br />
zum Bildungswert der Informatik betrachtet und bezüglich <strong>verteilter</strong> <strong>Systeme</strong><br />
als Gegenstand diskutiert.<br />
Nach oben angegebener Literatur existieren im wesentlichen fünf Ansätze zur<br />
Begründung des allgemeinen Bildungswertes von Informatik. Nicht jeder<br />
dieser Ansätze ist alleine realistisch und tragfähig genug zur Begründung von<br />
Informatikunterricht, dennoch spiegeln die Thesen durchaus wichtige<br />
Themengebiete der Schulinformatik wieder und ermöglichen eine Einordnung<br />
der Bedeutung <strong>verteilter</strong> <strong>Systeme</strong>:<br />
Seite 24
Didaktik der verteilten <strong>Systeme</strong><br />
Algorithmieren als Kulturtechnik<br />
In diesem Ansatz, der insgesamt als zu einschränkend bewertet werden kann,<br />
steht die Rolle des Programmierens und Algorithmierens im Mittelpunkt. Diese<br />
beiden Fertigkeiten werden als zentraler Bildungswert der Informatik<br />
angesehen.<br />
Von diesem Standpunkt aus betrachtet liefern verteilte <strong>Systeme</strong> die<br />
Möglichkeit, die Algorithmier- und Programmierfähigkeiten der Schüler auf<br />
eine höhere Ebene zu bringen. Die Notwendigkeit der Kooperation von<br />
verschiedenen Komponenten im verteilten System wirkt sich in der<br />
Unumgänglichkeit des Entwurfs und der <strong>Programmierung</strong> von<br />
Kommunikationsschnittstellen aus. Dabei wird eine Verallgemeinerung des<br />
prozeduralen Programmierens durch RPCs für die Schüler erkennbar.<br />
In diesem Kontext ist auch die zur <strong>Programmierung</strong> gehörende Fehleranalyse<br />
anzusprechen, die bei verteilten <strong>Systeme</strong>n zwar strukturell schwieriger, aber<br />
auch allgemeiner ist und daher eine echte Erweiterung darstellt.<br />
Umgang mit Informations- und Kommunikationstechnik<br />
Dieser Ansatz definiert den Bildungswert der Informatik über das zu<br />
erreichende Verständnis von Computerhard- und software. Ziel ist hier der<br />
souveräne und verständige Umgang mit Computertechnik sowie wichtigen<br />
Softwareprodukten wie Textverarbeitungen, Tabellenkalkulationen,<br />
Grafikprogrammen oder auch den neuen Medien (Stichwort Internet).<br />
Auch wenn dieser Ansatz die Bedeutung von Informatik als Schulfach<br />
bestenfalls in der Sekundarstufe I teilweise rechtfertigen kann, bringt hier die<br />
unterrichtliche Betrachtung von verteilten <strong>Systeme</strong>n folgende Erweiterungen:<br />
• auf Hardwareseite bieten verteilte <strong>Systeme</strong> eine motivierende Grundlage<br />
zur Betrachtung von lokalen Netzwerken. Behandelbar sind auch<br />
Routingmechanismen in WANs (wide area networks).<br />
• Wird der Schwerpunkt im Unterricht auf das Verständnis und die<br />
Bedienung von modernen Softwareprodukten gelegt, so ist die Behandlung<br />
von verteilten <strong>Systeme</strong>n – wenn auch hier zunächst nur aus Benutzersicht –<br />
sehr empfehlenswert, da diese <strong>Systeme</strong> grundlegende, in der Informatik<br />
Seite 25
Didaktik der verteilten <strong>Systeme</strong><br />
zukunftsträchtige Kommunikationsfunktionen bieten, deren Kenntnis aus<br />
dem hier zugrundegelegten Standpunkt heraus unverzichtbar ist.<br />
Modellierung von Problemen, Prozessen und Abläufen<br />
In dieser Definition der Bedeutung von Informatik wird der Schwerpunkt auf<br />
Beschreibung, Abstraktion und Strukturierung von Problemen sowie der<br />
Analyse und Lösung durch geeignete Prozesse und Abläufe gelegt.<br />
Verteilte <strong>Systeme</strong> bilden in diesem Feld eine natürliche Ergänzung des<br />
Unterrichtsstoffs, da sie in vielen Problemen bereits implizit enthalten sind.<br />
Fast alle komplexeren Modellierungsaufgaben enthalten sich gegenseitig<br />
beeinflussende Komponenten – diese können durchaus als Teile eines<br />
verteilten Systems angesehen werden. Durch explizite Hinzunahme des<br />
Unterrichtsgegenstands „verteilte <strong>Systeme</strong>“ kann hier der Stoff von einer<br />
übergeordneteren Position aus strukturierter behandelt werden.<br />
Allgemeine Wissenschaft der Informationsverarbeitung<br />
Eine Betrachtung der Informatik als allgemeine Wissenschaft der<br />
Informationsverarbeitung ist zumindest zum heutigen Zeitpunkt eine Illusion,<br />
da viele Teile, insbesondere der menschlichen Informationsverarbeitung, nicht<br />
von der Informatik abgedeckt werden können.<br />
Sicherlich sind aber Prozesse der Informationsverarbeitung ein wichtiger Teil<br />
der Informatik, und hier liefert die Behandlung <strong>verteilter</strong> <strong>Systeme</strong> eine<br />
deutliche Erweiterung der vorstellbaren Aspekte. Es ergeben sich realistischere<br />
Modelle z.B. in Hinsicht auf:<br />
• Informationsverteilung<br />
In vielen realistischen <strong>Systeme</strong>n ist die insgesamt verfügbare Information<br />
nicht an einem Ort gebündelt, sondern auf viele Einheiten verteilt. Gerade<br />
wenn menschliche Informationen betrachtet werden, ist dies der einzige<br />
mögliche Ansatz. In solchen <strong>Systeme</strong>n auftretende Informations-<br />
verarbeitung kann sinnvoll nur unter Einsatz <strong>verteilter</strong> <strong>Systeme</strong> behandelt<br />
werden.<br />
Seite 26
Didaktik der verteilten <strong>Systeme</strong><br />
• Informationsaustausch<br />
Sollen Prozesse des Austauschs von Informationen beschrieben werden,<br />
können aus dem Gebiet der verteilten <strong>Systeme</strong> kommende Aspekte wie<br />
Synchronisation und Nebenläufigkeit nur dann unberücksichtigt bleiben,<br />
wenn diese im konkret betrachteten Fall keine Rolle spielen. Dies ist aber<br />
nur bei einem Teil der denkbaren Verarbeitungsmodelle der Fall – genau<br />
die Modelle, die eine starre Reihenfolge der Verarbeitung voraussetzen und<br />
keine parallelen Mechanismen betrachten.<br />
Realistischere Modelle des Informationsaustauschs, bei denen oben<br />
genannte Einschränkungen wegfallen, erfordern daher die Kenntnis einiger<br />
Grundlagen aus dem Gebiet der verteilten <strong>Systeme</strong>.<br />
• Fehler<br />
Die im Unterricht thematisierbaren Typen von Fehlern bei der<br />
Informationsverarbeitung werden bei ausschließlicher Verwendung<br />
nicht<strong>verteilter</strong> <strong>Systeme</strong> deutlich eingeschränkt. Als Beispiel seien hier die<br />
Möglichkeiten des Datenverlustes oder der Dateninkonsistenz angeführt.<br />
Beide Effekte können bei rein lokaler Verarbeitung zurecht vernachlässigt<br />
werden, da ihre Behandlung rein theoretisch bliebe. In verteilten <strong>Systeme</strong>n<br />
hingegen sind diese realistischen Probleme leichter darstellbar.<br />
Automatisierung geistiger Tätigkeiten<br />
Begreift man den Bildungswert der Informatik im Zusammenhang des<br />
„historisch und kulturell bedeutsamen Bemühens um die Automatisierung<br />
geistiger Tätigkeiten“ [Hoppe/Luther], so ist die Betrachtung <strong>verteilter</strong> <strong>Systeme</strong><br />
im Informatikunterricht aus drei Blickwinkeln heraus bedeutsam:<br />
• historisch<br />
In der im Vergleich zu anderen Wissenschaftsdisziplinen relativ jungen<br />
Historie der Informatik sind sicherlich Aspekte, welche die Vernetzung von<br />
Rechnersystemen betreffen, seit spätestens 1990 ein nicht wegzudenkender<br />
Bestandteil. Der Zusammenhang der Nutzung dieser Vernetzung zum<br />
Gebiet der verteilten <strong>Systeme</strong> ist offensichtlich.<br />
Seite 27
Didaktik der verteilten <strong>Systeme</strong><br />
• kulturell<br />
Sprache und die damit eng zusammenhängende Kommunikation sind<br />
grundlegende Bausteine menschlicher Kultur. Verteilte <strong>Systeme</strong> benutzen<br />
als zentrales Element genau diese Bausteine und sind analytisch daher gut<br />
geeignet, zum Verständnis der Grundlagen dieser geistigen Tätigkeiten<br />
beizutragen.<br />
• geistige Tätigkeiten<br />
Da geistige Tätigkeiten nur in wenigen Fällen völlig isoliert von der<br />
Umwelt stattfinden können – oft ergeben sich wichtige Ideen erst als<br />
Resultat vom häufigen Wechsel kommunikativer und reflektierender<br />
Phasen –, kann die Bemühung um Automatisierung geistiger Tätigkeiten<br />
sich nicht auf rein lokal stattfindende Berechnungsprozesse einschränken.<br />
Verteilte <strong>Systeme</strong> liefern hier einen Ansatzpunkt zur Untersuchung<br />
weitergehender Automatisierungsmöglichkeiten.<br />
Zusammenfassend kann festgestellt werden, dass verteilte <strong>Systeme</strong> unabhängig<br />
von der konkreten Definition des Bildungswertes der Informatik fachdidaktisch<br />
durchaus bedeutsam sind. In vielen Teilgebieten der Schulinformatik bietet die<br />
Behandlung <strong>verteilter</strong> <strong>Systeme</strong> die Möglichkeit, sowohl einerseits allgemeinere<br />
Resultate herzuleiten als auch andererseits ein detaillierteres Verständnis von<br />
Zusammenhängen zu erzeugen.<br />
3.2 Behandlung im Unterricht<br />
Aufgrund der Vielfältigkeit des Themas der verteilten <strong>Systeme</strong> gibt es eine<br />
Fülle von prinzipiell möglichen Unterrichtssequenzen mit verschiedenen<br />
Inhalten. Nachfolgend werden drei Beispiele angeführt, die auf sich deutlich<br />
voneinander unterscheidenden Ansätzen beruhen. Die präsentierten Beispiele<br />
lassen sich beispielsweise im Rahmen einer exemplarischen Unterrichts-<br />
sequenz realisieren, ein eher integrativer Ansatz wird in Kapitel 3.3<br />
beschrieben.<br />
Seite 28
Didaktik der verteilten <strong>Systeme</strong><br />
3.2.1 Analytischer Zugang: Vergleich <strong>verteilter</strong> <strong>Systeme</strong><br />
In diesem Ansatz liegt der inhaltliche Schwerpunkt auf dem Vergleich<br />
verschiedener existierender <strong>verteilter</strong> <strong>Systeme</strong>. Methodisch kann die Sequenz<br />
(nach einer Einleitung durch den Lehrer) in Gruppenarbeit mit anschließender<br />
Ergebnispräsentation in Referatsform und Diskussion im Klassenverband<br />
durchgeführt werden.<br />
Behandelt werden können etwa folgende inhaltliche Aspekte:<br />
• Architektur<br />
Vergleich der Architekturformen der betrachteten <strong>Systeme</strong> mit den<br />
extremen Formen (dezentral und zentralisiert) und Diskussion der<br />
spezifischen Eigenschaften dieser Architekturen (siehe 2.3.3)<br />
• Funktionalität<br />
Beschreibung der in den betrachteten <strong>Systeme</strong> verteilt realisierten<br />
Funktionen.<br />
• Vorteile<br />
Analyse der Gründe für die Verteilung der betrachteten <strong>Systeme</strong>.<br />
Insbesondere Aspekte wie Ressourcenteilung, Flexibilität und<br />
Erweiterbarkeit (siehe 2.4.1) können hier im Vergleich zu nichtverteilten<br />
<strong>Systeme</strong>n betrachtet werden.<br />
• Nachteile<br />
Bewusstmachung der Risiken von verteilten <strong>Systeme</strong>n. Als Beispiel kann<br />
hier die Datensicherheit, z.B. anhand der Betrachtung von electronic<br />
banking, dienen.<br />
Dieser Zugang zu verteilten <strong>Systeme</strong>n bleibt in vielen wichtigen Punkten<br />
sicherlich nur oberflächlich, ermöglicht aber einen einfachen ersten Eindruck<br />
der Möglichkeiten von Verteilung. Unterrichtsziele liegen größtenteils im<br />
Umfeld vom „Umgang mit modernen Informations- und<br />
Kommunikationsmedien“, ein Einsatz bietet sich vor allem im<br />
Wahlpflichtbereich der Sekundarstufe I an.<br />
Seite 29
Didaktik der verteilten <strong>Systeme</strong><br />
3.2.2 Theoretischer Zugang: Nebenläufige Prozesse<br />
Dieser Ansatz beinhaltet weitgehend theoretische Überlegungen. Im Rahmen<br />
einer Sequenz zur theoretischen Informatik wird hier das Problem der<br />
Synchronisation nebenläufiger Prozesse (siehe 2.3.7) thematisiert und eine<br />
Lösung durch Einsatz von Petri-Netzen gesucht.<br />
Folgende Struktur der Sequenz ist denkbar:<br />
1. Einführung<br />
Präsentation eines einfachen, auf Synchronisation beruhenden, Problems,<br />
z.B. der ungeregelte Zugriff mehrerer unabhängiger Prozesse auf eine<br />
gemeinsame Variable.<br />
2. Präsentation einer Lösungsmethode<br />
Einführung von einfachen Petri-Netzen (z.B. S/T-<strong>Systeme</strong>n) und Analyse,<br />
wie diese Netze zur Zustandsbeschreibung eingesetzt werden können.<br />
3. Entwurf einer einfachen Lösung<br />
Mittels der Petri-Netze wird von den Schülern eine einfache Lösung des<br />
Problems, z.B. über Sperrmechanismen, entwickelt.<br />
4. Komplexere Lösungen<br />
Angeregt durch den Lehrer werden mögliche Schwachstellen der<br />
erarbeiteten Lösungen analysiert. Anhand eines komplexeren Problems,<br />
beispielsweise des Philosophenproblems, werden die Mechanismen<br />
überarbeitet. Am Ende dieses Teils Vorstellung der von den Schülern<br />
erzielten Lösungen.<br />
5. Verallgemeinerung<br />
Hinweis auf die Bedeutsamkeit der erzielten Ergebnisse, z.B. in<br />
Zusammenhang mit Ressourcennutzung und Nachrichtenbehandlung in<br />
verteilten <strong>Systeme</strong>n. Dieser Punkt kann auch als einleitende Fragestellung<br />
an den Anfang der Sequenz gestellt werden.<br />
Auch diese Unterrichtssequenz behandelt nur Teile des Gebiets der verteilten<br />
<strong>Systeme</strong>, allerdings ist (im Sinne des exemplarischen Unterrichts) der Tiefgang<br />
im Teilgebiet „Synchronisation“ recht groß.<br />
Seite 30
Didaktik der verteilten <strong>Systeme</strong><br />
Als Vorkenntnisse sind nur grundlegende Programmierfertigkeiten zur<br />
Realisierung der erarbeiteten Lösungen erforderlich, ein Einsatz dieser<br />
Unterrichtssequenz kann daher ab der Jahrgangsstufe 11 erfolgen.<br />
3.2.3 Algorithmischer Zugang: Protokolle<br />
Eine auf dem Schwerpunktthema „Protokolle“ aufbauende Unterrichtseinheit<br />
kann in Projektform ablaufen:<br />
1. Auswahl eines Projektziels<br />
Aus einer Anzahl von vom Lehrer vorgegebenen Auswahlmöglichkeiten<br />
wird ein Projektziel bestimmt. Das Projekt sollte so beschaffen sein, dass<br />
eine Schwerpunktlegung auf Nachrichten und Protokolle möglich ist und<br />
nicht zu viele andere Probleme auftauchen. Als Beispiel dient i.f. der<br />
Aufbau eines schulinternen E-Mail-Systems<br />
2. Analyse der Nachrichtenflüsse<br />
Die in der Realisierung des Projekts zu erwartenden Nachrichten werden<br />
betrachtet. Im betrachteten Beispiel können dies etwa folgende sein:<br />
• Mails an einzelne Personen<br />
• Mails an Gruppen von Personen<br />
• Empfangsbestätigungen<br />
• Antworten<br />
• Fehlermeldungen<br />
3. Entwurf eines Protokolls<br />
Ausgehend von den möglichen Nachrichten wird ein Protokoll entworfen,<br />
dass in der Lage ist, diesen Nachrichtenverkehr zu regeln.<br />
4. Programmierphase<br />
Zunächst werden die nötigen Programmgerüste erstellt (hier: einfacher<br />
Server zur Nachrichtenspeicherung und ein Programm zum Abrufen von<br />
Nachrichten). Im zweiten Schritt werden in mehreren Gruppen die<br />
Schnittstellen implementiert, wobei die vorher definierten Protokolle zu<br />
beachten sind.<br />
Seite 31
Didaktik der verteilten <strong>Systeme</strong><br />
5. Ergebnisbetrachtung<br />
Test des Systems. Treten Fehler auf, sind folgende Möglichkeiten zu<br />
unterscheiden:<br />
• Fehler in den Programmgerüsten<br />
• Fehler in den Schnittstellen<br />
• Fehler im Protokoll<br />
Insbesondere im letzten Fall sollte eine genaue Analyse und Diskussion<br />
des Fehlers erfolgen.<br />
Diese Unterrichtssequenz erfordert einige Programmiererfahrung und ist daher<br />
ab der Jahrgangsstufe 12 sinnvoll durchführbar. Im Gegensatz zu den<br />
Zugängen in 3.2.1 und 3.2.2 ist der motivierende Effekt der Erschaffung eines<br />
nützlichen und einsetzbaren Programms vorhanden.<br />
Fachlich steht das Thema „Protokolle“ im Mittelpunkt und kann auch (je nach<br />
Projektthema) gut vertieft werden. Zusammenhänge zu dem in 3.3<br />
beschriebenen Programmieransatz sind jedoch zu erkennen, wenn auch<br />
aufgrund der Einfachheit des Themas nur in Ansätzen.<br />
3.3 Der Programmieransatz<br />
Das Programmieren hat im heutigen Informatikunterricht sicherlich eine<br />
wichtige, wenn auch nicht unumstrittene Rolle. Einerseits darf<br />
Informatikunterricht nicht zu einem Programmierkurs reduziert werden,<br />
andererseits bietet gerade das Programmieren vielfältige Möglichkeiten zur<br />
Realisierung und Abstraktion wichtiger Themen [Hoppe/Luther].<br />
Betrachtet man das Programmieren als Primärerfahrung der Informatik,<br />
vergleichbar mit dem Rechnen bei der Mathematik [Hoppe/Luther], so bietet die<br />
<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong> die Möglichkeit, sowohl zu elementaren<br />
Einsichten über Prinzipien <strong>verteilter</strong> <strong>Systeme</strong> zu gelangen als auch auf diesen<br />
Einsichten aufbauend zu abstrahieren und allgemeine Schlüsse zu ziehen.<br />
Auch für die Programmierfertigkeiten der Schüler ist das Thema „verteilte<br />
<strong>Systeme</strong>“ bedeutsam. Wird das zu erstellende Programm verteilt programmiert<br />
Seite 32
Didaktik der verteilten <strong>Systeme</strong><br />
(einzelne Schüler oder Kleingruppen entwickeln Komponenten, die zur<br />
späteren Zusammenarbeit mit anderen Komponenten gedacht sind), so ist eine<br />
größere Kooperation unter den Schülern sowie die Einhaltung von festgelegten<br />
Standards notwendig.<br />
Entwurf und Entwicklung eines verteilten Systems beinhalten viele allgemeine<br />
sowie informatische didaktische Aspekte, wobei deren Ausprägung durch das<br />
konkret zu programmierende System beeinflusst wird:<br />
Neben den in den Abschnitten 2.3 und 2.4 dargelegten Eigenschaften <strong>verteilter</strong><br />
<strong>Systeme</strong>, die fachdidaktisch durchaus bedeutsam sind, können noch folgende<br />
informatische Ziele erreicht werden:<br />
• Verallgemeinerung des prozeduralen Programmierens durch RPCs<br />
• Einblick in Grundlagen des Software-Engineerings<br />
• Über die reine Algorithmik hinausgehende Fehleranalyse<br />
• Entwicklung und Verständnis von Kommunikationsmodellen<br />
• Beachtung von Prinzipien der Datensicherheit<br />
Allgemeindidaktische Ziele, die durch die (insbesondere verteilte)<br />
<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong> erreicht werden können, sind:<br />
• Verallgemeinerung des Automatisierens geistiger Tätigkeiten<br />
• Kooperation<br />
• Handlungs- und Prozessplanung<br />
• Einigung über gemeinsame und sinnvolle Standards<br />
Eine Erläuterung der Methodik zum Erreichen dieser Ziele wird im Rahmen<br />
der Beschreibung einer Unterrichtseinheit zur Robots-Umgebung in Kapitel 6<br />
gegeben.<br />
Seite 33
Didaktik der verteilten <strong>Systeme</strong><br />
3.4 Lehrplanbezug<br />
Die aktuell gültigen Unterrichtsrichtlinien für Informatik in der Sekundarstufe<br />
II stammen aus den Jahren 1981 (Grundkurs, siehe [RichtlinienGK]) bzw. 1991<br />
(Leistungskurs, [RichtlinienLK]). Der Grundkurslehrplan wird allerdings nach<br />
telefonischer Auskunft des Ritterbach-Verlags in der nächsten Zeit aktualisiert,<br />
ein Entwurf ist im Internet zu finden [RichtlinienGKneu].<br />
3.4.1 Grundkurs<br />
Der aktuell gültige Grundkurslehrplan sieht vier Lernbereiche vor:<br />
1. Algorithmik<br />
2. Daten und Datenstrukturen<br />
3. Hard- und Softwaresysteme<br />
4. Realisierung, Probleme und Auswirkungen der praktischen<br />
Datenverarbeitung<br />
Die Behandlung <strong>verteilter</strong> <strong>Systeme</strong> ist explizit in keinem der Lernbereiche<br />
vorgesehen, und auch mit den im Lehrplan detailliert aufgeführten<br />
empfohlenen Unterrichtsinhalten stimmen Inhalte aus dem Gebiet „verteilte<br />
<strong>Systeme</strong>“ nicht überein – sieht man von der Tatsache ab, dass sich unter den<br />
allgemein gehaltenen Inhaltspunkten wie „Datenfluss und Datenorganisation“<br />
oder „Modellbildung“ auch Teile <strong>verteilter</strong> <strong>Systeme</strong> behandeln lassen.<br />
Grundsätzlich lässt sich feststellen, dass der gültige Grundkurslehrplan in<br />
vielen technischen bzw. maschinennahen Bereichen Schwerpunkte setzt. Dies<br />
wird verständlich, wenn man das Erscheinungsjahr berücksichtigt. Moderne<br />
Inhalte, insbesondere auch in Richtung <strong>verteilter</strong> <strong>Systeme</strong>, sind aus<br />
verständlichen Gründen nicht enthalten – 1981 hat noch keiner der für den<br />
Lehrplan zuständigen Personen die in Kapitel 2.1 beschriebene rasante<br />
Entwicklung vorausahnen können.<br />
Seite 34
Didaktik der verteilten <strong>Systeme</strong><br />
Der Entwurf für den neuen Grundkurslehrplan ist sehr offen gestaltet und<br />
beinhaltet wesentlich weniger Themen als die aktuellen Richtlinien. Ein<br />
gesetzter Schwerpunkt ist die Ebene „Lernen im Kontext“, die exemplarischen<br />
und handlungsorientierten Unterricht anhand von die Schüler interessierenden<br />
Beispielen fordert. Als Beispiele werden Telekommunikation, Strategiespiele<br />
und Datensicherheit ausdrücklich genannt.<br />
Damit ist eine Unterrichtsreihe zur „<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong>“, hier<br />
insbesondere auch die in Kapitel 6 beschriebene „Robots“-Unterrichtsreihe,<br />
durch den Lehrplanentwurf gerechtfertigt.<br />
3.4.2 Leistungskurs<br />
Der gültige Leistungskurslehrplan ist zehn Jahre jünger als der Grund-<br />
kurslehrplan, beinhaltet aber dennoch die gleichen vier Lernbereiche.<br />
Das Thema „verteilte <strong>Systeme</strong>“ ist auch hier nicht direkt vorgesehen, es sind<br />
aber folgende Unterrichtsgegenstände enthalten:<br />
• Schnittstellen als funktionale Spezifikation abstrakter Datentypen<br />
• Veränderbarkeit der Implementierung bei gleicher Schnittstelle<br />
• lokale Netzwerke<br />
• Schnittstellenspezifikation als Teil des Entwurfsphase bei Software-<br />
Entwicklung<br />
• Prinzipien der Lokalität, Modularisierung und Mehrfachverwendung bei<br />
Software-Entwicklung<br />
• Gesellschaftliche Aspekte der Telekommunikation<br />
• Problem der Überschaubarkeit von <strong>Systeme</strong>n<br />
Wie erkennbar ist, ist eine Unterrichtseinheit zum Thema „verteilte <strong>Systeme</strong>“<br />
durchaus mit den im Lehrplan angegebenen Inhalten vereinbar, wenn auch<br />
einige wichtige Aspekte von verteilten <strong>Systeme</strong>n (z.B. Transparenz,<br />
Architekturformen, Nebenläufigkeit, Synchronisation und Verifikation durch<br />
Petri-Netze) nicht im Curriculum vorkommen.<br />
Seite 35
Didaktik der verteilten <strong>Systeme</strong><br />
Im Vergleich zum Grundkurslehrplan von 1981 wird deutlich, dass 1991<br />
bereits einige Tendenzen zur Verteilung von <strong>Systeme</strong>n voraussehbar waren,<br />
insbesondere waren Netzwerke bekannt und (zu einem damals noch geringen<br />
Teil) in Schulen installiert.<br />
3.5 Fazit<br />
Das Gebiet der verteilten <strong>Systeme</strong> bietet eine breite Palette von modernen<br />
informatischen Inhalten, deren fachdidaktische Relevanz zum Teil erheblich<br />
ist. Beispiele sind hier:<br />
• Problem der Synchronisation nebenläufiger Prozesse und seine Lösung<br />
durch Einsatz von Petri-Netzen<br />
• Prinzipien der Rechnerkommunikation: Einsicht in die Funktion von<br />
Schnittstellen und Protokollen<br />
• Vergleich von verteilten und nichtverteilten <strong>Systeme</strong>n: Realisierung der<br />
Vorteile und Nachteile von Verteilung.<br />
Die technische Ausrüstung heutiger Gymnasien spricht einer Unterrichtsreihe<br />
zum Thema „verteilte <strong>Systeme</strong>“ nicht entgegen. An den meisten Schulen<br />
finden sich heute relativ moderne, vernetzte PCs. Durch die Initiative „Schulen<br />
ans Netz“ hat ein großer Teil der Schulen sogar Zugriff auf das Internet.<br />
Der Lehrplan im Leistungskurs ermöglicht die Behandlung <strong>verteilter</strong> <strong>Systeme</strong><br />
im Informatikunterricht, wenn er sie auch nicht direkt fordert oder als<br />
empfehlenswert klassifiziert. Dies hängt wohl mit dem Erscheinungsjahr 1991<br />
zusammen, in dem verteilte <strong>Systeme</strong> noch nicht die heutige Bedeutung hatten.<br />
Im Grundkursbereich ist aus dem aktuellem Lehrplan eine Rechtfertigung der<br />
Behandlung <strong>verteilter</strong> <strong>Systeme</strong> im Unterricht nicht direkt ableitbar. Die<br />
(vorläufigen) neuen Richtlinien hingegen ermöglichen dies.<br />
Seite 36
Didaktik der verteilten <strong>Systeme</strong><br />
Insgesamt erscheint eine Unterrichtsreihe über verteilte <strong>Systeme</strong> im<br />
Informatikunterricht der Sekundarstufe II didaktisch gerechtfertigt und nach<br />
den technischen Möglichkeiten an den meisten Schulen durchführbar.<br />
Eine auf der (z.T. verteilten) <strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong> aufbauende<br />
Unterrichtsreihe wird nach der Vorstellung der dafür geschriebenen<br />
Programmierumgebung in Kapitel 6 angegeben.<br />
Seite 37
Die „Robots“-Umgebung<br />
4 Die „Robots“-Umgebung<br />
4.1 Kurzbeschreibung<br />
Robots ist eine verteilte Spielumgebung, die primär für den Einsatz im<br />
Informatikunterricht der Sekundarstufe II gedacht ist. Grundlegende<br />
Eigenschaften der Robots-Umgebung werden im folgenden kurz beschrieben.<br />
Auf einem zweidimensionalen Spielfeld, welches im Regelfall aus Gras- und<br />
Wasserfeldern besteht, können Roboter agieren. Die Aktionsmöglichkeiten der<br />
Roboter lassen sich grob in 5 Kategorien einteilen:<br />
• Bewegung<br />
• Objekte nehmen und ablegen<br />
• Roboterinteraktion<br />
• Roboterkommunikation<br />
• Spielspezifische Aktionen<br />
Die Bewegungsaktionen (warten, nach vorne und hinten gehen, nach rechts<br />
und links drehen, rennen) dienen der Fortbewegung des Roboters auf dem<br />
Spielfeld, die objektbezogenen Aktionen betreffen das Aufnehmen und<br />
Ablegen von Gegenständen auf dem Spielfeld. Roboterinteraktion ist primär<br />
durch die Möglichkeit des Berührens anderer Roboter verwirklicht.<br />
Durch das Ablegen von Notizen sowie das Senden von Nachrichten haben die<br />
Roboter zusätzlich die Möglichkeit, miteinander auf verschiedene Arten zu<br />
kommunizieren. Letztlich kann jedes Spiel noch spezifische Aktionen<br />
erlauben, siehe hierzu die Abschnitte 4.3.2 ff.<br />
Die spiellogischen Auswirkungen der Aktionen, insbesondere die der Aktionen<br />
in den letzten drei Kategorien, werden durch Regelwerke festgelegt. Durch<br />
Änderung des Regelwerks ergeben sich somit verschiedene Spiel-<br />
möglichkeiten, die völlig unterschiedliche Ziele, Spielfelder, Aktions-<br />
möglichkeiten und Kooperationsanforderungen (insbesondere bei<br />
Seite 38
Die „Robots“-Umgebung<br />
gruppenbasierten Spielen) beinhalten können. Beispiele für Spielregeln werden<br />
in den Abschnitten 4.3.2 ff. gezeigt.<br />
Innerhalb der Robots-Umgebung existieren genaugenommen zwei<br />
verschiedene verteilte <strong>Systeme</strong>, die unabhängig voneinander im Unterricht<br />
behandelbar sind und auch unterschiedliche didaktische Möglichkeiten bieten.<br />
Zunächst ist das System selbst, bestehend aus der Serveranwendung und den<br />
Clientanwendungen, ein verteiltes System. Aber auch die „Roboterwelt“ ist<br />
verteilt. Lässt man die Umgebung beiseite und bezieht sich nur auf die Roboter<br />
mit ihren Aktions- und (vor allem) Kommunikationsmöglichkeiten, so liegt<br />
auch hier ein verteiltes System vor, welches das eigentliche Spiel repräsentiert.<br />
4.2 Grundlegende Konzepte des Aufbaus<br />
4.2.1 Spielfeld: Positionen und Attribute<br />
Das Spielfeld in der Robots-Umgebung ist in der Klasse Mastergame<br />
dargestellt und besteht im Wesentlichen aus einem zweidimensionalen Feld<br />
von Spielfeldpositionen (Klasse Position).<br />
Jede Position wiederum besteht aus einer Betretbarkeitsinformation und einer<br />
Liste von Attributen (Klasse Attribute). Diese Attribute stellen alles das<br />
dar, was sich auf der Position befindet, so zum Beispiel den Boden, die Spieler<br />
oder auch zurückgelassene Notizen. Sie bestehen aus zwei Variablen:<br />
• name (String): Name des Attributs (z.B. „Player“, „Ground“,<br />
„Notice“,...)<br />
• object (Object): „Daten“ des Attributs (falls nötig), z.B. Informationen<br />
über die Bodenstruktur, den Inhalt einer Notiz etc.<br />
Ähnlich wie die Betretbarkeitsinformation bei Positionen besitzen Attribute<br />
Informationen über Lesbarkeit und Entfernbarkeit. Diese Informationen<br />
können folgender Art sein (Beispiele hier für den Fall „Attribut entfernbar“,<br />
restliche Fälle analog):<br />
Seite 39
Die „Robots“-Umgebung<br />
Information Attribut entfernbar für Beispiel<br />
always jeden Roboter Notizen<br />
never keinen Roboter Boden oder Spieler<br />
canSwim Roboter, die schwimmen<br />
können<br />
Player=XXX Roboter mit dem Namen XXX (Spiel Goldsuche): Bei Heimatbasis<br />
-<br />
abgelegtes Gold<br />
Group=XXX Roboter der Gruppe XXX -<br />
Ground=XXX jeden Roboter, wenn der Boden<br />
des Feldes XXX ist<br />
(Spiel Goldsuche): Auf dem Feld<br />
liegendes Gold ist nur entfernbar,<br />
wenn gegraben worden ist<br />
Attribute liegen standardmäßig fest auf einer Position und können nur durch<br />
Roboteraktionen (bzw. genauer gesagt durch die Reaktion eines Regelwerks<br />
auf diese Aktionen) entfernt oder hinzugefügt werden.<br />
Durch einen AttributeMover ist es jedoch auch möglich, bewegliche<br />
Attribute, die sich ohne Fremdeinwirkung fortbewegen, zu benutzen. Beispiel<br />
für bewegliche Attribute sind die Schneebälle beim Spiel „Winterspiele“.<br />
4.2.2 Akteure: Roboter und Spieler<br />
Die auf dem Spielfeld agierenden Objekte sind Roboter. Jeder Client definiert<br />
zunächst einen Roboter in Hinsicht auf folgende Punkte:<br />
• Aussehen:<br />
Das „Aussehen“ eines Roboters besteht aus vier Bildern, in denen der<br />
Roboter von hinten, rechts, vorne und links zu sehen ist, sowie aus einem<br />
Bild der Heimatbasis (nur wichtig in Spielen, bei denen eine solche benutzt<br />
wird).<br />
• Name:<br />
Jeder Roboter besitzt einen Namen, anhand dessen er im Spiel identifiziert<br />
wird.<br />
• gewünschte Gruppe:<br />
Die gewünschte Zugehörigkeit zu einer Gruppe kann vom Roboter<br />
angegeben werden, es ist jedoch Sache des Regelwerks, diese Wünsche zu<br />
Seite 40
Die „Robots“-Umgebung<br />
berücksichtigen oder zurückzuweisen (für ein Solospiel oder eine andere,<br />
vom Server bestimmte Gruppeneinteilung).<br />
• Eigenschaften<br />
Es existieren mehrere charakteristische Eigenschaften, die ein Roboter hat<br />
(oder haben kann):<br />
- Fähigkeit zu rennen<br />
- Fähigkeit zu schwimmen<br />
- Anzahl der maximal gleichzeitig tragbaren Gegenstände<br />
- Sendeleistung (angegeben in Anzahl von Feldern)<br />
- Berührdistanz (Entfernung, über die andere Roboter berührt werden<br />
können, angegeben in Feldern)<br />
- Sichtweite und Sichtwinkel (90, 180 oder 360 Grad)<br />
Ein beliebig guter Roboter ist jedoch nicht erstellbar, die maximal<br />
erlaubten Grenzen werden in Kapitel 5.3.1 erläutert.<br />
• Algorithmus:<br />
Das eigentliche „Herzstück“ eines Roboters ist der Algorithmus, also die<br />
Vorschrift, die angibt, welche Aktionen (siehe Abschnitt 4.2.3) der Roboter<br />
in Abhängigkeit vom subjektiv wahrgenommenen Spielstand durchführt.<br />
Es existieren prinzipiell zwei Möglichkeiten, einen Roboteralgorithmus zu<br />
programmieren:<br />
Durch Überlagerung der getAction-Methode ist es möglich, nach<br />
Abfrage der Spielfeldumgebung eine Aktion zurückzuliefern.<br />
Durch Überlagerung der doActions-Methode besteht hingegen die<br />
Möglichkeit, beliebig viele Aktionen innerhalb eines Methodenaufrufes<br />
durchzuführen. Außerdem ist hier eine detaillierte Kontrolle darüber<br />
möglich, welche Informationen wann vom Server abgefragt werden.<br />
Beide Varianten funktionieren im Echtzeitmodus. In einem rundenbasierten<br />
Spiel ist wird jedoch nur die getAction-Methode abgefragt, somit ist die<br />
zweite Variante hier nicht geeignet.<br />
Das Abfragen der getAction-Methode im Rundenmodus liegt darin<br />
begründet, dass es ja genau der Sinn und Zweck dieses Modus ist, dass die<br />
Spieler der Reihe nach je genau einen Zug durchführen können.<br />
Seite 41
Die „Robots“-Umgebung<br />
Prinzipiell ist es auch zumindest im Echtzeitmodus möglich, gar keinen<br />
Algorithmus zu definieren und das Spiel manuell über<br />
Benutzerkommandos zu steuern. Auch wenn dies sicherlich nicht der<br />
primäre Sinn der Robots-Umgebung ist, so sind die direkten<br />
Benutzerkommandos zumindest zu Testzwecken oder für „Mensch gegen<br />
Mensch“ bzw. „Mensch gegen Maschine“-Spiele recht gut nutzbar.<br />
Ist der Roboter komplett definiert, so kann er sich beim Server anmelden und<br />
nach erfolgreicher Anmeldeprozedur am Spiel teilnehmen.<br />
Serverseitig wird aus dem Roboter ein Spieler (Klasse Player) mit<br />
identischem Namen, Aussehen und gleichen Eigenschaften konstruiert. Ein<br />
Spieler hat jedoch zusätzlich noch weitere Informationen, die sich in zwei<br />
Gruppen klassifizieren lassen:<br />
vom Client abfragbare Informationen:<br />
Beispiele sind hier die Gruppe, der Punktestand, die empfangenen Nachrichten,<br />
die mitgeführten Gegenstände, der Markierungszustand oder die Blickrichtung<br />
serverinterne Informationen:<br />
z.B. interne Statusvariablen, Informationen über Zugberechtigung und Position<br />
des Roboters<br />
4.2.3 Aktionen<br />
Die Aktionen der Roboter werden durch Objekte der Klasse Action<br />
beschrieben. Generiert in den auf Clientseite liegenden Algorithmen (oder die<br />
dortigen Benutzerinterfaces) und an den Server per RMI an die Methode<br />
performAction im Regelwerk weitergeleitet, besteht eine Aktion aus zwei<br />
Komponenten:<br />
• command (String): Name der Aktion<br />
• data (Object): Eventuelle Parameter<br />
Seite 42
Die „Robots“-Umgebung<br />
Unabhängig vom Regelwerk existieren stets folgende Basisaktionen:<br />
Name Parametertyp Beschreibung<br />
warte - Nichts tun<br />
gehe „vor“ oder „zurück“ Bewegen des Roboters<br />
renne - 2 Felder vor auf einmal gehen<br />
drehe „links“ oder „rechts“ Drehen des Roboters um 90 Grad<br />
nimm auf Attribute Aufnehmen des durch das übergebene<br />
Attribut beschriebenen Gegenstands<br />
lege ab Attribute Ablegen des durch das übergebene Attribut<br />
beschriebenen Gegenstands<br />
hinterlasse Notiz Object Hinterlassen einer Notiz, deren Inhalt das<br />
übergebene Objekt ist<br />
sende Object Senden einer Nachricht, deren Inhalt das<br />
übergebene Objekt ist<br />
berühre Player Berühren des übergebenen Spielers<br />
Jedes Regelwerk kann noch beliebig viele weitere gültige Aktionen definieren,<br />
eine genauere Beschreibung hierüber wird im folgenden Unterkapitel gegeben,<br />
Beispiele sind in den Abschnitten 4.3.2 ff. angeführt.<br />
4.2.4 Regelwerke<br />
Verschiedene Spiele, so unterschiedlich sie auch zunächst aus vielen<br />
Gesichtspunkten sein mögen, unterscheiden sich neben dem Spielfeld letztlich<br />
nur durch das Regelwerk. Regelwerke sind bei Robots durch RuleManager<br />
verwirklicht. Die Klasse BasicRuleManager liefert die Steuerungslogik<br />
eines „neutralen“ Spiels ohne wirkliche Spielregeln. Durch Überlagerung<br />
dieser Klasse lassen sich „echte“ Spielregeln realisieren, Beispiele siehe<br />
Abschnitte 4.3.2 ff.<br />
Neben Methoden, die einmalig beim Spielbeginn und –ende sowie bei An- und<br />
Abmeldung eines Spielers aufgerufen werden, reagiert der RuleManager vor<br />
allem auf Aktionswünsche der Roboter. Die Bearbeitung eines<br />
Aktionswunsches geschieht in 4 Schritten:<br />
Seite 43
Die „Robots“-Umgebung<br />
1) Allgemeine Überprüfungen:<br />
Ist der aktionswillige Spieler angemeldet ?<br />
Hat der Spieler Zugberechtigung ?<br />
Läuft das Spiel ?<br />
2) Klassifikation der Aktion:<br />
Überprüfung, ob es sich bei der übergebenen Aktion XXX um eine<br />
Standardaktion handelt. Ist dies der Fall, so wird die Methode<br />
performXXX aufgerufen, andernfalls die Methode<br />
performGeneralAction. In diesen (überlagerbaren) Methoden wird<br />
die Aktion dann durchgeführt und bei Erfolg die Rückgabe „ok“ geliefert.<br />
3) Reaktion auf Aktionsdurchführung:<br />
War der Rückgabewert unter 2) „ok“, so wird (bei durchgeführter Aktion<br />
XXX) nun die (ebenfalls überlagerbare) Methode XXXperformed<br />
aufgerufen, die die Auswirkungen einer erfolgreichen Aktion des Typs<br />
XXX realisiert.<br />
4) Überprüfung auf Spielende:<br />
Als letzter Schritt wird nun geprüft, ob das Spiel aufgrund der<br />
durchgeführten Aktion beendet ist. Dies geschieht durch Abfrage der<br />
Methode checkEnd.<br />
Ziel dieser Art und Weise der Aktionsbehandlung ist es, die Erstellung von<br />
neuen Regelwerken so einfach wie möglich zu gestalten. Soll beispielsweise<br />
ein Spiel geschrieben werden, in dem das Berühren eines Roboters einen<br />
speziellen Effekt hat, so ist lediglich die contactPerformed-Methode des<br />
BasicRuleManagers zu überlagern, die die Reaktion auf bereits erfolgte<br />
Aktion „Berühren“ beschreibt.<br />
Mit der eigentlichen Aktionsdurchführung in Bezug auf Änderungen am<br />
Spielfeld, z.B. beim Aufnehmen von Gegenständen, hat der Entwickler neuer<br />
Spiele zumindest bei den Standardaktionen nur selten zu tun.<br />
Seite 44
Die „Robots“-Umgebung<br />
4.2.5 Hilfen für den Roboter<br />
Ein grundlegendes Ziel bei der Entwicklung von Robots war es, dass bei der<br />
<strong>Programmierung</strong> der Roboteralgorithmen die Tatsache, dass die Umgebung<br />
verteilt ist, sich nur auf der „Roboterebene“, also der Kommunikation zwischen<br />
den Robotern, bemerkbar macht. Die zur Verständigung zwischen Server und<br />
Client notwendigen Routinen sind daher gekapselt und stehen jedem Roboter<br />
anhand von drei Klassen zur Verfügung:<br />
• ActionManager<br />
Der ActionManager dient zur Übermittlung von Aktionen an den<br />
Server. Zentral ist die Methode doAction(Action), die genau dieses<br />
leistet.<br />
• InformationManager<br />
Der InformationManager liefert dem Roboter Informationen über<br />
den aktuellen Spielstand (diese werden vom Server geholt). Wichtigste<br />
Spielstandinformationen sind: Gruppe des Roboters, Punktstand,<br />
Blickrichtung, neu empfangene Nachrichten, Markierungszustand und<br />
getragene Gegenstände<br />
• LocalEnvironment<br />
Das LocalEnvironment stellt die lokale Umgebung des Roboters dar.<br />
In einem Radius von standardmäßig 10 Feldern wird die Umgebung des<br />
Roboters „zwischengespeichert“. Ziele dieser Zwischenspeicherung sind<br />
die Ermöglichung einer akzeptablen Bildschirmdarstellung und die Option<br />
für die Roboter, auch auf Positionen zuzugreifen, die nicht im aktuellen<br />
Sichtfeld liegen. Zu beachten ist jedoch, dass nur die Positionen innerhalb<br />
des Sichtfeldes auch gesichert „aktuell“ sind in der Hinsicht, dass sich<br />
andere Felder mittlerweile ohne Wissen des Roboters geändert haben<br />
könnten.<br />
Eine Abfrage der Umgebungspositionen ist über die Methode<br />
getPosition(int forward, int rightward) möglich, die<br />
genau die Position zurückgibt, die forward Felder vor und rightward<br />
Seite 45
Die „Robots“-Umgebung<br />
Felder rechts des aktuellen Roboters (alles bezogen auf dessen<br />
Blickrichtung) liegt.<br />
Durch Verwendung dieser Klassen wird unter anderem die Fehlerabfrage und<br />
die automatische Aktualisierung der Bildschirmausgabe geleistet, weiterhin<br />
dienen die Hilfsklassen zur Vereinfachung der Roboterprogrammierung.<br />
4.3 Beispiele<br />
Zur Veranschaulichung der unter 4.2 aufgeführten Konzepte für Roboter und<br />
Regelwerke werden in diesem Kapitel die bei Robots standardmäßig<br />
vordefinierten Roboter und Robotertypen (Roboter mit Eigenschaften und<br />
Bilddaten, aber ohne Algorithmus) sowie die drei vorhandenen Spiel-<br />
möglichkeiten vorgestellt.<br />
4.3.1 Roboter<br />
In Robots sind fünf Roboter vordefiniert, die jeweils ihre eigene<br />
Eigenschaftscharakteristik und Bilddaten besitzen. Diese Roboter können<br />
durch eigene Roboterklassen so erweitert werden, dass der reine „warte“-<br />
Algorithmus, den die hier vordefinierten Roboter haben, durch eine sinnvollere<br />
Befehlsvorschrift überlagert wird.<br />
CarryRobot<br />
Ein CarryRobot kann 30 Gegenstände tragen und hat eine<br />
Sicht von 3 Feldern bei 180 Grad Sichtwinkel. Dieser Roboter<br />
hat eine schwache Sendeleistung von nur 2 Feldern Reichweite und kann keine<br />
anderen Roboter berühren. Auch kann er weder rennen noch schwimmen.<br />
Seite 46
Die „Robots“-Umgebung<br />
ContactRobot<br />
Herausragende Eigenschaft eines ContactRobot ist es,<br />
andere Roboter auf 2 Felder Entfernung berühren zu<br />
können. Die Sendeleistung ist mit 4 Feldern Reichweite gut, das Sichtfeld<br />
beträgt 2 Felder bei 360 Grad Sichtwinkel. Dieser Roboter kann allerdings nur<br />
4 Gegenstände tragen und weder rennen noch schwimmen.<br />
HiTechRobot<br />
Ein HiTechRobot kann rennen und schwimmen.<br />
Weiterhin hat er ein enorm großes Sichtfeld von 4 Feldern<br />
bei Rundumsicht. In allen anderen Punkten ist dieser Roboter aber eher<br />
schwach. Er hat eine geringe Sendeleistung von nur 2 Feldern Reichweite und<br />
kann nur 2 Gegenstände tragen. Außerdem fehlt ihm die Möglichkeit, andere<br />
Roboter zu berühren.<br />
RunRobot<br />
Ein RunRobot kann (wie der Name schon andeutet ...)<br />
rennen. Weiterhin hat er ein großes Sichtfeld von 5 Feldern<br />
bei 180 Grad Sichtwinkel. Dieser Roboter kann 8 Gegenstände tragen und<br />
andere Roboter, die direkt neben ihm stehen, berühren. Die Sendeleistung ist<br />
mit nur einem Feld Reichweite sehr gering. Auch kann ein RunRobot nicht<br />
schwimmen.<br />
SwimRobot<br />
Ein SwimRobot kann schwimmen, aber nicht rennen.<br />
Maximal 12 Gegenstände sind gleichzeitig tragbar, die<br />
Sendeleistung liegt bei nur 2 Feldern Reichweite. Das Sichtfeld eines<br />
SwimRobot beträgt 4 Felder bei 90 Grad Sichtwinkel, und andere Roboter,<br />
die direkt neben ihm stehen, können berührt werden.<br />
Seite 47
Die „Robots“-Umgebung<br />
Als Beispiel für die Roboterprogrammierung dienend, sind bei Robots zwei<br />
Roboter mit Algorithmus bereits vorhanden. Gedacht sind diese für das Spiel<br />
„Goldsuche“, welches im folgenden Abschnitt beschrieben ist.<br />
GoldSearchRobot<br />
Der GoldSearchRobot sucht Gold und bringt dies zu seiner Heimatbasis.<br />
Er hat folgende Handlungsvorschrift:<br />
1. Falls schon 2 Goldstücke gesammelt sind , dann gehe einen Schritt<br />
zur Heimatbasis zurück.<br />
2. Ist die aktuelle Position die Basisposition und wird ein Goldstück<br />
getragen, so lege Gold ab.<br />
3. Ist das aktuelle Feld noch nicht umgegraben, so tue dies.<br />
4. Ist Gold auf aktueller Position, so nimm es auf.<br />
5. Trifft nichts von 1. bis 4. zu, so bewege dich zufallsgesteuert weiter<br />
GoldHunterRobot<br />
Der GoldHunterRobot ist sozusagen das „Gegenstück“ zum<br />
GoldSearchRobot. Er gräbt nicht, sondern versucht, durch das Stehlen von<br />
Gold zum Sieg zu kommen.<br />
Algorithmus:<br />
1. Falls ein Spieler in Berührungsdistanz ist, berühre ihn<br />
2. Falls ein Spieler innerhalb von 5 Feldern ist, bewege dich einen<br />
Schritt hin<br />
3. Sonst: Zufallsbewegung<br />
4.3.2 Spiel „Goldsuche“<br />
Das Spiel „Goldsuche“ wird durch den GoldRuleManager geleitet und hat<br />
informell beschrieben folgende Regeln:<br />
Auf jedem Grasfeld liegt mit 20prozentiger Wahrscheinlichkeit Gold.<br />
Dieses ist sichtbar, wenn auf dem Feld gegraben worden ist (Aktion<br />
Seite 48
Die „Robots“-Umgebung<br />
"grabe"). Jeder Spieler startet an seiner Heimatbasis, an der er Gold<br />
ablegen kann, ohne dass andere Spieler dieses aufnehmen können. Für<br />
jedes Goldstück, das ein Spieler besitzt oder an seiner Heimatbasis<br />
abgelegt hat, erhält er einen Punkt. Erreicht jemand 10 Punkte, ist das<br />
Spiel beendet. Das "Berühren" anderer Spieler wird zum "Berauben":<br />
hat der berührte Spieler Gold bei sich, so „wandert“ eines dieser<br />
Goldstücke zum Dieb.<br />
Spieltechnische Besonderheiten:<br />
Einzelspiel, bedingt sichtbare Objekte, Verwendung von Heimatbasen<br />
Besondere Aktionen:<br />
„grabe“ (Parameter: keine)<br />
4.3.3 Spiel „Winterspiele“<br />
Durch den WinterRuleManager definiert, bestehen die „Winterspiele“ aus<br />
folgenden Regeln:<br />
In einer verschneiten Landschaft können Schneemänner gebaut (Aktion<br />
"Schneemann") und Schneebälle geworfen werden (Aktion "werfe"),<br />
wobei der Bau eines Schneemannes 10 Runden dauert. Das "Berühren"<br />
anderer Roboter hat den Effekt, dass diese mit Schnee "eingeseift"<br />
werden. Trifft einen Roboter dieses Schicksal, so wird ihm kalt<br />
(genauso, wenn ihn ein Schneeball trifft). Schneemänner können<br />
fliegende Schneebälle abfangen. Ein Spielende ist direkt nicht<br />
vorgesehen, Ziel ist es jedoch, bei all diesen Aktionen so warm wie<br />
möglich zu bleiben.<br />
Spieltechnische Besonderheiten:<br />
Einzelspiel, bewegliche Objekte, Aktionen mit mehreren Runden Dauer<br />
Besondere Aktionen:<br />
„werfe“ (ohne Parameter)<br />
„Schneemann“ (ohne Parameter)<br />
Seite 49
Die „Robots“-Umgebung<br />
4.3.4 Spiel „Erobere die Fahne“<br />
Das komplexeste hier gegebene Beispiel ist „Erobere die Fahne“, gesteuert<br />
durch den FlagRuleManager. Beschreibung:<br />
Das Spiel „Erobere die Fahne“ verläuft in zwei Gruppen, die jeweils<br />
eine Fahne besitzen. Ziel ist es, dass ein Spieler der eigenen Gruppe<br />
unbeschädigt das Feld betritt, auf dem die Fahne der anderen Gruppe<br />
steht. Beschädigungen eines Roboters können erfolgen durch<br />
1. das Berührt-Werden durch einen anderen Roboter (mit<br />
50prozentiger Wahrscheinlichkeit).<br />
2. das Laufen in eine Falle.<br />
Jeder Roboter hat Fallen bei sich (die Hälfte der Anzahl der maximal<br />
tragbaren Gegenstände), die er durch einfaches Ablegen auf jedem<br />
Grasfeld verstecken kann . Fallen können durch die Aktion "suche" im<br />
Radius der Berührdistanz eines Roboters sichtbar gemacht werden.<br />
Steht man direkt vor einer Falle, so kann diese durch "entschärfe"<br />
entfernt werden. Kosten: "suche" 5 Runden, „entschärfe" 10 Runden.<br />
Beschädigte Roboter werden in der Nähe ihrer eigenen Fahne<br />
automatisch wieder repariert. Auf dem Spielfeld sind außerdem felsige<br />
Felder zu finden, auf denen eine Bewegung 3 Runden dauert.<br />
Spieltechnische Besonderheiten:<br />
Gruppenspiel, nicht sichtbare Objekte, Aktionen mit mehreren Runden<br />
Dauer<br />
Besondere Aktionen:<br />
„suche“ (parameterlos)<br />
„entschärfe“ (parameterlos)<br />
Seite 50
Die „Robots“-Umgebung<br />
Beispiele für Spielszenarien: „Erobere die Fahne“ und „Winterspiele“<br />
Seite 51
Einzelheiten zu „Robots“<br />
5 Einzelheiten zu „Robots“<br />
In diesem Kapitel wird auf informatische und grundlegende didaktische<br />
Aspekte von Robots eingegangen. Weiterhin werden Beispiele für den<br />
denkbaren Einsatz der Umgebung im Informatikunterricht gegeben, ohne<br />
hierbei der im nächsten Kapitel vorgestellten Unterrichtsreihe zu weit<br />
vorzugreifen. Schließlich werden auch die Grenzen von Robots –<br />
insbesondere in Hinsicht auf realisierbare Spiele – beschrieben.<br />
5.1 Informatische Aspekte<br />
In diesem Abschnitt werden einige, größtenteils mit dem Gebiet der verteilten<br />
<strong>Systeme</strong> zusammenhängende, wichtige Aspekte der Robots-Umgebung<br />
genannt und kurz diskutiert.<br />
a) Programmiersprache:<br />
Robots ist komplett in Java (JDK 1.2) geschrieben. Die Begründung der Wahl<br />
von Java liegt darin, dass Java eine moderne, die objektorientierte<br />
<strong>Programmierung</strong> unterstützende Sprache ist, die zusätzlich (im Vergleich etwa<br />
zu C++ oder Delphi) zu den Standardsprachen in Netzanwendungen,<br />
insbesondere im Internet, gehört.<br />
Die in Java zur Verfügung stehenden Operationen zur Erstellung von verteilten<br />
<strong>Systeme</strong>n - hier vor allem die RMI-Methoden - sind in der Handhabung recht<br />
einfach sowie gut erklärbar.<br />
Ein Nachteil von Java ist die Geschwindigkeit. Lässt man beispielsweise<br />
mehrere Clients auf einem Rechner parallel laufen, so wird dies an der doch<br />
merklichen Geschwindigkeitsabnahme deutlich. Im einem normalen Spiel, in<br />
dem die einzelnen Clientanwendungen auf verschiedenen Rechnern laufen,<br />
treten jedoch die in Kapitel 2 genannten Vorteile von verteilten <strong>Systeme</strong>n zu<br />
Seite 52
Einzelheiten zu „Robots“<br />
Tage. Die Lastenteilung bewirkt eine im Vergleich zur Einzelplatzanwendung<br />
deutlich bessere Performance.<br />
b) Kommunikationsmechanismus:<br />
Wie unter a) schon kurz angedeutet, ist die Kommunikation zwischen Client<br />
und Server über RMI gelöst, wobei sowohl der Server als auch jeder Client je<br />
eine Schnittstelle besitzen, wobei die Client-Schnittstelle im Wesentlichen für<br />
den serveraktiven Rundenmodus benötigt wird.<br />
Eine Alternative zur direkten Verwendung von Java-RMI wäre sicherlich der<br />
Einsatz des Java MatchMakers gewesen, eine Begründung der getroffenen<br />
Wahl findet sich in Kapitel 7.2.<br />
c) Architektur<br />
Unter a) und b) wurde bereits erwähnt, dass die Robots-Umgebung auf einer<br />
klassischen Client/Server-Architektur beruht. Wie bereits in Kapitel 2 genannt,<br />
liegen die Vorteile dieser Architektur in der einfacheren Handhabbarkeit,<br />
insbesondere das dynamische An- und Abmelden von Spielern sowie die<br />
Übermittlung zentraler Daten wie Spielregeln, -beginn und -ende sind in dieser<br />
Architekturform leichter lösbar als in einer dezentraleren Form. Auch<br />
Synchronisationsprobleme bei Roboteraktionen lassen sich besser handhaben.<br />
Der in Kauf genommene Nachteil bei einer Client/Server-Architektur ist die<br />
Abhängigkeit vom Server – bei Ausfall ist kein Spiel möglich.<br />
Innerhalb der „Roboterwelt“ ist jedoch die Architektur des eigentlichen<br />
Systems nicht direkt erkennbar, da die Roboter ja durchaus in der Lage sind,<br />
scheinbar direkt mit anderen Robotern kommunizieren zu können. In dieser<br />
Betrachtungsweise erscheint das System dem Benutzer als dezentral.<br />
d) Kommunikationsform<br />
Die Serveranwendung und die Clientanwendungen übermitteln ihre<br />
Nachrichten synchron, wobei der Grad der Synchronität im serveraktiven<br />
Rundenmodus höher ist als im clientaktiven Echtzeitmodus. In letzterem kann<br />
ein Client nach erfolgter Anmeldung durchaus auch „nichts“ tun bis er die<br />
Seite 53
Einzelheiten zu „Robots“<br />
Meldung bekommt, dass das Spiel beendet ist. Hierauf erfolgt eine<br />
automatische Reaktion des Systems.<br />
Roboter können hingegen miteinander asynchron und synchron<br />
kommunizieren. Das Ablegen von Notizen auf dem Spielfeld entspricht genau<br />
der asynchronen Form: es ist hier zeitlich i.A. nicht vorhersehbar, wann eine<br />
Nachricht ankommt. Das Senden von Nachrichten hingegen ermöglicht eine<br />
synchrone Kommunikation.<br />
5.2 Didaktische Aspekte<br />
Anhand der Robots-Umgebung ist es möglich, zentrale mit dem Gebiet der<br />
verteilten <strong>Systeme</strong> zusammenhängende Fragestellungen im Unterricht zu<br />
thematisieren. Als Beispiel hierfür können die Begriffe<br />
• Protokolle<br />
• Schnittstellen<br />
• Synchronisation und Nebenläufigkeit<br />
• Kommunikationsformen<br />
• Datensicherheit<br />
genannt werden.<br />
Weiterhin ist durch die Struktur des Programmcodes , insbesondere durch die<br />
relativ leichte Änderbarkeit der Spielregeln, ein einfacher Einstieg in die<br />
konkrete <strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong> möglich. Auf der Ebene der<br />
Roboterprogrammierung ist auch echte verteilte <strong>Programmierung</strong> eines<br />
verteilten Systems realisierbar. Eine genauere Beschreibung der didaktischen<br />
Einsatzmöglichkeiten findet sich in Kapitel 3.3 und der Unterrichtsreihe in<br />
Kapitel 6.<br />
Seite 54
Einzelheiten zu „Robots“<br />
5.3 Einsatzmöglichkeiten<br />
5.3.1 Interaktiv gesteuertes Spiel<br />
Die einfachste Möglichkeit der Benutzung von Robots ist sicherlich das<br />
Spielen eines vorgegebenen Spiels mit Direktsteuerung der Roboter.<br />
Hierbei kann entweder einer der Beispielroboter verwendet oder ein eigener<br />
Roboter mit selbstdefinierten Eigenschaften erzeugt werden.<br />
Für alle Roboter gilt die Einschränkung, dass sie nur 40 „Eigenschaftspunkte“<br />
haben dürfen, andernfalls werden sie von Server als „unfair“ abgelehnt. Die<br />
Eigenschaftspunkte setzen sich wie folgt zusammen:<br />
Roboter kann rennen: 10 Punkte<br />
Roboter kann schwimmen: 10 Punkte<br />
Berührdistanz: (10 ⋅ Distanz) Punkte<br />
Tragen: (Anzahl der tragbaren Gegenstände) Punkte<br />
Senden: (2 ⋅ Sendereichweite) Punkte<br />
Sicht: (Sichtweite ⋅ Sichtwinkel/90) Punkte<br />
Der Einsatz von Robots als direkt interaktiv gesteuertes Netzwerkspiel<br />
beinhaltet je nach verwendetem Regelwerk bereits implizit einige mit dem<br />
Gebiet der verteilten <strong>Systeme</strong> zusammenhängende Themen. Bei<br />
Gruppenspielen ist die Kommunikation ein entscheidender Faktor zum<br />
erfolgreichen Spiel, und auch der Punkt der lokalen Kontrolle - bei Robots<br />
vor allem durch die lokale Sicht der Roboter vorhanden - wird durch die<br />
Tatsache bemerkbar, dass sich das Spielgeschehen „rund um den eigenen<br />
Roboter“ unbemerkt ändern kann.<br />
Seite 55
Einzelheiten zu „Robots“<br />
5.3.2 Algorithmen I: einfache Robotersteuerung<br />
Sozusagen die „Fortsetzung“ der Direktsteuerung von Robotern ist die<br />
Hinzunahme einer automatischen Steuerung. Die <strong>Programmierung</strong> einer<br />
solchen Steuerung wurde bereits in Kapitel 4.2.2 kurz skizziert und soll hier<br />
nochmals verdeutlicht werden.<br />
Jeder aus der Klasse AbstractRobot abgeleitete Roboter besitzt die<br />
Methode „Action getAction(String lastresult)“. Wie zu<br />
erkennen ist, erhält diese Methode als Übergabewert das Ergebnis der letzten<br />
Aktion, sie selbst muss als Rückgabe die nächste Aktion liefern.<br />
Durch Verwendung der in Anhang A.5 dokumentierten Methoden und<br />
Variablen lässt sich somit auf einfache Art und Weise eine Robotersteuerung<br />
programmieren. Als Beispiel sei hier folgende triviale Steuerung gezeigt:<br />
1) Wenn direkt vor mir ein anderer Roboter ist, so berühre ihn<br />
2) Sonst: gehe solange geradeaus wie möglich, dann drehe nach rechts<br />
public Action getAction(String lastresult)<br />
{<br />
}<br />
// Abfrage der Position direkt vor Roboter<br />
Position vor_mir = getEnvironment().getPosition(1,0);<br />
// Ist ein anderer Roboter auf der Position ?<br />
Attribute anderer_Roboter = vor_mir.getAtribute(„Player“);<br />
if (anderer_Roboter != null) {<br />
}<br />
// berühre den Roboter<br />
return new Action(„berühre“,anderer_Roboter.getData());<br />
// gehe vor, solange der letzte Schritt funktioniert hat<br />
if (lastresult.equals(„ok“) {<br />
}<br />
return new Action(„gehe“,“vor“);<br />
// ... dann drehe rechts<br />
return new Action(„drehe“,“rechts“);<br />
Die <strong>Programmierung</strong> von einfachen Roboteralgorithmen kann zunächst zum<br />
Üben des Umgangs mit den zur Verfügung gestellten Klassen dienen.<br />
Auch wenn bei einfachen Algorithmen zunächst auf Nachrichten und Notizen<br />
verzichtet wird, so sollte eine gute Steuerungsvorschrift doch auf nicht selbst<br />
verursachte wichtige Veränderungen eingehen. Beispiel bei der Goldsuche:<br />
Seite 56
Einzelheiten zu „Robots“<br />
verringert sich ohne eigene Aktionen die eigene Goldmenge, so ist man<br />
offenbar beraubt worden. Mögliche Konsequenz: Suchen des Diebs. Diese<br />
nicht selbst verursachten Veränderungen sind eine allgemeine Charakteristik<br />
von verteilten <strong>Systeme</strong>n und können durchaus thematisiert werden.<br />
5.3.3 Algorithmen II: kommunizierende Roboter<br />
„Fortsetzung“ der einfachen Algorithmen können komplexere, Kommunikation<br />
von Robotern verwendende, Robotersteuerungen sein, die insbesondere bei<br />
Gruppenspielen vonnöten sind.<br />
Programmiertechnisch ist die Kommunikation einfach realisierbar. Die<br />
Aktionen<br />
Action(„hinterlasse Notiz“,Object notiz)<br />
Action(„sende“,Object nachricht)<br />
veranlassen das Ablegen von Notizen bzw. das Senden von Nachrichten und<br />
ermöglichen somit asynchrone und synchrone Verständigungsmechanismen.<br />
Durch den Vektor<br />
getInformationManager().messages<br />
können die selbst empfangenen Nachrichten abgefragt werden.<br />
Anders als bei der Direktsteuerung der Roboter (siehe 5.3.1), bei der die<br />
übersendeten Nachrichten im Klartext auf dem Bildschirm erscheinen und<br />
somit direkt „natürlich“ interpretierbar sind, ist es bei diesem Einsatzgebiet von<br />
Robots zentral, innerhalb der eigenen Gruppe sinnvolle Protokolle für die<br />
Kommunikation der Roboter festzulegen. In Hinsicht auf die<br />
Konkurrenzbeziehung der Gruppen (natürlich abhängig von den Spielregeln)<br />
ist auch die Frage der Datensicherheit von Belang. Es ist sicherlich nicht<br />
wünschenswert, dass die gegnerischen Gruppen „geheime“ Daten abhören oder<br />
sogar interpretieren können.<br />
Seite 57
Einzelheiten zu „Robots“<br />
5.3.4 Entwicklung eigener Spiele<br />
Auf einer von den in 5.3.1 bis 5.3.3 beschriebenen Einsatzmöglichkeiten<br />
grundsätzlich verschiedenen Ebene liegt der Entwurf und die Implementierung<br />
neuer Spiele. Die Methode zur <strong>Programmierung</strong> dieser Spiele (bzw. der<br />
Spielregeln) wurde bereits in Abschnitt 4.2.4 erklärt.<br />
Anders als bei der Roboterprogrammierung wird in diesem Einsatzgebiet<br />
deutlich, dass Robots auf einer Client/Server-Architektur aufgebaut ist. Die<br />
Spielregeln werden hierbei zentral durch den Server vorgegeben. Diesem fällt<br />
somit die Aufgabe zu, für (spielinterne) Datensicherheit und –konsistenz zu<br />
sorgen – zwei zentrale Themen im Bereich der verteilten <strong>Systeme</strong>.<br />
Weiterhin müssen nach dem Entwurf des Spiels die Schnittstellen für die<br />
potentiellen Benutzer freigelegt werden, vor allem die im Spiel möglichen<br />
Aktionen sowie die vorkommenden Attribute. Schnittstellen als wesentlicher<br />
Aspekt von Verteilung werden so in ihrer Bedeutung direkt klar: ohne<br />
Freilegung der Schnittstellen wird kein vernünftiges Spiel möglich sein.<br />
5.3.5 Java-RMI verstehen: der Quellcode<br />
Die letzte hier angeführte Möglichkeit, Robots im Informatikunterricht<br />
einzusetzen, betrifft weniger die Ebene der konkreten <strong>Programmierung</strong>,<br />
sondern die (in Java) einsetzbaren Mechanismen zur Realisierung von<br />
Rechnerkommunikation.<br />
Sicherlich eine Ebene tiefer liegend als die in den vorigen Abschnitten<br />
aufgeführten Ansätze, bietet die Analyse des Quellcodes – hier vor allem die<br />
NamingUnit und die Klassen, die die RMI-Aufrufe leisten – die<br />
Möglichkeit, sich etwas ausführlicher mit den nötigen Aufrufen und den dabei<br />
möglichen Fehlern zu beschäftigen.<br />
Ansatzpunkt können hier beispielsweise die try ... catch Blöcke in den<br />
jeweiligen Klassen sein, deren Analyse genau die Erfordernisse für eine<br />
funktionierende Rechnerkommunikation liefert.<br />
Seite 58
Einzelheiten zu „Robots“<br />
5.4 Grenzen<br />
Robots liegt die Konzeption von Robotern als autonomen Agenten mit lokaler<br />
Information zugrunde. Bei allen Möglichkeiten, die dieser Ansatz eröffnet,<br />
ergeben sich doch auch gewisse Einschränkungen bei den sinnvoll<br />
implementierbaren Spielmöglichkeiten:<br />
5.4.1 Die lokale Sicht<br />
Bedingt durch die Tatsache, dass jeder Roboter stets nur einen gewissen Teil<br />
des Spielfeldes in aktueller Form zur Verfügung hat, fallen Spiele, die eine für<br />
alle Spieler gleiche Sicht auf das Spielfeld voraussetzen, aus dem Rahmen der<br />
realisierbaren Projekte.<br />
Beispiele sind hier „Memory“, „Schach“ oder andere Brettspiele.<br />
Die Spiele, die eine synchronisierte, global wahrnehmbare Spielumgebung für<br />
alle Spieler voraussetzen, lassen sich durch Verwendung des Java-<br />
MatchMakers [Tewissen] weitaus eleganter implementieren als in der Robots-<br />
Umgebung, siehe dazu Kapitel 7.2.<br />
5.4.2 Roboter als autonome Agenten<br />
Jeder Roboter handelt, auf einem eigenen Algorithmus basierend, autonom.<br />
Wenngleich dies auch in Kooperation mit anderen Robotern geschehen kann,<br />
so widerspricht die Autonomie doch der Konzeption von „durch einen Spieler<br />
bewegten Spielfiguren“, die vielen Spielen zugrundeliegt (Beispiele: „Mensch-<br />
ärgere-dich-nicht“, „Mühle“ u.ä.).<br />
Zwar ist die Robots-Umgebung tragfähig genug, die oben als Beispiel<br />
genannten Spiele von Spielfeld und Regeln her zu ermöglichen, jedoch ist<br />
folgender grundsätzlicher Unterschied vorhanden:<br />
Seite 59
Einzelheiten zu „Robots“<br />
In den oben genannten Spielen liegt die eigentliche Intelligenz stets beim<br />
Spieler, der alle seine Spielfiguren steuert, um sein Ziel zu erreichen.<br />
Bei einer Robots-Version dieser Spiele wäre die Arbeit auf die einzelnen<br />
Roboter, die die Spielfiguren darstellen, verteilt. Diese müssten durch (wohl<br />
erhebliche) Kommunikation versuchen, zum gemeinsame Spielziel zu<br />
gelangen.<br />
Der andere denkbare Ansatz, die Spielfiguren als „leblose“ Attribute zu<br />
implementieren, die der Roboter als Akteur bewegen muss, ist letztlich<br />
unrealistisch, da die hier ins Spiel kommende Komponente der benötigten Zeit<br />
zur Bewegung von Spielsteinen in den meisten Spielen eher hinderlich ist.<br />
5.4.3 Fazit<br />
Die in Robots sinnvoll implementierbaren Spiele sind genau die, die auf<br />
Spielern mit lokaler Sicht und Information aufbauen. Spieler in Robots-<br />
Spielen haben zwar Möglichkeiten zur Verständigung mit Mitspielern, es<br />
existiert aber keine globale Kontrollinstanz für eine Spielergruppe. Dadurch<br />
werden einige Spiele (z.B. viele Brettspiele) nur in veränderter, wenn auch<br />
nicht minder interessanter, Form realisierbar.<br />
Ein breites Feld von gut in Robots zu simulierenden Spielen sind alle Arten<br />
von Geländespielen (einfaches Beispiel: „Fangen“ in allen Variationen) sowie<br />
ein großer Teil von sportlich orientierten Spielen, z.B. Völkerball oder Fußball.<br />
Seite 60
Unterrichtssequenz<br />
6 Unterrichtssequenz<br />
Ausgehend von den in Kapitel 3 erarbeiteten didaktischen Aspekten <strong>verteilter</strong><br />
<strong>Systeme</strong> wird in diesem Abschnitt ein Beispiel für eine die Robots-<br />
Umgebung verwendende Unterrichtssequenz gegeben.<br />
6.1 Voraussetzungen und Zielgruppe<br />
Für die nachfolgend angegebene Unterrichtsreihe sind folgende<br />
Voraussetzungen notwendig bzw. wünschenswert:<br />
• Computerraum mit einer genügenden Anzahl von vernetzten PCs.<br />
• evtl. Liveboard oder Möglichkeit zur Wandprojektion eines<br />
Bildschirminhalts<br />
• interessierte Lerngruppe mit mindestens sechs Schülern<br />
• grundlegende Programmierkenntnisse der Schüler (Variablen, Methoden,<br />
Schleifenprogrammierung), idealerweise in Java oder einer anderen<br />
objektorientierten Sprache<br />
Im Folgenden wird aus oben genannten Gründen, insbesondere der<br />
Programmiererfahrung, ein leistungsmäßig durchschnittlicher Informatik-<br />
Leistungskurs, evtl. auch eine Informatik-AG, in der Jahrgangsstufe 12 oder 13<br />
als Zielgruppe angesehen.<br />
6.2 Grobstruktur<br />
Wie bei jeder größeren Unterrichtsreihe bestand beim Entwurf der vorgelegten<br />
Sequenz die Wahl zwischen den zwei grundlegend verschiedenen Ansätzen<br />
„top-down“ und „bottom-up“. Ich habe mich aus folgenden Gründen für eine<br />
„top-down“-Struktur entschieden:<br />
Seite 61
Unterrichtssequenz<br />
• Motivation<br />
Durch die direkte Präsentation und Benutzung der Spielumgebung zu<br />
Beginn der Unterrichtsreihe ist eine hohe Anfangsmotivation zu erwarten.<br />
Dies wäre bei einem „bottom-up“-Ansatz, der typischerweise mit den<br />
Grundlagen von RMI beginnt, wahrscheinlich anders, auch wenn dies stark<br />
abhängig von der konkret vorliegenden Lerngruppe ist.<br />
• Übersichtlichkeit<br />
Die Gesamtkomplexität – sowohl die des Gebiets der verteilten <strong>Systeme</strong> als<br />
auch die des Robots-Systems – ist recht groß, so dass ein „bottom-up“-<br />
Ansatz von der Einführung der Grundlagen bis zur Benutzung des Systems<br />
sehr lange dauern würde. Es bestünde die Gefahr, dass der Zusammenhang<br />
der einzelnen Unterrichtsthemen aus dem Auge verloren wird.<br />
• Natürlichkeit<br />
Die in der Unterrichtsreihe behandelten Themen können aus<br />
Fragestellungen der Schüler entstehen, die von der Art „Wie funktioniert<br />
das ?“ statt „Warum machen wir das ?“ sind.<br />
Die Grobstruktur der Unterrichtsreihe sieht wie folgt aus:<br />
1. Einführung in die Robots-Umgebung<br />
2. <strong>Programmierung</strong> von Roboteralgorithmen Teil 1: einfache Algorithmen<br />
3. Entwurf und Implementation eines selbstdefinierten Spiels<br />
4. <strong>Programmierung</strong> von Roboteralgorithmen Teil 2: komplexere Algorithmen<br />
zur Steuerung kommunizierender und kooperierender Roboter<br />
5. Nebenläufigkeit<br />
Zentrale fachliche Inhalte sind Protokolle und Schnittstellen,<br />
Kommunikationsmechanismen, kooperierende Prozesse und Nebenläufigkeit.<br />
Wichtige anvisierte Ziele dieser Unterrichtseinheit sind neben dem Verständnis<br />
der fachlichen Inhalte auch die Erweiterung der Programmierfähigkeiten der<br />
Schüler und die Verbesserung der Analyse von Algorithmen vor allem<br />
hinsichtlich Nebenläufigkeit. Weiterhin wird auch auf die Erreichung<br />
allgemeindidaktischer Ziele wie Kooperationsfähigkeit, Handlungs- und<br />
Seite 62
Unterrichtssequenz<br />
Prozessplanung sowie Training von Entscheidungsprozessen in Gruppen<br />
hingearbeitet.<br />
Die Dauer der Unterrichtsreihe beträgt in einem Leistungskurs mit 5<br />
Wochenstunden ca. 5 Wochen, in einer AG entsprechend mehr.<br />
6.3 Feinstruktur<br />
Nachfolgend wird eine detaillierte Beschreibung der Unterrichtssequenz<br />
angegeben. Zu jedem Unterthema (siehe Grobstrukturierung in 6.2) werden die<br />
Einzelschritte mit den wichtigsten Kenndaten (Dauer, Unterrichtsform, Ablauf,<br />
Hausaufgabe, Ziele) sowie einer Begründung der Wahl dieser Schritte genannt.<br />
Phase 1: Einführung in die Robots-Umgebung<br />
- Einführung in die Benutzeroberfläche<br />
- erstes einfaches Spiel mit Direktsteuerung<br />
- weitere Spiele mit Direktsteuerung<br />
Gegenstand: Einführung in die Benutzeroberfläche<br />
Dauer: 1 Std. Unterrichtsform: Unterrichtsgespräch mit Demonstrationen<br />
am Liveboard<br />
Ablauf: Der Lehrer erklärt und demonstriert die grundlegenden Funktionen und<br />
Möglichkeiten der Robots-Umgebung, insbesondere:<br />
• Robots als Spielumgebung, gedacht für mehrere über ein Netzwerk<br />
verbundene Spieler<br />
• Strukturierung in Server und Client-Programme<br />
• Starten eines Spiels (Server) und Verbinden mit einem Spiel (Client)<br />
• Aktionsmöglichkeiten der Roboter und Bedienung über Buttons<br />
Hausaufgabe: -<br />
Ziel: Vertrautwerden mit der Umgebung<br />
Begründung: Durch eine detaillierte Einführung werden zukünftige<br />
grundlegende Probleme der Bedienung und Funktion des Systems vermieden.<br />
Seite 63
Unterrichtssequenz<br />
Gegenstand: erstes einfaches Spiel mit Direktsteuerung<br />
Dauer: 1/2 Std. Unterrichtsform: Einzelarbeit am Computer<br />
Ablauf: In einem neutralen Spiel mit auf dem Liveboard sichbaren Server<br />
probieren die Schüler die grundlegenden Aktionsmöglichkeiten der Roboter –<br />
und auch die verschiedenen Robotertypen – aus.<br />
Hausaufgabe: -<br />
Ziele: Vertrautwerden mit den einfachen Aktionsmöglichkeiten und den<br />
verschiedenen Robotertypen. Training des Umgangs mit der Umgebung.<br />
Begründung: Für zukünftige Punkte ist es wichtig, dass die Schüler verstehen,<br />
welche Basisaktionen (insbesondere der Kommunikation) möglich sind und<br />
wie diese wirken.<br />
Gegenstand: weitere Spiele mit Direktsteuerung<br />
Dauer: 1-2 Std. Unterrichtsform: Einzelarbeit am Computer<br />
Ablauf: Nacheinander werden die drei Spiele „Goldsuche“, „Winterspiele“ und<br />
„Erobere die Fahne“ vom Lehrer vorgestellt und per Direktsteuerung gespielt<br />
(z.T. auch ohne sichtbaren Server). Bei der Vorstellung der Spiele sind vor<br />
allem anzugeben:<br />
• Spielziel<br />
• besondere im Spiel vorkommende Gegenstände<br />
• besondere Aktionsmöglichkeiten<br />
Hausaufgabe: -<br />
Ziele: Erkennen der Möglichkeiten, die die Robots-Umgebung bietet.<br />
Anstellen erster Überlegungen für Steuerungsalgorithmen.<br />
Motivationssteigerung durch Spaß am Spielen.<br />
Begründung: Für den Entwurf eigener Spiele ist die Kenntnis der generellen<br />
Möglichkeiten wichtig. Auch erleichtert ein Austesten von Spielen per<br />
Direktsteuerung das spätere Programmieren von Roboteralgorithmen.<br />
Phase 2: einfache Roboteralgorithmen<br />
- Konstruktion eines eigenen Roboters<br />
- Erklärung der Programmierumgebung für Robotersteuerung<br />
- Entwurf einfacher Roboteralgorithmen<br />
Seite 64
Unterrichtssequenz<br />
Gegenstand: Konstruktion eines eigenen Roboters<br />
Dauer: 1 Std. Unterrichtsform: Unterrichtsgespräch und Einzelarbeit<br />
Ablauf: Der Lehrer erklärt zunächst anhand von Beispielen die Eigenschaften,<br />
die Roboter haben können (siehe 4.2.2 und 5.3.1) sowie die Möglichkeiten,<br />
diese Eigenschaften zu programmieren. Jeder Schüler konstruiert daraufhin<br />
seinen persönlichen Roboter (zur späteren Verwendung).<br />
Hausaufgabe: Anfertigen von Roboterbildern (je ein Roboter aus vier<br />
Perspektiven), diese Bilder werden später gescannt und im Spiel verwendet.<br />
Ziele: Motivationssteigerung, Gewinn eines ersten Einblicks in die<br />
Roboterprogrammierung.<br />
Begründung: Durch „eigene“ Roboter kann die Identifikation mit dem Spiel<br />
größer werden.<br />
Gegenstand: Erklärung der Programmierumgebung für Robotersteuerung<br />
Dauer: 2 Std. Unterrichtsform: Lehrervortrag und Einzelarbeit<br />
Ablauf: Zunächst erfolgt die Erklärung, dass die Roboterbewegungen in<br />
Robots auch automatisiert ablaufen können. Die <strong>Programmierung</strong> der<br />
Roboter (vgl. 5.3.2) wird dann schrittweise eingeführt:<br />
1. Ausführen von Aktionen über den ActionManager<br />
2. Abfrage von Statusvariablen über den InformationManager<br />
3. Zugriff auf die Spielfeldumgebung über das LocalEnvironment<br />
Zu jedem dieser drei Schritte werden kleine Beispielaufgaben gestellt, um eine<br />
direkte Umsetzung des Lernstoffs zu ermöglichen. Beispiele:<br />
zu 1.: Roboter, der im Kreis läuft<br />
zu 2.: Ergänzung von (1) dadurch, dass der Roboter eine Nachricht sendet,<br />
wenn er nach Norden schaut.<br />
zu 3.: Ergänzung von (2) dadurch, dass die Nachrichten nur gesendet werden,<br />
wenn ein anderer Roboter in Sichtweite ist<br />
Ziel: Lernen des Umgangs mit der Programmierumgebung<br />
Begründung: Durch eine (kurze) Sequenz dieser Art wird die Erstellung<br />
komplexerer Algorithmen vorbereitet. Weiterhin macht die große Anzahl der<br />
zur Robotersteuerung wichtigen Methoden eine Einführung sinnvoll.<br />
Seite 65
Unterrichtssequenz<br />
Gegenstand: Entwurf einfacher Roboteralgorithmen<br />
Dauer: 2 Std. Unterrichtsform: Einzelarbeit am Computer<br />
Ablauf: Aufbauend auf den erworbenen Kenntnissen sollen die Schüler nun<br />
einen auf das Spiel „Goldsuche“ passenden, möglichst effektiven<br />
Roboteralgorithmus schreiben. Am Ende dieses Teils werden die<br />
programmierten Roboter durch einen Einsatz im Spiel getestet.<br />
Hausaufgabe: Analyse und Korrektur der Schwachstellen des konstruierten<br />
Algorithmus. Die Ergebnisse der Hausaufgabe können in folgenden Teilen der<br />
Unterrichtsreihe verwendet werden.<br />
Ziele: Üben der Roboterprogrammierung, Kreativität beim Erstellen von<br />
Algorithmen (durch offene Aufgabenstellung)<br />
Begründung: Diese Phase bereitet zusammen mit der vorigen den Hauptteil der<br />
Unterrichtsreihe vor. Das Spiel „Goldsuche“ ist als erstes Beispiel für<br />
„ernsthafte“ Roboteralgorithmen einfach genug, da die Kommunikation unter<br />
den Robotern hier keine Rolle spielt.<br />
Phase 3: Entwurf und Implementation eines selbstdefinierten Spiels<br />
- Entwicklung einer realisierbaren Spielidee<br />
- Analyse des geplanten Spiels<br />
- Implementierung des Spiels<br />
- Testphase<br />
Gegenstand: Entwicklung einer realisierbaren Spielidee<br />
Dauer: 1 Std. Unterrichtsform: Diskussion in Gesamtgruppe<br />
Ablauf: Die Schüler kennen aus den vorangegangenen Unterrichtsstunden die<br />
grundlegenden Möglichkeiten der Roboterprogrammierung sowie einige<br />
Beispiele für realisierbare Spiele. Nun wird in einer Diskussion ein<br />
„Wunschspiel“ ermittelt. Der Lehrer achtet dabei nur auf die grundsätzliche<br />
Programmierbarkeit des Spiels in der Robots-Umgebung (siehe 5.4) sowie<br />
darauf, dass ein gruppenbasiertes Spiel gewählt wird, da die Kommunikation<br />
unter den Robotern im späteren Verlauf der Unterrichtsreihe wichtig wird.<br />
Hausaufgabe: -<br />
Ziele: Kreativität, Üben der Entscheidungsfindung in Gruppen<br />
Seite 66
Unterrichtssequenz<br />
Begründung: Die Entscheidung, überhaupt ein Spiel von den Schülern selbst<br />
entwickeln zu lassen, liegt im daraus resultierenden tieferen Verständnis der<br />
Umgebung sowie in den Chancen, die diese <strong>Programmierung</strong> bietet (s.u.). Die<br />
Freistellung der Wahl des Ziels verfolgt oben genannte Ziele sowie die<br />
Steigerung der Motivation.<br />
Gegenstand: Analyse des geplanten Spiels<br />
Dauer: 1-2 Std. Unterrichtsform: Diskussion in Gesamtgruppe<br />
Ablauf: Das in der letzten Stunde geplante Spiel wird nun analysiert und soweit<br />
formalisiert, dass eine Implementierung möglich ist. Es sind folgende Punkte<br />
zu klären:<br />
• Was passiert bei Spielstart ?<br />
• Wann ist das Spiel beendet ?<br />
• Was passiert bei Spielende ?<br />
• Was ist nötig beim Anmelden eines neuen Spielers ?<br />
• Was ist nötig beim Abmelden eines Spielers ?<br />
• Welche (ggf. wie bewegten Attribute) werden benutzt ?<br />
• Welche Auswirkungen haben die Standardaktionen ?<br />
• Welche besonderen Aktionen gibt es und welche Auswirkungen haben sie ?<br />
Hausaufgabe: -<br />
Ziele: Einigung über gemeinsame und sinnvolle Standards (bezüglich der<br />
Namensgebung von Attributen und Aktionen), Abstraktionsfähigkeit (von der<br />
Spielidee zur Vorbereitung der Verwirklichung)<br />
Begründung: Dieser Schritt ist zur Vorbereitung der Spielimplementierung<br />
notwendig. Die oben angeführten Punkte entsprechen fast direkt den zu<br />
programmierende Methoden im RuleManager, so dass hier eine wichtige<br />
Vorbereitung der nächsten Phase geleistet wird.<br />
Seite 67
Unterrichtssequenz<br />
Gegenstand: Implementierung des Spiels<br />
Dauer: 3-4 Std. Unterrichtsform: kooperative Einzel- oder Gruppenarbeit<br />
Ablauf: Das Ergebnis der Spielanalyse aus den letzten Stunden bildet die Basis<br />
zur Implementierung des Spiels. Zunächst wird vom Lehrer die grundsätzliche<br />
Struktur eines Regelwerks (siehe 4.2.4 und 5.3.4) erklärt. Mit Hilfe der<br />
Dokumentation, des kommentieren Quellcodes der existierenden Spiele und<br />
(falls nötig) des Lehrers werden dann die Methoden auf Schüler(gruppen)<br />
aufgeteilt und programmiert.<br />
Hausaufgabe: -<br />
Ziele: Einhaltung von vereinbarten Standards, Analyse von kommentiertem<br />
Programmcode und Umsetzung in eigene Programme, erste Erfahrungen der<br />
<strong>Programmierung</strong> in verteilten Umgebungen<br />
Begründung: Die Form der <strong>Programmierung</strong> des Regelwerks ist grundlegend<br />
anders als die der Roboterprogrammierung. Der hier gewählte „top-down“-<br />
Ansatz ist recht gut durchführbar, da<br />
• einige Konzepte (z.B. Attribute und Aktionen) schon bekannt sind<br />
• die Zahl der unbekannten Klassen überschaubar ist<br />
• die wichtigen Methoden ausführlich kommentiert in einigen Beispielen<br />
vorliegen<br />
Gegenstand: Testphase<br />
Dauer: 1-2 Std. Unterrichtsform: kooperative Einzelarbeit und<br />
Unterrichtsgespräch<br />
Ablauf: Die entwickelten Methoden werden zu einem Regelwerk<br />
zusammengesetzt und das entstandene Spiel wird per Direktsteuerung der<br />
Roboter auf Funktion getestet. Eventuelle Fehler werden korrigiert.<br />
Hausaufgabe: -<br />
Ziele: Softwaretest und Fehleranalyse<br />
Begründung: Der Test des Spiels ist nötig zur Sicherstellung der<br />
Funktionalität. Treten Fehler auf, so kann (falls damit zusammenhängend) auf<br />
die Bedeutung der Einhaltung der vereinbarten Standards hingewiesen werden.<br />
Seite 68
Unterrichtssequenz<br />
Phase 4: komplexere Algorithmen<br />
- Entwicklung von Algorithmen zur Steuerung kommunizierender und<br />
kooperierender Roboter<br />
Gegenstand: Entwicklung von Algorithmen zur Steuerung kommunizierender<br />
und kooperierender Roboter<br />
Dauer: 6-8 Std. Unterrichtsform: Gruppenarbeit, kooperative Einzelarbeit<br />
Ablauf: Die Schüler teilen sich in mehrere Gruppen auf (Anzahl der Gruppen<br />
wie im programmierten Spiel sinnvoll). Jeder Schüler programmiert nun eine<br />
Robotersteuerung mit dem Ziel, dass seine Gruppe das Spiel gewinnt. Dazu<br />
werden i.A. einige gruppeninterne Absprachen über Taktiken und<br />
Kommunikationsarten notwendig sein. Ein permanentes Testen der<br />
Algorithmen wird dabei durch einen ständig laufenden Server ermöglicht.<br />
Hausaufgabe: -<br />
Ziele: Handlungs- und Prozessplanung (durch Planen der Steuerung),<br />
Kooperation (durch Absprachen mit anderen Gruppenmitgliedern), Entwurf<br />
von Kommunikationsmodellen (impliziter Zugang zu Protokollen),<br />
Erweiterung der Programmierfähigkeiten (durch Kennenlernen von <strong>verteilter</strong><br />
<strong>Programmierung</strong>), Kreativität (beim Suchen nach Strategien erforderlich)<br />
Begründung: Diese Unterrichtsstunden sind von zentraler Bedeutung für die<br />
gesamte Unterrichtsreihe: Durch die <strong>Programmierung</strong> der<br />
zusammenarbeitenden Robotersteuerungen werden erste Erfahrungen in den<br />
Bereichen „Protokolle“, „Kommunikationsmechanismen“ und<br />
„Nebenläufigkeit“ erworben und so ein implizites Wissen über diese Themen<br />
aufgebaut, auf dem in späteren Sequenzen aufgebaut wird.<br />
Durch die verteilte <strong>Programmierung</strong> der Gruppensteuerung werden<br />
Delegations- und Kooperationsprinzipien erfassbar, weiterhin kann ein<br />
Einblick in die typischen Probleme und Möglichkeiten <strong>verteilter</strong><br />
<strong>Programmierung</strong> erreicht werden, wenn auch reduziert dadurch, dass die<br />
Schüler in einem Raum sitzen und sich daher einfach absprechen können<br />
Seite 69
Unterrichtssequenz<br />
Phase 5: Nebenläufigkeit<br />
- Demonstration von Synchronisationsproblemen<br />
- Referat über Nebenläufigkeit und Synchronisation<br />
- Umsetzung in Robotersteuerung<br />
Gegenstand: Demonstration von Synchronisationsproblemen<br />
Dauer: 1 Std. Unterrichtsform: Unterrichtsgespräch<br />
Ablauf: Es ist zu erwarten, dass in den Kommunikationsmechanismen der von<br />
den Schülern programmierten Roboteralgorithmen Probleme vorliegen, die auf<br />
die Nebenläufigkeit der einzelnen Algorithmen zurückzuführen sind. Der<br />
Lehrer demonstriert am Liveboard die Probleme und wirft die Frage auf, woran<br />
die Verständigungsschwierigkeiten trotz augenscheinlich korrekter<br />
Steuerungen liegen. Es ist zu erwarten, dass Antworten der Schüler bereits in<br />
die Richtung „zeitliche Koordinierung unabhängiger Prozesse“ gehen.<br />
Hausaufgabe: -<br />
Ziel: Begreifen von Grundzügen des Synchronisationsproblems (hier in<br />
konkreter Form am Beispiel der selbstgeschriebenen Robotersteuerungen)<br />
Begründung: Herstellung eines Zusammenhangs mit dem nachfolgenden<br />
Referat.<br />
Bem.: Treten bei den Robotersteuerungen keine Probleme auf, so kann<br />
alternativ eine Beschreibung der Kommunikationsprotokolle durch die<br />
Schülergruppen erfolgen, wobei die während der <strong>Programmierung</strong><br />
aufgetretenen Probleme und deren Lösung beschrieben werden.<br />
Seite 70
Unterrichtssequenz<br />
Gegenstand: Referat über Nebenläufigkeit und Synchronisation<br />
Dauer: 1 Std. Unterrichtsform: Schülerreferat<br />
Ablauf: Nach der Vorbereitung des Themas in der letzten Stunde wird nun ein<br />
Schülerreferat (bereits am Anfang der Unterrichtsreihe vergeben) zu folgenden<br />
Themen gehalten:<br />
• Definition von Nebenläufigkeit<br />
• Synchronisationsprobleme nebenläufiger Prozesse anhand von Beispielen<br />
(z.B. Philosophenproblem)<br />
• einfache Lösungsmechanismen<br />
Hausaufgabe: -<br />
Ziele: Verständnis der bei nebenläufigen Prozessen auftretenden Probleme<br />
(Verallgemeinerung der bereits bekannten Kommunikationsprobleme der<br />
Roboter), Einführung von Fachbegriffen.<br />
Begründung: Durch das (nicht zwingend bis ins letzte Detail gehende) Referat<br />
soll die Einsicht erzeugt werden, dass die diskutierten Probleme über<br />
Synchronisation nicht spielspezifisch sind und dass bereits allgemeine<br />
Untersuchungen und Lösungsmöglichkeiten existieren.<br />
Gegenstand: Umsetzung in Robotersteuerung<br />
Dauer: 2 Std. Unterrichtsform: Gruppen- und kooperative Einzelarbeit<br />
Ablauf: Die im Referat angegebenen Möglichkeiten zur Lösung des<br />
Synchronisationsproblems werden nun in die Robotersteuerungen umgesetzt.<br />
Hausaufgabe: -<br />
Ziele: Praktische Umsetzung des erworbenen theoretischen Wissens, Analyse<br />
von Algorithmen hinsichtlich Nebenläufigkeit und Synchronisation<br />
Begründung: Der Wissenstransfer dient zum Verständnis der Thematik: durch<br />
die praktische Implementation der Synchronisationsmechanismen kann ein<br />
Begreifen des Stoffs auf einer tieferen, anschaulicheren Ebene stattfinden.<br />
Seite 71
Unterrichtssequenz<br />
6.4 Anschlussmöglichkeiten<br />
Die oben dargestellte Unterrichtsreihe bietet eine Reihe von sinnvollen<br />
Anschlussmöglichkeiten, die entweder als eigene Unterrichtsreihen oder auch<br />
bei aktuellen Nachfragen der Schüler in Form von Exkursen stattfinden<br />
können, hier evtl. durch Kurzreferate gestützt:<br />
6.4.1 Petri-Netze<br />
In der letzten Phase der Unterrichtsreihe wurde bereits das<br />
Synchronisationsproblem nebenläufiger Prozesse thematisiert. Dies kann als<br />
Anlass genommen werden, eine Verallgemeinerung mittels Darstellung durch<br />
Petri-Netze durchzuführen (siehe dazu auch Abschnitt 3.2.2)<br />
6.4.2 Datensicherheit<br />
Werden bei der Betrachtung der Kommunikation unter den Robotern einer<br />
Gruppe Schwachstellen in der Datensicherheit deutlich, z.B. durch<br />
unverschlüsseltes Versenden von auch für die Gegner bedeutsamen<br />
Informationen, so kann der Lehrer diese Sicherheitslücken ausnutzen und einen<br />
„Spion“-Roboter einsetzen, der die Gruppe besiegt (oder auch nur die<br />
Kommunikation stört).<br />
Die Analyse, warum die eigene Gruppe verloren hat, bietet einen praktischen<br />
Zugang zum Thema Datensicherheit. Dieser kann für eine Unterrichtsreihe<br />
genutzt werden, die einen Überblick über existierende Probleme - auch im<br />
Zusammenhang mit dem Internet - und Lösungen gibt.<br />
Bleibt man im Robots-Bereich, so können diese Lösungen auch umgesetzt<br />
werden, z.B. durch Codierung und Signatur von Nachrichten.<br />
Seite 72
Unterrichtssequenz<br />
6.4.3 Java-RMI<br />
Sowohl in der <strong>Programmierung</strong> der Roboter als auch in der Implementation<br />
eines Spiels wird RMI indirekt verwendet. Die entsprechenden Methoden und<br />
Aufrufe sind allerdings im Robots-Programm so gekapselt, dass sie nicht<br />
direkt benutzt werden. Taucht nun von Schülerseite die Frage auf, wie die<br />
Kommunikation zwischen Clients und Server tatsächlich funktioniert, so kann<br />
eine kurze Unterrichtssequenz zum Thema RMI angeschlossen werden. Eine<br />
Möglichkeit besteht darin, den Quellcode zu analysieren – insbesondere<br />
anhand der abgefangenen Exceptions ist ein Verständnis der<br />
Voraussetzungen möglich.<br />
Nach dieser Analyse kann ein eigenes kleines Programm, z.B. ein Chat-Tool,<br />
geschrieben werden, um den Umgang mit RMI zu lernen. Die bereits<br />
vorhandenen Kenntnisse über Synchronisation und Nebenläufigkeit sind<br />
hierbei hilfreich.<br />
6.4.4 Architekturen<br />
Ausgehend von der Frage „... und wie könnte ein Spiel ohne einen zentralen<br />
Server funktionieren ?“ kann das Gebiet der Systemarchitekturen behandelt<br />
werden. Erkannt werden können hier neben den Vorteilen dezentraler<br />
Architekturen (siehe 2.4.1) auch die Probleme in Hinblick auf Datenkonsistenz<br />
(wie kann ein global gültiges Spielfeld dargestellt und aktualisiert werden?),<br />
Turntaking-Mechanismen (wie wird bestimmt, wer wann agieren darf ?) sowie<br />
An- und Abmelden von Applikationen. Auch der Aspekt der Synchronisation<br />
kann an einem komplexen Beispiel vertieft behandelt werden, da die<br />
Synchronisation der Spieleraktionen in einem dezentralen System nicht durch<br />
eine „synchronized“-Methode einfach erreichbar ist.<br />
Die Überlegungen werden aus Zeitgründen theoretisch bleiben müssen, da die<br />
Robots-Umgebung zu komplex ist, um im Rahmen eines Informatikkurses<br />
auf eine dezentrale Architektur umprogrammiert zu werden.<br />
Seite 73
Unterrichtssequenz<br />
Es ist jedoch als Projekt die <strong>Programmierung</strong> einer einfacheren verteilten<br />
Anwendung mit dezentraler Architektur denkbar, wozu allerdings Kenntnisse<br />
von Java-RMI erforderlich sind (siehe 6.4.3).<br />
6.5 Leistungsbewertung<br />
Wird die oben beschriebene Unterrichtsreihe nicht in einer Arbeits-<br />
gemeinschaft durchgeführt, so ist die Schülerleistung sowohl in der<br />
Unterrichtsmitarbeit als auch ggf. in einer Klausur zu bewerten.<br />
6.5.1 Mitarbeit im Unterricht<br />
Die Bewertung der Mitarbeit im Unterricht ist bei der Robots-<br />
Unterrichtsreihe schwierig, da viele Phasen mit relativ offenen<br />
Aufgabenstellungen enthalten sind.<br />
Gut zu klassifizieren ist die Schülerleistung in folgenden Bereichen:<br />
• Wortbeiträge in Diskussionen<br />
• <strong>Programmierung</strong> mit festgelegtem Ziel, z.B. bei der Erstellung einfacher<br />
Roboteralgorithmen (Phase 2) oder der <strong>Programmierung</strong> der Methoden des<br />
Regelwerks (Phase 3)<br />
• Realisierung der Synchronisation (Phase 5)<br />
Schwierig ist hingegen die Bewertung der Teile mit hohem Kreativanteil,<br />
insbesondere der für die Unterrichtsreihe zentrale Punkt der <strong>Programmierung</strong><br />
kooperierender Robotersteuerungen (Phase 4). Hier ist eine Absprache mit den<br />
Schülern über die Bewertungskriterien durchaus denkbar. Mögliche Kriterien<br />
sind z.B. :<br />
• Effizienz der Gruppe (definiert durch das Gewinnen des Spiels)<br />
• klar erkennbare, sinnvolle Strategie (erkennbar an Algorithmen)<br />
Seite 74
Unterrichtssequenz<br />
• Maß von Kommunikation und Kooperation der Roboter (da auch durchaus<br />
eine Gruppe erfolgreich sein kann, in der jeder Roboter rein egoistische<br />
Ziele verfolgt)<br />
6.5.2 Klausur<br />
Aufgrund der Dauer der Unterrichtseinheit ist eventuell auch eine Klausur zu<br />
stellen, die die Inhalte der Unterrichtsreihe als Thema hat. Bei der Wahl der<br />
Klausuraufgaben sind folgende Bereiche denkbar:<br />
1. einfache Roboteralgorithmen<br />
2. Algorithmen für kooperierende Roboter<br />
3. Spieldesign (Regelwerke)<br />
4. Nebenläufigkeit<br />
Die Themenbereiche 1 und 3 sind hierbei weniger geeignet, da sie nur geringen<br />
inhaltlichen Bezug zu den behandelten Kerngebieten <strong>verteilter</strong> <strong>Systeme</strong> haben.<br />
Aus den Themenbereichen 2 und 4 lassen sich gemäß den in den Richtlinien<br />
([RichtlinienGK] und [RichtlinienLK]) vorgeschlagenen Anforderungen jedoch für<br />
Klausuren geeignete Aufgaben konstruieren, wie folgendes Beispiel zeigt:<br />
Informatik-LK 13.1<br />
Klausur 1<br />
Aufgabe 1<br />
Gegeben seien die Roboter „Sammler“ und „Träger“:<br />
Sammler Träger<br />
rennen nein nein<br />
schwimmen nein nein<br />
tragen 1 Gegenstand 5 Gegenstände<br />
Sichtfeld 360 Grad, 4 Felder 90 Grad, 5 Felder<br />
Sendeleistung 2 Felder 2 Felder<br />
Berührdistanz 1 Feld 1 Feld<br />
Im Spiel „Goldsuche“ sollen die Roboter so kooperieren, dass der Sammler nach Gold<br />
sucht und jedes gefundene Goldstück dem Träger übergibt. Dieser geht, wenn er 5<br />
Goldstücke hat, zur Heimatbasis, legt alles Gold dort ab und kehrt zum Sammler<br />
zurück, um weiteres Gold aufzunehmen.<br />
a) Geben Sie für die beiden Roboter geeignete Steuerungsalgorithmen an, die die<br />
oben beschriebene Kooperation durchführen.<br />
b) Stellen Sie den verwendeten Verständigungsmechanismus strukturiert dar.<br />
Hinweis: Zur Vereinfachung können Sie Folgendes annehmen:<br />
Seite 75
Unterrichtssequenz<br />
1. Es sind keine Wasserfelder vorhanden.<br />
2. Es sind keine weiteren Roboter auf dem Spielfeld.<br />
3. Zu Spielstart stehen Sammler und Träger nebeneinander.<br />
4. Zur Rückkehr zur Heimatbasis kann eine Methode „Action goHome()“<br />
verwendet werden, die eine Bewegungsaktion in Richtung Heimatbasis<br />
zurückliefert. Befindet sich der Roboter bereits an der Basis, so ist die Rückgabe<br />
null.<br />
Aufgabe 2<br />
a) Erläutern Sie das Problem der Synchronisation nebenläufiger Prozesse (evtl.<br />
anhand eines einfachen, selbstgewählten Beispiels).<br />
b) Eine Gruppe von Robotern soll im Spiel „Erobere die Fahne“ zusammenarbeiten.<br />
Dazu wurde folgende, für alle Roboter der Gruppe gültige, Steuerung<br />
geschrieben:<br />
...<br />
private boolean master=false;<br />
private boolean slave=false;<br />
private Position getPlayerPosition()<br />
// liefert die Position eines anderen Roboters (oder null, falls keiner<br />
// in der Nähe<br />
private Action moveAction()<br />
// liefert Bewegungsaktion<br />
...<br />
public void getAction(String lastresult) {<br />
Vector messages = getInformationManager().messages;<br />
for (int i=0; i
Unterrichtssequenz<br />
Anforderungen an Klausuraufgaben (Kenntniswiedergabe, -anwendung,<br />
Problemlösen und Werten) werden erfüllt.<br />
Zu den einzelnen Aufgaben:<br />
Aufgabe 1 hat als zentrale Anforderung den Entwurf von zwei kooperierenden<br />
Anwendungen nach vorgegebenem Kooperationsmuster. Hauptproblem des<br />
Algorithmenentwurfs in Teil a) ist die Kommunikation unter den Robotern.<br />
Diese soll in Teil b) genauer dargestellt werden. Hier liegt der Schwerpunkt auf<br />
Protokollen, wenn dies auch nicht namentlich so benannt ist.<br />
Während in Aufgabe 1 eher die Aspekte der Kenntnisanwendung und des<br />
Problemlösens im Mittelpunkt stehen, beinhaltet Aufgabe 2 im Wesentlichen<br />
die Punkte der Kenntniswiedergabe (Teil a) und des Wertens (Teil b).<br />
Das Hauptgewicht liegt hierbei auf den Gebieten Nebenläufigkeit und<br />
Synchronisation. Zunächst soll eine Begriffsdefinition gegeben werden, daran<br />
anschließend ist ein typisches Problem der Synchronisation nebenläufiger<br />
Prozesse zu erkennen, zu beschreiben und zu lösen.<br />
Seite 77
Alternativen<br />
7 Alternativen<br />
In diesem Abschnitt werden einige Alternativen der unterrichtlichen<br />
Behandlung des Themas „<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong>“ aufgezeigt. Im<br />
Abschnitt 7.1 wird der Inhalt der Roboter-Spielumgebung diskutiert, in den<br />
Teilen 7.2 und 7.3 werden Alternativansätze zur <strong>Programmierung</strong> angegeben.<br />
In Abschnitt 7.4 wird ein komplett anderer Ansatz vorgestellt, der ähnliche<br />
Inhalte wie Robots hat.<br />
7.1 Inhalte<br />
Die Wahl des Unterrichtsinhalts zum Thema „<strong>Programmierung</strong> <strong>verteilter</strong><br />
<strong>Systeme</strong>“ ist sicherlich nicht leicht, da eine Vielzahl von Möglichkeiten<br />
besteht. Alternativen zur Robots-Umgebung sind beispielsweise:<br />
• Schulinternes Mailtool<br />
Wie bereits in Abschnitt 3.2.3 beschrieben, beinhaltet die Entwicklung<br />
eines schulinternen Mailtools durchaus interessante und wichtige<br />
informatische Aspekte. Zugleich ist das Thema für die Schüler sehr<br />
anschaulich und zugänglich. Ein Vorteil dieses Unterrichtsinhalts ist die<br />
spätere Einsetzbarkeit des entwickelten Systems. Falls in der Schule frei<br />
zugängliche Computer existieren, kann ein reger Mailverkehr unter den<br />
Schülern entstehen, weiterhin könnten z.B. Rundschreiben auf<br />
elektronischem Weg verteilt werden.<br />
• Verteilte Datenbank<br />
Zu einem schülergewählten Thema kann eine verteilte Datenbank mit<br />
Abfragemechanismen entwickelt werden. Werden zu den reinen Daten<br />
noch lokale Datenmanipulationen hinzugenommen, so ist z.B. ein<br />
Mathematiktool denkbar, in dem aus verschiedenen Bereichen der<br />
Schulmathematik stammende Themen und Lösungsalgorithmen in die<br />
Seite 78
Alternativen<br />
Datenbank eingetragen werden. Die Algorithmen sollten dabei verteilt<br />
arbeiten, d.h. auf benötigte Teillösungen, die auf anderen Rechnern liegen,<br />
zugreifen können.<br />
An diesem Thema ist die Dezentralität des Systems aus informatischer<br />
Sicht sehr reizvoll. Schwerpunkte sind hier in den Bereichen<br />
„Schnittstellen“ und „Protokolle“ gut möglich (und notwendig).<br />
• Diskussionsumgebung<br />
Eine Diskussionsumgebung kann prinzipiell auf einem einfachen, von den<br />
Schülern komplett selbst entwickelbaren, Talktool aufbauen.<br />
Erweiterungen, z.B. durch graphische Veranschaulichungen, sind durch<br />
den Einsatz des Java MatchMakers (siehe 7.2) ebenfalls recht leicht<br />
möglich.<br />
Die Diskussionsumgebung als Unterrichtsinhalt hat den Vorteil, komplett<br />
durch die Schüler implementierbar zu sein. Dadurch sind weitgehende<br />
Kenntnisse der <strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong> gut erreichbar.<br />
Angesichts der skizzierten Alternativen kann die Wahl von Robots als<br />
Spielumgebung zur Erreichung der in Kapitel 3 beschriebenen didaktischen<br />
Ziele durch die zu erwartende hohe Motivation der Schüler beim Benutzen des<br />
Systems begründet werden:<br />
• gute Kommunikationsalgorithmen werden sich bei Gruppenspielen im<br />
direkten Erfolg der Gruppe zeigen, in vielen Fällen kann die Analyse der<br />
Algorithmen und deren Schwachstellen dadurch anschaulicher und<br />
„realitätsnäher“ werden.<br />
• Wählt eine Gruppe ein weniger geeignetes Protokoll zur internen<br />
Kommunikation, beispielsweise uncodierte Versendung<br />
„sicherheitsrelevanter“ Nachrichten oder eine generell nicht ausreichende<br />
Funktionsvielfalt, wird der Effekt ebenfalls direkt am Bildschirm anhand<br />
des Verlierens der eigenen Gruppe zu sehen sein. In oben dargestellten<br />
Beispielen ist etwa vorstellbar, dass ein geschickt agierender Gegner<br />
„Spione“ aussendet, die Nachrichten abhören und in gewinnbringende<br />
Information umwandeln. Im Falle der nicht ausreichenden Funktionsvielfalt<br />
könnte am Bildschirm sichtbar werden, dass die Roboter sich nicht richtig<br />
Seite 79
Alternativen<br />
„verstehen“ – dass z.B. keine Einigung über die gemeinsam zu verfolgende<br />
Taktik geschieht.<br />
• Die Implementierung neuer Spielideen ist durch die enorme Menge der<br />
theoretisch denkbaren Spiele sehr reizvoll. Neben den mit dieser Aufgabe<br />
verknüpften informatischen Aspekte der Synchronisation, Nebenläufigkeit,<br />
Datenkonsistenz und Schnittstellenplanung liegt hier auch ein sehr großer<br />
Freiraum für Phantasie und Kreativität, der sicherlich vielen Schülern<br />
gefallen wird, insbesondere wenn in sonstigen Programmieraufgaben eher<br />
die Erfüllung von vorgegebenen „Pflichtenheften“ gefordert ist.<br />
Dennoch ist natürlich ein funktionierendes Spiel eng verknüpft mit einem<br />
gut geschriebenen Regelwerk, und auf <strong>Programmierung</strong> zurückzuführende<br />
Fehler im Spieldesign sind direkt beobachtbar – und oft auch<br />
generalisierbar in Bezug auf oben genannte informatische Aspekte.<br />
7.2 Java MatchMaker<br />
Der von Frank Tewissen an der Universität Duisburg entwickelte Java<br />
MatchMaker ist eine Java-Klassenbibliothek zum Erstellen von verteilten<br />
Anwendungen (Dokumentation siehe [Tewissen]). Er benutzt Java-RMI und<br />
stellt einen zentralen Nachrichtenserver zur Verfügung, über den andere<br />
Applikationen ihren Nachrichtenaustausch realisieren können.<br />
Die Verwendung des Java MatchMakers bietet folgende Möglichkeiten:<br />
• Vereinfachung von Remote Method Invocation: durch Kapselung der RMI-<br />
Mechanismen ist z.B. kein RMI-Compiler mehr nötig<br />
• Ermöglichung dynamischer Remote Method Invocation<br />
• Ermöglichung der Kopplung von Objekten: gekoppelte Objekte sind<br />
teilweise synchronisiert, so dass z.B. an ein Objekt gesendete Nachrichten<br />
automatisch an alle gekoppelten Objekte weitergeleitet werden<br />
Auf technische Einzelheiten zum Java MatchMaker wird hier nicht<br />
eingegangen, siehe dazu die Dokumentation und die gute Darstellung bei<br />
Witzel.<br />
Seite 80
Alternativen<br />
Mit Hilfe des Java MatchMakers lassen sich auf relativ einfache Weise<br />
verteilte Anwendungen erstellen. Insbesondere die nachträgliche Verteilung<br />
von vorher eigenständig arbeitenden Anwendungen ist leicht möglich.<br />
In der Robots-Umgebung wird der Java MatchMaker nicht verwendet, der<br />
Nachrichtenaustausch wird hier unter direkter Benutzung von Java-RMI<br />
realisiert. Dies kann wie folgt begründet werden:<br />
• In der Robots-Umgebung sind keine zu koppelnden Objekte vorhanden,<br />
da z.B. kein für alle Spieler gleiches, globales Spielfeld existiert. Statt<br />
dessen hat jeder Spieler eine eigene, z.T. veraltete, lokale Sicht.<br />
• Die Vereinfachung des RMI-Mechanismus kann teilweise didaktischen<br />
Zielen gegenläufig sein. Sollen beispielsweise (wie in 5.3.5 oder 6.4.3<br />
skizziert) gerade die Funktion und Verwendung von Remote Method<br />
Invocation im Unterricht thematisiert werden, so ist dies anhand des<br />
Quellcodes als Einstiegsbeispiel möglich.<br />
Sicherlich schließen die angegebenen Gründe eine Verwendung des<br />
MatchMaker nicht grundlegend aus. Bei der vorliegenden Struktur des<br />
Robots-Systems ist jedoch eine Synchronisation von Objekten nicht<br />
erforderlich und teilweise nicht sinnvoll.<br />
Sollte bei einer Erweiterung des Robots-Systems jedoch die Notwendigkeit<br />
der Kopplung von Objekten entstehen (siehe dazu Abschnitt 8.3.3), so wäre die<br />
Verwendung des Java MatchMakers einfach zu implementieren, da in Robots<br />
die RMI-Funktionalitäten bereits gekapselt vorliegen. Eine Änderung wäre<br />
demnach nur in den entsprechenden Klassen notwendig.<br />
Für den Programmierer von Roboteralgorithmen oder Spielregeln - also die<br />
Zielgruppe der Robots-Umgebung - ist der Unterschied zwischen den beiden<br />
verschiedenen Wegen des systeminternen Nachrichtenaustauschs ohnehin nicht<br />
direkt erkennbar, da in keinem der beiden Arbeitsgebiete unmittelbare RMI-<br />
Aufrufe bzw. Kopplungsbefehle notwendig sind.<br />
Letztlich kann festgestellt werden, dass der Java MatchMaker eine gute und<br />
flexible Alternative zu dem in Robots eingeschlagenen Weg des<br />
Seite 81
Alternativen<br />
Nachrichtenaustauschs per direkter Verwendung von Java-RMI darstellt.<br />
Insbesondere für verteilte Anwendungen, die auf Synchronisation von<br />
Teilkomponenten aufbauen, ist der Einsatz des MatchMakers sinnvoll.<br />
7.3 JavaSpaces<br />
JavaSpaces ist ein von Sun entwickeltes Paket zur Unterstützung bei der<br />
<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong> (Dokumentation in [JavaSpaces]). Es<br />
verwendet Java-RMI sowie die Serialisierung von Objekten und stellt folgende<br />
Funktionalität zur Verfügung:<br />
Ein JavaSpaces Server kann „Einträge“ (Kopien von Objekten, die das<br />
Interface net.jini.space.Entry implementieren) aufnehmen.<br />
Applikationen können auf dem Server nach Einträgen suchen (read) und<br />
diese ggf. entfernen (take). Außerdem existiert eine „notify“-Funktion, die<br />
eine automatische Benachrichtigung einer Applikation, wenn ein gewünschter<br />
Eintrag beim Server vorliegt, ermöglicht.<br />
Alle diese Suchmechanismen erlauben den Einsatz von „Wildcards“, d.h. es<br />
müssen beim Abfragen nicht alle Komponenten eines Eintrags angegeben<br />
werden.<br />
Der bei JavaSpaces gewählte Ansatz vereinfacht die <strong>Programmierung</strong> <strong>verteilter</strong><br />
Anwendungen, die über den Austausch von Objekten (bzw. Daten) miteinander<br />
kommunizieren. Dabei sind einige der in diesem Feld typischerweise<br />
auftretenden Probleme durch den JavaSpaces Server gelöst:<br />
• Serverimplementation<br />
• Protokolldefinition<br />
• Nebenläufigkeitskontrolle<br />
• sichere Speicherung der zwischen den Applikationen auszutauschenden<br />
Daten<br />
Seite 82
Alternativen<br />
Wie auch der Java MatchMaker (siehe 7.2), stellt JavaSpaces einige sinnvolle<br />
Hilfen zur Erstellung <strong>verteilter</strong> Anwendungen zur Verfügung. Beide Ansätze<br />
unterscheiden sich jedoch grundlegend voneinander:<br />
Das Kernkonzept des Java MatchMakers ist das Koppeln von Objekten, also<br />
die Synchronisation. JavaSpaces hingegen bietet dem Programmierer die<br />
Möglichkeit, durch den Austausch von Objekten über den JavaSpaces Server<br />
effiziente asynchrone Kommunikationsmechanismen zu verwenden.<br />
In der Robots-Umgebung bietet sich der Einsatz von JavaSpaces aufgrund der<br />
lokalen Sicht der Roboter eher nicht an. Würden beispielsweise die<br />
Informationen über die Umgebung eines Roboters über JavaSpaces Server<br />
mitgeteilt und nicht per direkter RMI, wie in Robots der Fall, so könnten<br />
diese von beliebigen anderen Robotern leicht abgehört und sogar gelöscht<br />
werden.<br />
Lediglich zur Kontrolle der Zugreihenfolge ließe sich ein JavaSpaces Server<br />
sinnvoll einsetzen – da aber Robots auf einer zentralisierten Architektur<br />
aufbaut, ist dies nicht nötig. Anders wäre dies bei dezentralen <strong>Systeme</strong>n. Hier<br />
ermöglicht der Einsatz von JavaSpaces zur Turntaking-Kontrolle effiziente und<br />
elegante Lösungen.<br />
7.4 AgentSheets<br />
Während in den vorigen Abschnitten zunächst die Inhalte von Robots (in 7.1)<br />
und nachfolgend Alternativen der programmiertechnischen Realisation (7.2<br />
und 7.3) diskutiert worden sind, wird in diesem Abschnitt eine „fertige“<br />
verteilte Umgebung vorgestellt: AgentSheets (siehe [AgentSheets]).<br />
In vielen Bereichen ähnelt die AgentSheets-Umgebung dem Robots-System.<br />
Es befinden sich autonome Agenten auf einem Feld (dem agentsheet). Die<br />
Agenten können ihre Umgebung wahrnehmen und in ihr agieren. Auch<br />
Kommunikation zwischen Agenten ist möglich.<br />
Unterschiede bestehen im Wesentlichen in zwei Gebieten:<br />
Seite 83
Alternativen<br />
• Simulierbare Umgebungen<br />
Während Robots in einigen Teilen speziell auf die Simulation von<br />
Robotern in einer Spielfeldumgebung zugeschnitten ist (z.B. vordefinierte<br />
Eigenschaften der Roboter, Benutzeroberfläche), bietet AgentSheets<br />
größere Freiräume. Simulierbar sind z.B. Fische in einem Aquarium oder<br />
Schalter und Leiterbahnen in einem Schaltkreis.<br />
• <strong>Programmierung</strong><br />
Die <strong>Programmierung</strong> der Agenten läuft bei Robots und AgentSheets<br />
deutlich unterschiedlich ab. Bei Robots wird in echtem Java-Code<br />
programmiert (siehe 5.3.2 ff.), AgentSheets hingegen hat das Konzept der<br />
„taktilen <strong>Programmierung</strong>“. Diese durch das „AgenTalk“-Tool<br />
verwirklichte Art der <strong>Programmierung</strong> verläuft visuell und regelbasiert.<br />
Durch die Angabe von „IF-THEN“-Klauseln innerhalb einer graphischen<br />
Benutzeroberfläche kann das Verhalten der Agenten gesteuert werden.<br />
Umgebungsinformationen und Aktionsmöglichkeiten<br />
Seite 84
Alternativen<br />
Beispiel eines Programms<br />
Die so programmierten Algorithmen werden mit „Ristretto“, einem<br />
Compiler, in Java-Code umgesetzt.<br />
Der Ansatz von AgentSheets hat den klaren Vorteil, dass die Steuerung von<br />
Agenten auch ohne spezielle Programmierkenntnisse möglich ist. Damit lassen<br />
sich einige Prinzipien <strong>verteilter</strong> <strong>Systeme</strong> losgelöst von programmier-<br />
technischen Details erkennen.<br />
Dieser Ansatz ist jedoch nicht in allen Einsatzgebieten im Informatikunterricht<br />
gewollt. Hier sollte (zumindest auch) die konkrete <strong>Programmierung</strong> <strong>verteilter</strong><br />
<strong>Systeme</strong> behandelt werden (Begründung siehe 3.3).<br />
Aus diesem Grund ist der Einsatz von AgentSheets in einer Unterrichtsreihe zu<br />
verteilten <strong>Systeme</strong>n im Informatikunterricht der Sekundarstufe II nur in<br />
Teilgebieten sinnvoll. In der Sekundarstufe I hingegen, wo der Schwerpunkt<br />
nicht auf „Lösung von Synchronisationsproblemen“ oder „Entwurf und<br />
Implementation von Protokollen“ liegt, kann AgentSheets gerade wegen seiner<br />
einfachen Programmierschnittstelle sehr gut in einer Unterrichtsreihe (z.B. zum<br />
Oberthema „Modellierung“) verwendet werden.<br />
Seite 85
Zusammenfassung und Ausblick<br />
8 Zusammenfassung und Ausblick<br />
Als Abschluss dieser Arbeit werden in diesem Kapitel die erzielten Resultate<br />
zusammengefasst und einige Perspektiven aufgezeigt. Weiterhin wird ein erster<br />
Bericht über den Einsatz der Robots-Umgebung gegeben.<br />
8.1 Zusammenfassung<br />
Die Hauptergebnisse dieser Arbeit lassen sich wie folgt zusammenfassen:<br />
Durch die zunehmende, sowohl lokale wie auch weltweite, Vernetzung von<br />
Computern gewinnen Anwendungen an Bedeutung, die diese Vernetzung<br />
nutzen. Ein Großteil dieser Anwendungen kann als verteilte <strong>Systeme</strong><br />
charakterisiert werden: <strong>Systeme</strong>, die aus mehreren, an unterschiedlichen Orten<br />
liegenden und miteinander zusammenarbeitenden Komponenten bestehen.<br />
Verteilte <strong>Systeme</strong> sind aus informatischer Sicht interessant, da sie Beispiele für<br />
einige wichtige Themen der Informatik bieten (z.B. Nebenläufigkeit,<br />
Protokolle, Datenschutz- und sicherheit, Systemarchitekturen).<br />
Auch aus didaktischer Sicht sind verteilte <strong>Systeme</strong> durchaus von Bedeutung.<br />
Neben vielen modernen und wichtigen Unterrichtsgegenständen, die in<br />
Unterrichtsreihen über verteilte <strong>Systeme</strong> behandelbar sind, trägt auch das<br />
Thema „verteilte <strong>Systeme</strong>“ selbst in vielen Punkten zur Rechtfertigung des<br />
Unterrichtsfachs Informatik bei. Eine Rechtfertigung von verteilten <strong>Systeme</strong>n<br />
als Unterrichtsgegenstand ist durch die aktuellen, z.T. noch vorläufigen,<br />
Lehrpläne gegeben.<br />
Eine Behandlung <strong>verteilter</strong> <strong>Systeme</strong> im Informatikunterricht kann auf<br />
verschiedenen Ansätzen beruhen. Ein wichtiger Ansatz ist hierbei der<br />
Programmieransatz, der die Rolle des Programmierens im Unterricht betont,<br />
wenn auch nicht als alleiniges Mittel benutzt.<br />
Seite 86
Zusammenfassung und Ausblick<br />
Die Robots-Umgebung bietet eine Möglichkeit, eine Unterrichtsreihe über<br />
„<strong>Programmierung</strong> <strong>verteilter</strong> <strong>Systeme</strong>“ durchzuführen. In dieser Umgebung<br />
agieren programmierbare Roboter auf einem gemeinsamen Spielfeld, wobei die<br />
Regeln des Spiels ebenfalls in weiten Teilen frei definierbar sind. Ein<br />
wesentlicher Teil der Roboteraktionen ist die Kommunikation. In Form von<br />
Notizzetteln oder gesendeten Nachrichten können Roboter miteinander in<br />
Kontakt treten.<br />
Typische Inhalte einer Robots-Unterrichtsreihe sind neben der<br />
<strong>Programmierung</strong> der Regeln und der Roboteralgorithmen die Themen<br />
„Synchronisation und Nebenläufigkeit“, „Kommunikationsmechanismen“ und<br />
„Protokolle“. Diese lassen sich gut anschaulich darstellen und somit leicht<br />
verstehen.<br />
Neben Robots existieren natürlich noch eine ganze Reihe von Alternativen<br />
zur Thematisierung <strong>verteilter</strong> <strong>Systeme</strong> im Unterricht. Zu nennen sind hier (fast)<br />
beliebige andere Beispielprojekte wie die <strong>Programmierung</strong> eines schulinternen<br />
E-Mail-Systems, verschiedene Tools zur Erstellung <strong>verteilter</strong> <strong>Systeme</strong> (z.B.<br />
Java MatchMaker oder JavaSpaces) oder bereits existierende komplette<br />
Umgebungen wie AgentSheets. Jedes dieser Konzepte hat bestimmte<br />
didaktisch gut verwertbare Themen, so dass ja nach gewünschtem<br />
Unterrichtsschwerpunkt ein passendes Projekt gefunden werden kann.<br />
8.2 Einsatzbericht<br />
8.2.1 Allgemeines<br />
Die Robots-Umgebung wurde im Rahmen der Modellierungswoche vom<br />
19.5. bis 21.5. 1999 an der Gerhard-Mercator-Universität GH Duisburg<br />
eingesetzt. Das Thema der Projektgruppe lautete „<strong>Programmierung</strong> <strong>verteilter</strong><br />
<strong>Systeme</strong>“, erwartete Teilnehmer waren mathematisch begabte Schüler der<br />
Klassen 10 bis 13 mit Programmierkenntnissen in einer imperativen<br />
Programmiersprache (nicht notwendig Java).<br />
Seite 87
Zusammenfassung und Ausblick<br />
8.2.2 Zeitplanung<br />
Die zur Verfügung stehenden 15,5 Arbeitsstunden waren von Wibke Rickert<br />
und mir, den Projektgruppenleitern, wie folgt geplant:<br />
Phase Dauer Inhalt<br />
1 1 h Einführung in und Test von Robots<br />
2 0,25 h Erklärung der Bedienung des JDK und des Editors<br />
3 0,25 h Verteilen einer „Java-Kurzreferenz“ (Erklärung der Syntax<br />
von Java)<br />
4 3 h Einführung in die Objektorientierung<br />
5 0,75 h Ausdenken eines in Robots zu programmierenden<br />
Gruppenspiels<br />
6 1 h Erklärung der Objektstrukturen bei Robots<br />
7 2 h Verteilung und <strong>Programmierung</strong> der notwendigen<br />
Methoden im Regelwerk<br />
8 1 h Test des Spiels durch direkte Steuerung von Robotern<br />
9 5,25 h <strong>Programmierung</strong> der Roboteralgorithmen<br />
10 1 h Test der Ergebnisse in der Gruppe<br />
Die tatsächlich vorliegende Teilnehmergruppe bestand aus 3 Schülern und<br />
einer Lehrerin. Einer der Schüler (Jan, Jgst. 13, Informatik-Grundkurs) konnte<br />
bereits gut in Java programmieren und hatte auch Kenntnisse über<br />
Objektorientierung. Die anderen beiden Schüler (Phillip und Alexander, Klasse<br />
10) und die Lehrerin (Fächer: Mathematik und Physik) hatten hingegen<br />
keinerlei Programmiererfahrung.<br />
Angesichts dieser Voraussetzungen wurde der Ablaufplan geändert. Die<br />
Erklärung des JDK sowie die Einführung in Java und die Objektorientierung<br />
wurde vorgezogen, ausgedehnt und nur mit den Schülern der Klasse 10 und<br />
ihrer Lehrerin durchgeführt. In dieser Zeit wurde das Regelwerk von Jan und<br />
mir implementiert.<br />
Seite 88
Zusammenfassung und Ausblick<br />
Durch diese Trennung konnte die nachfolgende Erklärung der <strong>Programmierung</strong><br />
in Robots auf die Erstellung von Roboteralgorithmen beschränkt werden.<br />
Es wurden dann zwei Teams zu je drei Personen gebildet, die sich zunächst<br />
eine Gruppentaktik überlegten und dann begannen, diese zu programmieren.<br />
Nach einiger Zeit musste jedoch eingesehen werden, dass die Teilnehmer ohne<br />
Programmiererfahrung mit der Implementation der Roboteralgorithmen<br />
überfordert war. Dies lag meines Erachtens nach darin begründet, dass das<br />
grundlegende Verständnis von Elementen wie Schleifen, bedingten<br />
Anweisungen oder Methoden nicht vorhanden war.<br />
Demzufolge wurde die Gruppe erneut geteilt. Jan und ich begannen mit der<br />
Implementierung eines von der Gesamtgruppe beschriebenen<br />
Roboteralgorithmus, während der Rest der Gruppe eine Dokumentation<br />
entwarf und die für das Spiel nötigen Bilder zeichnete bzw. suchte.<br />
Die Implementation des Roboteralgorithmus konnte in der zur Verfügung<br />
stehenden Zeit zwar nicht abgeschlossen werden, dennoch wurden einige<br />
beachtliche Teile erreicht (siehe 8.2.4).<br />
8.2.3 Entwickeltes Spiel<br />
Das innerhalb der Modellierungswoche entwickelte Spiel ist recht komplex<br />
und zeigt einige der Möglichkeiten von Robots. Nachfolgend eine kurze, von<br />
der teilnehmenden Lehrerin geschriebene, Beschreibung des Spiels. Der<br />
Quellcode ist auf der beiliegenden Diskette zu finden (Klasse<br />
ModellRuleManager).<br />
Zwei Mannschaften spielen gegeneinander. Alle Mitspieler einer Mannschaft<br />
starten an einer gemeinsamen Heimatbasis. Auf den Landflächen des Feldes<br />
sind wie im Spiel „Goldsuche“ Goldstücke verteilt. Ziel des Spiels ist es, pro<br />
Gruppe jeweils 20 Goldstücke zu sammeln und zur eigenen Heimatbasis zu<br />
bringen. Diese ist zwar nicht betretbar, das Gold kann jedoch hineingeworfen<br />
werden. Die Goldstücke können auf dem Spielfeld ausgegraben werden.<br />
Außerdem kann man sie anderen Robotern abnehmen oder aus der<br />
Seite 89
Zusammenfassung und Ausblick<br />
gegnerischen Basis stehlen. Dabei muss natürlich die Tragekapazität des<br />
Roboters berücksichtigt werden.<br />
Zusätzlich sind auf dem Spielfeld 3 Brunnen, die mit Wasserbomben angefüllt<br />
sind, und 3 Baseballschläger verteilt. Jeder Roboter trägt eine Fackel bei sich.<br />
Brennt diese nicht, kann der Roboter sich nur noch blind bewegen, Nachrichten<br />
senden oder Notizzettel ablegen. Alle anderen Aktionen sind mangels Sicht<br />
nicht möglich. Die Fackel kann nur in der Nähe der eigenen Basis neu<br />
entzündet werden. Die Fackel wird gelöscht, wenn man von einer<br />
Wasserbombe getroffen wird oder in eine Pfütze tritt. Die Wasserbomben<br />
können an den Brunnen aufgenommen und bei Bedarf in Blickrichtung fünf<br />
Felder weit geworfen werden. Außerdem können sie auf einem Feld als<br />
unsichtbare Falle (Pfütze) abgelegt werden. Wenn man einen Baseballschläger<br />
besitzt und zur Abwehr einsetzt, kann man eine Wasserbombe zurückschlagen<br />
und ist vor Berührungen (=Goldklauen) geschützt. Man kann gleichzeitig keine<br />
anderen Aktionen durchführen.<br />
Innerhalb der Berührdistanz können Pfützen durch Suche enttarnt werden. Eine<br />
Pfütze auf dem nächsten Feld in Blickrichtung kann durch Zuschütten<br />
entschärft werden.<br />
Szene aus entwickeltem Spiel<br />
Seite 90
Zusammenfassung und Ausblick<br />
8.2.4 Entwickelter Roboteralgorithmus<br />
Beim entwickelten Roboteralgorithmus ist die Kommunikation ein wichtiger<br />
Punkt. Ausgetauscht werden in regelmäßigen Abständen Informationen über<br />
die Heimatbasis der gegnerischen Mannschaft, über die Positionen von<br />
Brunnen und gelegten Pfützen sowie umgegrabenen Feldern.<br />
Der entwickelte Roboteralgorithmus ist für zwei Roboter gedacht. Bei mehr als<br />
zwei Robotern pro Team kann der Informationsaustausch eventuell nicht<br />
vollständig sein, bei nur einem Roboter pro Team läuft der Algorithmus nicht.<br />
Der Algorithmus teilt das Spiel folgendermaßen in Phasen ein:<br />
Phase 0: Initialisierung<br />
Viermal drehen, dann Suchen der eigenen Heimatbasis im lokalen Umfeld und<br />
Errichten eines Koordinatensystems mit Ursprung Heimatbasis. Dieser Schritt<br />
ist zur späteren Kommunikation der Roboter unabdingbar und hilft ebenso bei<br />
der Rückkehr zur Basis, was im Spiel recht oft der Fall ist.<br />
Phase 1: Informationen sammeln<br />
Möglichst viele Positionen des Spielfelds besuchen. Dabei alle Schläger und so<br />
viele Wasserbomben wie möglich aufnehmen. Mit einer Wahrscheinlichkeit<br />
von 5 Prozent eine Pfütze erzeugen.<br />
In diesem Schritt wird vor allem die Datenbasis erstellt, die folgende Aspekte<br />
umfasst:<br />
• Position der gegnerischen Heimatbasis<br />
• Positionen der Brunnen<br />
• Positionen der gelegten Pfützen<br />
• Positionen der bereits umgegrabenen Felder<br />
Phasen 2 bis Spielende: variable Taktik<br />
In den Phasen 2 und höher wird jeweils zufällig eine der drei folgenden<br />
Taktiken ausgewählt:<br />
Seite 91
Zusammenfassung und Ausblick<br />
1. Gold suchen<br />
Gehe auf gemäß Datenbasis noch nicht umgegrabene Felder und suche<br />
Gold. Sind drei Goldstücke gesammelt, so bringe alles Gold zur Basis und<br />
suche weiter. Bei den Bewegungen werden mit fünfprozentiger<br />
Wahrscheinlichkeit Pfützen gelegt.<br />
2. Basis verteidigen<br />
Gehe um die eigene Basis und bewerfe alle Gegner mit Wasserbomben.<br />
Sind diese in Berührreichweite, so nimm ihnen das Gold ab und wirf es in<br />
die eigene Basis.<br />
3. Gegner stören<br />
Gehe auf die Heimatbasis des Gegners. Sammele dort alles Gold ein und<br />
schalte auf „abwehren“, falls ein Schläger vorhanden ist. Wird von den<br />
Gegnern Gold abgelegt, so nimm dies auf und schalte wieder auf<br />
„abwehren“.<br />
Außer Phase 0 ist jede Phase noch in drei Unterphasen eingeteilt:<br />
• Unterphase 0: Setze einen Timer auf 20 Sekunden.<br />
• Unterphase 1: eigentlicher Algorithmus (siehe oben)<br />
• Unterphase 2: (nach Ablauf des Timers) Rückkehr zur Basis und<br />
Informationsaustausch mit Partner.<br />
Der Informationsaustausch läuft wie folgt ab:<br />
Ist man an der Basis angekommen, so werden pausenlos die eigene Datenbasis<br />
gesendet und die eigenen neuen Nachrichten abgefragt. Ist dabei eine<br />
Datenbasis enthalten, so aktualisiere und sende die eigene Datenbasis. Schalte<br />
dann auf die nächste Spielphase um.<br />
Der oben beschriebene Algorithmus konnte innerhalb der Modellierungswoche<br />
aus Zeitgründen nicht vollständig implementiert werden. Es fehlen die<br />
Taktiken „Gegner stören“ und „Basis verteidigen“, die Taktik „Gold suchen“<br />
ist noch fehlerhaft. Funktionstüchtig ist aber insbesondere die<br />
Seite 92
Zusammenfassung und Ausblick<br />
Roboterkommunikation. Der Quellcode ist in der Klasse BasicTeamRobot<br />
zu sehen.<br />
8.2.5 Schlussfolgerungen<br />
Aufgrund der bei einem Großteil der Teilnehmer fehlenden<br />
Programmiererfahrungen und –kenntnisse ist es schwierig, aus den<br />
Ergebnissen der Modellierungswoche generelle Schlussfolgerungen über die<br />
Möglichkeiten von Robots als Unterrichtsgegenstand zu ziehen.<br />
Es lässt sich jedoch feststellen, dass bei bestehenden Erfahrungen mit Java, wie<br />
bei einem der Teilnehmer der Fall, die <strong>Programmierung</strong> sowohl von<br />
Regelwerken als auch von Roboteralgorithmen durchaus ohne lange<br />
Einarbeitungszeit möglich ist.<br />
Die in den Arbeitsgruppen mit viel Engagement entworfenen Taktiken für das<br />
Teamspiel und Möglichkeiten für Spielregeln lassen die Schlussfolgerung zu,<br />
dass die Robots-Umgebung in vielen Hinsichten motivierend wirken kann.<br />
Auch ohne explizite Einführung von Fachbegriffen wie „Synchronisation“ oder<br />
„Nebenläufigkeit“ diskutierten die Schüler über Möglichkeiten, die<br />
Roboterkommunikation zeitlich zu kontrollieren. Dies könnte im<br />
Schulunterricht leicht abstrahiert und verallgemeinert werden.<br />
Als Ergebnis der Modellierungswoche kann festgestellt werden, dass sich die<br />
Robots-Umgebung für einen Informatik-Leistungskurs, in dem Java als<br />
Programmiersprache eingeführt ist, sehr gut eignet. Liegen fundierte<br />
Kenntnisse in anderen Programmiersprachen vor, so lässt sich Robots<br />
ebenfalls – nach Kurzeinführung in die <strong>Programmierung</strong> – verwenden.<br />
Sind bei den Schülern jedoch keine Programmierkenntnisse vorhanden, so ist<br />
die <strong>Programmierung</strong> von Robotern innerhalb kurzer Zeit nicht erreichbar. Hier<br />
wären sicherlich einige Monate anzusetzen, wie auch aktuell in vielen Schulen<br />
bei Verwendung von NIKI in Turbo-Pascal der Fall.<br />
Seite 93
Zusammenfassung und Ausblick<br />
Ist eine Behandlung von Simulationsprojekten in verteilten Umgebungen<br />
innerhalb der Sekundarstufe I gewünscht, so bietet sich eher der Einsatz von<br />
AgentSheets (siehe Kapitel 7.4) an. Der innerhalb der Modellierungswoche<br />
realisierte komplexe Algorithmus zeigt jedoch auch deutlich die Vorzüge, die<br />
direkte Java-<strong>Programmierung</strong> gegenüber einer graphischen<br />
Programmieroberfläche hat : ein höherer Flexibilitätsgrad und die Möglichkeit,<br />
die komplexen Vorgänge in verteilten <strong>Systeme</strong>n durch konkrete<br />
<strong>Programmierung</strong> zu verstehen.<br />
8.3 Ausblick<br />
Ein umfassender Ausblick über mögliche Zukunftsperspektiven im Bereich der<br />
verteilten <strong>Systeme</strong> und deren Didaktik ist aufgrund der enormen<br />
Vielschichtigkeit der Thematik und der Geschwindigkeit der Entwicklung nur<br />
schwer zu geben.<br />
Exemplarisch möchte ich daher nachfolgend einige Perspektiven in drei<br />
unterschiedlichen Teilgebieten aufzeigen, die meines Erachtens nach einen<br />
guten Einblick in mögliche zukünftige Tendenzen geben.<br />
8.3.1 Tendenzen <strong>verteilter</strong> <strong>Systeme</strong>: Jini<br />
Wie die in Kapitel 2.1 angegebene geschichtliche Entwicklung der<br />
Computerbenutzung zeigt, geht der Trend eindeutig von der einzelnen<br />
Arbeitsstation hin zu einer vernetzten Umgebung.<br />
Dieser Trend dürfte mit der Vernetzung von Computern allein noch nicht<br />
beendet sein. So ist z.B. die komplette Vernetzung aller elektrischen Geräte<br />
eines Haushalts durchaus denkbar. In diesem Szenario könnten beispielsweise<br />
die Waschmaschine oder die Mikrowelle vom Fernseher aus gesteuert werden.<br />
Bei Funktionsstörungen wären Geräte z.B. per Nachricht an den PC in der<br />
Lage, dem Benutzer dies selbst mitzuteilen und ggf. den Kundendienst zu<br />
rufen. Auch könnte Software, beispielsweise neue wassersparende<br />
Seite 94
Zusammenfassung und Ausblick<br />
Spülprogramme für die Waschmaschine, auf die Geräte eingespielt werden<br />
(siehe [Ernst]).<br />
Der Ansatz der von Sun entwickelten Jini-Technologie geht genau in diese<br />
Richtung. Jini-fähige Geräte können nach Belieben dem Netzwerk hinzugefügt<br />
werden und stellen sofort ihre Funktionalität zur Verfügung; z.B. lassen sich<br />
über eine Kamera Bilder aufnehmen, auf einer Festplatte abspeichern, auf<br />
einem Fernseher anzeigen und über einen Drucker ausgeben. Musikstücke<br />
können über das Internet geladen und auf einem beliebigen Recorder (CDR,<br />
DAT oder Festplatte) abgespeichert werden.<br />
Alle diese Vorgänge sind zentral von einer Station aus steuerbar.<br />
Jini setzt auf Java-RMI auf und verdeutlicht in extremer Weise den Begriff der<br />
Transparenz. Für den Benutzer sind die technischen Einzelheiten, z.B. der<br />
Unterschied des Speicherns von Musikstücken auf Festplatte oder DAT-Tape,<br />
wie auch die Verteiltheit des Systems nicht von Bedeutung. Beispielsweise<br />
verläuft die Bedienung der Kaffeemaschinen zu Hause und im Büro identisch<br />
und kann von einem Arbeitsplatz aus geschehen.<br />
In gewisser Weise kann das Konzept von Jini als richtungsweisend angesehen<br />
werden: durch Jini kann die Vernetzung von Umgebungen erheblich gesteigert<br />
werden (Beispiele siehe oben oder in [Jini]).<br />
Verteilte <strong>Systeme</strong> werden in diesem Zusammenhang an Bedeutung gewinnen,<br />
da die Verteiltheit in Jini-<strong>Systeme</strong>n der Normalzustand ist.<br />
8.3.2 Schulanwendungen<br />
Schulanwendungen <strong>verteilter</strong> <strong>Systeme</strong> lassen sich in den Einsatz und die<br />
Thematisierung dieser <strong>Systeme</strong> unterscheiden.<br />
Im Bereich des Einsatzes <strong>verteilter</strong> <strong>Systeme</strong> lassen sich einige Tendenzen<br />
angeben. Hier können z.B. durch Schulkooperation via Internet<br />
Seite 95
Zusammenfassung und Ausblick<br />
schulübergreifende, ggf. sogar internationale, Projekte durchgeführt und<br />
Partnerschaften eingerichtet werden. Auch der Einsatz von Diskussionstools im<br />
normalen Unterricht ist an einigen Stellen sicherlich sinnvoll und trägt zur<br />
Methodenvielfalt bei. Generell gesehen werden die Informations- und<br />
Kommunikationstechnologien in Zukunft wohl einen wichtigen Platz in der<br />
Gesellschaft einnehmen, so dass die Vertrautmachung mit diesen <strong>Systeme</strong>n –<br />
die größtenteils verteilte <strong>Systeme</strong> sind – im Schulunterricht geleistet werden<br />
sollte.<br />
Die Thematisierung <strong>verteilter</strong> <strong>Systeme</strong> wird im Gegensatz zum oben<br />
beschriebenen Einsatz im Wesentlichen im Informatikunterricht stattfinden.<br />
Hierbei sind verschiedene Ebenen denkbar – von den technischen Grundlagen<br />
bis hin zur Anwendungsbedienung. Wichtige fachliche Inhalte sind dabei<br />
Protokolle, Synchronisation, Kommunikationsmechanismen sowie Datenschutz<br />
und –sicherheit.<br />
Zur Zeit werden einige Umgebungen entwickelt, die die unterrichtliche<br />
Thematisierung <strong>verteilter</strong> <strong>Systeme</strong> ermöglichen. Das in 7.4 beschriebene<br />
AgentSheets ist ein Beispiel, der Einsatz von Robots wurde in dieser<br />
Ausarbeitung ausführlich diskutiert.<br />
Letztlich ist eine begründete Vorhersage über zukünftige Arten der<br />
Behandlung <strong>verteilter</strong> <strong>Systeme</strong> im Informatikunterricht nur schwer zu geben –<br />
dass jedoch verteilte <strong>Systeme</strong> Unterrichtsgegenstand sein werden, ist aufgrund<br />
der in den Lehrplänen erkennbaren Tendenz wahrscheinlich.<br />
8.3.3 Perspektiven in der Robots-Umgebung<br />
Innerhalb der Robots-Umgebung sind einige Erweiterungen sowie Änderungen<br />
möglich, um größere oder andere Anwendungsgebiete zu erhalten.<br />
Nachfolgend werden vier denkbare Ansätze beschrieben:<br />
Seite 96
Zusammenfassung und Ausblick<br />
• Nachrichtenfluss<br />
Das in Robots verwirkliche Konzept der lokalen Information kann durch<br />
eine Synchronisationsmöglichkeit bestimmter Komponenten ergänzt<br />
werden. So wäre es in einigen Anwendungen sinnvoll, eine für alle Spieler<br />
gleiche globale Sicht auf das Spielfeld zu haben. Auch wäre es vorstellbar,<br />
dass bei Gruppenspielen die Informationen eines Gruppenmitglieds auch<br />
für alle anderen Mitglieder der Gruppe automatisch verfügbar sind.<br />
Realisierbar wäre die beschriebene Synchronisation z.B. durch<br />
Verwendung des Java MatchMaker (siehe 7.2)<br />
• Spielerdarstellung<br />
Die Möglichkeiten für Agenten sind in Robots durch die Festlegung auf<br />
Roboter mit roboterspezifischen Eigenschaften (schwimmen, rennen,<br />
Tragekapazität etc.) relativ stark eingeschränkt, auch wenn die<br />
Aktionsmöglichkeiten dieser Agenten flexibel realisiert sind.<br />
Zur Ermöglichung allgemeinerer Simulationen könnten auch die Agenten<br />
mit ihren Eigenschaften noch spielabhängig gestaltet werden: Bei der<br />
Anmeldung an ein Spiel werden die Eigenschaften abgefragt und - falls<br />
nicht im Programmcode definiert - interaktiv vom Benutzer gesetzt.<br />
• Architektur<br />
Denkbar wäre es, die Client/Server-Architektur von Robots aufzugeben<br />
und eine dezentrale Struktur zu verwenden. Diese könnte die Prinzipien<br />
<strong>verteilter</strong> <strong>Systeme</strong> besser verdeutlichen. Realisierbar wäre ein auf<br />
JavaSpaces (siehe Kapitel 7.3) aufbauender Ansatz:<br />
Der Benutzer wählt eine der Optionen „Neues Spiel starten“ oder „Mit<br />
einem Spiel verbinden“. Im erstgenannten Fall wählt er die gewünschten<br />
Spielregeln aus und errichtet einen JavaSpaces Server. Über diesen kann<br />
dann der Turntaking-Mechanismus laufen: Ein Spieler „nimmt“ das<br />
aktuelle Spielfeld vom Server und verändert es durch eine Aktion. Dann<br />
liefert er es wieder beim Server ab. Durch Zugriffsbeschränkungen lässt<br />
sich ein Rundenmodus erreichen.<br />
• Programmierschnittstellen<br />
Waren die obigen drei Punkte noch eher kleinere Erweiterungen in der<br />
Funktionalität des Robots-Systems bzw. bei „Architektur“ eine Änderung<br />
Seite 97
Zusammenfassung und Ausblick<br />
der Programmstruktur unter Beibehaltung der Funktionen, so sind durch die<br />
Modifikation der Programmierschnittstellen andere didaktische Ziele und<br />
Anwendungsmöglichkeiten erreichbar. Neben einer Erweiterung der<br />
Benutzerschnittstelle mit dem Ziel eines verbesserten interaktiven<br />
Spielmodus oder einer AgentSheets-artigen graphischen Oberfläche zur<br />
Schaffung von Einsatzmöglichkeiten im Primarstufen- und Sek-I-Bereich<br />
ist vor allem die Kombination mit Logikprogrammierung interessant.<br />
Durch Java/PROLOG-Schnittstellen oder die Verwendung von JESS (siehe<br />
[Jess]) wäre es möglich, Robots als Visualisierungsmöglichkeit für<br />
Logikprogramme zu nutzen.<br />
Seite 98
„Robots“ - Dokumentation<br />
Anhang A: Robots-Dokumentation<br />
1 Systemanforderungen und Installation<br />
1.1 Systemvoraussetzungen<br />
Robots benötigt einen Computer mit installiertem JDK 1.2. Weiterhin ist eine<br />
Netzwerkverbindung mit installiertem TCP/IP – Protokoll nötig.<br />
Für den Betrieb von Clients wird eine Bildschirmauflösung von mindestens<br />
1024x768 Bildpunkten empfohlen. Bei 800x600 ist die Konsole nicht mehr<br />
erkennbar, bei noch geringerer Auflösung sind auch Teile des Spielfeldes<br />
sowie einige der Kontrollbuttons nicht mehr sichtbar.<br />
1.2 Installation<br />
Kopieren Sie alle Dateien auf beiliegender Diskette in ein beliebiges<br />
Verzeichnis, beispielsweise C:\robots . Legen Sie nun die Java-<br />
Sicherheitseinstellungen so fest, dass alle benötigten Netz- , Thread- und<br />
AWT-Zugriffe erlaubt werden. Da es auf meinem Testsystem des öfteren zu<br />
fälschlich ausgelösten Zugriffsberechtigungsverweigerungen kam, wird das<br />
Einfügen von<br />
grant {permission java.security.AllPermission; };<br />
in die Datei "java.policy" empfohlen. Zu beachten ist bei dieser<br />
Vorgehensweise jedoch, dass hiermit praktisch der gesamte<br />
Sicherheitsmechanismus des JDK 1.2 außer Betrieb genommen wird.<br />
Seite 99
„Robots“ - Dokumentation<br />
2 Server: Starten eines Spiels<br />
2.1 Starten des Servers<br />
Rufen Sie die Datei „server.bat“ im Installationsverzeichnis auf.<br />
Sollte wegen Änderung des Quellcodes eine Neucompilierung notwendig sein,<br />
ist vorher die Datei „serverc.bat“ aufzurufen.<br />
2.2 Einstellungen am Spielfeld<br />
Als erster Schritt können nun die Spielfeldgröße sowie die Anzahl der<br />
Wasserflächen eingestellt werden. Durch den „Spielfeld“-Button gelangt man<br />
in den entsprechenden Dialog:<br />
In diesem ist weiterhin die Konsole an- und ausschaltbar sowie die Option<br />
anwählbar, auf dem Serverbildschirm alle Objekte anzuzeigen. Standardmäßig<br />
werden nur die für alle Roboter sichtbaren Objekte dargestellt.<br />
Standardeinstellungen: Spielfeldgröße 10x10, Wassermenge mittel<br />
Seite 100
„Robots“ - Dokumentation<br />
2.3 Auswahl der Spielregeln<br />
Bei Anwählen des „Spielregeln“-Button erscheint folgender Dialog:<br />
Über die linke Box kann nun das gewünschte Spiel eingestellt werden.<br />
Weiterhin kann der Spielmodus (Echtzeit oder Rundenmodus) über die Knöpfe<br />
links bestimmt werden.<br />
Standardeinstellung: neutrales Spiel im Echtzeitmodus<br />
2.4 Starten und Beenden des Spiels<br />
Durch die „Start“- und „Stop“-Buttons kann das Spiel nun mit den gewählten<br />
Einstellungen gestartet bzw. beendet werden. Bei Beendigung des Spiels<br />
werden alle evtl. verbundenen Clients benachrichtigt und die Verbindung zum<br />
Server beendet.<br />
Während eines laufenden Spiels werden in der Konsole An- und Abmeldungen<br />
von Clients angezeigt, die Züge der Roboter werden in der DOS-Konsole<br />
ausgegeben.<br />
Seite 101
„Robots“ - Dokumentation<br />
2.5 Möglichkeiten bei laufendem Spiel<br />
Bei laufendem Spiel lassen sich Spielfeld, -regeln und -modus nicht verändern.<br />
Einstellbar sind jedoch die Geschwindigkeit (über den Schieberegler oben)<br />
sowie die Bildschirmanzeige.<br />
Über die Buttons „Vollbild“ und „Normalbild“ ist die Ansicht zwischen der<br />
normalen Oberfläche (s.o.) und dem Vollbildmodus umschaltbar.<br />
In beiden Ansichten kann über die „Zoom“-Buttons die Größe der einzelnen<br />
Felder vergrößert bzw. verkleinert werden. Standardmäßig ist diese so<br />
eingestellt, dass alle Felder sichtbar sind.<br />
3 Client: Verbinden mit einem Spiel<br />
3.1 Starten eines Clients<br />
Rufen Sie die Datei „client.bat“ im Installationsverzeichnis auf.<br />
Seite 102
„Robots“ - Dokumentation<br />
Sollte wegen Änderung des Quellcodes eine Neucompilierung notwendig sein,<br />
ist vorher die Datei „clientc.bat“ aufzurufen.<br />
3.2 Auswahl eines Roboters<br />
Im oberen mittleren Textfeld kann die Klasse des gewünschten Roboters<br />
angegeben werden (ohne „client.robots.“). Die Angabe einer<br />
ungültigen Roboterklasse wird bei der Anmeldung entdeckt – in diesem Fall<br />
wird ein BasicRobot verwendet.<br />
Zusätzlich ist im oberen rechten Textfeld ein Name für den Roboter eintragbar.<br />
Wird kein Name eingegeben, so wird automatisch der in der Roboterklasse<br />
definierte Standardname des Roboters verwendet.<br />
3.3 Anmelden beim Server<br />
Im oberen rechten Textfeld ist der Name des Rechners einzutragen, auf dem<br />
der Robots-Server läuft. Vorgegeben ist hier „localhost“, also der Rechner,<br />
auf dem auch der Client gestartet wurde.<br />
Ist der korrekte Name eingetragen, so kann die Verbindung zum Server über<br />
den „Anmelden“-Button aufgebaut werden. Nach erfolgreicher Anmeldung<br />
erhält der Client die grundlegenden Spieldaten vom Server, und der Roboter<br />
befindet sich sofort „im Spiel“.<br />
Seite 103
„Robots“ - Dokumentation<br />
3.4 Aktionsdurchführung<br />
Wie oben erwähnt, ist ein Roboter direkt nach erfolgreicher Anmeldung beim<br />
Server ins Spiel aufgenommen. Um auch zu agieren, stehen zwei<br />
Möglichkeiten offen:<br />
• Start des Roboteralgorithmus<br />
Durch den „Start“-Button kann der Roboteralgorithmus gestartet werden,<br />
per „Stop“-Button ist dieser jederzeit wieder<br />
anhaltbar.<br />
• Direkte Angabe von Einzelzügen<br />
Über die Einzelzugbuttons auf der linken<br />
Seite des Fensters (nur aktiviert, falls Spiel<br />
im Echtzeitmodus und kein Algorithmus<br />
gestartet) können Aktionen per<br />
Benutzerkommando veranlasst werden. Die<br />
Standardaktionen sind über die Icons<br />
anwählbar (Parameter der Aktionen ggf.<br />
links davon auswählbar), spielspezifische<br />
Aktionen (wie „grabe“ bei der Goldsuche)<br />
Seite 104
„Robots“ - Dokumentation<br />
können im Textfeld neben „allgemein“ eingegeben und über den<br />
„allgemein“-Button veranlasst werden. Nachteil dieser Methode ist, dass<br />
Nachrichten und Notizen nur Strings als Parameter erhalten können.<br />
Bei den allgemeinen Aktionen ist überhaupt keine Parameterübergabe<br />
möglich.<br />
3.5 Während des Spiels<br />
Während des Spiels erscheinen in den beiden unteren Textgebieten<br />
verschiedene Informationen:<br />
Im rechten Textgebiet werden die übermittelten Aktionen mitsamt der<br />
Reaktion des Servers auf diese ausgegeben.<br />
Das linke Textgebiet enthält Nachrichten vom Server (mit vorangestelltem<br />
[Server]: ), Informationen über aufgenommene Notizen (Notiz: ) und<br />
empfangene Nachrichten (Nachricht:).<br />
4 Struktur des Programms<br />
In diesem Abschnitt werden die Strukturen von Server- und Clientprogramm<br />
anhand von Diagrammen beschrieben. Zu den einzelnen Komponenten werden<br />
die korrespondierenden Klassen genannt, die im beiliegenden Quelltext<br />
ausführlich dokumentiert sind.<br />
Aus Gründen der Übersichtlichkeit werden die Strukturen nicht vollständig<br />
detailliert aufgeführt, sondern nur soweit zum Verständnis des Programms<br />
sinnvoll.<br />
Seite 105
„Robots“ - Dokumentation<br />
4.1 Programmstruktur Server<br />
Der Robots-Server kann grob in drei Komponenten gegliedert werden:<br />
Benutzer-<br />
Interface<br />
Datenfluss<br />
Server<br />
Spiellogik<br />
Server-<br />
Schnittstelle<br />
Diese Dreiteilung ist im Wesentlichen vergleichbar mit der „model-view-<br />
controller“-Architektur von Java-Swing-Komponenten [Swing], wenn auch mit<br />
veränderter Semantik. Das Benutzerinterface ist hauptsächlich zur visuellen<br />
Repräsentation des Spiels da, die Spiellogik liefert die Datenbasis, und die<br />
Server-Schnittstelle, an der die Aktionen der Roboter ankommen, bewirkt<br />
Veränderungen an den Daten.<br />
Zur Struktur der einzelnen Teile:<br />
Sichtbares<br />
Fenster<br />
Spielfelddarstellung<br />
Bilddatenverwaltung<br />
Benutzer-<br />
Interface<br />
Einstellungen<br />
(durch Benutzer)<br />
Seite 106
„Robots“ - Dokumentation<br />
Klassen:<br />
Sichtbares Fenster: MasterUI<br />
Spielfelddarstellung: Masterboard<br />
Bilddatenverwaltung: ImageHandler<br />
Benutzereinstellungen: FieldDiag, RuleDiag<br />
Spielfeldposition<br />
Liste von erweitert<br />
Objekt auf<br />
Position<br />
Feld von<br />
Spiellogik<br />
aktuelles<br />
Regelwerk<br />
Basisregelwerk<br />
Spiellogik: Mastergame<br />
Spielfeldposition: Position<br />
Objekt auf Position: Attribute<br />
Basisregelwerk: BasicRuleManager<br />
Spieler: Player<br />
Liste von<br />
Spieler<br />
Nachrichten an Clients<br />
Seite 107
„Robots“ - Dokumentation<br />
Server-<br />
Schnittstelle<br />
Behandlung von<br />
Clientnachrichten<br />
implementiert<br />
vereinbartes<br />
Interface<br />
Nachrichten von Clients<br />
Behandlung von Clientnachrichten: Actionhandler<br />
vereinbartes Interface: Connectable<br />
(Anm.: Diese Darstellung ist wegen des Fehlens der für die RMI-Operationen<br />
wichtigen Stub- und Skeletonklassen nur symbolisch zu betrachten)<br />
4.2 Programmstruktur Client<br />
Auch die Clientseitige Programmstruktur kann in drei Teile gegliedert werden,<br />
wobei die Trennung in visuelle, Daten- und Kontrollkomponenten durch die<br />
Möglichkeit der Einzelzüge auf Benutzerwunsch teilweise unscharf wird.<br />
Benutzer-<br />
Interface<br />
Client<br />
Roboter<br />
Client-<br />
Schnittstelle<br />
Seite 108
„Robots“ - Dokumentation<br />
Teilkomponenten:<br />
Sichtbares<br />
Fenster<br />
Spielfelddarstellung<br />
Bilddatenverwaltung<br />
Benutzer-<br />
Interface<br />
Sichtbares Fenster und Einzelzüge: ClientUI<br />
Spielfelddarstellung: Board<br />
Einzelzüge<br />
(durch Benutzer)<br />
Bilddatenverwaltung: (master.)ImageHandler<br />
Bei der Struktur der Robotereinheit sind die Hilfsklassen sowie die<br />
Ableitungshierarchie erkennbar:<br />
Basisroboter<br />
erweitert<br />
abstrakter<br />
Roboter<br />
erweitert<br />
Roboter<br />
Zugriff auf<br />
Aktionsweitergabe an Server<br />
Aktionseinheit<br />
lokales<br />
Spielfeld<br />
Informationen<br />
zum Spielstand<br />
Anfrage bei Server<br />
Seite 109
„Robots“ - Dokumentation<br />
Basisroboter: BasicRobot<br />
abstrakter Roboter: AbstractRobot<br />
Aktionseinheit: ActionManager<br />
lokales Spielfeld: LocalEnvironment<br />
Informationen zum Spielstand: InformationManager<br />
Die Client-Schnittstelle ist wie die Server-Schnittstelle strukturiert. Das<br />
vereinbarte Interface ist Receivable, die implementierende Klasse heißt<br />
Communicator.<br />
5 Wichtigste Variablen und Methoden<br />
An dieser Stelle werden die für die <strong>Programmierung</strong> von Roboteralgorithmen<br />
und Regelwerken wichtigsten Variablen und Methoden, ggf. mit kurzer<br />
Erklärung, aufgelistet. Die Bedeutung der wichtigsten Klassen wurde bereits in<br />
Kapitel 4.2 und im Anhang A.4 erläutert.<br />
Eine ausführliche Kommentierung aller Klassen und deren Methoden ist im auf<br />
Diskette beiliegenden Quelltext zu finden.<br />
Beim Server als „public“ deklarierte Methoden und Variablen, insbesondere in<br />
den Klassen „Action“, „Attribute“, „Player“ und „Position“, sind für die<br />
Roboteralgorithmen zugreifbar.<br />
5.1 Klasse Action (Server)<br />
Konstruktoren:<br />
public Action(String command,Object data)<br />
public Action(String command)<br />
Methoden:<br />
public String getCommand()<br />
public Object getData()<br />
Seite 110
„Robots“ - Dokumentation<br />
5.2 Klasse Attribute (Server)<br />
Konstruktor:<br />
Attribute(String name,String readableIf,String deleteableIf,byte[] imageData)<br />
Methoden:<br />
public String getName()<br />
public Object getObject()<br />
// die nächsten vier Methoden betreffen das Setzen/Abfragen von Sichtbarkeits- bzw. Entfernbarkeitsmerkmalen:<br />
String getReadableIf()<br />
String getDeleteableIf()<br />
void setReadableIf(String s)<br />
void setDeleteableIf(String s)<br />
// Bilddaten: mit OldImageData ist das Bild gemeint, dass bei Clients im „nicht aktuelles Sichtfeld“ -bereich erscheint<br />
byte[] getImageData()<br />
byte[] getOldImageData()<br />
void setImageData(byte[] data)<br />
void setOldImageData(byte[] data)<br />
// (allgemeine und spielerbezogene) Sichtbarkeit und (spielerbezogene) Entfernbarkeit:<br />
boolean isReadable(Player p,Position pos)<br />
boolean isReadable(Position pos)<br />
boolean isDeleteable(Player p,Position pos)<br />
5.3 Klasse AttributeMover (Server)<br />
Konstruktor:<br />
AttributeMover (MoveListener listener,Attribute a,Position pos, int direction,<br />
Variablen:<br />
int direction<br />
int movesToGo<br />
int delaytime<br />
Position pos<br />
int movesToGo,int delaytime)<br />
Seite 111
„Robots“ - Dokumentation<br />
5.4 Klasse BasicRuleManager (Server)<br />
Konstruktor:<br />
BasicRuleManager(MasterUI ui, Mastergame g)<br />
Variablen:<br />
protected MasterUI ui;<br />
protected Mastergame game;<br />
Methoden:<br />
String getName()<br />
String getDescripion()<br />
// wird bei Spielstart einmal aufgerufen:<br />
void startupGame()<br />
// wird bei Anmeldung eines Spielers aufgerufen:<br />
void addPlayer(Player p)<br />
// wird bei Abmeldung eines Spielers aufgerufen:<br />
void removePlayer(Player p)<br />
// Überprüfung auf Spielende:<br />
protected boolean checkEnd()<br />
// wird bei Spielende aufgerufen:<br />
void doEnd()<br />
// Überprüfung und Durchführung von Aktionen:<br />
protected String performWait(Player pl)<br />
protected String performTurn(Player pl, Object data)<br />
protected String performMove(Player pl, Object data)<br />
protected String performRun(Player pl)<br />
protected String performGet(Player pl, Object data)<br />
protected String performPut(Player pl, Object data)<br />
protected String performLeaveNotice(Player pl, Object data)<br />
protected String performSend(Player pl, Object data)<br />
protected String performContact(Player pl, Object data)<br />
protected String performGeneralAction (Player p, Action a)<br />
// Reaktion auf mit „ok“ durchgeführte Aktionen:<br />
protected void waitPerformed(Player pl)<br />
protected void turnPerformed(Player pl, Object data)<br />
protected void movePerformed(Player pl, Object data)<br />
protected void runPerformed(Player pl)<br />
protected void getPerformed(Player p,Object data)<br />
protected void putPerformed(Player p,Object data)<br />
protected void leaveNoticePerformed(Player p,Object data)<br />
protected void sendPerformed(Player p,Object data)<br />
protected void contactPerformed(Player p,Object data)<br />
protected void generalActionPerformed(Player p,Action a)<br />
Seite 112
„Robots“ - Dokumentation<br />
// Blockiere Spieler für „rounds“ Runden:<br />
protected void delayPlayer(Player pl, int rounds)<br />
5.5 Klasse Loader (Server)<br />
Methode:<br />
// Zum Laden von Bilddaten:<br />
public static byte[] load(String filename)<br />
5.6 Klasse Mastergame (Server)<br />
Variablen:<br />
// Feldgröße (nicht ändern !)<br />
int max_x<br />
int max_y<br />
Methoden:<br />
// Abfrage, ob Spiel läuft:<br />
boolean isRunning()<br />
// Anzahl der verbundenen Spieler:<br />
int getPlayerNumber()<br />
// Für Schleifen: Spieler mit Nummer i (i>=0) ausgeben<br />
Player getPlayerNr(int i)<br />
// Position eines Spielers:<br />
Position getPlayerPosition(Player p)<br />
// allgemeine Spielfeldposition:<br />
Position getPosition(int x, int y)<br />
5.7 Klasse MasterUI (Server)<br />
Methoden:<br />
void refreshHighscore(Player pl)<br />
void appendConsoleText(String s)<br />
void drawBoardAt(Position p)<br />
int getDelay()<br />
Seite 113
„Robots“ - Dokumentation<br />
5.8 Interface MoveListener (Server)<br />
Methoden:<br />
// moveAttribute ist nur ein Bewegungswunsch. Die Implementation muss im RuleManager durchgeführt werden.<br />
// Erwarteter Rückgabewert true bei durchgeführter Bewegung<br />
boolean moveAttribute (AttributeMover a, Position oldpos, Position newpos)<br />
void moveEnded (AttributeMover a, Position pos)<br />
5.9 Klasse Player (Server)<br />
Variablen:<br />
// Fähigkeiten des zum Player gehörigen Roboters:<br />
boolean canSwim<br />
boolean canRun<br />
int viewAngle<br />
int viewSize<br />
int maxCarry<br />
int sendSize<br />
int contactSize<br />
// Positionen:<br />
Position pos<br />
Position homepos<br />
// spielstandabhängig:<br />
int direction<br />
int score<br />
boolean marked<br />
Vector items<br />
String group<br />
Vector messages<br />
// Zur freien Verfügung des RuleManagers:<br />
int state<br />
// true, wenn Spieler Zugberechtigung hat<br />
boolean hasTurn<br />
Methoden:<br />
public String getName()<br />
public int getDirection()<br />
public String getGroup()<br />
// Sendet Servernachricht an Client:<br />
Seite 114
„Robots“ - Dokumentation<br />
void putServerMessage(String message)<br />
// Erzwingen einer Aktion:<br />
void forceAction()<br />
byte[] getImageData()<br />
byte[] getHomeImageData()<br />
void setPosition(Position p)<br />
void setPosition(int x,int y)<br />
void sethomePosition(int x,int y)<br />
// Netzadresse:<br />
String getAddress()<br />
5.10 Klasse Position (Server)<br />
Konstruktoren:<br />
public Position()<br />
public Position(int x, int y)<br />
Position(int x,int y,String accessibleIf)<br />
Variablen:<br />
public int x<br />
public int y<br />
// für Clients: actual ist true, wenn Position im Sichtfeld liegt<br />
public boolean actual<br />
public Vector attributes<br />
public String accessibleIf<br />
Methoden:<br />
public void addAttribute(Attribute a)<br />
public void removeAttribute(Attribute a)<br />
// liefert (falls vorhanden) das erste Attribut mit Namen „name“<br />
public Attribute getAttribute(String name)<br />
// liefert alle Attribute mit Namen „name“<br />
public Vector getAllAttributes(String name)<br />
// (allgemeine und spielerbezogene) Betretbarkeit einer Position:<br />
boolean isAccessible(Player p)<br />
boolean isAccessible()<br />
Seite 115
„Robots“ - Dokumentation<br />
5.11 (abstrakte) Klasse AbstractRobot (Client)<br />
Variablen:<br />
// Fähigkeiten des Roboters:<br />
protected boolean canSwim<br />
protected boolean canRun<br />
protected int viewAngle<br />
protected int viewSize<br />
protected int maxCarry<br />
protected int sendSize<br />
protected int contactSize<br />
Methoden:<br />
// Hilfen:<br />
public final ActionManager getActionManager()<br />
public final InformationManager getInformationManager()<br />
public final LocalEnvironment getEnvironment()<br />
// Name und Gruppenwunsch:<br />
public final String getName()<br />
public final void setName(String s)<br />
public final void setPreferredGroup(String s)<br />
// Setzen der Bilddaten (i=0 für „sieht nach Nord“, 1 für West, 2 für Süd, 3 für Ost, 4 für Daten der<br />
// Heimatbasis)<br />
public final void setImageData(int i, byte[] data)<br />
5.12 Klasse ActionManager (Client)<br />
Methode:<br />
public String doAction(Action a)<br />
5.13 Klasse BasicRobot (Client)<br />
Konstruktor:<br />
public BasicRobot()<br />
Methoden:<br />
// Ende des Roboteralgorithmus:<br />
Seite 116
„Robots“ - Dokumentation<br />
public void end()<br />
// Methoden zur Implementation eines Roboteralgorithmus:<br />
protected String doActions(String lastresult)<br />
public Action getAction(String lastResult)<br />
5.14 Klasse InformationManager (Client)<br />
Variablen:<br />
// Abfrage ohne Serveranfrage (schnell, aber evtl. veraltet)<br />
public String group<br />
public int score<br />
public Vector items<br />
public boolean marked<br />
public int direction<br />
public Vector messages<br />
public String rules<br />
Methoden:<br />
// Aktualisieren aller Informationen:<br />
public void getAllInfos()<br />
// Abfrage mit Serveranfrage aktuell, aber langsam)<br />
public String getGroup()<br />
public int getScore()<br />
public Vector getItems()<br />
public void getEnvironment()<br />
public boolean getMarked()<br />
public Vector getMessages()<br />
public int getDirection()<br />
5.15 Klasse LocalEnvironment (Client)<br />
Methode:<br />
// liefert die Position, die „forward“ Felder vor und „rightward“ Felder rechts vom Roboter liegt<br />
public Position getPosition(int forward, int rightward)<br />
Seite 117
Literaturverzeichnis<br />
Anhang B: Literaturverzeichnis<br />
[AgentSheets ]: AgentSheets -Seiten im Internet, online unter<br />
http://www.agentsheets.com<br />
Stand: 17.5.1999<br />
[Baumgarten]: B. Baumgarten 1996<br />
Petri-Netze. Grundlagen und Anwendungen (2.Auflage)<br />
Berlin, Heidelberg: Spektrum<br />
[Borghoff/Schlichter]: U.M. Borghoff und J.H. Schlichter 1995<br />
Rechnergestützte Gruppenarbeit.<br />
Berlin, Heidelberg: Springer Verlag<br />
[Coulouris/Dollimore]: G.F. Coulouris und J. Dollimore 1989<br />
Distributed Systems – Concepts and Design.<br />
Wokingham: Addison-Wesley<br />
[Duden]: Duden Informatik (2.Auflage) 1993<br />
Mannheim: Dudenverlag<br />
[Ellis]: C.A. Ellis, S.J. Gibbs und G.L. Rein 1991<br />
Groupware – Some Issues and Experiences.<br />
Communication of the ACM 34, S. 38-58<br />
[Enslow]: P.H. Enslow 1978<br />
What is a „distributed“ system?<br />
Computer, Januar 1978, S. 13-21<br />
[Ernst]: N. Ernst 1999<br />
Zaubernde JINI<br />
c’t 4/1999, S. 21<br />
[Herrtwich/Hommel]: R.G. Herrtwich und G. Hommel 1989<br />
Kooperation und Konkurrenz<br />
Berlin, Heidelberg: Springer Verlag<br />
[Hoppe]: H.U. Hoppe 1997<br />
Vorlesung „Programmiersprachen im Informatikunterricht“<br />
Gerhard-Mercator-Universität GH Duisburg, WS 1996/97<br />
[Hoppe/Luther]: H.U. Hoppe und W. Luther 1996<br />
Informatik und Schule im Spiegel neuer Entwicklungen in der Fachdidaktik.<br />
Duisburg: Schriftenreihe Informatik SI-14<br />
[Java]: Java-Seiten im Internet, online unter<br />
http://java.sun.com<br />
Stand: 17.05.1999<br />
[JavaSpaces]: JavaSpaces Spezifikation, online im Internet unter<br />
http://java.sun.com/products/javaspaces<br />
Stand: 11.05.1999<br />
[Jini]: Jini Beschreibung, online im Internet unter<br />
http://java.sun.com/products/jini<br />
Stand: 17.05.1999<br />
Seite 118
Literaturverzeichnis<br />
[Jess]: JESS-Dokumentation, online im Internet unter<br />
http://herzberg.ca.sandia.gov<br />
Stand: 17.05.1999<br />
[Lamport]: L. Lamport 1978<br />
Reliability Issues for Fully Replicated Distributed Databases.<br />
Computer Networks 2, 1978, S. 95-114<br />
[Lloyd]: P. Lloyd 1994<br />
Groupware in the 21 st century.<br />
London: Adamantine Press Limited<br />
[Mattern]: F. Mattern 1987<br />
Verteilte Basisalgorithmen.<br />
Berlin, Heidelberg: Springer Verlag<br />
[Mullender]: S. Mullender 1989<br />
Distributed Systems.<br />
New York: acm Press<br />
[Notes]: Lotus Notes Seiten, online im Internet unter<br />
http://www.lotus.com/home.nsf/tabs/lotusnotes<br />
Stand: 18.05.1999<br />
[NRZ]: Neue Ruhr Zeitung, 28. April 1999<br />
[Raynal/Helary]: M. Raynal und J.M. Helary 1990<br />
Synchronization and control of distributed systems and programs.<br />
Chichester: Wiley<br />
[RichtlinienGK]: Kultusministerium Nordrhein-Westfalen 1981<br />
Richtlinien Informatik (Gymnasiale Oberstufe)<br />
Frechen: Ritterbach<br />
[RichtlinienGKneu]: Entwurf der Unterrichtslinien Informatik, online im Internet unter<br />
http://www.learn-line.nrw.de/Themen/GymOberst/media1.html<br />
Stand: 11.05.1999<br />
[RichtlinienLK]: Kultusministerium Nordrhein-Westfalen 1991<br />
Vorläufige Richtlinien: Leistungskurse im Fach Informatik (Gymnasiale Oberstufe)<br />
Frechen: Ritterbach<br />
[RMI]: JAVA -RMI Spezifikation, online im Internet unter<br />
http://java.sun.com/jdk/rmi/index.html<br />
Stand: 19.05.1999<br />
[Rolf]: A. Rolf, J. Friedrich, T. Herrmann und M. Peschek 1995<br />
Informatik und Gesellschaft.<br />
Berlin, Heidelberg: Spektrum<br />
[Start]: START -Beschreibung, online im Internet unter<br />
http://www.start.de/set_amadeus.htm<br />
Stand: 11.05.1999<br />
[Sloman/Kramer]: M. Sloman und J. Kramer 1988<br />
Verteilte <strong>Systeme</strong> und Rechnernetze.<br />
München, Wien: Hanser Verlag<br />
Seite 119
Literaturverzeichnis<br />
[Swing]: Java Swing Dokumentation, online im Internet unter<br />
http://java.sun.com/products/jfc/tsc/index.html<br />
Stand: 18.05.1999<br />
[Tewissen]: Java MatchMaker-Dokumentation, online im Internet unter<br />
http://collide.informatik.uni-duisburg.de/Software/Docs/JavaMatchMaker<br />
Stand: 11.05.1999<br />
[Witzel]: V. Witzel 1998<br />
Spezifikation und Modellierung von Synchronisations- und Unterstützungsstrategien in<br />
netzwerkbasierten gruppenorientierten Simulationsspielen. Schriftliche Hausarbeit im Rahmen<br />
der ersten Staatsprüfung.<br />
Duisburg<br />
Seite 120
Erklärungen<br />
Anhang C: Erklärungen<br />
Ich versichere, dass ich die schriftliche Hausarbeit einschließlich beigefügter<br />
Zeichnungen, Darstellungen, Computerprogramme u.ä.m. selbständig<br />
angefertigt und keine anderen als die angegebenen Hilfsmittel benutzt habe.<br />
Alle Stellen, die dem Wortlaut oder dem Sinn nach anderen Werken<br />
entnommen sind, habe ich in jedem einzelnen Fall unter genauer Angabe der<br />
Quelle deutlich als Entlehnung kenntlich gemacht.<br />
Ich bin damit einverstanden, dass diese Hausarbeit nach Abschluss meiner<br />
Ersten Staatsprüfung wissenschaftlich interessierten Personen oder<br />
Institutionen zur Einsichtnahme und zur Verfügung gestellt wird und dass zu<br />
diesem Zweck Ablichtungen dieser Hausarbeit hergestellt werden, sofern diese<br />
keine Korrektur- oder Bewertungsvermerke enthalten.<br />
Niels Pinkwart<br />
Duisburg, 23. Mai 1999<br />
Seite 121