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:11] – lehmannr | ef:objektorientierte_programmierung [2024/10/08 15:11] (aktuell) – lehmannr | ||
|---|---|---|---|
| Zeile 138: | Zeile 138: | ||
| <WRAP nicebox green> | <WRAP nicebox green> | ||
| - | **Auftrag 1**\\ | + | **Auftrag 1** |
| - | Installiere | + | - Betrachte |
| - | Folgende Fragen sollten beantwortet werden können: \\ | + | - Welche Klassen bzw. Objekte wurden definiert/ |
| - | * Was ist der Unterschied zwischen statischer und dynamischer Typisierung? | + | - Gibt es Klassenvariablen |
| - | * Welche Vor | + | - Gibt es Instanzvariablen und Instanzmethoden? |
| + | - Warum wurde wohl die y-Position bei 2.2 als Klassenvariable definiert? | ||
| + | - Warum wurden wohl '' | ||
| + | - Erkläre die Vererbung am Beispiel Haus. | ||
| + | - Erkläre am konkreten Programm 2.1 die Methode '' | ||
| + | - Wozu ist Datenkapselung gut? Erkläre, wie sie im gegebenen Programm implementiert wurde. | ||
| + | | ||
| </ | </ | ||
| - | < | + | < |
| - | **Auftrag** | + | **Auftrag |
| - | - Definiere in Minecraft eine Klasse '' | + | Installiere die Umgebung processing.org - ich empfehle hier die ältere Version 3.5.4 herunterzuladen: |
| - | - Füge bei deinem Haus Datenkapselung hinzu, d.h. schütze | + | |
| + | * 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> | ||
| - | <WRAP round todo 80%> | + | def setup(): |
| - | **Auftrag** | + | |
| - | - Betrachte das Programm von oben | + | |
| - | | + | |
| - | | + | |
| - | | + | car1 = Car(200,200, 60, 100, 45, [250, |
| - | | + | # car2 = Car(20,100, 0, [250, |
| - | | + | |
| - | | + | # |
| - | | + | |
| - | - Wozu ist Datenkapselung gut? Erkläre, wie sie im gegebenen Programm implementiert wurde. | + | def drawBackground(): |
| - | - Was bedeuten die Begriffen | + | |
| - | </WRAP> | + | |
| + | for i in range(0,500,20): | ||
| + | line(0, | ||
| + | line(i, | ||
| + | |||
| + | def draw(): | ||
| + | | ||
| + | drawBackground() | ||
| + | car1.drive(4) | ||
| + | | ||
| + | |||
| + | |||
| + | 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,vm.y-self.l*v1.y-self.w*v2.y) | ||
| + | | ||
| + | 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) | ||
| + | </sxh> | ||
| [[https:// | [[https:// | ||
| [[https:// | [[https:// | ||