ef:objektorientierte_programmierung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ef:objektorientierte_programmierung [2024/10/01 13:17] lehmannref:objektorientierte_programmierung [2024/10/08 15:11] (aktuell) lehmannr
Zeile 139: Zeile 139:
 <WRAP nicebox green> <WRAP nicebox green>
 **Auftrag 1** **Auftrag 1**
-  - Betrachte das Programm von oben+  - Betrachte die Programme von oben
     - Welche Klassen bzw. Objekte wurden definiert/erstellt?     - Welche Klassen bzw. Objekte wurden definiert/erstellt?
     - Gibt es Klassenvariablen und Klassenmethoden? Wenn "ja", welche?     - Gibt es Klassenvariablen und Klassenmethoden? Wenn "ja", welche?
     - Gibt es Instanzvariablen und Instanzmethoden? Welche?     - Gibt es Instanzvariablen und Instanzmethoden? Welche?
-    - Warum wurde wohl die y-Position als Klassenvariable definiert?+    - Warum wurde wohl die y-Position bei 2.2 als Klassenvariable definiert?
     - Warum wurden wohl ''xPos'' und ''yPos'' nicht privat definiert (''__xPos'', ''__yPos'')?     - Warum wurden wohl ''xPos'' und ''yPos'' nicht privat definiert (''__xPos'', ''__yPos'')?
-    - Erkläre die Vererbung an diesem Beispiel.  +    - Erkläre die Vererbung am Beispiel Haus.  
-    - Erkläre am konkreten Programm die Methode ''super()''.+    - Erkläre am konkreten Programm 2.1 die Methode ''super()''.
     - 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 in der Beispielklasse verwendet? +  - Was bedeuten die Begriffen **overriding (überschreiben)** und **overloading (überladen)** in der Objektorientierten Programmierung. Wird eines dieser Konzepte hier verwendet? 
 </WRAP> </WRAP>
  
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/hinten ist (z.B. Lichter)
 +    * Ändere das Programm, so dass man ein Auto mit den Pfeiltasten steuern kann.
 +    * Versuche das Programm zu ändern, indem du eine Vaterklasse "Fahrzeug" definierst. Überlege dir, welche Eigenschaften und Methoden in die Klasse Fahrzeug und welche in die Klasse Auto gehören. Definiere dann zwei Unterklassen "Car" und "Bicycle", welche beide von Fahrzeug erben. 
 +    * Verwende das Prinzip "overriding" oder "overloading" in deinem Beispiel Car+Bicycle
 </WRAP> </WRAP>
  
 +=== 2.3 Ein Processing-Beispiel: Autoklasse===
 +
 +<sxh python>
 +
 +def setup():
 +    global car1
 +    size(500,500)
 +    background(255) # Hintergrundfarbe (weiss)
 +    
 +    car1 = Car(200,200, 60, 100, 45, [250,0,0])
 +#   car2 = Car(20,100, 0, [250,200,0])
 +    car1.drawCar()
 +#   car2.drawCar() 
 +
 +def drawBackground():
 +    background(255) # Hintergrundfarbe (weiss)
 +    stroke(200) # Linienfarbe (grau)
 +    for i in range(0,500,20):
 +        line(0,i,500,i)
 +        line(i,0,i,500)
 +
 +def draw():
 +    clear()
 +    drawBackground()
 +    car1.drive(4)
 +    car1.drawCar()
 +
 +
 +class Car(object):
 +    def __init__(self, xpos, ypos, car_width, car_length, direction, color1):
 +        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/2)
 +        vm = PVector(self.x, self.y)
 +        fill(self.col[0],self.col[1],self.col[2])
 +        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,vm.y-self.l*v1.y+self.w*v2.y)
 +        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,vm.y+self.l*v1.y-self.w*v2.y)
 +        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://www.python-kurs.eu/python_OOP.php| Objektorientierte Programmierung auf python-kurs.eu]] [[https://www.python-kurs.eu/python_OOP.php| Objektorientierte Programmierung auf python-kurs.eu]]
  
 [[https://www.youtube.com/watch?v=JeznW_7DlB0|OOP Tech with Tim]] [[https://www.youtube.com/watch?v=JeznW_7DlB0|OOP Tech with Tim]]
  • ef/objektorientierte_programmierung.1727781449.txt.gz
  • Zuletzt geändert: 2024/10/01 13:17
  • von lehmannr