22.08.2013 Aufrufe

Programmierung verteilter Systeme

Programmierung verteilter Systeme

Programmierung verteilter Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!