22.11.2013 Aufrufe

Das Java Leitprogramm

Das Java Leitprogramm

Das Java Leitprogramm

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!