Edison Robotik: Lektion 10
Arbeitsblatt 10.1 - Vampirroboter
In dieser herausforderungsbasierten Lektion
wendest du alles an, was du bisher gelernt hast, um ein Programm
mit vielen interessanten Verhaltensweisen zu erstellen, das dein
Edison-Roboter ausführen kann, während er sich in einen
Vampir-Roboter verwandelt.
Um deinen Edison in einen
Vampirroboter zu verwandeln, verwenden wir objektorientierten
Code.
Objekte und Klassen in Python
Python ist eine objektorientierte Programmiersprache.
Objektorientierter Code ist eine leistungsstarke Methode zur
Reduzierung der Komplexität innerhalb eines Programms. Aus
diesem Grund verwenden viele Programmierer in großen,
komplizierten Programmen objektorientierten Code.
In einer
objektorientierten Programmiersprache können Programme anstelle
von eigenständigen Variablen und Funktionen auch "Objekte"
verwenden.
Ein Objekt ist eine Sammlung von Funktionen und
Variablen, die miteinander in Beziehung stehen. Objekte werden
durch eine "Klasse" definiert.
Eine Klasse (auch
Klassendefinition genannt) ist wie eine Blaupause, die
beschreibt, wie ein Objekt erstellt wird.
In einem Programm
können Sie viele verschiedene Objekte aus einer Klasse erstellen
und diese Objekte dann einzeln in Ihrem Programm für
verschiedene Zwecke bearbeiten. Alle aus der Klasse erstellten
Objekte haben beim Erstellen den gleichen „Entwurf“, aber Sie
können dann verschiedene Aktionen für verschiedene Objekte in
Ihrem Programm ausführen.
Beispiel:
Klasse "Shape"
Das häufigste Beispiel für eine Klasse
ist eine Form.
Alle Formen, wie Quadrate, Dreiecke und
Sechsecke, haben gemeinsame Attribute. Beispielsweise haben alle
Formen eine bestimmte Anzahl von Seiten und eine bestimmte
Anzahl von Scheitelpunkten. Es gibt auch allgemeine Dinge, die
Sie mit Formen tun, z. B. den Bereich oder den Umfang der Form
zu finden.
Mit diesen allgemeinen Elementen können Sie eine
Klasse für Shape in Python erstellen. Durch das Erstellen der
Klasse erstellen wir einen Entwurf, der nur die bekannten,
gemeinsamen Elemente enthält. Wir werden dann in der Lage sein,
viele verschiedene Objekte aus dieser Klasse zu erstellen, wie
z. B. "Quadrat" und "Dreieck".
Die Syntax zum Definieren
einer Klasse in Python lautet "class" und anschließend der Name,
den Sie dieser Klasse geben möchten, gefolgt von einem
Doppelpunkt (:). Beispielsweise:
classl
shape
Alles, was du als eingerückten Code in die
folgenden Zeilen einfügst, befindet sich in der Klassendefinition.
Schaue dir das folgende Beispiel einer Klasse für Shape in Python
an:
Diese Klasse
gibt an, dass die Blaupause für jedes Objekt, das aus der Klasse Shape
erstellt wurde, zwei Eingabeparameter (x und y) hat. Die Klasse
definiert auch drei Funktionen: "init", "area" und "perimeter".
Die __init__ function und 'self'
Jede Klasse muss immer eine __init__function haben.
Die
__init__function ist der Startcode. Der Begriff "Init" steht für
"Initialisierung".
Wenn das Programm ein Objekt erstellen muss,
wechselt das Programm in die Klassendefinition und führt die
__init__function aus. Diese Funktion enthält Code, der das Objekt
einrichtet. Dies bedeutet normalerweise, dass die Startwerte der
Objektvariablen festgelegt werden.
Funktionen in einer Klasse müssen
immer "self" als ersten Parameter haben. Dies weist das erstellte Objekt
an, seine eigenen Funktionen und Variablen zu verwenden.
Beispiel: Objekt "Rechteck"
Sobald
wir eine Klassendefinition erstellt haben, können wir damit Objekte in
unserem Programm erstellen.
Angenommen, wir möchten ein Objekt
"Rechteck" in der Klasse "Shape" erstellen.
Wenn du in Python ein
Objekt aus einer Klasse erstellen möchtest, verwendest du die Syntax
object_name = class_name (parameters).
Sieh dir das Beispiel zum
Erstellen eines Objekts "Rechteck" an:
rectangle =
Shape(100,45)
In einem Programm ruft dies die
__init__function auf, die ausgeführt wird und unter Verwendung des
Bauplans aus der Formklassendefinition ein Objekt-Rechteck erstellt. Das
Objekt "Rechteck" ist so eingestellt, dass 100 der "x" -Eingabewert und
45 der "y" -Eingabewert ist. (du musst nicht "self" eingeben - dies ist
nur eine Referenz, damit das Programm weiß, wo es suchen muss.)
Sobald das Programm das Objekt erstellt hat, kann es auf die von der
Klasse definierten Funktionen des Objekts zugreifen.
Um eine dieser Funktionen in Python aufzurufen,
verwendest du die Syntax object_name.function_name (parameters).Zum
Beispiel:
rechtangle.area()
In diesem Beispiel gibt die
Funktion rectangle.area () den Wert des Eingabeparameters "x" des
Rechteckobjekts multipliziert mit seinem Eingabeparameter "y" zurück.
Eine Möglichkeit, diese spezielle Funktion zu verwenden, besteht darin,
diesen Wert in einer Variablen in Ihrem Programm zu speichern.Zum
Beispie:l
AreaOfRectangle = rectangle.area()
Einrichten einer Klasse in EdPy
In
EdPy können wir mit einer Klasse verschiedene Objekte in einem Programm
für Edison erstellen..
Hier ist eine einfache Klasse für einen
Vampir-Roboter mit einer __init__function und zwei weiteren Funktionen:
eine für das Tagesverhalten des Roboters und eine für das
Nachtverhalten. Die Vampire-Klasse enthält auch eine Variable für das
Alter des Roboters.
Mit dieser
Klassendefinition kannst du verschiedene Vampire-Objekte erstellen.
Du kannst diese Vampire-Objekte dann in einem Programm für deinen
Edison-Roboter verwenden.
Schreibe den folgenden Code und
überprüfe, ob du verstehst, was im Programm geschieht:
Du bist dran:
Aufgabe 1:
Entwerfe das Verhalten der Vampire
Jetzt ist es an der Zeit, weitere
interessante Verhaltensweisen für deinen Vampir-Roboter zu entwickeln.
Sei kreativ! Du kannst deien Roboter veranlassen, auf Knopfdruck,
Klatschen oder Hindernisse zu reagieren. Erwäge die Verwendung der
Ereignisbehandlung in deinem Programm. Du kannst mehrere Vampir-Objekte
mit jedem gewünschten Alter herstellen. Du kannst das Basisprogramm auch
so ändern, dass deine Objekte mehrere Eingabeparameter haben.
Überlege dir, was du in deinem Programm aufnehmen möchtest, und arbeite
dann deine Programmdesign durch, indem du zuerst Flussdiagramme und dann
einen Pseudocode erstellst, der auf den Flussdiagrammen basiert..
Aufgabe 1: Flussdiagramme
Zeichne Flussdiagramme für das Tages- und
Nachtverhalten, entweder von Hand oder mit einem Programm wie Google
Slides oder einem ähnlichen Zeichenprogramm. Füge hier deine
Flussdiagramme ein. Verwende bei Bedarf zusätzliches Papier.
Aufgabe 2: Pseudocode
Übersetze deine Flussdiagramme in
Pseudocode. Trage hier deinen Pseudocode ein. Verwende bei Bedarf
zusätzliches Papier..
Aufgabe 2: Schreibe dein Program
Übersetze deinen Pseudocode mit der EdPy-App in Python-Code. Lade es auf
deinen Edison-Roboter herunter und führe dein Programm aus, um es zu
testen..
Aufgabe 3: Problemlösung
In der Programmierung ist es
sehr verbreitet, dass nicht alles so funktioniert, wie du es dir beim
ersten Mal vorstellst. Keine Schweißausbrüche! Denke daran: Thomas
Edison ist 10.000 Mal gescheitert, bevor er die Glühbirne erfolgreich
erfunden hat. Also, versuche es weiter!
Wir lernen aus den Problemen,
auf die wir stoßen. Daher ist es eine gute Angewohnheit, sich Zeit zu
nehmen, um darüber nachzudenken, was schief gelaufen ist. Beschreibe
alle Probleme, die du hattest, welche Ideen du hattest, um sie zu
beheben, und die Lösungen, die du in späteren Versuchen gefunden haben.
Verwendebei Bedarf zusätzliches Papier..
Aufgabe 4: Beschreibe einige der
Programmierstrukturen in deinem Programm
Wähle drei
verschiedene Programmierstrukturen, die du in deinem Programm verwendet
haben. Beschreibe unten, was jede tut.
1. Name der
Programmierstruktur:
_________________________________________________________
Was tut
sie?
_
2. Name der Programmierstruktur:
_________________________________________________________
Was tut
sie?
_
3. Name der Programmierstruktur:
_________________________________________________________
Was tut
sie?
Aufgabe 5: Präsentiere dein Programm
Demonstriere
deinen Vampir-Roboter deinem Partner, deiner Gruppe oder deiner Klasse.
Spreche über deine Ideen, das Programm, die aufgetretenen Probleme und
wie du sie gelöst hast.