Lernpfad:Lerntheke Marsrover/18: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Karte}} | {{Karte|Hilfe=9}} | ||
Wenn ein Algorithmus zu groß und komplex wird, dann ist es hilfreich, die Strukturierte Zerlegung (siehe dazu {{Pfad|17|Karte 17}}) anzuwenden, um ihn in kleiner Teilprobleme zu zerlegen. In Java nutzt man dazu ''Methoden''. | Wenn ein Algorithmus zu groß und komplex wird, dann ist es hilfreich, die Strukturierte Zerlegung (siehe dazu {{Pfad|17|Karte 17}}) anzuwenden, um ihn in kleiner Teilprobleme zu zerlegen. In Java nutzt man dazu ''Methoden''. | ||
Zeile 17: | Zeile 17: | ||
* Bessere Lesbarkeit des Quelltextes. | * Bessere Lesbarkeit des Quelltextes. | ||
* Leichtere Aufteilung im Team. ("Ich implementiere <code>fahre</code>, du implementierst <code>drehe</code>.") | * Leichtere Aufteilung im Team. ("Ich implementiere <code>fahre</code>, du implementierst <code>drehe</code>.") | ||
{{Lösung:End}} | |||
In Java wird eine ''Methode'' so definiert: | |||
<syntaxhighlight lang="java"> | |||
public void dreimalFahre() { | |||
fahre(); | |||
fahre(); | |||
fahre(); | |||
} | |||
</syntaxhighlight> | |||
Sie besteht aus einem ''Methodenkopf'' und einem ''Methodenrumpf''. Der Rumpf enthält die Befehle, die ausgeführt werden sollen. Der Kopf besteht aus den Schlüsselwörtern <code>public void</code> und einem ''Bezeichner'' für den neuen Befehl. Den Bezeichner kannst du frei wählen, aber er sollte aussagekräftig sein. | |||
{{Aufgabe:Start|Icon=Greenfoot Rover.png}} | |||
# Implementiere eine Methode <code>public void umdrehen()</code>, die den Rover um 180 Grad dreht. | |||
# Implementiere eine Methode <code>public void vierVorUndRechts()</code>, die den Rover vier vor fahren lässt und ihn dann nach rechts dreht. | |||
{{Aufgabe:End}} | |||
{{Lösung:Start}} | |||
<syntaxhighlight lang="java"> | |||
public void umdrehen() { | |||
drehe("rechts"); | |||
drehe("rechts"); | |||
} | |||
public void vierVorUndRechts() { | |||
fahre(); | |||
fahre(); | |||
fahre(); | |||
fahre(); | |||
drehe("rechts"); | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | {{Lösung:End}} | ||
Aktuelle Version vom 17. November 2020, 09:45 Uhr
Wenn ein Algorithmus zu groß und komplex wird, dann ist es hilfreich, die Strukturierte Zerlegung (siehe dazu Karte 17) anzuwenden, um ihn in kleiner Teilprobleme zu zerlegen. In Java nutzt man dazu Methoden.
Jede Methoden an sich ist wieder ein Algorithmus, der als Befehl in anderen Programmen verwendet werden kann. Du kennst schon einige Methoden. Beispielsweise
fahre()
,drehe(richtung)
oderanalysiereGestein()
.
Was sind Vorteile, wenn ein Programm in einzelne Methoden aufgeteilt wird? Notiere im Heft.
- Weniger doppelter Code.
- Bessere Wartbarkeit, da Fehler nicht an mehreren Stellen gesucht und korrigiert werden müssen.
- Bessere Lesbarkeit des Quelltextes.
- Leichtere Aufteilung im Team. ("Ich implementiere
fahre
, du implementierstdrehe
.")
In Java wird eine Methode so definiert:
public void dreimalFahre() {
fahre();
fahre();
fahre();
}
Sie besteht aus einem Methodenkopf und einem Methodenrumpf. Der Rumpf enthält die Befehle, die ausgeführt werden sollen. Der Kopf besteht aus den Schlüsselwörtern public void
und einem Bezeichner für den neuen Befehl. Den Bezeichner kannst du frei wählen, aber er sollte aussagekräftig sein.
- Implementiere eine Methode
public void umdrehen()
, die den Rover um 180 Grad dreht. - Implementiere eine Methode
public void vierVorUndRechts()
, die den Rover vier vor fahren lässt und ihn dann nach rechts dreht.
public void umdrehen() {
drehe("rechts");
drehe("rechts");
}
public void vierVorUndRechts() {
fahre();
fahre();
fahre();
fahre();
drehe("rechts");
}
Der Rover steht vor dem gezeigten Hügelsystem.
- Zerlege das Problem in deinem Heft in sinnvolle Teilprobleme.
- Implementiere jedes Teilproblem für sich in einer Methode. (Wähle sinnvolle Bezeichner für die Methoden.)
- Implementiere eine Lösung des Problems unter Verwendung der Methoden aus 2.
Entwirf das Programm so, dass die Größe des Hügels egal ist. Die Form einer Raute bleibt aber erhalten. Lade die Karte "karte18_huegelraute"
in die Planetenwelt für eine zufällige Raute bei jedem Reset.
Mögliche Zerlegung:
rauteAbfahren()
- Lösung des Problems: Die gesamte Raute wird abgefahren und die Steine gesammelt.
fahreSeite()
- Fährt eine Seite der Raute ab, wenn der Rover mit Blickrichtung zur Raute steht.
fahreUmHuegel()
- Fährt um einen einzelnen Huegel an einer Seite der Raute.
public void fahreUmHuegel() {
drehe("links");
fahre();
drehe("rechts");
fahre();
}
public void fahreSeite() {
fahreUmHuegel();
fahreUmHuegel();
fahreUmHuegel();
drehe("rechts"); // Blickrichtung zur Raute
}
public void rauteAbfahren() {
fahreSeite();
analysiereGestein(); // Analysiere das Gestein am Ende der Seite
fahreSeite();
analysiereGestein();
fahreSeite();
analysiereGestein();
fahreSeite();
}
public void fahreUmHuegel() {
drehe("links");
fahre();
drehe("rechts");
fahre();
}
public void fahreSeite() {
// Solange kein Hügel vorhanden
while( !huegelVorhanden("vorne") ) {
fahreUmHuegel();
}
// Blickrichtung zur Raute
drehe("rechts");
}
public void rauteAbfahren() {
fahreSeite();
analysiereGestein(); // Analysiere das Gestein am Ende der Seite
fahreSeite();
analysiereGestein();
fahreSeite();
analysiereGestein();
fahreSeite();
}
Das ist Greenfoot | Der Mars-Rover | Die Welt des Mars-Rover | Das ist Java | Die Rover-Arena | Greenfoot benutzen | Java Syntax | Variablen | Methoden | Bedingte Anweisungen | Schleifen | Objekte | Arrays | Die Fähigkeiten des Rovers | Steine analysieren I | Steine analysieren II | Strukturiertes programmieren | Programme strukturieren I | Programme strukturieren II | Fallunterscheidungen I | Anfragen | Fallunterscheidungen II | Variablen | Objektvariablen | Wiederholungen I | Wiederholungen II | Rover-Liebe | Steine analysieren III | Gefangen im Labyrinth I | Marken-Maler | Fleißige Rover | Gefangen im Labyrinth II | In der Rover-Arena | Parameter