Mehr erfahren

Kapitel 2: Programmierung von Karel


Der einfachste Stil des Karel-Programms verwendet Text, um eine Folge von eingebauten Befehlen anzugeben, die ausgeführt werden sollen, wenn das Programm ausgeführt wird run . Betrachten Sie das folgende einfache Karel-Programm. Der Text links ist das Programm. Der Zustand von Karels Welt ist auf der rechten Seite dargestellt:

Klicken Sie auf die Schaltfläche "Ausführen", um das Programm auszuführen. Programme werden in der Regel in einer speziellen Anwendung namens geschrieben Integrierte Entwicklungsumgebung (IDE) und die meisten Karel-Programme sind in einer IDE namens Eclipse geschrieben. Wie eine IDE kann dieser Reader Programme ausführen, um Ihnen zu helfensehenwie die Dinge funktionieren, wenn Sie lernen.

Das Programm besteht aus mehreren Teilen. Der erste Teil besteht aus folgenden Zeilen:

/*
 * Datei: ErsterKarel.java
 * ----------------------
 * Das Programm ErsterKarel definiert eine " run " -M
 * ethode mit drei Befehlen. Diese Befehle bewirken,
 * dass Karel move einen Block weiterleitet, beeper u
 * nd dann move vor der nächsten Ecke.
 */

Diese Zeilen sind ein Beispiel für a Kommentar Dies ist lediglich ein Text, der den menschlichen Lesern die Funktionsweise des Programms erklärt. Kommentare in Karel und Java beginnen mit den Zeichen /* und ende mit den zeichen */ . Hier beginnt der Kommentar in der ersten Zeile und endet einige Zeilen später. Die Sterne in den einzelnen Zeilen, aus denen sich der Kommentartext zusammensetzt, sind nicht erforderlich, erleichtern dem menschlichen Leser jedoch die Sicht auf den Umfang des Kommentars. In einem einfachen Programm mögen umfangreiche Kommentare albern erscheinen, da die Wirkung des Programms offensichtlich ist, aber sie sind äußerst wichtig, um den Entwurf größerer, komplexerer Programme zu dokumentieren. Der zweite Teil des Programms ist die Zeile:

import stanford.karel.*;

Diese Zeile fordert die Einbeziehung aller Definitionen aus dem stanford.karel Bibliothek. Diese Bibliothek enthält die grundlegenden Definitionen, die zum Schreiben von Karel-Programmen erforderlich sind, z. B. die Definitionen der Standardoperationen move() und pickBeeper() . Da Sie immer Zugriff auf diese Vorgänge benötigen, enthält jedes Karel-Programm, das Sie schreiben, diesen Importbefehl, bevor Sie das eigentliche Programm schreiben.

Der letzte Teil des Karel-Programms besteht aus der folgenden Programmdefinition:

public class ErsterKarel extends Karel {
   public void run() {
      move();
      pickBeeper();
      move();
   }
}

Um diese Definition zu verstehen, ist es hilfreich, die Struktur genauer zu betrachten. Die Definition des Programms ErsterKarel besteht aus der Zeile, die mit beginnt public class und umfasst alles zwischen der geschweiften Klammer am Ende dieser Zeile und der entsprechenden schließenden Klammer in der letzten Zeile des Programms. Die einzelne Zeile, die die neue Klasse einführt, heißt Header der Definition; der Code zwischen den Klammern heißt Karosserie .

Bei der Programmierung ist es oft sehr nützlich, sich eine bestimmte Definition und ihren Körper als trennbare Ideen vorzustellen. In diesem Beispiel hat die Definition von ErsterKarel folgende Form:

public class ErsterKarel extends Karel {
Hauptteil der Programmdefinition
}

In der Kopfzeile oben erfahren Sie einiges über das Programm ErsterKarel, noch bevor Sie nachgesehen haben, was der Körper enthält. Der Satz public class Startet die Definition eines Programms. Der Satz extends Karel wird verwendet, um dies anzuzeigen ErsterKarel ist ein Karel-Programm.

Betrachten wir nun den Hauptteil des Programms ErsterKarel. Dieser Körper besteht aus den folgenden Zeilen:

   public void run() {
      move();
      pickBeeper();
      move();
   }

Diese Linien repräsentieren die Definition eines neuen Methode Gibt die Reihenfolge der Schritte an, die zum Antworten auf einen Befehl erforderlich sind. Wie beim ErstenKarel-Programm selbst besteht die Methodendefinition aus zwei Teilen, die getrennt betrachtet werden können: Die erste Zeile bildet den Methodenkopf und der Code zwischen den geschweiften Klammern ist der Methodenkörper. Wenn Sie den Body vorerst ignorieren, sieht die Methodendefinition folgendermaßen aus:

   public void run() {
Hauptteil der Methodendefinition
   }

Die ersten beiden Wörter im Methodenkopf public und void , sind Teil von Javas syntaktischer Struktur, und Sie sollten sich frei fühlen, sie an dieser Stelle zu ignorieren. Das nächste Wort in der Kopfzeile gibt den Namen der neuen Methode an, die in diesem Fall die Methode ist run . Das Definieren einer Methode bedeutet, dass Karel nun auf einen neuen Befehl mit diesem Namen antworten kann. Das run Befehl spielt eine besondere Rolle in einem Karel-Programm. Wenn Sie ein Karel-Programm starten, erstellt es eine neue Karel-Instanz, fügt diese Karel zu einer von Ihnen angegebenen Welt hinzu und gibt dann den Befehl run . Die Auswirkung des run das Programm wird durch den Hauptteil der run Methode definiert, bei der es sich um eine Folge von Befehlen handelt, die der Roboter in der angegebenen Reihenfolge ausführt. Der Body der run Methode für das ErsteKarel-Programm lautet beispielsweise:

   move();
   pickBeeper();
   move();

Wenn also der Ausgangszustand der Welt mit dem in Kapitel 1 angegebenen Beispiel beeper , nimmt Karel zuerst move s vorwärts in die Ecke mit dem beeper , dann beeper und schließlich move s vorwärts in die Ecke kurz vor der Wand, wie in gezeigt das folgende Vorher-Nachher-Diagramm:

Vor:
Nach dem:

Ein interessanteres Problem lösen

Das oben definierte ErsterKarel-Programm macht noch nicht viel. Versuchen wir es etwas interessanter zu machen. Angenommen, das Ziel ist nicht, Karel dazu zu move die beeper beeper sondern die beeper von ihrer ursprünglichen Position in der 2. Spalte und in der 1. Reihe bis zur Mitte eines Simses. Ihre nächste Aufgabe ist es daher, ein neues Karel-Programm zu definieren, das die in diesem Diagramm dargestellte Aufgabe erfüllt:

Vor:
Nach dem:

Die ersten drei Befehle in dem neuen Programm-Die, die move vorwärts, die Abholung beeper und dann move bis zu dem Sims-sind die gleichen wie zuvor:

   move();
   pickBeeper();
   move();

Von hier aus müssen Sie nach links abbiegen, um den Sims zu besteigen. Diese Operation ist einfach, da Karel einen Befehl biegenSieLinksAb in seinem Standardrepertoire hat. Durch Ausführen des Befehls biegenSieLinksAb am Ende der vorherigen Befehlssequenz wird Karel an der Ecke der ersten Zeile und der dritten Spalte nach Norden ausgerichtet. Wenn Karel dann einen move Befehl ausführt, wird er move Norden, um die folgende Position zu erreichen:

Von hier aus müssen Sie Karel als Nächstes dazu bringen, nach rechts abzubiegen, damit er wieder nach Osten zeigt. Während dieser Vorgang konzeptionell genauso einfach ist wie das Abbiegen von Karel nach links, gibt es ein kleines Problem: Karels Sprache enthält a turnLeft Befehl, aber nein turnRight Befehl. Es ist, als hätten Sie das Economy-Modell gekauft und nun festgestellt, dass einige wichtige Funktionen fehlen.

An diesem Punkt haben Sie Ihre erste Gelegenheit, wie ein Programmierer zu denken. Sie haben einen Befehlssatz, aber nicht genau den, den Sie benötigen. Was kannst du tun? Können Sie die Wirkung eines Befehls biegenSieRechtsAb nur mit den von Ihnen bereitgestellten Funktionen erzielen? Die Antwort lautet natürlich ja. Sie können den Effekt des Rechts Abbiegens erzielen, indem Sie dreimal nach links abbiegen. Nach drei Linkskurven zeigt Karel in die gewünschte Richtung. Von hier aus müssen Sie Karel move auf move programmieren, bis zur Mitte des Simses, die beeper und dann move vorwärts bis zur Endposition. Hier ist eine vollständige Implementierung von a Verstärken Programm, das die gesamte Aufgabe erfüllt:


Nächstes Kapitel