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.und 3.3.1 (call by value vs. call by referencezu den Variablen\\ +  - Betrachte die Programme von oben 
-Folgende Fragen sollten beantwortet werden können: \\ +    - Welche Klassen bzwObjekte 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 gutErklä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-ObjekteDu 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 hinzud.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 Programmso dass man ein Auto mit den Pfeiltasten steuern kann. 
 +    * Versuche das Programm zu ändernindem 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ärewie sie im gegebenen Programm implementiert wurde+def drawBackground(): 
-  Was bedeuten die Begriffen **overriding (überschreiben)** und **overloading (überladen)** in der Objektorientierten ProgrammierungWird 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