![Page 1: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/1.jpg)
Benutzerdefinierte Typen I + II
![Page 2: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/2.jpg)
Seminare am 01.11
NTT -> Platon reserviert.
-> Neuer Raum: 6/II
![Page 3: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/3.jpg)
Zwischenprüfung - 26.11
![Page 4: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/4.jpg)
Teil I
![Page 5: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/5.jpg)
● Benutzerdefinierte Typen
● Klassen/Objekte
● Erstellung/Verwendung von benutzerdefinierten Typen
OOP
![Page 6: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/6.jpg)
![Page 7: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/7.jpg)
Klassen und Objekte
Objektorientierte Programmierung (OOP) ist eine Methode zur Modularisierung von Programmen Die Basis von allem:
das Objekt (= Daten + Funktionalität)
![Page 8: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/8.jpg)
Objekte
● beschreiben einen Gegenstand, Person etc. aus der realen Welt
● haben Felder/Attribute (Eigenschaften), die das Aussehen des Objekts beschreiben
● haben Methoden, die die Attribute verändern
● sind Substantive in einem Text
![Page 9: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/9.jpg)
Beispiel
Schreibe eine Anwendung, welche das Spiel Hangman für die Konsole implementiert.
Es soll von einem Spieler beliebig oft spielbar sein. In jedem Schritt des Spiels soll die verbleibende Menge an Rateversuchen, sowie die bereits erratenen Buchstaben des Lösungswortes angezeigt werden.
![Page 10: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/10.jpg)
Programme
● es gibt kein globaler Zustand● der Zustand des Programms
ist durch die Zustände aller Objekte beschrieben
● Objekte kommunizieren miteinander
● Beispiel:○ Objekt B hat die Methode
magic ○ Objekt A ruft magic auf
(message passing)
A
B
C
D
magic ⦊
execute ⦊
do_it ⦊
![Page 11: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/11.jpg)
![Page 12: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/12.jpg)
just Code...while True: print (“””
1 - add 2 - mul
…“””
) opt = int(input(“select?”)) if opt == 1:
a = int (input(“a=”)) b = int (input(“b=”)) number1 = (a,b)
a = int (input(“a=”)) b = int (input(“b=”)) number2 = (a,b)
rez = number[1]+... if opt == 2:
a = int (input(“a=”)) b = int (input(“b=”)) number1 = (a,b)
a = int (input(“a=”)) b = int (input(“b=”)) number2 = (a,b)
rez = number[1]+...
![Page 13: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/13.jpg)
Funktionale Programmierung
def addition (r, total): return rational(r.a*total.b + total.a+r.b,r.b*total.b)
def multiplication(r, total): ...
def menu(): return “””
1 - add…“””
def main(): total = 0 while True: print (menu()) opt = int(input(“select?”)) ...
![Page 14: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/14.jpg)
Modulare Programmierung
def menu(): return “””
1 - add…“””
def main(): while True: print (menu()) opt = int(input(“select?”)) ...
def add (r1, r2): return rational(r1.a*r2.b + r2.a+r1.b,r1.b*r2.b)
def mult (r1,r2): return …
def to_string(r): return “%i/%i” %(r.a,r.b)
def addition (r, total): …
def multiplication(r, total): ...
start.py rationaloperationen.py
rechneroperationen.pyGUI (start.py)
Rechner (rechneroperationen.py)
Rational (rationaloperationen.py)
![Page 15: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/15.jpg)
Modulare Programmierung● Eine Anforderung wird in vielen kleinen
Aufgaben/Tasks zerlegt
● Jede kleine Aufgabe/Task ist in sich abgeschlossen
● Jede kleine Aufgabe/Task ist in einer Datei
abgelegt
![Page 16: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/16.jpg)
classes
![Page 17: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/17.jpg)
OOP
● abstrahiert Gegenstände der realen Welt
● beschreibt und verändert Objekte
● versucht Daten und Funktionen eines Objekts in einer Struktur zu kapseln.
○ Die Daten beschreiben das Objekt. ○ Funktionen verändern die Attributwerte eines
Objekts.
![Page 18: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/18.jpg)
Prinzipien der OOP
Abstraktion● Objekte der realen Welt werden nachgebildet
Datenkapselung
● das Objekt ist eine Black Box● In dieser Black Box wird mit Hilfe von Felder das
Objekt beschrieben● Funktionen verändern die Felder eines Objekts
![Page 19: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/19.jpg)
Beispiel
Ein Würfel Der Würfel ist rot -> Farbe Der Würfel hat eine Kantenlänge von 5 cm -> Länge Der Würfel kann gedreht werden. Der Würfel kann neu eingefärbt werden.
![Page 20: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/20.jpg)
Beispiel
Welche Eigenschaften hat jeder Würfel?● Farbe● Kantenlänge
Welche Methoden hat jeder Würfel?● Drehen● Einfärben● Zeichnen
![Page 21: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/21.jpg)
Beispiel
![Page 22: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/22.jpg)
Python
Everything is a object. In Python ist jedes Element ein Objekt.
Objekte:● können Felder und Funktionen haben● sind an einen bestimmten Datentyp gebunden● können an Funktionen übergeben werden● werden mit Hilfe von Klassen beschrieben● werden mit speziellen Methoden erzeugt und
initialisiert
![Page 23: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/23.jpg)
Beispiel
>>> l = [1,2]
>>> x = 1
>>> x.__add__(2) # x = 1 + 2
3
>>> l.__add__([2]) # l.append(2)
[1, 2, 2]
>>> l
[1, 2]
>>>
![Page 24: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/24.jpg)
Klassen
ein abstraktes Modell bzw. ein Bauplan für eine Reihe von ähnlichen Objekten
beschreiben Attribute (Eigenschaften) und Methoden (Verhaltensweisen) der Objekte.
![Page 25: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/25.jpg)
Klassen
Definition: wird mit dem reservierten Wort class eingeleitet, danach kommt der Name der neuen Klasse, ein Doppelpunkt und wieder ein compound statement (Einrückung!)
![Page 26: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/26.jpg)
UML Beschreibung● Unified Modelling Language zur Darstellung von Klassen● Der Name der Klasse steht am oberen Rand● Dem Namen folgen die Attribute der Klasse und darunter die
Methoden● In UML werden private Methoden und Attribute mit einem
Minuszeichen und öffentliche Attribute und Methoden mit einem Pluszeichen gekennzeichnet.
![Page 27: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/27.jpg)
Konstructor
Konstruktor: eine Methode, die beim Erzeugen eines Objekts dieser Klasse aufgerufen wird.
Jedes Objekt hat einen eigenen Namespace. Namen darin heißen Attribute des Objekts.
![Page 28: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/28.jpg)
Destruktor
Mit Hilfe von del RechteckBlau wird automatisch der dazugehörige Destruktor def __del__() aufgerufen
Die Methode wird implementiert, wenn zum Beispiel …
● Netzwerkverbindungen getrennt werden müssen● Dateien geschlossen werden müssen● bestimmte Fehler abgefangen werden
![Page 29: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/29.jpg)
Eine Instanz
class Student:def __init__(self, name):self.name = name
bob = Student(“bob”) (Name des Objekts) (Name der Klasse)● erweist auf ein bestimmtes Objekt einer
bestimmten Kategorie● ist ein Synonym für ein Objekt ● die Parameter sind im Konstruktor definiert
![Page 30: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/30.jpg)
Felder/Attribute
● beschreiben den Zustand eines Objekts - Gegenstand, Person etc
● Jedes Objekt einer Klasse hat die gleiche Attribute
● Jedes Objekt einer Klasse unterscheidet sich aber in mindestens einem Attributwert von allen anderen Objekten
![Page 31: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/31.jpg)
Felder/Attribute
self.n = an = a
![Page 32: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/32.jpg)
Self I
● ist ein Platzhalter für den Aufrufer der Methode
● beantwortet die Frage „Wer hat die Methode aufgerufen?“
● ist meist das erste Argument einer Methode
● beschreibt die Instanz, die die Methode aufgerufen hat.
![Page 33: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/33.jpg)
Methoden
● beschreiben das Verhalten eines Objekts● lesen oder verändern Attributwerte● beschreiben eine Schnittstelle nach außen● werden innerhalb der Klasse definiert● werden nur einmal für die Klasse im Speicher
angelegt● ergeben sich aus den Attributen und deren
Nutzung in einer Klasse
![Page 34: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/34.jpg)
MethodenDie Methode wird mit der Instanz immer durch ein Punkt Verbunden.
Falls die Methode nicht definiert ist, wird die Fehlermeldung „AttributeError“ ausgegeben.
![Page 35: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/35.jpg)
Beispiele...Autos und StudentsProblem Space
Solution Space
class Auto: def __init__(self, make): self.marke=marke def drive(self): print(“VROOOOOOM!”)...
...dacia = {“marke”:”dacia”}
dacia[“marke”] = “subaru”
drive(dacia)...
![Page 36: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/36.jpg)
Beispiel
class Auto:
def __init__(self):
self.kilometerstand = 0
def drive(self):
self.kilometerstand += 1
dacia = Auto()
lada = Auto()
dacia.drive()
dacia.drive()
lada.drive()
Zustand
Verhalten
Objekte
kilometerstand 2
dacia:
kilometerstand 1
lada:
![Page 37: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/37.jpg)
Self II
ist ein Platzhalter für den Aufrufer der Methode
class Auto:
def __init__(self, farbe):
self.kilometerstand = 0
self.farbe = farbe
def drive(self, km):
self.kilometerstand += km
dacia = Auto(“rot”)
lada = Auto(“blau”)
dacia.drive(10) drive(dacia, 10)
lada.drive(200) drive(lada, 200)
![Page 38: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/38.jpg)
Beispiel
● Implementiere eine Klasse Auto● Jedes Auto hat für Felder/Attribute:
○ Marke als String○ Modell als String○ Farbe als String○ Baujahr als Integer
● Implementiere eine Klasse Statistics● die Klasse soll für eine Reihe von Autos berechnen:
○ die Anzahl von Autos mit einer eingegebenen Farbe ○ das durchschnittliche Baujahr für alle Autos einer Marke
TestsSpezifikation
![Page 39: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/39.jpg)
Teil II
![Page 40: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/40.jpg)
neuer Raum:
sala Vatasianu (cladirea Echinox)
Vorlesung am 12.
![Page 41: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/41.jpg)
magic operator
def s (a,b):
return a+b
def p (a,b):
return a*b
def op (a,b,mop):
return mop(a,b)
print(op(1,2,s))
print(op(2,3,p))
![Page 42: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/42.jpg)
magic operator
def par (t):
return t%2 == 0
def filter (l, op):
ll = []
for el in l:
if op(el):
ll.append(el)
return ll
print(filter([1,2,3,4], par))
![Page 43: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/43.jpg)
● Lambda-Funktionen kommen aus der funktionalen Programmierung
● Mit Hilfe des lambda-Operators können anonyme Funktionen, d.h. Funktionen ohne Namen erzeugt werden
● lambda Argumentenliste: Ausdruck
s = lambda x, y : x + y
s(1,2) #3
Lambdas
![Page 44: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/44.jpg)
map
r = map(func, seq)
func ist eine Funktion und seq eine Sequenz (z.B. eine Liste). map wendet die Funktion func auf alle Elemente von seq an und schreibt die Ergebnisse in eine neue Liste.
a = [1,2,3]
b = [4,5,6]
list(map(lambda el: el*2, a)) #[2,4,6]
list(map(lambda ela,elb: ela+elb, a, b)) #[5,7,9]
![Page 45: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/45.jpg)
filter
filter(funktion, liste)
bietet eine elegante Möglichkeit diejenigen Elemente aus der Liste liste herauszufiltern, für die die Funktion funktion True liefert.
a = [1,2,3,4]
list(filter(lambda el:el%2 == 0, a)) #[2,4]
![Page 46: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/46.jpg)
reduce
r = reduce(func, seq)wendet die Funktion func fortlaufend auf eine Sequenz an und liefert einen einzelnen Wert zurück.Falls seq = [ s1, s2, s3, ... , sn ] ist, funktioniert der Aufruf reduce(func, seq ) wie folgt:
● zuerst wird func auf die beiden ersten Argumente s1 und s2 angewendet. Das Ergebnis ersetzt die beiden Elemente s1 und s2Die Liste sieht damit wie folgt aus: [ func(s1, s2), s3, ... , sn ]
● Im nächsten Schritt wird func auf func(s1, s2) und s3 angewendet.Die Liste sieht damit wie folgt aus: [ func(func(s1, s2),s3), ... , sn ]
● Dies wird solange fortgesetzt bis nur noch ein Element übrig bleibt, d.h. man hat die Liste auf ein Element reduziert.
import functools
functools.reduce(
lambda x,y: x+y, [47,11,42,13]
) #113
![Page 47: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/47.jpg)
List Comprehension
eine elegante Methode Listen in Python zu definieren oder zu erzeugen
l = [1,2,3,4,5]
[el*2 for el in l] #wie map
[el for el in l if el%2 == 0] #wie filter
[(a,b,c) for a in range(1,30) for b in range(a,30) for c in range(b,30) if a**2 + b**2 == c**2] # die pythagoreischen Tripel
![Page 48: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/48.jpg)
Anwendung: AuktionEin Auktionshaus hat Autos auf einer Aktion zu verkaufen
Kunden können auf etwas bieten
Die Reihenfolge der Gebote ist nicht Wichtig
![Page 49: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/49.jpg)
Anwendung: AuktionEin Auktionshaus hat Autos auf einer Aktion zu verkaufen
Auto: ● Attribute: Modell, Farbe, Baujahr● Methoden: tanken, lenkenKunden können auf etwas bieten
Die Reihenfolge der Gebote ist nicht Wichtig
![Page 50: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/50.jpg)
Anwendung: AuktionEin Auktionshaus hat Autos auf einer Aktion zu verkaufen
Auto: ● Attribute: Modell, Farbe, Baujahr● Methoden: tanken, lenkenKunden können auf etwas bieten
Bieter:● Name, Geld● Methoden: bietenDie Reihenfolge der Gebote ist nicht Wichtig
![Page 51: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/51.jpg)
Anwendung: AuktionEin Auktionshaus hat Autos auf einer Aktion zu verkaufen
Auto: ● Attribute: Modell, Farbe, Baujahr● Methoden: tanken, lenkenKunden können auf etwas bieten
Bieter:● Name, Geld● Methoden: bietenDie Reihenfolge der Gebote ist nicht Wichtig
Auktionshaus:● Attribute: Gebote, Autos● Methoden: gewienner_bestimmen (höchstes Gebot)
![Page 52: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/52.jpg)
Slots
Jedes Python-Objekt hat ein Attribut __dict__, das ein Dict ist und alle anderen Attribute der Klasse enthält. z.B. für self.attr macht Python tatsächlich
self .__ dict __ ['attr'].class T:
def __init__(self):
self.t = 0
t = T()
print (t.t)
print(t.x) #fehler
t.x=10
print (t.x) #ok
![Page 53: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/53.jpg)
Slots
● __slots__ wenn wir viele (Hunderte, Tausende) Objekte derselben Klasse instanziieren möchten
● __slots__ gibt es nur als Tool zur Speicheroptimierung● __slots__ soll nicht zur Einschränkung der
Attributerstellung verwendet sein
class T:
__slots__ = 'a', 'b'
def __init__(self, a, b):
self.a = a
self.b = b
![Page 54: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/54.jpg)
Öffentliche Attribute
Klasse.Attribut = <Wert>
können von außen zugegriffen werden.
als Klassenvariable: klasse.variableals Objektvariable: objekt.variable
Klassenvariablen sind standardmäßig öffentlich
![Page 55: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/55.jpg)
Private Attribute?
Klasse.__Attribut = <Wert> ● beginnen mit zwei Unterstrichen
● ein Zugriff von außen auf diese Attribute ist theoretisch nicht möglich*.
● werden mit Hilfe von get-Methoden zugegriffen.● werden mit Hilfe von set-Methoden verändert. *results may vary... (name mangling)
![Page 56: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/56.jpg)
Private Attribute?
Get/Set-Methoden def getPosY(self):return self.__yPos
def setPosY(self, pos): self.__yPos = pos
![Page 57: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/57.jpg)
Private Attribute?
class T:
def __init__(self, a):
self.__a = a
t = T(10)
t.__a = 10 #error
t._T__a = 10
![Page 58: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/58.jpg)
Schwache private Attribute
Klasse._Attribut = <Wert> ● beginnen mit einem Unterstrich● nur als Info für den Aufrufer● können von außen zugegriffen werden● werden nicht durch die Anweisung from … import * in eine Datei importiert
![Page 59: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/59.jpg)
The Python way
class T:
def __init__(self,x):
self.__x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
self.__x = x
![Page 60: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/60.jpg)
Klassenvariablen
Eine Klassenvariable kann nur mit Hilfe des Klassennamens verändert werden (theoretisch) Der Klassenname und das Attribut werden durch einen Punkt miteinander verbunden Modul.Klasse.Attribut = Wert
![Page 61: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/61.jpg)
Klassenvariablen
● werden innerhalb der Klasse, aber außerhalb einer Methode definiert
● werden häufig zu Beginn des Klassenrumpfes aufgelistet
● sind Attribute, die alle Objekte besitzen● können von jedem Objekt der Klasse
verändert werden● sind globale Attribute eines Objekts
![Page 62: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/62.jpg)
Klassenvariablen
class Rechteck(object):ANZAHL = 0FARBE_KANTE = "Black"FARBE_FÜLLUNG = "White" def __init__(self, b = 10, h = 10):
self.__xPos = 0self.__yPos = 0self.hoehe = hself.breite = bRechteck.ANZAHL = Rechteck.ANZAHL + 1
![Page 63: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/63.jpg)
Klassenvariablen
![Page 64: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/64.jpg)
Class Methoden
class T:
__counter = 0
def __init__(self):
type(self).__counter += 1
def TotalInstances():
return T.__counter
>>> T.TotalInstances()
>>> x = T()
>>> x.TotalInstances()# error
![Page 65: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/65.jpg)
Statische Methoden
class T:
__counter = 0
def __init__(self):
type(self).__counter += 1
@staticmethod
def TotalInstances():
return T.__counter
>>> T.TotalInstances()
>>> x = T()
>>> x.TotalInstances()
![Page 66: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/66.jpg)
Statische Methoden
![Page 67: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/67.jpg)
Operatorüberladung
__add__(self,other) -> +
__mul__(self,other) -> *__setItem__(self,index,value) -> [] a = A()a[index] = val
![Page 68: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/68.jpg)
Operatorüberladung
__getItem__(self,index) -> array
a=A()for el in a: pass __len__(self) -> len__getslice__(self,low,high) -> slicing
a = A()b=a[1:4]
![Page 69: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/69.jpg)
Methoden
![Page 70: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/70.jpg)
Methoden
![Page 71: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/71.jpg)
Beispiel (incomplete)
class R:
def __init__(self, a, b):
if b == 0:
raise ZeroDivisionError("b cannot be 0")
if isinstance(a, int) and isinstance(b, int):
self._a = a
self._b = b
else:
raise ValueError(“args should be int”)
def __add__(self, o):
return T (self.a*o.b+self.b*o.a, self.b*o.b)
def __lt__(self, o):
return self.a/self.b < o.a/o.b
def __eq__(self, o):
return self.a == o.a and self.b == o.b
def __str__(self):
if self.b == 1:
return str(self._numerator)
return "%i/%i" % (self.a, self.b)
@property
def a(self):
return self._a
@property
def b(self):
return self._b
#=======
r = R(1,2)
print(R(1,2) == R(1,2))
print (r + R(1,2))
print (r < R(2,3)
![Page 72: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/72.jpg)
Beispiel
![Page 73: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/73.jpg)
Architektur
![Page 74: Benutzerdefinierte Typen I + IIrusu/gp/folien/2019.GP.K.5-6-7.pdf · 2019-11-05 · Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt haben Felder/Attribute (Eigenschaften),](https://reader031.vdokument.com/reader031/viewer/2022041800/5e507904a5a3ff6de0506f1f/html5/thumbnails/74.jpg)