Das Java Leitprogramm
Das Java Leitprogramm
Das Java Leitprogramm
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Greenfoot und <strong>Java</strong><br />
Kretschmer<br />
Stand: 20. Oktober 2010<br />
1
Inhaltsverzeichnis<br />
1. Einleitung 5<br />
1.1. Was ist Greenfoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
1.2. Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.2.1. Die Welt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.2.2. <strong>Das</strong> Klassendiagramm . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.2.3. Die Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.2.4. <strong>Das</strong> Menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2. Kapitel I - Objekt Oriented Programming 7<br />
2.1. OOP - Die Idee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.1.1. Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.1.2. Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.2. Ein Szenario önen und starten . . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.3. Was können Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.1. Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.2. Aufgabe zum Thema Methoden . . . . . . . . . . . . . . . . . . 12<br />
2.3.3. Variablen und Konstanten . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.4. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2.5. Kapiteltest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
3. Kapitel II - <strong>Das</strong> erste Szenario 16<br />
3.1. Steuern des Wombat per Hand . . . . . . . . . . . . . . . . . . . . . . . 17<br />
3.2. Automatisches Steuern des Wombat - Die Methode act() . . . . . . . . 19<br />
3.2.1. Der erste Quellcode-Fetzen . . . . . . . . . . . . . . . . . . . . . 20<br />
3.3. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
3.4. Kapiteltest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
4. Exkursion I - FlowCharts 22<br />
4.1. Grundlegende Elemente . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4.1.1. Start / Stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4.1.2. Eingabe und Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4.1.3. Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
4.1.4. Entscheidungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
4.1.5. Unterprogramme / Blöcke . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.1.6. Ablaufpfeile und Schleifen . . . . . . . . . . . . . . . . . . . . . . 25<br />
4.2. Belegungstabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
4.3. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
4.4. Eigene FlowCharts erstellen . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
5. Kapitel III - Erste Schritte im Quelltext 30<br />
5.1. Die Methode act() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />
5.1.1. Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
5.1.2. Einrückung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
2
5.1.3. Was macht der Code - Schrittweises Durchgehen . . . . . . . . . 34<br />
5.1.4. Die If-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />
5.1.5. Code und FlowChart . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />
5.1.6. Den Wombat automatisch positionieren . . . . . . . . . . . . . . 36<br />
5.1.7. Man fängt am Ende an - Eine kleine Hilfe . . . . . . . . . . . . . 37<br />
5.2. Flags - Merker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
5.3. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
5.4. Kapiteltest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
6. Kapitel IV - Hungrige Wombats 40<br />
6.1. Erweiterung unseres Programms . . . . . . . . . . . . . . . . . . . . . . 41<br />
6.2. Was ist ein Algorithmus überhaupt? . . . . . . . . . . . . . . . . . . . . 41<br />
6.2.1. Denition - Algorithmus . . . . . . . . . . . . . . . . . . . . . . . 41<br />
6.2.2. Beispiele zur Darstellung . . . . . . . . . . . . . . . . . . . . . . 42<br />
6.2.3. Umsetzen der eigenen Idee . . . . . . . . . . . . . . . . . . . . . 43<br />
6.2.4. FlowChart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />
6.2.5. Implementation in der act() Methode . . . . . . . . . . . . . . . 43<br />
6.3. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
6.4. Kapiteltest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
7. Kapitel V - Was uns Klassendiagramme alles sagen 45<br />
7.1. Die Klassensignatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
7.2. Klassendiagramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
7.2.1. Eine einzelne Klasse beschreiben . . . . . . . . . . . . . . . . . . 47<br />
7.2.2. Zusammenhänge . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
7.3. Die <strong>Java</strong> API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
7.4. Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
7.5. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
7.6. Kapiteltest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />
8. Kapitel VI - Vererbung und Interfaces 52<br />
8.1. Die Vererbungsidee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
8.1.1. Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
8.1.2. Vererbung in Greenfoot . . . . . . . . . . . . . . . . . . . . . . . 56<br />
8.1.3. Vererbung in Klassendiagrammen . . . . . . . . . . . . . . . . . . 57<br />
8.2. Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
8.2.1. Interfaces in UML . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
8.3. Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
8.4. instanceof - Exkursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />
8.5. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />
8.6. Kapiteltest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />
9. Kapitel VII - Weitere Fähigkeiten von Greenfoot 65<br />
9.1. Bilder austauschen mit setImage() . . . . . . . . . . . . . . . . . . . . . 66<br />
9.2. Neue Objekte in die Welt einfügen . . . . . . . . . . . . . . . . . . . . . 66<br />
3
9.3. Hast du Töne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
9.4. Input und Output per Tastatur . . . . . . . . . . . . . . . . . . . . . . . 67<br />
9.4.1. Andauerndes Drücken . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
9.4.2. Kurzes Antippen . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
9.4.3. Ein weiters Beispiel (Funken) . . . . . . . . . . . . . . . . . . . . 68<br />
9.5. Input und Output per Maus . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
9.6. Zufall und Zufallswerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
9.7. Und wie nun weiter? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />
10.Ende 71<br />
10.1. Fragebogen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />
10.1.1. Benutzbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />
10.1.2. Inhalte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />
10.1.3. Lernzuwachs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />
10.1.4. Verbesserungsvorschläge und Ideen . . . . . . . . . . . . . . . . . 72<br />
11.Ein Dankeschön 73<br />
A. Installation von <strong>Java</strong> und Greenfoot 74<br />
A.1. <strong>Java</strong> installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />
A.2. Greenfoot installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />
A.3. Erweiterte Inhalte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />
B. Benutzung des <strong>Leitprogramm</strong>s 75<br />
B.1. Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />
B.1.1. Arbeitsanleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />
B.1.2. Zeichenerklärung: . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />
C. Verzeichnisse 79<br />
C.1. Bilderverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />
C.2. Listingverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />
4
1. Einleitung<br />
Wir wollen in diesem Schuljahr eine neue Programmiersprache (<strong>Java</strong>) 1 kennenlernen<br />
und am Anfang die Entwicklungsumgebung Greenfoot 2 benutzen. Eine Anleitung zur<br />
Installation gibt es im Anhang A. Die Installation von <strong>Java</strong> und Greenfoot ist die erste<br />
Hausaufgabe. Bei Fragen kontaktiert mich bitte per E-Mail (D@vid-Kretschmer.de).<br />
Diese Anleitung ist als <strong>Leitprogramm</strong> gedacht. Wie dieses zu benutzen ist, wird im<br />
Anhang B erläutert.<br />
1.1. Was ist Greenfoot<br />
Greenfoot ist eine grasche Programmierschnittstelle, die sehr gut für den Einstieg in<br />
<strong>Java</strong> geeignet ist, da sie eine direkte Interaktion mit Objekten ermöglicht und Aktionen<br />
der Objekte grasch sichtbar gemacht werden können.<br />
Sie hilft dir, schnell die wichtigsten Konzepte von <strong>Java</strong>, angefangen bei Objekten und<br />
Klassen bis hin zur Vererbung zu verstehen.<br />
Beginnen wir zuerst einmal mit einer Übersicht über den Editor von Greenfoot.<br />
1 java.sun.com<br />
2 www.greenfoot.org<br />
5
1.2. Editor<br />
1.2.1. Die Welt<br />
Der groÿte Bereich wird<br />
Welt genannt. Dies ist<br />
der Bereich, in dem<br />
die Objekte abgelegt<br />
wedern und die Ausgabe<br />
des Programms<br />
als Bewegung der Objekte<br />
sichtbar gemacht<br />
wird. Im ersten Szenario<br />
ist die Welt sandfarben<br />
und mit Gitterlinien<br />
durchzogen, sie kann<br />
aber auch völlig anders<br />
aussehen.<br />
1.2.2. <strong>Das</strong><br />
Klassendiagramm<br />
Der rechte Teil des<br />
Fensters enthält eine<br />
Art Baum mit Kästchen<br />
und Pfeilen. Dieser wird<br />
Klassendiagramm genannt.<br />
Was sich genau<br />
dahinter verbirgt, werden<br />
wir später besprechen.<br />
Abbildung 1: Greenfoot - So sieht es aus ...<br />
1.2.3. Die Steuerung<br />
Die Buttons ACT, RUN und RESET und der Schieberegler für die Geschwindigkeit<br />
ganz unten dienen zur Programmsteuerung. Hier kann man die Durchläufe eines Programmes<br />
schrittweise oder als automatische Sequenz ablaufen lassen.<br />
1.2.4. <strong>Das</strong> Menü<br />
Wie gewohnt gibt es hier Einträge zum Önen und Schlieÿen von Szenarios (Ein<br />
Szenario ist eine Sammlung von Programmteilen, so genannten Klassen), einen Menübereich<br />
zur Steuerung (ähnlich der Steuerungsleiste am unteren Fensterrand) und der<br />
Greenfoot-Hilfe.<br />
6
2. Kapitel I - Objekt Oriented Programming<br />
Übersicht<br />
<strong>Das</strong> ist das erste Kapitel zu <strong>Java</strong> und Greenfoot. Es werden Grundlagen im Umgang<br />
mit Greenfoot gelegt und erste Begriichkeiten geklärt. Die hier eingeführten<br />
Bezeichnungen sind extrem Wichtig, da sie als Grundlagen für die gesamte<br />
Obersutfeninformatik gebraucht werden.<br />
Lernziele<br />
In diesem Kapitel wirst du die folgenden Begrie kennenlernen:<br />
• Objekt<br />
• Klasse<br />
• Instanz<br />
• Methode<br />
• Rückgabetyp<br />
• Sichtbarkeit<br />
• Variable<br />
• primitive Datentypen<br />
7
2.1. OOP - Die Idee<br />
Information<br />
Die Grundidee der OOP ist es, dass es nicht mehr nur ein groÿes Programm gibt, dass<br />
alles kann und einfach nur abgearbeitet wird. Vielmehr gibt es nach dem Starten eines<br />
<strong>Java</strong>-Programms eine Vielzahl von Ateuren, sogenannten Objekten, die alle eigene<br />
Eigenschaften haben, welche in Klassen beschrieben werden. <strong>Das</strong> klingt zunächst sehr<br />
kompliziert, ist im Grunde aber genau das, was wir tagtäglich erleben. Stellt euch vor,<br />
in diesem Klassenraum läuft ein Programm ab. Der Raum, unser erstes Objekt, ist<br />
vollgestellt mit Tischen und Stühlen, die alle ebenfalls Objekte sind. Diese Tische<br />
und Stühle kann man nun im Raum bewegen. Auÿerdem hat jeder Tisch und Stuhl<br />
eigene Eigenschaften. So kann ein Stuhl zum Beispiel besetzt sein (Zustand), oder<br />
man kann ihn auf einen Tisch stellen (eine Aktion, an der dann ein Tisch- und ein<br />
Stuhlobjekt beteiligt sind). Auch kann man einen Stuhl aus diesem Raum entfernen<br />
und in einem anderen Zusammenhang benutzen, das bedeutet, dass gleiche Klassen<br />
in verschiedenen Programmen genutzt werden können (man sagt auch, <strong>Java</strong> ist<br />
modular ). Diese Modularität macht auÿerdem eine verteilte Programmierung<br />
möglich, so dass an einem Programm viele Programmierer arbeiten und einfach Quellcode<br />
ergänzen oder austauschen können. Für die objektorientierte Programmierung<br />
sind die Konzepte von Klassen und Objekten von grundlegender Bedeutung.<br />
2.1.1. Klassen<br />
Betrachten wir zuerst den Begri Klasse. Eine Klasse beschreibt das allgemeine<br />
Konzept, also welche Eigenschaften ein Objekt hat, was es kann und wie es sich verhält.<br />
Von einer Klasse können viele Objekte erzeugt werden. Im Wombat-Szenario<br />
von Greenfoot gibt es die Klasse Wombat. Diese beschreibt sozusagen alle Wombats.<br />
Sobald wir eine Klasse in Greenfoot angelegt haben, können wir davon Objekte erzeugen.<br />
Objekte werden in der Programmierung oft auch als Instanzen bezeichnet.<br />
2.1.2. Objekte<br />
Eine Klasse ist nur eine Beschreibung (Kuchenrezept). Ein Objekt ist ein konkretes<br />
Ding (also ein nach dem Rezept gebackener Kuchen). Die Klasse an sich kann erst<br />
einmal wenig. Alle Eigenschaften und Fähigkeiten, die die Klasse beschreibt, werden<br />
erst beim erzeugen eines Objektes der Klasse, also beim Instanziieren, verfügbar. Die<br />
Klasse ist das Rezept, das man nicht essen kann. Es steht in diesem Rezept jedoch,<br />
wie ein Kuchen gebacken wird und woraus er besteht. Erst das konkrete Objekt, also<br />
der Kuchen, kann dann geschnitten und gegessen werden.<br />
8
Denition<br />
Generell gilt die Denition:<br />
Ein Objekt ist eine Instanz einer Klasse<br />
2.2. Ein Szenario önen und starten<br />
Information<br />
Greenfoot organisiert zusammengehörende Klassen in sogenannten Szenarien.<br />
Wenn ihr Greenfoot das erste mal startet, müst ihr im sagen, welches<br />
Szenario ihr haben wollt. Dafür geht ihr im Menü auf: Szenario -> Open<br />
und wählt das Szenario Wombats.<br />
Dieses Szenario wollen wir nun als erste Grundlage nehmen. Damit ihr<br />
es euch nicht überschreibt, speichert es bitte unter einem neuen<br />
Namen. Geht dafür wie folgt vor:<br />
• Önet den Speichern Dialog: Szenario -> Save a Copy as<br />
• Wählt euer Netzlaufwerk (w:) und erzeugt euch einen neuen Ordner<br />
• Speichert das Szenario in diesem ordner<br />
Alternativ kannst du es auch auf deinem USB-Stick speichern oder ein<br />
Szenario in's LoNET stellen.<br />
Jetzt bist du fast bereit für die ersten Schritte, aber vorher noch ein<br />
paar Informationen, die dir im weiteren Verlauf das Lesen und Verstehen<br />
der Programme erleichtern.<br />
9
Information<br />
2.3. Was können Klassen<br />
Eine jede Klasse beschreibt, welche Fähigkeiten (Methoden) und Eigenschaften<br />
(Variablen / Konstnaten) ein aus ihr erstelltes Objekt hat.<br />
2.3.1. Methoden<br />
Methoden beschreiben, welche Fähigkeiten eine Klasse hat. Hier steht der<br />
eigentliche Programmcode, also was ein Objekt der Klasse machen soll.<br />
Öne einmal das Scenario Wombats. Vergiss nicht, es unter einem neuen<br />
Namen in deinem Verzeichnis zu speichern.<br />
Wenn du mit der rechten Maustaste auf die Klasse Wombat klickst<br />
(rechts im Klassendiagramm), springt ein Kontextmenü zu dieser Klasse<br />
auf. Die erste Option in diesem Menü, new Wombat() erzeugt ein neues<br />
Wombat-Objekt. Probiere es einfach aus. new Wombat() ist übrigens<br />
eine spezielle Methode, der sogenannte Konstruktor.<br />
Jetzt wird das Bild eines kleinen Wombat Objekts eingeblendet, das<br />
du mit deiner Maus auf dem Bildschirm verschieben kannst. Platziere<br />
den Wombat irgendwo in der Welt, indem du an eine beliebige Position<br />
klickst. Klickst du nun mit der rechten Maustaste auf den Wombat, so<br />
önet sich ein neues Popup - Menü, in dem alle benutzbaren Methoden<br />
aufgeführt werden. Schau dir diese Methoden einmal genau an, teste sie<br />
aus und nde heraus, was passiert.<br />
10
Denition<br />
Jeder Methodenkopf (auch Signatur genannt), also das, was ihr<br />
im Menü seht, ist übrigens wie folgt aufgebaut:<br />
Sichtbarkeit Rückgabetyp Methodenname (Parameter)<br />
Die einzelnen Bestandteile sind im Folgenden kurz beschrieben.<br />
Sichtbarkeit Methoden sind der Mechanismus, mit dem einzelne Objekte<br />
miteinander interagieren können. In unserem Szenario kann zum Beispiel<br />
der Benutzer (über die Welt) einzelne Methoden des Wombats aufrufen<br />
und diesen somit steuern. Alle Methoden, die von Auÿen aufrufbar sind,<br />
haben die Sichtbarkeit public.<br />
Manchmal möchte man jedoch Methoden nicht für alle verfügbar machen.<br />
Stell dir vor, in einem Spiel hat eine Klasse eine Methode, um das Passwort<br />
eines Spielers zu prüfen. Würde man diese von auÿen aufrufen können,<br />
so könnte man so oft versuchen, das Passwort zu raten, bis man es gefunden<br />
hat, ohne dass das Programm es merkt. Für diesen Fall gibt es<br />
die Möglichkeit, solche Methoden als private zu kennzeichnen. Private<br />
Methoden können nur vom Objekt selber aufgerufen werden.<br />
Mit Hilfe der Sichtbarkeit kann man Methoden verstecken<br />
oder nach Auÿen hin verfügbar machen.<br />
Rückgabetyp Der Rückgabetyp einer Methode gibt an, welche Art von<br />
Antwort (Datentyp) nach Beenden der Methode zurückgegeben wird. Dies<br />
kann zum Beispiel eine der folgenden sein:<br />
• int Es wird eine ganze Zahl zurück gegeben<br />
Es wird entweder true (wahr) oder false (falsch) zurück-<br />
• boolean<br />
gegeben<br />
• void Es wird gar nichts zurückgegeben<br />
11
Über den Rückgabewert kann man zum Beispiel Ergebnisse einer Rechnung<br />
erhalten oder sich Eigenschaften des Objektes anzeigen lassen (so<br />
genannte GetterMethoden, da die Methodennamen mit get anfangen).<br />
Parameter Mit Hilfe von Parametern kann man Methoden beim Aufruf<br />
gewisse Informationen mitgeben. Diese werden dann von der Methode<br />
während der Verarbeitung genutzt. Ein einfaches Beispiel wäre die Methode<br />
public int addiere(int zahl1, int zahl2), welche zwei ganze Zahlen<br />
übergeben bekommt und (wahrscheinlich) deren Summe zurückgibt. Parameter<br />
gelten innerhalb der aufgerufenen Methode als Variablen.<br />
2.3.2. Aufgabe zum Thema Methoden<br />
Wissenssicherung<br />
Aufgabe1 Es gibt spezielle Methoden, sogenannte Setter-Methoden, die<br />
dafür genutzt werden, um Variablen eines Objektes zu verändern. setDirection()ist<br />
so eine Methode. Finde heraus, welchen Sinn sie hat und<br />
beschreibe ihr Verhalten. Vielleicht fällt dir dabei etwas seltsames auf.<br />
Aufgabe2 Finde drei weitere unterschiedliche Methoden des Wombat und<br />
deute ihre Methodenköpfe. Gib also an, welche Sichtbarkeit gilt und welche<br />
Parameter es gibt und was zurückgegeben wird.<br />
12
2.3.3. Variablen und Konstanten<br />
Informaiton<br />
Methoden beschreiben Fähigkeiten von Objekten, Variablen beschreiben<br />
Eigenschaften. Ein Tisch hat zum Beispiel die Variable anzahlBeine, in<br />
der festgehalten wird, wie viele Beine er hat.<br />
Jede Variable hat einen Namen und einen Datentyp. Zunächst<br />
wird eine Variable deniert (man sagt auch deklariert indem man<br />
genau diese beiden Faktoren festlegt.<br />
int anzahlBeine;<br />
deklariert eine Variable anzahlBeine vom Datentyp int (ganze Zahl).<br />
Jede deklarierte Variable muss auch initialisiert werden, bevor sie<br />
genutzt werden kann. Dies tut man zum Beispiel durch eine Zuweisung.<br />
anzahlBeine=4;<br />
weist der Variable ihren ersten Wert zu.<br />
Beides kann man auch in einer Zeile machen:<br />
int anzahlBeine=4;<br />
<strong>Das</strong> Semikolon am Ende einer Zeile bedeutet übrigens, dass hier eine<br />
Anweisung zu ende ist. Es wird in <strong>Java</strong> zwingend benötigt.<br />
Primitive Datentypen Für den Anfang reichen uns folgende einfache (oder<br />
primitive) Datentypen:<br />
• int - Ganze zahlen<br />
• char - einzelne Zeichen (Character)<br />
• boolean - wahr oder falsch<br />
13
• oat - Flieÿkommazahlen (z.B.: 3.421)<br />
Variablen kann man überall im Programm deklarieren, dabei macht es<br />
jedoch einen Unterschied, wo man dies tut. Deklariere ich eine Variable<br />
auÿerhalb einer Methode, gilt sie für das gesamte Objekt (Objektoder<br />
Instanzvariable; globale Variable). Deklariere ich eine Variable<br />
innerhalb einer Methode, gilt diese nur innerhalb dieser Methode<br />
(lokale Variable).<br />
Hilfe, nicht so schnell! All diesen Kram sieht man übrigens erst dann, wenn<br />
man einen Wombat önet (durch Doppelklicken im Klassendiagramm).<br />
Es önet sich ein Editor mit dem Quelltext, den du jetzt noch nicht<br />
verstehen musst. Wenn du magst kannst du aber gerne schon einmal eine<br />
Deklaration oder Initialisierung einer Variablen suchen.<br />
2.4. Lernkontrolle<br />
Lernkontrolle<br />
Überprüfe an der folgenden Liste, ob du mittlerweile weiÿt, was diese<br />
Begrie bedeuten und wie sie zusammenhängen.<br />
Ich kenne jetzt:<br />
• Klassen - Beschreiben Eigenschaften und Werte von Objekten (Rezept)<br />
• Objekte - Sind konkrete Instanzen einer Klasse (Kuchen)<br />
• Variablen - Sind Merker für Werte.<br />
• Methode - Objekte haben Methoden, das Aufrufen von Methoden<br />
führt Aktionen aus. Objekte können eigene Methoden oder Methoden<br />
von von ihnen bekannten Objekten ausführen.<br />
• Parameter - Werte, die man beim Aufruf einer Methode übergibt,<br />
nennt man Parameter. Diese gelten für genau diesen Aufruf der<br />
Methode.<br />
14
• Rückgabetyp - Methoden können Werte zurückliefern, die einen Datentyp<br />
haben.<br />
• Sichtbarkeit - Veröentlichen oder verstecken von Methoden.<br />
• primitive Datentypen - Einfache Datentypen, die nur Werte speichern,<br />
aber nichts mit ihnen machen können.<br />
Wenn du dir sicher genug bist, mache den Kapiteltest.<br />
2.5. Kapiteltest<br />
Kapiteltest<br />
Der Kapiteltest für das erste Kapitel wird zu Beginn der nächsten<br />
Stunde durchgeführt. Er gilt als schriftliche Hausaufgabenüberprüfung.<br />
15
3. Kapitel II - <strong>Das</strong> erste Szenario<br />
Übersicht<br />
In diesem Kapitel wirst du lernen, den Wombat von Hand zu steuern<br />
und seine Methoden zu nutzen. Auÿerdem wirst du eine Möglichkeit kennenlernen,<br />
um den Wombat zu automatisieren.<br />
Lernziele<br />
In diesem Kapitel wirst du folgendes kennenlernen:<br />
• Aufrufen der einzelnen Methoden des Wombat<br />
• Übergabe von Parametern<br />
• Interaktion mit anderen Objekten<br />
• Die Methode act()<br />
16
3.1. Steuern des Wombat per Hand<br />
Aufgabe<br />
Zunächst einmal sollst du erkunden, was die einzelnen Methoden des<br />
Wombat bewirken. Starte dazu Greenfoot und öne das Tutorial oder<br />
das Szenario wombats.<br />
Hier ndest du im Klassenbaum die Klassen Wombat und Leaf.<br />
Erzeuge ein neues Objekt der Klasse Wombat (rechter Mausklick auf die<br />
Klasse, dann Auswahl des Konstruktors) und platziere ihn mittig auf der<br />
Welt. Erzeuge dann ein neues Objekt der Klasse Leaf und platziere es<br />
ein paar Felder rechts vom Wombat. Deine Welt sollte jetzt ungefähr so<br />
aussehen:<br />
17
Abbildung 2: Ein Wombat auf der Welt<br />
Wenn du nun mit rechts auf den Wombat klickst, kannst du wie gewohnt<br />
die Methoden des Wombat auswählen. Einige hast du mit Sicherheit schon<br />
ausprobiert.<br />
Jetzt ist deine Aufgabe, den Wombat mittels der Methoden auf das<br />
Blatt zu setzen und dann das Blatt zu essen. Dabei schreibst du bitte<br />
bei jedem Schritt auf (entweder als Text, oder, wenn du es schon/noch<br />
kannst, als FlowChart 3 ), welche Methode du wann genutzt hast.<br />
Wiederhole dein Verfahren und platziere dabei das Blatt an anderen<br />
Stellen in der Welt. Finde dabei auch heraus, was die Methode foundLeaf()<br />
macht und überlege, warum du sie nicht benötigst, der Wombat anscheinend<br />
aber schon.<br />
3 Siehe Exkursion 1<br />
18
3.2. Automatisches Steuern des Wombat - Die Methode act()<br />
Information<br />
Jede Klasse, die es in Greenfoot gibt, hat eine Methode act(). In<br />
dieser wird beschrieben, wie sich ein entsprechendes Objekt verhalten soll,<br />
wenn die Welt schrittweise oder fortlaufend automatische Züge macht (hierzu<br />
dient die Steuerung am unteren Bildschirmrand). Stelle einmal einen<br />
Wombat auf die Welt und lasse ihn mit Hilfe der Steuerung schrittweise<br />
laufen. Stelle dann mehrere Wombats auf die Welt, was geschieht nun?<br />
Aufgabe<br />
Erstelle noch einmal einen Wombat und ein Blatt und positioniere sie<br />
wie oben beschrieben. Führe dann zunächst einzelne Züge der Welt automatisch<br />
durch, indem du das entsprechende Icon (Act) in der Kontrolleiste<br />
anwählst. Beschreibe dabei das Verhalten des Wombat. Positioniere<br />
weitere Blätter in der Welt und teste, was geschieht.<br />
19
3.2.1. Der erste Quellcode-Fetzen<br />
OK, unser Wombat tut bereits Dinge automatisch, aber wie? Naja, im<br />
Grunde macht er nichts anderes, als seine eigenen Methoden zu bentuzen.<br />
Wie er sie anzuwenden hat, steht im Quellcode in der Methode act().<br />
Diese sieht wie folgt aus:<br />
1 public void act ()<br />
2 {<br />
3 if ( foundLeaf ()) {<br />
4 eatLeaf ();<br />
5 }<br />
6 else if ( canMove ()) {<br />
7 move ();<br />
8 }<br />
9 else {<br />
10 turnLeft ();<br />
11 }<br />
12 }<br />
Listing 1: Die Act-Methode des Wombat<br />
<strong>Das</strong> sieht jetzt schlimmer aus, als es ist. Wenn du schon etwas programmieren<br />
kannst, sollte dir das Verständnis der Methode keine Schwierigkeiten<br />
machen, wenn nicht, dann lernst du nun, wie man Quellcode liest, wenn<br />
man die Sprache noch nicht gut kann:<br />
• Aufgabe 1: Übersetze den Quellcode zunächst Wort für Wort<br />
ins Deutsche. Versuche dann das Verhalten in ganzen Sätzen zu<br />
beschreiben.<br />
• Aufgabe 2: Vergleiche das Verhalten mit dem übersetzten Text ab,<br />
bestimmt ndest du Zusammenhänge.<br />
• Aufgabe 3: Überlege, warum der Wombat mit diesem Programm<br />
nicht alle Blätter in der Welt nden kann.<br />
Einige der Befehle sind gut verständlich, andere machen dir vielleicht<br />
noch Probleme, das ist aber nicht schlimm, denn die act-Methode werden<br />
wir uns im nächsten Kapitel noch genauer anschauen.<br />
20
3.3. Lernkontrolle<br />
Lernkontrolle<br />
Überprüfe an der folgenden Liste, ob du mittlerweile weiÿt, was diese<br />
Begrie bedeuten und wie sie zusammenhängen.<br />
Ich kenne jetzt:<br />
• die einzelnen Methoden des Wombat und kann sie benutzen, um den<br />
Wombat zu steuern<br />
• die Methode act() und kann das Verhalten des Wombat deuten<br />
Wenn du dir sicher genug bist, mache den Kapiteltest.<br />
3.4. Kapiteltest<br />
Kapiteltest<br />
Der Kapiteltest für dieses Kapitel wird in Einzelarbeit absolviert.<br />
21
4. Exkursion I - FlowCharts<br />
Übersicht<br />
In diesem Extrakapitel kannst du dir schnell einen Überblick darüber<br />
verschaen, oder wiederholen, was FlowCharts sind. Wenn du dir sicher<br />
bist, dass du noch weiÿt, wie Flowcharts funktionieren, kannst du diese<br />
Exkursion überspringen.<br />
Lernziele<br />
In diesem Kapitel wirst du die folgenden Elemente eines FlowCharts<br />
kennenlernen:<br />
• Start/Stop<br />
• Ein-/Ausgabe<br />
• Operationen<br />
• Überprüfungen / Entscheidungen<br />
• Unterprogramme (Blöcke)<br />
• Ablaufpfeile<br />
• Schleifen<br />
22
4.1. Grundlegende Elemente<br />
Information<br />
FlowCharts, auch Ablauf- oder Fluÿdiagramme genannt, werden dazu<br />
genutzt, um die einzelnen Schritte eines Algorithmus 4 oder Programms<br />
zu visualisieren (also grasch zu verdeutlichen). An Hand der Diagramme<br />
kann man dann Stück für Stück überprüfen, was ein Programm<br />
wann macht. FlowCharts sind vor allem für kleinere Programmabläufe<br />
und Algorithmen, nicht aber für groÿe Programme oder Projekte geeignet.<br />
Zuerst wirst du die einzelnen Symbole kennenlernen und dann ihre Anwendung<br />
an Hand von zwei Beispielen nachvollziehen können.<br />
4.1.1. Start / Stop<br />
Jeder Algorithmus hat einen denierten Anfangspunkt und zumindest ein<br />
Ende. Diese beiden Punkte werden durch Ovale symbolisiert, in die die<br />
Worte Start und Stop eingeschrieben sind.<br />
Abbildung 3: Start und Stop<br />
4.1.2. Eingabe und Ausgabe<br />
Um das Eingeben und Ausgeben von Werten zu verdeutlichen, nutzt man<br />
in FlowCharts das Parallelogramm. Dabei gibt man bei der Ausgabe<br />
entweder eine Variable an, die ausgegeben werden soll, oder einen Flieÿtext<br />
(in Anführungszeichen). Bei der Eingabe weist man einer Variable<br />
4 Diesen Begri werden wir später genauer behandeln<br />
23
Abbildung 4: Ein- und Ausgabe<br />
(evtl. unter Festlegung des Datentyps) einen Wert zu.<br />
Hier wird zunächst die Variable Zahl1 als Ziel der Eingabe angegeben.<br />
Ihr Datentyp ist int (Ganzzahl). Bei der Ausgabe wird dann der Wert<br />
wieder ausgegeben. Um zu verdeutlichen, dass es sich um eine Ausgabe<br />
handelt, wird hier ein Pfeil nach rechts vorangestellt. Man kann auch<br />
mehrere Ein-, bzw. Ausgaben in einem Schritt zusammenfassen.<br />
4.1.3. Operationen<br />
Immer, wenn etwas berechnet onder verändert wird, benutzt man im<br />
FlowChart das Operation Symbol, ein Rechteck, in dem beschrieben<br />
wird, was verändert wird.<br />
Abbildung 5: Operationen<br />
Hier wird in beiden Fällen der Wert der Variable Zahl1 um eins erhöht<br />
(man spricht vom sogenannten Inkrement, die zweite Schreibweise ist<br />
eine Kurzschreibweise). Zahl1 muss natürlich vorher deniert und initialisiert<br />
werden.<br />
4.1.4. Entscheidungen<br />
In den meisten Algorithmen oder Programmen muss irgendwann eine<br />
Auswahl für das weitere Vorgehen getroen werden. Hierfür gibt es das<br />
Entscheidungs-Symbol, eine auf der Ecke stehende Raute. Im Symbol<br />
24
ist die Bedingung eingeschrieben, die überprüft werden soll. Vom Symbol<br />
weg führen zwei Pfeile, einer für den Fall, dass die Bedingung zutrit,<br />
einer für den Fall, dass sie nicht zutrit.<br />
Abbildung 6: Bedingte Verzweigung<br />
4.1.5. Unterprogramme / Blöcke<br />
Manchmal ist ein Programm oder Algorithmus zu groÿ, um ihn übersichtlich<br />
in einem einzelnen Diagramm darstellen zu können, oder es werden<br />
an mehreren Stellen die gleichen Sequenzen von Operationen, Programmblöcke<br />
(oder Funktionen) genannt, benötigt. Hier kann man folgendes<br />
Symbol verwenden, um darzustellen, dass ein Unterprogramm gestartet<br />
wird.<br />
Abbildung 7: Subprogramm<br />
4.1.6. Ablaufpfeile und Schleifen<br />
Die einzelnen Symbole im FlowChart werden durch Pfeile verbunden,<br />
die angeben, welcher Programmschritt folgt. Dabei können Pfeile nicht<br />
nur von oben nach unten zeigen, sondern auch von einem Programmteil<br />
zu einem früheren Programmteil zurück führen. Dies nennt man eine<br />
25
Schleife 5 , so können einzelne Teile eines Algorithmus wiederholt werden.<br />
Abbildung 8: Addition über Inkrement und<br />
Dekrement<br />
Hier einmal zwei kleine Beispiele<br />
für FlowCharts. <strong>Das</strong> erste Beispiel<br />
ist die Addition von zwei Zahlen<br />
über das Bilden von Inkrement<br />
und Dekrement, also das<br />
erhöhen, bzw. erniedrigen des<br />
Wertes einer Variable vom Typ<br />
int um 1.<br />
Im Algorithmus wird Zahl1 so<br />
lange um eins verringert, bis<br />
ihr Wert null ist. Auÿerdem<br />
wird der Wert von Zahl2 in jedem<br />
Durchlauf um eins erhöht,<br />
das Ergebnis der Addition steht<br />
nachher in Zahl2.<br />
Es folgt ein weiteres Beispiel,<br />
welches die Werte von zwei<br />
Variablen vergleicht und die gröÿere der beiden Zahlen ausgibt.<br />
5 Schleifen gibt es auch in <strong>Java</strong>, mehr dazu später<br />
26
Abbildung 9: Ein Algorithmus zum Vergleichen von zwei Zahlen<br />
27
4.2. Belegungstabellen<br />
Um in einem Programm nicht den Überblick über die Werte der einzelnen<br />
Variablen zu verlieren, kann man Belegungstabellen aufstellen. Dabei gibt<br />
es eine Spalte für jede Variable und jeder Schritt leitet eine neue<br />
Zeile ein. Weitere Spalten für Programmschritt und Ausgabe machen<br />
die Tabelle aussagekräftiger. Wollen wir zum Beispiel die Zahlen 3 und<br />
5 mit Hilfe des oberen Algorithmus addieren, kann eine Belegungstabelle<br />
wie folgt aussehen:<br />
Abbildung 10: Eine Beispielbelegungstabelle<br />
4.3. Lernkontrolle<br />
Lernkontrolle<br />
Du solltest nun einfache FlowCharts lesen und den dargestellten Algorithmus<br />
verfolgen können. Um die Benutzung einzuüben gibt es hier noch<br />
eine Anwendungsaufgabe zum Lesen von FlowCharts.<br />
Schau dir das folgende FlowChart an und versuche herauszunden,<br />
28
Aufgabe<br />
welche mathematische Funktion hier dargestellt wird. Benutze dazu auch<br />
eine Belegungstabelle.<br />
Abbildung 11: Was tut dieser Algorithmus?<br />
4.4. Eigene FlowCharts erstellen<br />
Um schnell eigene FlowCharts zu erstellen, gibt es eine Reihe von Programmen<br />
im Internet. Eines, welches noch mehr als FlowCharts kann und<br />
zusätzlich kostenlos ist, ist das Programm DIA 6 , welches im Internet<br />
heruntergeladen werden kann. Hiermit lassen sich mit ein wenig Übung<br />
schnell eigene FlowCharts erstellen.<br />
Dia gibt es auch auf den PC in der Schule. Du darfst es gerne zu Erzeugung<br />
von FlowCharts und anderen Diagrammen benutzen.<br />
6 Download unter http://dia.sourceforge.net<br />
29
5. Kapitel III - Erste Schritte im Quelltext<br />
Übersicht<br />
In diesem Kapitel wirst du die einzelnen Methoden des Wombat genauer<br />
betrachten und lernen, die einzelnen Aktionen zu kombinieren.<br />
Lernziele<br />
In diesem Kapitel wirst du folgendes kennenlernen:<br />
• Die Methode act() zur automatischen Durchführung von Schritten.<br />
• Die Kontrollstruktur if-Anweisung zum Durchführen von Entscheidungen.<br />
• <strong>Das</strong> Strukturieren und Kommentieren von Quelltext.<br />
• Flags als Zustandsmerker<br />
30
5.1. Die Methode act()<br />
Information<br />
Schaue dir mit Hilfe eines Doppelklicks den Quellcode des Wombat an<br />
und suche die Methode act(). Die Methode wird immer dann ausgeführt,<br />
wenn die Welt einen Programmschritt macht und sollte ungefähr<br />
wie folgt aussehen:<br />
Listing 2: Die Methode act()<br />
1 /**<br />
2 * Tut, was ein Wombat so tut ...<br />
3 */<br />
4 public void act ()<br />
5 {<br />
6 if ( foundLeaf ()) {<br />
7 eatLeaf ();<br />
8 }<br />
9 else if ( canMove ()){<br />
10 move ();<br />
11 }<br />
12 else {<br />
13 turnLeft ();<br />
14 }<br />
15 }<br />
Dir sollten einige Dinge im Quellcode schon bekannt vorkommen. Da<br />
<strong>Java</strong> englische Begrie benutzt, sollten dir aber auch der Rest nicht all<br />
zu viele Probleme machen.<br />
31
5.1.1. Kommentare<br />
Schau dir zunächst die ersten paar Zeilen (die mit den *) an. Die hier stehenden<br />
Sätze stellen Kommentare dar, sie sind nicht für den Computer<br />
gedacht, sondern für den Programmierer. Da <strong>Java</strong> als objektorientierte<br />
Programmiersprache hoch modular aufgebaut ist (es gibt viele Klassen,<br />
die man kombinieren kann und die von unterschiedlichen Programmierern<br />
geschrieben werden), verliert man leicht den Überblick. Daher ist es<br />
wichtig, den Quellcode mit Kommentaren zu versehen. Aufschreiben sollte<br />
man dabei, was eine einzelne Methode macht und welche Funktion die<br />
übergebenen Parameter haben. Je mehr man in den Kommentar schreibt,<br />
desto einfacher ist es, später noch zu wissen, was ein Stück Programmcode<br />
tut. Im allgemeinen ist es egal, in welcher Sprache man Kommentare<br />
schreibt, um Klassen aber bestmöglich teilen zu können, solltet ihr später<br />
Kommentare in Englisch schreiben.<br />
Es gibt drei Arten von Kommentaren, von denen eine eine besondere<br />
Funktion hat.<br />
• Einzeilige Kommentare - Diese beginnen mit //. Alles in der<br />
Zeile hinter den Schrägstrichen wird vom Computer nicht gelesen.<br />
• Mehrzeilige Kommentare - Diese beginnen mit /*. Jede weitere<br />
Zeile Kommentar bekommt am Anfang wieder ein *, beendet wird<br />
der Kommentarblock mit */.<br />
• <strong>Java</strong>doc Kommentare - Diese Kommentare sind ebenfalls mehrzeilig<br />
und beginnen jedoch mit /**. Sie haben den Vorteil, dass man<br />
sie automatisch in eine Anleitung (HTML-Datei) umwandeln kann.<br />
<strong>Java</strong>doc Kommentare stehen vor Klassen- oder Methodensignaturen<br />
und können Schlüsselwörter (z.B. @param, @author, @return) enthalten.<br />
32
Hier einmal ein Beispiel:<br />
Listing 3: Addieren von zwei Zahlen<br />
1 /**Diese Methode addiert zwei Zahlen.<br />
2 *@author Kretschmer<br />
3 *@param zahl1 Erster Summand.<br />
4 *@param zahl2 Zweiter Summand.<br />
5 *@return Summe der beiden Zahlen.<br />
6 */<br />
7 public int addiere ( int zahl1 , int zahl2 )<br />
8 {<br />
9 /*Addition in drei Schritten:<br />
10 * Definition einer Zwischenvariable<br />
11 * Zuweisung des Wertes der Berechnung<br />
12 * Rückgabe der Ergebnisses<br />
13 */<br />
14 int ergebnis ; //Deklaration ergebnis,Typ int<br />
15 ergebnis = zahl1 + zahl2 ; //Berechnung und Zuweisung<br />
16 return ergebnis ; //Rückgabewert<br />
17 }<br />
Die erzeugte <strong>Java</strong>Doc Datei läÿt sich dann in einem Browser darstellen.<br />
Durch <strong>Java</strong>Doc kann<br />
man schnell und einheitlich<br />
einen Überblick über die<br />
verwendeten Klassen und<br />
ihre Methoden erstellen.<br />
Wichtig für uns ist hier<br />
die <strong>Java</strong> API 7 , die<br />
einen Überblick über alle<br />
Klassem und Methoden<br />
liefert, die <strong>Java</strong> selber<br />
mitbringt.<br />
Abbildung 12: <strong>Java</strong>Doc erzeugt schöne Methodenbeschreibungen<br />
7 Du ndest sie auf der Seite von Sun, sun.java.com<br />
33
Auch Greenfoot erzeugt <strong>Java</strong>Doc Kommentare. Du kannst die Dokumentation<br />
zu einer Klasse önen, indem du zunächst ihren Quelltext<br />
önest und dann rechts oben an Stelle von Quelltext den Eintrag für<br />
Kommentare auswählst.<br />
Ein guter Vorsatz ist es, für jede Zeile Quellcode eine Zeile Kommentar<br />
zu schreiben.<br />
5.1.2. Einrückung<br />
Dir wird aufgefallen sein, dass die einzelnen Zeilen im Quelltext nicht immer<br />
am Anfang einer Zeile beginnen, sondern eingerückt sind. So wird<br />
schnell klar, welche Befehle zu einem gemeinsamen Codeblock gehören.<br />
Der Text wird übersichtlich und von Menschen gut verständlich.<br />
Generell gilt, dass man für jeden neu beginnenden Block um eine feste<br />
Breite (z.B. zwei Zeichen) einrückt und am Ende des Blockes wieder zwei<br />
Zeichen zurück geht. Viele Editoren machen dies automatisch, Greenfoot<br />
gehört glücklicherweise dazu.<br />
5.1.3. Was macht der Code - Schrittweises Durchgehen<br />
Las uns nun zusammen den Quellcode der Methode act() Stück für<br />
Stück durchgehen. Die ersten paar Zeilen sind, wie bereits erwähnt <strong>Java</strong>Doc<br />
Kommentare.<br />
Es folgt die Methodensignatur. Du solltest bereits mit einem Satz<br />
beschreiben können, was eine Signatur über die Methode aussagt. Hier<br />
könnte man zum Beispiel folgendes sagen:<br />
Die Methode act() ist für alle Objekte, die dieses Objekt kennen, sichtbar<br />
und besitzt weder Parameter noch einen Rückgabewert.<br />
Dann folgt der Methodenkörper, also der eigentliche Quellcode, eingeschlossen<br />
in geschweifte Klammern. Beachte, dass der folgende Code eingerückt ist.<br />
In der ersten Zeile Methodencodes ndest du nun etwas Neues. Die Kontrollstruktur<br />
If-Anweisung , die man dazu benutzen kann, Entscheidungen<br />
zu treen.<br />
34
5.1.4. Die If-Anweisung<br />
Aus den FlowCharts kennst du dieses Konstrukt bereits als Überprüfung.<br />
Schauen wir uns die Zeilen einmal genauer an und übersetzen den Code<br />
in's deutsche:<br />
Listing 4: Eine kleine Verhaltensregel ...<br />
1 if ( foundLeaf ()) eatLeaf (); // Wenn Blatt gefunden iss es<br />
2 else { // Sonst beginne neuen Block<br />
3 if ( canMove ()) // Wenn du dich bewegen kannst,<br />
4 move (); // bewege dich<br />
5 else turnLeft (); // Sonst drehe dich links<br />
6 } // Ende des "Sonst" Blocks<br />
Was geschieht, sollte nun also klar sein.<br />
Eine If-Anweisung ist immer wie folgt aufgebaut:<br />
if (BEDINGUNG1 [&& BEDINGUNG2]) AKTION1 [else AK-<br />
TION2]<br />
Eine Bedingung ist entweder eine direkte Überprüfung (z.B. x>3, y==5,<br />
z!=6, also z ungleich 6) oder ein Aufruf einer Methode, die den Rückgabetyp<br />
boolean hat.<br />
Der Else-Teil muss nicht immer vorhanden sein, kann aber eine neue If-<br />
Abfrage einleiten (else if...). Auÿerdem kann man mit einer Abfrage auch<br />
direkt zwei Bedingungen überprüfen, indem man sie mit && (UND),<br />
bzw || (ODER) verbindet.<br />
35
5.1.5. Code und FlowChart<br />
Aufgabe<br />
Überführe den Quellcode der Methode act() nun in ein FlowChart, dafür<br />
darfst du immer dann, wenn eine andere Methode aufgerufen wird, das<br />
Symbol Programmblock benutzen.<br />
5.1.6. Den Wombat automatisch positionieren<br />
Für die weiteren Stunden müssen wir den Wombat zunächst dazu bringen,<br />
sich von einer beliebeigen Position aus in die linke obere Ecke zu stellen.<br />
Aufgabe<br />
Überlege zunächst mit deinem Partner, wie man den Wombat dazu<br />
bringt, sich in die linke obere Ecke zu bewegen, ohne zwischendurch Blätter<br />
zu essen. Nachdem der Wombat die Ecke erreicht hat soll er sich so<br />
drehen, dass er nach rechts schaut. Wenn ihr eine brauchbare Idee habt,<br />
versucht die Methode act() so zu verändern, dass der Wombat euren<br />
Regeln folgt.<br />
36
5.1.7. Man fängt am Ende an - Eine kleine Hilfe<br />
Bevor man wie wild mit dem Programmieren beginnt, ist es sinvoll, zu<br />
klären, wie genau das Ergebnis aussehen soll, das ich mit Hilfe des Programms<br />
erreichen möchte. Als nächstes betrachtet man das System in<br />
dem man sich bewegt und welche Regelmäÿigkeiten und Einschränkungen<br />
es gibt. Dann macht man sich Gedanken über die möglichen Ausgangssituationen<br />
und versucht als letztes, die einzelnen Schritte zum Ziel<br />
zu formulieren.<br />
Für unser Beispiel bedeutet das folgendes:<br />
• Der Wombat soll am Ende in der linken oberen Ecke stehen und nach<br />
rechts schauen (Richtung Ost).<br />
• Die Welt ist begrenzt durch Ränder, über die der Wombat nicht<br />
hinauslaufen kann. Auÿerdem kann der Wombat sich im Moment<br />
nur links herum drehen.<br />
• Der Wombat kann irgendwo in der Welt beginnen, seine Richtung ist<br />
nicht vorgegeben, läÿt sich aber über die Methode getDirection()<br />
herausbekommen.<br />
• Tip: Um zum Ziel zu kommen, muss man zunächst entweder die<br />
obere oder die linke Wand nden. Dann die entsprechend andere<br />
Wand, als letztes muss man sich drehen. Vielleicht ist es auch von<br />
Interesse, eine Methode dreheRechts() zu schreiben.<br />
Jetzt hat man schon einmal einen grundlegenden Plan und könnte diesen<br />
zum Beispiel mittels FlowChart genauer formulieren.<br />
Wenn du dieses versuchst wirst du dir die folgende Frage stellen müssen:<br />
37
5.2. Flags - Merker<br />
Wenn die act() Methode in jedem Durchgang von neuem beginnt, wie<br />
kann ich mir merken, ob ich schon eine Wand gefunden habe?<br />
Für diesen Fall gibt es zum Glück Merkvariablen, so genannte Flags,<br />
die nur dafür da sind, sicherzustellen, dass Informationen nicht verloren<br />
gehen. Diese Variablen müssen auch über einen Durchlauf der act() Methode<br />
hinaus gültig bleiben, es müssen also Klassenvariablen sein.<br />
Am besten, du erzeugst zwei Variablen vom Typ boolean (diese können<br />
die Werte true und false annehmen und lassen sich daher direkt<br />
mittels If-Anweisung überprüfen). Dann musst du diese am Anfang nur<br />
entsprechend setzen (z.B. auf false, am besten im Konstruktor) und umschalten,<br />
wenn du eine entsprechende Wand gefunden hast.<br />
Mit all diesen Informationen solltet ihr es schaen, die Aufgabe zu erfüllen!<br />
38
5.3. Lernkontrolle<br />
Lernkontrolle<br />
Überprüfe an der folgenden Liste, ob du mittlerweile weiÿt, was diese<br />
Begrie bedeuten und wie sie zusammenhängen.<br />
Ich kenne jetzt:<br />
• Kommentare - Du kennst die verschiedenen Koommentartypen und<br />
weiÿt, was <strong>Java</strong>Doc Kommentare sind.<br />
• If-Anweisung - Du kennst die If-Anweisung und weiÿt, was eine Überprüfung<br />
ist.<br />
• Die act()-Methode - Du kennst die Methode und weiÿt, wozu sie<br />
dient.<br />
• Flags<br />
Wenn du dir sicher genug bis, mache den Kapiteltest.<br />
5.4. Kapiteltest<br />
Kapiteltest<br />
39
6. Kapitel IV - Hungrige Wombats<br />
Übersicht<br />
In diesem Kapitel wirst du den Wombat so programmieren, dass er alle<br />
Felder abgeht und dabei alle Blätter ist. Dabei musst du überlegen, wie<br />
er sich bewegen soll.<br />
Lernziele<br />
In diesem Kapitel wirst du folgendes kennenlernen:<br />
• Der Begri Algorithmus wird eingeführt<br />
• Vom Algorithmus zum Programm<br />
40
6.1. Erweiterung unseres Programms<br />
Aufgabe<br />
Versuche nun, die folgende Aufgabe zu lösen:<br />
Finde einen Weg zum Durchlaufen aller Felder der Welt<br />
Hierbei kommt es nicht auf die Reihenfolge an, in der die Felder abgearbeitet<br />
werden, sei also kreativ.<br />
Formuliere dafür zunächst einen Algorithmus, veranschauliche diesen<br />
dann als FlowChart und führe am Schluss eine Implementierung (also<br />
das eigentliche Schreiben der Methode) durch.<br />
6.2. Was ist ein Algorithmus überhaupt?<br />
6.2.1. Denition - Algorithmus<br />
Denition<br />
Ein Algorithmus ist eine formale Beschreibung für ein Vorgehen oder<br />
eine Lösungsvorschrift, die sich auf einem automatischen System (z.B.<br />
Computer) umsätzen läÿt. Diese Beschreibung muss dabei folgende Bedingungen<br />
erfüllen:<br />
• Ein A muss Terminieren, das heiÿt er ndet immer irgendwann ein<br />
Ende. Dies ist nicht unbedingt bei jeder Lösungsvorschrift gegeben,<br />
doch nur eine endliche Vorschrift läÿt sich zuverlässig auf einem Computer<br />
umsetzen, da dieser sonst eventuell unendlich lange rechnet.<br />
• Ein A ist eindeutig, er liefert also bei jedem Durchlauf für die selbe<br />
Eingabe die selbe Ausgabe.<br />
41
• Ein A ist sprachunabhängig und formal korrekt, denn nur so läÿt<br />
er sich auf einem automatischen System umsetzen<br />
Eine Darstellungsweise für Algorithmen kennst du schon. FlowCharts<br />
ermöglichen genau die geforderte, formale Darstellung.<br />
6.2.2. Beispiele zur Darstellung<br />
Wissenssicherung<br />
Im Exkursionstest zum Thema<br />
FlowCharts hast du bereits<br />
einige einfache Algorithmen<br />
kennengelernt. Hier gibt<br />
es einen weiteren Algorithmus,<br />
zunächst in Pseudocode,<br />
einem Zwischending zwischen<br />
normaler Sprache und Programmcode,<br />
und dann als FlowChart.<br />
1 01 BEGIN<br />
2 02 INPUT a<br />
3 03 INPUT b<br />
4 04 c =0<br />
5 05 IF (a >b) GOTO 09<br />
6 06 b=b -a<br />
7 07 c=c +1<br />
8 08 GOTO 05<br />
9 09 OUTPUT c<br />
10 10 END<br />
Abbildung 13: Ein weiterer unbekannter<br />
42
Aufgabe<br />
Beschreibe mit eigenen Worten, was der Algorithmus tut. Stelle dabei<br />
auch heraus, warum die ersten beiden Forderungen für einen Algorithmen<br />
erfüllt sind.<br />
Wissenssicherung<br />
6.2.3. Umsetzen der eigenen Idee<br />
Mit Hilfe der Anleitung aus dem letzten Kapitel und dem Wissen über<br />
Flags solltet ihr eine Idee nden. Glücklicherweise ist der Startpunkt des<br />
Wombat vorgegeben (links oben). Jetzt sollte es möglich sein, mit Hilfe<br />
eines weiteren Merkers die Welt stückweise abzugehen. Solltet ihr Fragen<br />
haben oder keine Idee, wie ihr anfangen sollt, spielt das Problem einmal<br />
von Hand durch, indem ihr den Wombat durch aufrufen der entsprechenden<br />
Methoden direkt bewegt.<br />
6.2.4. FlowChart<br />
Zeichnet dann ein FlowChart, entweder mit dem Programm Dia oder<br />
von Hand. Lasst den Lehrer einmal drüberschauen und erklärt ihm euer<br />
Vorgehen gegebenenfalls.<br />
6.2.5. Implementation in der act() Methode<br />
Setzt als letzten Schritt euren Algorithmus in Programmcode um und<br />
beobachtet euer Ergebnis, indem ihr eine Welt mit einem Wombat und<br />
einer Reihe von Blättern erzeugt. Findet der Wombat immer alle Blätter,<br />
wenn ja, dann seit ihr fertig.<br />
43
6.3. Lernkontrolle<br />
Lernkontrolle<br />
Überprüfe an der folgenden Liste, ob du mittlerweile weiÿt, was diese<br />
Begrie bedeuten und wie sie zusammenhängen.<br />
Ich kenne jetzt:<br />
• Die genaue Denition des Algorithmusbegris<br />
• Ein sinnvolles Vorgehen zum Lösen von Programmierproblemen<br />
Wenn du dir sicher genug bist, mache den Kapiteltest.<br />
6.4. Kapiteltest<br />
Kapiteltest<br />
Der Kapiteltest für dieses Kapitel wird in Einzelarbeit absolviert.<br />
44
7. Kapitel V - Was uns Klassendiagramme alles sagen<br />
Übersicht<br />
In diesem Kapitel wirst du die UML-Klassendiagramme und die <strong>Java</strong><br />
API genauer kennen lernen. Beides sind Möglichkeiten, die Zusammenhänge<br />
und Fähigkeiten verschiedener Klassen darzustellen. UML-Diagrammer<br />
(UML = Unied Modelling Language) sind eine Reihe einheitlicher, weltweit<br />
gültiger Darstellungsformen für die Modellierung von Systemen und Programmen<br />
und UML-Klassendiagramme sind ein Teil davon. Die <strong>Java</strong> API<br />
hingegen ist eher eine Art Lexikon, in dem man die Eigenschaften aller<br />
<strong>Java</strong>-Klassen nachschlagen kann.<br />
Lernziele<br />
In diesem Kapitel wirst du folgendes kennenlernen:<br />
• <strong>Das</strong> Grundgerüst einer Klasse (Klassensignatur)<br />
• Wie werden Klassen und ihre Zusammenhänge mittels UML dargestellt<br />
• Welche Informationen zu einer Klasse sind für andere Programmierer<br />
wichtig<br />
• Wie nde ich die Informationen zu den von <strong>Java</strong> gegebenen Klassen<br />
in der API<br />
45
7.1. Die Klassensignatur<br />
Jede Klasse besteht, ähnlich einer Methode, aus der Signatur und ihrem<br />
Körper. Dabei kann eine Klasse, genau wie eine Methode, verschiedene<br />
Sichtbarkeiten haben.<br />
Im Allgemeinen ist die Sichtbarkeit jedoch public. Wichtig ist, dass es<br />
pro Datei nur eine Klasse mit der Sichtbarkeit public geben kann. Diese<br />
muss dann auch genau so heiÿen, wie die Datei (ohne das .java).<br />
Nach der Angabe der Sichtbarkeit wird mit dem Wort class angegeben,<br />
dass es sich um eine Klasse handelt. Danach folgt der Klassenname (beginnt<br />
vereinbarungsgemäÿ mit einem Groÿbuchstaben) und eventuelle eine<br />
Vaterklasse 8 , sowie eine Liste von Interfaces (dazu später mehr).<br />
Denition<br />
Jede Klassensignatur sieht also wie folgt aus:<br />
public class Klassenname [extends Vaterklasse] [implements Interface1[,I2...]{}<br />
Die Klassensignatur der Klasse Wombat ist daher:<br />
public class Wombat extends Actor{}<br />
7.2. Klassendiagramme<br />
Nachdem wir die Klassensignatur betrachtet haben, müssen wir nun überlegen,<br />
was für jemanden, der mit einer Klasse arbeiten möchte, noch<br />
wichtig sein könnte.<br />
Wichtig sind zunächst einmal:<br />
8 Vererbung wird im nächsten Kapitel behandelt<br />
46
• Die Klassenvariablen (globale Variablen)<br />
• Die Methoden einer Klasse (öentliche und evtl. auch private)<br />
• Die Zusammenhänge mit anderen Klassen (für mögliche Interaktion)<br />
All dies läÿt sich mit Hilfe der Klassendiagramme darstellen.<br />
7.2.1. Eine einzelne Klasse beschreiben<br />
Jede Klasse wird durch ein Rechteck symbolisiert, welches durch zwei horizontale<br />
Linien in drei Teile aufgeteilt wird.<br />
Im ersten Teil steht der Name der Klasse, im zweiten Teil eine Auistung<br />
der Attribute (Variablen und Konstanten) und im dritten Teil eine<br />
Liste aller Methoden. Hier mal ein Beispieldiagramm für die Klasse Wombat:<br />
Abbildung 14: Klassendiagramm Wombat<br />
Zeichenerklärung Beim Anschauen des Klassendiagramms sollte dir eine<br />
gewisse Regelmäÿigkeit auallen. Die benutzten Zeichen und ihre Bedeutung<br />
sind hier einmal aufgeführt.<br />
• Jede Zeile in den beiden unteren Abschnitten beginnt mit einem<br />
+ oder - zeichen, welche die Sichtbarkeit (+=public, -=private)<br />
angeben.<br />
47
• Nach dem Namen des Attributs folgt ein Doppelpunkt, dann der<br />
Datentyp und (bei Konstanten) der Wert.<br />
• Bei Methoden folgt nach dem Namen die Liste der Parameter in<br />
Klammern und nach dem Punkt der Datentyp des Rückgabewerts<br />
(oder Void).<br />
• Geerbte Methoden und Attribute werden nicht aufgeführt (dazu unten<br />
mehr).<br />
• Der Konstruktor wurde als solcher gekennzeichnet.<br />
<strong>Das</strong> Klassendiagramm wurde übrigens ebenfalls mit Dia erstellt.<br />
48
7.2.2. Zusammenhänge<br />
In einem Klassendiagramm lassen sich jedoch nicht nur einzelne Klassen<br />
beschreiben, sondern auch die verschiedenen Zusammenhänge von Klassen<br />
untereinander.<br />
Nehmen wir einmal das gängige Beispiel eines Autos und schauen uns<br />
dazu ein Klassendiagramm an:<br />
Abbildung 15: Ein einfaches Klassendiagramm<br />
Man sieht hier zwei Klassen, einmal die Klasse Auto mit einigen Eigenschaften<br />
und Fähigkeiten. Auÿerdem die Klasse Fahrer. Jeder Fahrer hat<br />
ein Auto, welches in UML durch einen Pfeil verdeutlicht werden. Jeder<br />
Fahrer kennt sein Auto und kann auf dessen öentliche Variablen und<br />
Methoden zugreifen.<br />
7.3. Die <strong>Java</strong> API<br />
Eine weitere Möglichkeit, Klassen zu beschreiben, bieten die <strong>Java</strong>Doc-<br />
Kommentare. In der sogenannten <strong>Java</strong> API sind alle Kommentare der<br />
mit <strong>Java</strong> ausgelieferten Klassen aufgeführt. Man ndet die API auf der<br />
Seite von Sun (Oracle) oder indem man nach den Begrien <strong>Java</strong> und<br />
API im Internet sucht.<br />
Eine wichtige Klasse, die wir uns nun genauer ansehen wollen, ist die<br />
Klasse String .<br />
49
7.4. Aufgabe<br />
Aufgabe<br />
Önet zunächst die <strong>Java</strong> API und sucht die Klasse String (links in der<br />
Übersicht über alle Klassen).<br />
Versucht nun, jeweils eine Methode zu nden, um:<br />
• die Länge einer Zeichenkette zu bestimmen<br />
• eine Zeichenkette in kleinbuchstaben umzuwandeln<br />
• einen bestimmten Buchstaben in einer Zeichenkette zu nden<br />
Zeichenketten lassen sich in <strong>Java</strong> mit dem Befehl System.out.println(zeichenkette);<br />
ausgeben. Probiert nun einmal die gerade gefundenen Methoden aus.<br />
Ab jetzt wird euch die API häuger begegnen und auch, wenn sie auf<br />
Englisch ist, wird sie zu einem wichtigen Hilfsmittel beim täglichen Programmieren.<br />
7.5. Lernkontrolle<br />
Lernkontrolle<br />
Überprüfe an der folgenden Liste, ob du mittlerweile weiÿt, was diese<br />
Begrie bedeuten und wie sie zusammenhängen.<br />
Ich kenne jetzt:<br />
• Die UML Notation für Klassendiagrammen<br />
• Die <strong>Java</strong> API, suchen und nden von Informationen<br />
Wenn du dir sicher genug bist, mache den Kapiteltest.<br />
50
7.6. Kapiteltest<br />
Kapiteltest<br />
Der Kapiteltest für dieses Kapitel wird in Einzelarbeit absolviert.<br />
51
8. Kapitel VI - Vererbung und Interfaces<br />
Übersicht<br />
In diesem Kapitel wirst du erfahren, wie Vererbung in <strong>Java</strong> funktioniert<br />
und wie man mit Hilfe von Interfaces weitere Vereinbarungen über die<br />
Funktionen von Klassen festlegen kann.<br />
Lernziele<br />
In diesem Kapitel wirst du folgendes kennenlernen:<br />
• Den Begri der Vererbung<br />
• Welche Regeln es zu beachten gilt<br />
• Wie man Methoden überlagert<br />
• Wie man mit Hilfe von Interfaces vereinbarungen trit<br />
52
8.1. Die Vererbungsidee<br />
8.1.1. Information<br />
Information<br />
In vielen Programmiersprachen versucht man, Quellcode wieder zu verwenden<br />
und nur durch kleine Änderungen zu erweitern. Auÿerdem macht<br />
es oft Sinn, generelle Klassen durch Erweiterungen zu spezialisieren, so<br />
dass aus ihnen generierte Objekte zum Einen neue Fähigkeiten und Eigenschaften<br />
haben, zum Anderen aber immernoch Instanzen der Originalklassen<br />
sind. Diesen Mechanismus nennt man Vererbung.<br />
Ein kleines Beispiel aus dem alltäglichen Leben stellt die Führerscheinklasse<br />
M, welche einem das Führen von Kleinkrafträder erlaubt. Desweiteren<br />
gibt es die Klasse A1, welche das Führen von Krafträdern bis zu einer<br />
Leistung von 25 kW gestattet. <strong>Das</strong> beinhaltet auch Kleinkrafträder der<br />
Klasse M. Die Führerscheinklasse A1 (Kindklasse) erbt also sozusagen<br />
von der Klasse M (Vaterklasse). Man sagt auch Die Klasse A1 erweitert<br />
die Klasse M. Der Besitzer dieser Führerscheinklasse darf neue, stärkere<br />
Maschinen fahren, aber er darf auch weiterhin mit seinem Mofa herumgurken.<br />
Auÿerdem erweitert die Klasse A den Führerschein A1 noch einmal.<br />
53
Ein weiteres Beispiel ist im Folgenden gegeben. Hier gibt es eine Klasse<br />
Tier, die alle wichtigen Eigenschaften von Tieren enthält. Auÿerdem gibt<br />
es die Klassen Maus und Elefant, welche Tier erweitern (diese also als<br />
Vaterklasse haben). Im Quellcode sieht das Ganze dann so aus:<br />
Listing 5: Die Klasse Tier<br />
1 public class Tier extends Object {<br />
2<br />
3 public int alter ; // Jedes Tier hat ein Alter<br />
4<br />
5 public Tier () {<br />
6 alter = 0; // Im allgemeinen beginnen Tiere bei 0<br />
7 }<br />
8<br />
9 public void printAlter (){<br />
10 System . out . println ( alter );<br />
11 }<br />
12<br />
13 public void setAlter ( int alter ){<br />
14 this . alter = alter<br />
15 }<br />
16<br />
17 public void laufe (){<br />
18 System . out . println (" laufe " );<br />
19 }<br />
20 }<br />
Die Klasse Tier befähigt Tiere zum Laufen und gibt ihnen ein Alter,<br />
sowie ein paar Methoden. Jetzt gibt es aber Tiere, die anders laufen, zum<br />
Beispiel diese beiden:<br />
Listing 6: Die Klasse Elefant<br />
1 public class Elefant extends Tier {<br />
2<br />
3 public Elefant () {<br />
4 super ();<br />
5 }<br />
6<br />
7 public void laufe (){<br />
8 System . out . println (" stampfe " );<br />
9 }<br />
10 }<br />
54
Listing 7: Die Klasse Maus<br />
1 public class Maus extends Tier {<br />
2<br />
3 public Maus () {<br />
4 super ();<br />
5 }<br />
6<br />
7 public void laufe (){<br />
8 System . out . println (" tripple " );<br />
9 }<br />
10 }<br />
Wie man sieht, haben diese Tiere eine Eigene Version der Methode<br />
laufen(). Sie überschreiben oder Überlagern die Methode der Vaterklasse.<br />
Von der Vaterklasse erben die beiden Kindklassen jedoch eine Menge:<br />
• die Variable alter<br />
• die Methoden printAlter() und setAlter()<br />
• den Konstruktor von Tier, der mit Hilfe des Befehls super() aufgerufen<br />
wird<br />
• die Möglichkeit, auch die alte Methode laufen() zu nutzen, indem<br />
man einfach den Befehl super. davorhängt (super.laufen).<br />
Die Vererbung wird eingeleitet, indem man in der Klassensignatur nach<br />
dem Klassennamen den Befehl extends anfügt und danach den Namen<br />
der Vaterklasse angibt. Jede Klasse kann übrigens nur einen Vater haben,<br />
man spricht auch von Einfachvererbung.<br />
Es gibt übrigens einen weiteren neuen Befehl in der Klasse Tier, nämlich<br />
den Befehl this, mit dem man aus einer Methode heraus auf die<br />
globale Variable zugreifen kann. Schaut euch dazu einmal die Methode<br />
setAlter() genauer an. Hier wird beim Aufruf ein Parameter gefordert<br />
mit Namen alter , der als lokale Variable dient und genau so benannt ist,<br />
wie die globale Variable, diese also ebenfalls überläd. Durch den Befehl<br />
this. kann jedch auf die globale Variable zugegrien werden und man<br />
kann ihr so den Wert des Parameters zuweisen.<br />
55
Wissenssicherung<br />
Um sicherzustellen, dass du verstanden hast, welcher Grundgedanke<br />
hinter der Vererbung steckt, überlege einmal genauer, warum es in <strong>Java</strong><br />
nicht möglich ist, von zwei Vaterklassen direkt zu erben. Stelle dir dabei<br />
vor, welche Schwierigkeiten auftreten könnten, wenn man Mehrfachvererbung<br />
zulieÿe.<br />
Information<br />
8.1.2. Vererbung in Greenfoot<br />
Auch Greenfoot nutzt Vererbung. Wenn man sich die Klasse Wombat einmal<br />
anschaut, dann fällt einem sofort auf, dass sie von der Klasse Actor<br />
erbt. <strong>Das</strong>s soll sie, damit die Welt sicher gehen kann, dass jeder Wombat<br />
eine act()-Methode vorzuweisen hat. Diese wird dann im Wombat selber<br />
überlagert und mit dem Verhalten des Wombats gefüttert. Vererbung<br />
ist also auch eine Möglchkeit, um Sicherzustellen, dass ein Objekt einer<br />
(Kinde-)Klasse eine bestimmte Methode aufweist.<br />
56
Information<br />
8.1.3. Vererbung in Klassendiagrammen<br />
Die Vererbung läÿt sich übrigens wunderbar in Klassendiagrammen darstellen.<br />
Hier einmal ein kleiner Beispiel 9 :<br />
Verebung wird in UML Klassendiagrammen mittels leerer Pfeile dargestellt.<br />
Abbildung 16: Vererbung in Klassendiagrammen<br />
9 Quelle: http : //www.rolandgeyer.at/kurse/media/bild j ava/b7.gif<br />
57
Aufgabe<br />
Erzeuge die zu Abbildung 16 auf Seite 57 passenden Klassen Person,<br />
Erwerbstätigund Unbeschäftigt.<br />
Jede Klasse soll neben den angegebenen Parametern auch folgende Methoden<br />
haben:<br />
• Die Klasse Person bekommt eine Methode telefoniere().<br />
• Die Klasse Unbeschäftigt bekommt eine eigen Methode telefoniere(),<br />
sowie eine Methode sitzeBeimAmt().<br />
• Die Klasse Erwerbstätig bekommt eine eigen Methode geheArbeiten().<br />
Frage: Objekte welcher Klasse können telefonieren, welche können arbeiten<br />
gehen.<br />
58
8.2. Interfaces<br />
Information<br />
Vor allem beim verteilten Programmieren ist es wichtig, gewisse Schnittstellen,<br />
auf Englisch Interfaces zu vereinbaren. Ein Interface ist dabei keine<br />
Klasse, die in Methoden beschreibt, wie man etwas tut, sondern nur eine<br />
Sammlung von Methodensignaturen, die zwingend von einer Methode mit<br />
Leben zu füllen (zu implementieren) sind. Ein Interface schreibt also nur<br />
vor, welche Methoden vorhanden sein sollen, nicht aber, wie sie funktionieren.<br />
Warum aber will man nun interfaces haben, reicht nicht Vererbung?<br />
Leider nicht, denn <strong>Java</strong> läÿt keine direkte Mehrfachvererbung zu. Interfaces<br />
hingegen kann man beliebig viele implementieren und somit mehrere<br />
Vereinbarungen erfüllen. Wie genau Interfaces eingesetzt werden, werden<br />
wir spätestens dann besprechen, wenn es um den Listener-Mechanismus<br />
geht. Bis dahin musst du dich mit folgendem kleinen Beispiel zufrieden<br />
geben.<br />
Listing 8: <strong>Das</strong> Interface Essbar<br />
1 /**<br />
2 * Dieses Interface zeigt an,<br />
3 * dass ein Gegenstand essbar ist<br />
4 */<br />
5 public interface Essbar {<br />
6<br />
7 public void issMich (); // Nur Methodensignatur!<br />
8<br />
9 }<br />
59
Listing 9: <strong>Das</strong> Interface Trinkbar<br />
1 /**<br />
2 * Dieses Interface zeigt an,<br />
3 * dass ein Gegenstand trinkbar ist<br />
4 */<br />
5 public interface Trinkbar {<br />
6<br />
7 public void trinkMich (); // Nur Methodensignatur!<br />
8<br />
9 }<br />
Listing 10: Und Jetzt die Suppe ...<br />
1 public class Suppe implements Essbar , Trinkbar {<br />
2<br />
3 public void issMich (){ // Muss implementiert werden!<br />
4 System . out . println (" Hmm , ein wenig dünn ... " );<br />
5 }<br />
6<br />
7 public void trinkMich (){ // Muss implementiert werden!<br />
8 System . out . println (" Schlürf ... " );<br />
9 }<br />
10 }<br />
60
8.2.1. Interfaces in UML<br />
Hier noch eine kleine Information zur Darstellung von Interfaces in UML-<br />
Klassendiagrammen. Die Implementierung wird durch einen gestrichelten<br />
Pfeil mit leerer Spitze dargestellt. Interfaces können von anderen Interfaces<br />
erben, beim Implementieren muss man dann die Methoden aller<br />
Interfaces füllen.<br />
Abbildung 17: Interfaces und Klassendiagramme<br />
Leere Pfeile zeigen an, dass eine Klasse ein Interface implementiert.<br />
61
8.3. Aufgabe<br />
Gegeben ist die Klasse Fahrzeug.<br />
1 public class Fahrzeug {<br />
2 int anzahlRäder ;<br />
3 int anzahlSitzplätze ;<br />
4<br />
5 boolean kannFahren = false ;<br />
6<br />
Listing 11: Die Klasse Fahrzeug<br />
7 public void fahreLos (){<br />
8 if ( kannFahren )<br />
9 System . out . println (" Ich fahre los " );<br />
10 }<br />
11 }<br />
Erstellt die Klassen Fahrrad und Auto, die von Fahrzeug erben und die<br />
Variablen geeignet belegen. Schreibe auch eine Methode starteMotor(),<br />
die das Auto in einen fahrtüchtigen Modus versetzt. Überlege dir dann<br />
eine entsprechende Methode für das Fahrrad. Als Letztes überlege, ob du<br />
eine sinnvolle Erweiterung von Auto, also eine Klasse, die von Auto erbt,<br />
ndest und implementiere diese.<br />
62
8.4. instanceof - Exkursion<br />
Mit Hilfe des Befehles instanceof kann man zur Laufzeit überprüfen, ob<br />
Objekt Instanz einer Klasse ist. Nehmen wir einmal das folgende Beispiel:<br />
Es gibt eine Klasse Auto, sowie zwei Klassen Cabrio und Geländewagen,<br />
welche Auto erweritern. Jetzt kann ein Cabrio sein Verdeck auf<br />
und zu fahren (fahreAuf() und fahreZu()), ein Geländewagen hingegen<br />
hat die Möglichkeit, Allrad zuzuschalten (setAllrad(boolean zustand)).<br />
Jedes Auto kann hupen (hupe()). Schau dir nun den folgenden Quellcode<br />
an und überlege, was beim Aufrufen der Methode dreAutos() geschieht.<br />
Listing 12: Neulich in der Waschstraÿe<br />
1 public class Waschstrassentest {<br />
2<br />
3 private Auto meinAuto ;<br />
4 private Cabro meinCabrio ;<br />
5 private Gelaendewagen meinOffroader ;<br />
6<br />
7 public Waschstrassentest (){<br />
8 meinAuto = new Auto ();<br />
9 meinCabrio = new Cabrio ();<br />
10 meinOffroader = new Gelaendewagen ();<br />
11<br />
12 wasche ( meinAuto );<br />
13 wasche ( meinCabrio );<br />
14 wasche ( meinOffroader );<br />
15 }<br />
16<br />
17 public void wasche ( Auto auto ){<br />
18 if ( auto instanceof Cabrio )<br />
19 fahreZu ();<br />
20 else if ( auto instanceof Gelandewagen )<br />
21 setAllrad ( false );<br />
22 hupe ();<br />
23 }<br />
24<br />
25 }<br />
Überlege dann, ob es sinvoll wäre, Cabrio und Gelaendewagen als Interfaces<br />
zu denieren.<br />
63
8.5. Lernkontrolle<br />
Lernkontrolle<br />
Ich kenne jetzt:<br />
• die Vererbungsidee<br />
• den Befehl extends, welcher die Vererbung einleitet<br />
• den Befehl this zum Reerenzieren überladener globaler Variablen<br />
• den Befehl super zum Reerenzieren der Vaterklasse<br />
• den Interface-Gedanken<br />
• die Darstellung von Vererbung und Implementation in UML<br />
Wenn du dir sicher genug bist, mache den Kapiteltest.<br />
8.6. Kapiteltest<br />
Kapiteltest<br />
Der Kapiteltest für dieses Kapitel wird in Einzelarbeit absolviert.<br />
64
9. Kapitel VII - Weitere Fähigkeiten von Greenfoot<br />
Übersicht<br />
In diesem letzten Kapitel wirst du eine Reihe weiterere Möglichkeiten<br />
kennen lernen, die dir Greenfoot im Umgang mit <strong>Java</strong> liefert. Dabei<br />
musst du nicht alles lesen, viel mehr ist dieses Kapitel eine Sammlung von<br />
Exkursionen, die du bei Interesse lesen kannst. Am Ende kannst du deine<br />
Ideen in einem kleinen Spiel umsetzen.<br />
Viele der Features von Greenfoot hast du vielleicht schon selber angetestet.<br />
Wenn du noch etwas hast, was hier fehlt, dann schreibe es auf und lass es<br />
ein Teil des <strong>Leitprogramm</strong>s werden.<br />
Lernziele<br />
In diesem Kapitel wirst du folgendes kennenlernen:<br />
• Ändern der Bilder eines Actors<br />
• Greenfoot und Sounds<br />
• Steuern des Actors mit Tastatur und Maus<br />
• Zufällige Werte<br />
• Kombination zu einem eigenen Spiel.<br />
65
9.1. Bilder austauschen mit setImage()<br />
Jedes Actor-Objekt in Greenfoot kennt die Methode void setImage(String<br />
lename) . Diese vererbt er auch an alle Kindklassen. Der Parameter ist<br />
eine Zeichenkette und beschreibt, wo ein Bild zu nden ist und welchen<br />
Namen es hat (z.B. meinbild.gif). Die Methode ändert das Bild des Objektes.<br />
Am besten ist es, wenn das Bild mit im Objektordner gespeichert<br />
ist.<br />
Ein Beispiel:<br />
1 Act () {<br />
2 if ( canMove ())<br />
3 {<br />
4 move ();<br />
5 }<br />
6 else<br />
7 {<br />
8 setImage (" rock . gif " );<br />
9 }<br />
10 }<br />
Listing 13: Der Wombat verkleidet sich als Stein<br />
Passend zum Setter gibt es übrigens auch die Methode getImage(),<br />
welche ein Objetkt vom Typ GreenFootImage zurückliefert.<br />
9.2. Neue Objekte in die Welt einfügen<br />
Neben der Klasse Actor, die noch einige weitere nützliche Methoden bereitstellt,<br />
gibt es die Klasse World, die ebenfalls interessante Möglichkeiten<br />
erönet.<br />
Zwei wichtige Methoden sind void addObject(Actor object, int<br />
x, int y) und void removeObject(Actor object). Die erste fügt der<br />
Welt eine Instanz der Actor-Klasse an der stelle (x|y) hinzu, die zweite<br />
löscht ein Objekt. Somit lassen sich neue Objekte ganz einfach in der Welt<br />
positionieren oder bestehende Objekte entfernen.<br />
Ein Beispiel für removeObject() ndest du in der eatLeaf-Methode. Nach<br />
der folgenden Anpassung erzeugt der Wombat nun an der Stelle, wo er<br />
ein Blatt ist, einen Stein.<br />
66
Listing 14: Der Wombat macht einen Stein<br />
1 public void eatLeaf ()<br />
2 {<br />
3 Actor leaf = getOneObjectAtOffset (0 , 0, Leaf . class );<br />
4 if ( leaf != null ) {<br />
5 // eat the leaf...<br />
6 getWorld (). removeObject ( leaf );<br />
7 getWorld (). addObject ( new Rock ());<br />
8 leavesEaten = leavesEaten + 1;<br />
9 }<br />
10 }<br />
Ach ja, richtig, damit der Wombat einen Stein erzeugen kann, muss er<br />
die Methode seiner Welt aufrufen. Ja, jeder Actor kann sich die Welt, in<br />
der er lebt, mit der Methode getWorld() holen und dann direkt die Methoden<br />
der Welt nutzen. Klingt kompliziert, ist aber nach etwas Eingewöhnung<br />
ganz einfach!<br />
9.3. Hast du Töne<br />
Greenfoot kann auch einfach Töne abspielen. Hierzu gibt es die Methode<br />
Greenfoot.playSound(sound.wav);. Neu ist, dass die Methode<br />
direkt aus der Klasse Greenfoot aufgerufen wird. Man benötigt kein<br />
Objekt dafür. Eine solche Methode wird statisch, auf Englisch static<br />
genannt. Greenfoot spielt übrigens nur Dateien im wav- oder aif-Format,<br />
keine mp3-Dateien.<br />
9.4. Input und Output per Tastatur<br />
Hier lernst du etwas über das Steuern eines Actors per Maus oder Tastatur.<br />
Es gibt zwei Möglichkeiten, einen Actor mit der Tastatur zu steuern.<br />
Einmal das andauernde Drücken einer Taste, zum andern das kurze Antippen.<br />
Beide Methoden werden hier beschrieben.<br />
9.4.1. Andauerndes Drücken<br />
Die Klasse Greenfoot bietet weitere statische Methoden, eine ist die Methode<br />
Greenfoot.isKeyDown(). Ein Actor kann diese Methode aufrufen<br />
und als Parameter den Namen der Taste übergeben, deren Status er abfragen<br />
will. Wenn die Taste im Moment gedrückt ist, dann liefert die Methode<br />
den Wert true zurück. Hier ein kleines Beispiel:<br />
67
Listing 15: Steuern des Wombat I<br />
1 if ( Greenfoot . isKeyDown (" left " )) {<br />
2 turnLeft ();<br />
3 }<br />
4 else if ( Greenfoot . isKeyDown ("m" )){<br />
5 move ();<br />
6 }<br />
9.4.2. Kurzes Antippen<br />
Um nur ein kurzes Tippen abzufragen, gibt es die Methode getKey(),<br />
ebenfalls in der Greenfoot Klasse. Sie gibt an, welche Taste als letztes<br />
gedrückt wurde, auch wenn jetzt gerade keine Taste gedrückt ist.<br />
Listing 16: Steuern des Wombat II<br />
1 if ( Greenfoot . getKey (). equals ("m" )){<br />
2 move ();<br />
3 }<br />
Neu ist übrigens die Methode equals(). Diese gehört zur Klasse String<br />
und kann hier benutzt werden, weil die Methode getKey() einen String<br />
zurückgibt. Diese Verschachtelung von Methoden wird dir noch häuger<br />
begegnen. Es ist übrigens Sinnvoll, Strings mit der equals()-Methode und<br />
nicht mit == zu vergleichen, da Strings Objekte sind und der Vergleich<br />
mit == nur dann true lifert, wenn es sich um genau die selben Objekte<br />
(und nicht Objekte mit selbem Inhalt) handelt.<br />
9.4.3. Ein weiters Beispiel (Funken)<br />
Steuern des Wombat per Tastatur:<br />
Beispielsweise wollen wir erreichen, dass sich unser Wombat bei jedem<br />
Drücken der linken Pfeiltaste nach links dreht, dann lautet der Quellcode<br />
dafür:<br />
Listing 17: Steuern des Wombat III<br />
1 if ( Greenfoot . isKeyDown (? left ?)) {<br />
2 turnLeft ();<br />
3 }<br />
Also lautet der gesamte Quellcode, um den Wombat mit den Pfeiltasten<br />
zu steuern:<br />
68
1 public void act (){<br />
2<br />
Listing 18: Steuern des Wombat III<br />
3 if ( Greenfoot . isKeyDown (" up " )){<br />
4 move ();<br />
5 }<br />
6 else if ( Greenfoot . isKeyDown (" down " )){<br />
7 moveBack ();<br />
8 }<br />
9 else if ( Greenfoot . isKeyDown (" left " )){<br />
10 turnLeft ();<br />
11 }<br />
12 else if ( Greenfoot . isKeyDown (" right " )){<br />
13 turnRight ();<br />
14 }<br />
15 }<br />
9.5. Input und Output per Maus<br />
Die Eingabe per Maus ist etwas komplizierter, wird jedoch relativ gut in<br />
der (englischen) Hilfe erläuter. Hier ein Link auf die entsprechende Seite:<br />
http://www.greenfoot.org/doc/manual.html#mouse<br />
9.6. Zufall und Zufallswerte<br />
Zufällige Bewegungen in Greenfoot machen das Spielen erst richtig interessant.<br />
Sie basieren auf zufälligen Werten, sogenannten Zufallszahlen (eng.<br />
random numbers, kurz random). Solche Zahlen zu erzeugen ist recht einfach.<br />
Die Klasse Greenfoot hat auch hierfür eine entsprechende Methode,<br />
public int getRandomNumber(int limit). Diese Methode erzeugt<br />
eine ganzzahlige Zufallszahl zwischen den werten 0 und dem übergebenen<br />
Limit (exklusive).<br />
Hier ein kleines Beispiel:<br />
Listing 19: Der Wombat wirft eine Münze<br />
1 if ( Greenfoot . getRandomNumber (2) == 0) { // 50% chance<br />
2 turnLeft ();<br />
3 }<br />
4 else {<br />
5 turnRight ();<br />
69
6 }<br />
9.7. Und wie nun weiter?<br />
Lernziele<br />
Überlege dir mit deinem Partner ein kleines Spiel. Nutze hierfür entweder<br />
die vorgegebenen Klassen und verändere sie, oder schreibe neue Klassen<br />
dazu. Gebraucht dabei die in diesem Kapitel vorgestellten Möglichkeiten<br />
von Greenfoot.<br />
70
10. Ende<br />
Damit endet dieses <strong>Leitprogramm</strong>. Du solltest jetzt in der Lage sein, einfache<br />
<strong>Java</strong>-Programme zu lesen und Algorithmen in dieser Sprache zu<br />
implementieren. Wir werden im Unterricht noch ein wenig mit Greenfoot<br />
weiterarbeiten, uns jedoch bald mit einem anderen Editor auseinandersetzen.<br />
Ich hoe, das Lesen und Durcharbeiten des <strong>Leitprogramm</strong>s hat dir Spaÿ<br />
gemacht und würde mich über ein Feedback freuen, also fülle bitte den<br />
folgenden Fragebofen aus und gib ihn ab, damit ich das <strong>Leitprogramm</strong><br />
für die kommenden Kurse verbessern kann.<br />
Danke<br />
10.1. Fragebogen<br />
Im Folgenden kannst du die Nützlichkeit und Benutzbarkeit dieses <strong>Leitprogramm</strong>es<br />
für dich einschätzen und deine Meinung äuÿern. Bitte nimm<br />
dir ein paar Minuten Zeit, denn so kann ich das <strong>Leitprogramm</strong> für die<br />
folgenden Generationen von Schülern erweitern und anpassen.<br />
Danke schon einmal im Voraus!<br />
10.1.1. Benutzbarkeit<br />
Bitte vergib hinter jedem aufgeführten Punkte eine Note von 1 (sehr gut)<br />
bis 6 (ungenügend).<br />
• Die Aufteilung der Kapitel (Übersicht, Lernziele, Informationen, Aufgaben)<br />
helfen beim Erarbeiten der Informationen.<br />
• Der Aufbau des <strong>Leitprogramm</strong>s war übersichtlich.<br />
• Die abschlieÿenden Kapiteltests helfen beim Einschätzen der eigenen<br />
Lernleistung.<br />
• Die Arbeit mit dem <strong>Leitprogramm</strong> ermöglicht ein eigenständiges Lernen.<br />
• Die Arbeit mit dem <strong>Leitprogramm</strong> macht Spaÿ.<br />
71
Anmerkungen:<br />
10.1.2. Inhalte<br />
Bitte vergib hinter jedem aufgeführten Punkte eine Note von 1 (sehr gut)<br />
bis 6 (ungenügend).<br />
• Die Inhalte der einzelnen Kapitel waren für mich leicht verständlich.<br />
• Neue Konzepte wurden genügend tief besprochen und durch Beispiele<br />
verdeutlicht.<br />
• Auf Inhalte der vorangehenden Kapitel wurde Bezug genommen.<br />
Anmerkungen:<br />
10.1.3. Lernzuwachs<br />
Bitte vergib hinter jedem aufgeführten Punkte eine Note von 1 (sehr gut)<br />
bis 6 (ungenügend).<br />
• Ich habe eine Reihe neuer Dinge über das Programmieren am Computer<br />
gelernt.<br />
• Ich habe die Grundlagen der objektorientierten Programmierung verstanden.<br />
• Ich kenne nun einige Möglichkeiten, um in Zukunft auftretende Probleme<br />
beim Programmieren eigenständig zu lösen.<br />
Anmerkungen:<br />
10.1.4. Verbesserungsvorschläge und Ideen<br />
Hier kannst du eigene Ideen und Verbesserungsvorschläge als Text schreiben.<br />
72
11. Ein Dankeschön<br />
Ein besonderes Dankeschön geht an die Grundkurse Informatik Q im<br />
Jahrgang 2010/2011, besonders an die folgenden Schüler:<br />
• Dietrich für den Teil zu setImage<br />
• Funken für den Teil zur Tastatursteuerung<br />
• Schäuble, Freier u.A. für ihr eiÿiges Korrekturlesen<br />
73
A. Installation von <strong>Java</strong> und Greenfoot<br />
A.1. <strong>Java</strong> installieren<br />
Ladet euch unter java.sun.com das aktuelle JDK (<strong>Java</strong> Developement<br />
Toolkit) herunter. <strong>Das</strong> momentan aktuelle <strong>Java</strong> 6 bekommt ihr unter:<br />
java.sun.com<br />
Die Installation von <strong>Java</strong> funktioniert voll automatisch, folgt nur den<br />
Anweisungen auf dem Bildschirm.<br />
A.2. Greenfoot installieren<br />
Ladet euch dann Greenfoot herunter, ihr ndet es unter:<br />
www.greenfoot.org<br />
Die Installation funktioniert ebenfalls wie gewohnt. Nun sollte es ein<br />
neues Menü und ein Icon auf eurem Desktop geben.<br />
A.3. Erweiterte Inhalte<br />
Ihr bekommt im Laufe der Unterrichtsreihe auÿerdem einen Link auf weitere<br />
Greenfoot Szenarion. Die Installation ist einfach:<br />
• <strong>Das</strong> Zip-Archiv wird in einem neuen Ordner abgelegt.<br />
• Merke dir diesen Ordner, um die Dateien später zu nden.<br />
74
B. Benutzung des <strong>Leitprogramm</strong>s<br />
B.1. Einführung<br />
Mit diesem <strong>Leitprogramm</strong> machst du eigenständig erste Gehversuche in<br />
der Programmiersprache <strong>Java</strong>. Du arbeitest dabei entweder alleine oder<br />
mit einem festen Partner, wobei jeder das <strong>Leitprogramm</strong> durcharbeiten<br />
soll.<br />
<strong>Das</strong> <strong>Leitprogramm</strong> ist in Kapitel aufgeteilt, die alle vollständig und in<br />
der richtigen Reihenfolge bearbeitet werden müssen. Auÿerdem gibt es<br />
Exkursionen, die dich entweder mit weiteren interessanten Informationen<br />
zum Thema versorgen oder dir als Wiederholung / Aurischung dienen<br />
können.<br />
Am Ende eines jeden Kapitels erfolgt eine Abprüfung des Gelernten<br />
mittels Kapiteltest (entweder unbewerteter oder bewerteter Test).<br />
B.1.1. Arbeitsanleitung<br />
Zuerst wird jeweils ein Kapitel selbständig mit deinem Partner abgeschlossen.<br />
Hierbei lest ihr zuerst die neuen Informationen durch und setzt sie nachher<br />
in euren Programmen um.<br />
Anschlieÿend werdet ihr einzeln einen kleinen Kapiteltest machen, welcher<br />
euch vom Lehrer gegeben wird.<br />
Fragen<br />
• Muss das ganze <strong>Leitprogramm</strong> bearbeitet werden? - Einige der Informationsabschnitte<br />
und Aufgaben sind als "Freiwillig" gekennzeichnet<br />
und müssen im Rahmen des <strong>Leitprogramm</strong>s nicht bearbeitet werden.<br />
Sie bieten schnelleren Gruppen die Möglichkeit, sich tiefer zu einem<br />
Thema zu informieren und ihre Seite schöner zu gestalten.<br />
Auÿerdem sind die Exkursionen freiwillig, denn ihre Inhalte gehen<br />
75
entweder über den Unterrichtssto hinaus oder werden in der Gruppe<br />
besprochen.<br />
• Was tue ich bei Fragen zum Thema? - Solltest du einen Abschnitt<br />
auch nach gründlichem Durchlesen nicht verstehen, so fragst du zuerst<br />
deinen Partner. Sollte auch er dir nicht weiter helfen können, dann<br />
fragt gemeinsam eine Kameradin oder einen Kameraden. Denkt daran,<br />
dass dieser eventuell selber gerade beschäftigt ist und unterbrecht ihn<br />
nicht abrupt.<br />
Falls ihr auch zu dritt nicht weiter kommt, dürft ihr gerne den Lehrer<br />
oder die Lehrerin fragen.<br />
76
B.1.2. Zeichenerklärung:<br />
Die einzelnen Kapitel sind immer wie folgt strukturiert:<br />
• Übersicht: Was wird in diesem Kapitel behandelt und was gibt es zu<br />
tun?<br />
Abbildung 18: Übersicht<br />
• Lernziele: Was kann ich nach dem Bearbeiten des Kapitels?<br />
Abbildung 19: Lernziele<br />
• Inhalte: Neuer Sto wird vorgestellt. Im Teil mit dem eigentlichen<br />
Lernsto trist du auf die folgenden Zeichen:<br />
Denition: Hier wird etwas deniert. Diese Denitionen sind<br />
wichtig und müssen auswendig gelernt werden!<br />
Information: Hier stehen Informationen im Text, die Inhalt der<br />
aktuellen Lerneinheit sind.<br />
Wissenssicherung: Hier wird noch einmal kurz das zu Erlernende<br />
an Beispielen wiederholt.<br />
Aufgabe: Kleine Aufgaben zum Erproben des neu Gelernten.<br />
• Lernkontrolle: Habe ich alles verstanden? Lösungen zu den gestellten<br />
Problemen.<br />
• Kapiteltest: Nach der Lernkontrolle kannst du dich für den Kapiteltest<br />
melden.<br />
77
Abbildung 20: Symbole zum Lerninhalt<br />
Abbildung 21: Lernkontrolle<br />
Abbildung 22: Kapiteltest<br />
78
C. Verzeichnisse<br />
C.1. Bilderverzeichnis<br />
Abbildungsverzeichnis<br />
1. Greenfoot - So sieht es aus ... . . . . . . . . . . . . . . . . 6<br />
2. Ein Wombat auf der Welt . . . . . . . . . . . . . . . . . 18<br />
3. Start und Stop . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
4. Ein- und Ausgabe . . . . . . . . . . . . . . . . . . . . . . . 24<br />
5. Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
6. Bedingte Verzweigung . . . . . . . . . . . . . . . . . . . . 25<br />
7. Subprogramm . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
8. Addition über Inkrement und Dekrement . . . . . . . . . . 26<br />
9. Ein Algorithmus zum Vergleichen von zwei Zahlen . . . . . 27<br />
10. Eine Beispielbelegungstabelle . . . . . . . . . . . . . . . . 28<br />
11. Was tut dieser Algorithmus? . . . . . . . . . . . . . . . . . 29<br />
12. <strong>Java</strong>Doc erzeugt schöne Methodenbeschreibungen . . . . . 33<br />
13. Ein weiterer unbekannter . . . . . . . . . . . . . . . . . . . 42<br />
14. Klassendiagramm Wombat . . . . . . . . . . . . . . . . . . 47<br />
15. Ein einfaches Klassendiagramm . . . . . . . . . . . . . . . 49<br />
16. Vererbung in Klassendiagrammen . . . . . . . . . . . . . . 57<br />
17. Interfaces und Klassendiagramme . . . . . . . . . . . . . . 61<br />
18. Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />
19. Lernziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />
20. Symbole zum Lerninhalt . . . . . . . . . . . . . . . . . . . 78<br />
21. Lernkontrolle . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />
22. Kapiteltest . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />
C.2. Listingverzeichnis<br />
Listings<br />
1. Die Act-Methode des Wombat . . . . . . . . . . . . . . . . 20<br />
2. Die Methode act() . . . . . . . . . . . . . . . . . . . . . . 31<br />
3. Addieren von zwei Zahlen . . . . . . . . . . . . . . . . . . 33<br />
4. Eine kleine Verhaltensregel ... . . . . . . . . . . . . . . . . 35<br />
5. Die Klasse Tier . . . . . . . . . . . . . . . . . . . . . . . . 54<br />
6. Die Klasse Elefant . . . . . . . . . . . . . . . . . . . . . . 54<br />
79
7. Die Klasse Maus . . . . . . . . . . . . . . . . . . . . . . . 55<br />
8. <strong>Das</strong> Interface Essbar . . . . . . . . . . . . . . . . . . . . . 59<br />
9. <strong>Das</strong> Interface Trinkbar . . . . . . . . . . . . . . . . . . . . 60<br />
10. Und Jetzt die Suppe ... . . . . . . . . . . . . . . . . . . . . 60<br />
11. Die Klasse Fahrzeug . . . . . . . . . . . . . . . . . . . . . 62<br />
12. Neulich in der Waschstraÿe . . . . . . . . . . . . . . . . . . 63<br />
13. Der Wombat verkleidet sich als Stein . . . . . . . . . . . . 66<br />
14. Der Wombat macht einen Stein . . . . . . . . . . . . . . . 67<br />
15. Steuern des Wombat I . . . . . . . . . . . . . . . . . . . . 68<br />
16. Steuern des Wombat II . . . . . . . . . . . . . . . . . . . . 68<br />
17. Steuern des Wombat III . . . . . . . . . . . . . . . . . . . 68<br />
18. Steuern des Wombat III . . . . . . . . . . . . . . . . . . . 69<br />
19. Der Wombat wirft eine Münze . . . . . . . . . . . . . . . . 69<br />
80