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 12:56] lehmannref:objektorientierte_programmierung [2024/10/08 15:11] (aktuell) lehmannr
Zeile 39: Zeile 39:
  
 ==== 2. Umsetzung in Python ==== ==== 2. Umsetzung in Python ====
 +=== 2.1 Eine Klasse Auto ===
 <sxh python> <sxh python>
 class Auto(): class Auto():
Zeile 78: Zeile 79:
 </sxh> </sxh>
  
-<WRAP round todo 80%> +=== 2.2 Eine Klasse Haus in Minecraft mit einer Elternklsse 'Objekt'. Die Position wird vererbt ===
-**Auftrag** +
-  - Definiere in Minecraft eine Klasse ''Haus'' und erstelle dann einige Haus-Objekte. Du kannst die Objektvariablen und Methoden frei wählen (z.B. xPos, yPos, zPos, breite, hoehe, baue(), loesche()) +
-  - Füge bei deinem Haus Datenkapselung hinzu, d.h. schütze die Instanzvariablen vom Zugriff von Aussen und füge Getter- und Setter-Methoden hinzu.  +
-</WRAP> +
- +
-==== Eine Haus-Klasse mit einer Elternklasse 'Objekt', von welcher sie die Position erbt ====+
  
 <sxh python> <sxh python>
Zeile 142: Zeile 137:
 </sxh> </sxh>
  
-<WRAP round todo 80%+<WRAP nicebox green
-**Auftrag** +**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>
 +
 +
 +<WRAP nicebox green>
 +**Auftrag 2**\\
 +Installiere die Umgebung processing.org - ich empfehle hier die ältere Version 3.5.4 herunterzuladen: [[https://processing.org/releases]] und füge rechts oben den Modus "Python für Processing 3" hinzu.\\
 +  * Betrachte das Car-Beispiel und vesuche es zu verstehen.
 +  * 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>
 +
 +=== 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.1727780162.txt.gz
  • Zuletzt geändert: 2024/10/01 12:56
  • von lehmannr