22.11.2013 Aufrufe

Das Java Leitprogramm

Das Java Leitprogramm

Das Java Leitprogramm

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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!