TigerJython4Kids | Robotique
Robotik
|
16. OBJEKTORIENTIERTE PROGRAMMIERUNG |
DU LERNST HIER... |
|
MUSTERBEISPIELE |
Die Klasse Snake ist bereits im Modul snake definiert und steht dir mit from snake import Snake zur Verfügung. Du erzeugst eine einzelne Schlange unter Verwendung der speziellen Methode Snake(), die ausnahmsweise grossgeschrieben ist (entspricht dem Klassennamen). Man nennt sie Konstruktor der Klasse, weil man bei ihrem Aufruf ein Objekt (auch Instanz genannt) erzeugt (konstruiert). Der Konstruktor hat genau die gleichen optionalen Parameter wie makeSnake(), du kannst der Schlage also damit ihre "Anfangseigenschaften" geben, beispielsweise roxy = Snake() kitty = Snake(heading = 90, pos = (1, 6)) roby = Snake(headColor = (255, 255, 0), tailColor = (30, 30, 0))
Programm: # Snake16.py from oxosnake import * pythy1 = Snake(headColor = (255, 0, 0), tailColor = (120, 0, 0), pos = (0, 5), size = 3, speed = 90) pythy2 = Snake(headColor = (255, 255, 0), tailColor = (120, 120, 0), pos = (2, 1), heading = 90, size = 3, speed = 90) pythy3 = Snake(headColor = (0, 255, 0), tailColor = (0, 120, 0), pos = (6, 3), heading = 180, size = 3, speed = 90) pythy4 = Snake(headColor = (0, 0, 255), tailColor = (0, 0, 120), pos = (4, 7), heading = 270, size = 3, speed = 90) def step(snake): snake.forward(2) snake.right(45) enableRepaint(False) while True: step(pythy1) step(pythy2) step(pythy3) step(pythy4) repaint() Schalte durch Entfernen (Auskommentieren) der Zeile enableRepaint(False) das automatische Rendering wieder ein und gebe eine Erklärung für das Programmverhalten.
Klassenableitung
Programm: # Snake16a.py from oxosnake import * class PySnake(Snake): def __init__(self, color, position, direction): Snake.__init__(self, headColor = color, tailColor = reduceBrightness(color, 2), pos = position, size = 3, heading = direction, speed = 90) def step(self): self.forward(2) self.right(45) pythy1 = PySnake(RED, (0, 5), 0) pythy2 = PySnake(YELLOW, (2, 1), 90) pythy3 = PySnake(GREEN, (6, 3), 180) pythy4 = PySnake(BLUE, (4, 7), 270) enableRepaint(False) while True: pythy1.step() pythy2.step() pythy3.step() pythy4.step() repaint() Das Programm ist durch die Definition einer eigenen Klasse nicht nur eleganter geworden, sondern gibt dir die Möglichkeit, das neue Objekt PySnake wie ein durch das System vordefiniertes Objekt zu verwenden. Dazu fügst du die Klassendefinition in eine neue Datei mit dem Namen pysnake.py ein und lädst diese mit der Option Modul herunterladen auf die Oxocard. Programm: from oxosnake import * class PySnake(Snake): def __init__(self, color, position, direction): Snake.__init__(self, headColor = color, tailColor = reduceBrightness(color, 10), pos = position, size = 3, heading = direction, speed = 90) def step(self): self.forward(2) self.right(45) In irgendeinem Programm kannst du nun die neue PySnake verwenden, indem du das Modul pysnake importierst. Programm: from pysnake import * pythy1 = PySnake(RED, (0, 5), 0) pythy2 = PySnake(YELLOW, (2, 1), 90) pythy3 = PySnake(GREEN, (6, 3), 180) pythy4 = PySnake(BLUE, (4, 7), 270) enableRepaint(False) while True: pythy1.step() pythy2.step() pythy3.step() pythy4.step() repaint() Du hast jetzt dein erstes Bibliotheksmodul geschrieben und dabei eine weitere wichtige Strukturierungsmöglichkeit von Programmen kennen gelernt. |
MERKE DIR... |
Die OOP stellt dir ein Programmierkonzept zur Verfügung, mit dem du die Realität anschaulich und übersichtlich modellieren kannst. Dabei werden Eigenschaften und Fähigkeiten als Instanzvariable und Methoden in der Klassendefinition abgebildet. Man erzeugt ein Objekt einer Klasse durch Aufruf ihres Konstruktors und führt seine Methoden mit dem Punktoperator aus. Klassen können verändert und ergänzt werden, indem man sie ableitet. Es entsteht dadurch eine ähnliche Abhängigkeit wie beispielsweise bei der Klassifikation im Tierreich. |
ZUM SELBST LÖSEN |
|