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:11] – lehmannref:objektorientierte_programmierung [2024/10/08 15:11] (aktuell) – lehmannr
Zeile 138: Zeile 138:
  
 <WRAP nicebox green> <WRAP nicebox green>
-**Auftrag 1**\\ +**Auftrag 1** 
-Installiere die Umgebung processing.org und füge Studiere im Wiki das Kapitel 3.1 und 3.3.1 (call by value vs. call by reference) zu den Variablen\\ +  - Betrachte die Programme von oben 
-Folgende Fragen sollten beantwortet werden können: \\ +    - Welche Klassen bzw. Objekte wurden definiert/erstellt? 
-  * Was ist der Unterschied zwischen statischer und dynamischer Typisierung? +    - Gibt es Klassenvariablen und Klassenmethoden? Wenn "ja", welche? 
-  * Welche Vor+    - Gibt es Instanzvariablen und Instanzmethoden? Welche? 
 +    - Warum wurde wohl die y-Position bei 2.2 als Klassenvariable definiert? 
 +    - Warum wurden wohl ''xPos'' und ''yPos'' nicht privat definiert (''__xPos'', ''__yPos'')? 
 +    - Erkläre die Vererbung am Beispiel Haus.  
 +    - Erkläre am konkreten Programm 2.1 die Methode ''super()''. 
 +    - 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 hier verwendet? 
 </WRAP> </WRAP>
  
  
-<WRAP round todo 80%> +<WRAP nicebox green> 
-**Auftrag** +**Auftrag 2**\\ 
-  - 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()) +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.\\ 
-  - 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. +  * 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> </WRAP>
  
 +=== 2.3 Ein Processing-Beispiel: Autoklasse===
  
 +<sxh python>
  
-<WRAP round todo 80%> +def setup(): 
-**Auftrag** +    global car1 
-  - Betrachte das Programm von oben +    size(500,500) 
-    - Welche Klassen bzw. Objekte wurden definiert/erstellt? +    background(255) # Hintergrundfarbe (weiss) 
-    - Gibt es Klassenvariablen und Klassenmethoden? Wenn "ja", welche? +     
-    - Gibt es Instanzvariablen und Instanzmethoden? Welche? +    car1 = Car(200,200, 60, 100, 45, [250,0,0]) 
-    - Warum wurde wohl die y-Position als Klassenvariable definiert? +#   car2 = Car(20,100, 0, [250,200,0]) 
-    - Warum wurden wohl ''xPos'' und ''yPos'' nicht privat definiert (''__xPos'', ''__yPos'')? +    car1.drawCar() 
-    - Erkläre die Vererbung an diesem Beispiel.  +#   car2.drawCar()  
-    - Erkläre am konkreten Programm die Methode ''super()''. + 
-    - Wozu ist Datenkapselung gut? Erkläre, wie sie im gegebenen Programm implementiert wurde. +def drawBackground(): 
-  - Was bedeuten die Begriffen **overriding (überschreiben)** und **overloading (überladen)** in der Objektorientierten Programmierung. Wird eines dieser Konzepte in der Beispielklasse verwendet?  +    background(255) # Hintergrundfarbe (weiss) 
-</WRAP>+    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.1727781066.txt.gz
  • Zuletzt geändert: 2024/10/01 13:11
  • von lehmannr