Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| ef:objektorientierte_programmierung [2024/10/01 13:17] – lehmannr | ef:objektorientierte_programmierung [2024/10/08 15:11] (aktuell) – lehmannr | ||
|---|---|---|---|
| Zeile 139: | Zeile 139: | ||
| <WRAP nicebox green> | <WRAP nicebox green> | ||
| **Auftrag 1** | **Auftrag 1** | ||
| - | - Betrachte | + | - Betrachte |
| - Welche Klassen bzw. Objekte wurden definiert/ | - Welche Klassen bzw. Objekte wurden definiert/ | ||
| - Gibt es Klassenvariablen und Klassenmethoden? | - Gibt es Klassenvariablen und Klassenmethoden? | ||
| - Gibt es Instanzvariablen und Instanzmethoden? | - Gibt es Instanzvariablen und Instanzmethoden? | ||
| - | - Warum wurde wohl die y-Position als Klassenvariable definiert? | + | - Warum wurde wohl die y-Position |
| - Warum wurden wohl '' | - Warum wurden wohl '' | ||
| - | - Erkläre die Vererbung | + | - Erkläre die Vererbung |
| - | - Erkläre am konkreten Programm die Methode '' | + | - Erkläre am konkreten Programm |
| - Wozu ist Datenkapselung gut? Erkläre, wie sie im gegebenen Programm implementiert wurde. | - Wozu ist Datenkapselung gut? Erkläre, wie sie im gegebenen Programm implementiert wurde. | ||
| - | - Was bedeuten die Begriffen **overriding (überschreiben)** und **overloading (überladen)** in der Objektorientierten Programmierung. Wird eines dieser Konzepte | + | - Was bedeuten die Begriffen **overriding (überschreiben)** und **overloading (überladen)** in der Objektorientierten Programmierung. Wird eines dieser Konzepte |
| </ | </ | ||
| Zeile 157: | Zeile 157: | ||
| * Betrachte das Car-Beispiel und vesuche es zu verstehen. | * Betrachte das Car-Beispiel und vesuche es zu verstehen. | ||
| * Erweitere das Car-Beispiel. | * Erweitere das Car-Beispiel. | ||
| + | * Füge ein Element hinzu, so dass erkennbar ist, wo vorne/ | ||
| + | * Ändere das Programm, so dass man ein Auto mit den Pfeiltasten steuern kann. | ||
| + | * Versuche das Programm zu ändern, indem du eine Vaterklasse " | ||
| + | * Verwende das Prinzip " | ||
| </ | </ | ||
| + | === 2.3 Ein Processing-Beispiel: | ||
| + | |||
| + | <sxh python> | ||
| + | |||
| + | def setup(): | ||
| + | global car1 | ||
| + | size(500, | ||
| + | background(255) # Hintergrundfarbe (weiss) | ||
| + | | ||
| + | car1 = Car(200, | ||
| + | # car2 = Car(20,100, 0, [250, | ||
| + | car1.drawCar() | ||
| + | # | ||
| + | |||
| + | def drawBackground(): | ||
| + | background(255) # Hintergrundfarbe (weiss) | ||
| + | stroke(200) # Linienfarbe (grau) | ||
| + | for i in range(0, | ||
| + | line(0, | ||
| + | line(i, | ||
| + | |||
| + | def draw(): | ||
| + | clear() | ||
| + | drawBackground() | ||
| + | car1.drive(4) | ||
| + | car1.drawCar() | ||
| + | |||
| + | |||
| + | class Car(object): | ||
| + | def __init__(self, | ||
| + | self.x = xpos | ||
| + | self.y = ypos | ||
| + | self.dir = radians(direction) | ||
| + | self.col = color1 # list of RGB-Values | ||
| + | self.w = car_width | ||
| + | self.l = car_length | ||
| + | | ||
| + | def drawCar(self): | ||
| + | v1 = PVector.fromAngle(self.dir).div(2) | ||
| + | v2 = v1.copy() | ||
| + | v2.rotate(3.14159265/ | ||
| + | vm = PVector(self.x, | ||
| + | fill(self.col[0], | ||
| + | beginShape() | ||
| + | vertex(vm.x-self.l*v1.x-self.w*v2.x, | ||
| + | vertex(vm.x-self.l*v1.x+self.w*v2.x, | ||
| + | vertex(vm.x+self.l*v1.x+self.w*v2.x, | ||
| + | vertex(vm.x+self.l*v1.x-self.w*v2.x, | ||
| + | endShape() | ||
| + | |||
| + | def drive(self, dist): | ||
| + | v1 = PVector.fromAngle(self.dir)*dist | ||
| + | self.x += v1.x | ||
| + | self.y += v1.y | ||
| + | | ||
| + | def turn(self, angle): | ||
| + | self.dir += radians(angle) | ||
| + | </ | ||
| [[https:// | [[https:// | ||
| [[https:// | [[https:// | ||