Objektorientierung in Python
Object Oriented Programming is everywhere!

🎯 Lernziele
Nach dieser Einheit sind Sie in der Lage dazu * die fünf Prinzipien der Objektorientierung nennen * Beispiele hierfür zu geben * in Python umzusetzen
Fünf Prinzipien der Objektorientierung
- Abstraktion
- Kapselung (Data hiding)
- Wiederverwendung
- Beziehungen
- Polymorphismus
Abstraktion
Objekte nur so detailliert beschreiben, wie nötig:
class TestPerson:
def __init__(self, dateofbirth, haircolor):
self.dateofbirth = dateofbirth
self.haircolor = haircolor # Für Leistungstest überflüssig
Kapselung (Data hiding)
Zugriff auf Methoden und Attribute bewusst setzen (z.B. getter, setter)
from datetime import datetime
class Person:
def __init__(self, dateofbirth):
self.__dateofbirth = dateofbirth
def get_age(self):
age = datetime.today().year- self.__dateofbirth.year
return age
p = Person(datetime.strptime("01/01/2000", '%d/%m/%Y'))
p.get_age()
Wiederverwendung
Klassen so anlegen, dass sie in verschiedenen Kontexten eingesetzt werden können
class TimeSeriesAnalyzer:
def __init__(self, time_series, unit):
self.values = values
self.unit = unit
def calc_mean(self):
print(str(sum(self.values)/len(self.values)) + " "+ self.unit)
tsa_ekg = TimeSeriesAnalyzer([0.1, 0.1, 0.12, 0.14, 0.1, 1.1], 'mV')
tsa_ekg.calc_mean()
tsa_power = TimeSeriesAnalyzer([80, 90, 100], 'W')
tsa_power.calc_mean()
Beziehungen
Vererbung nutzen, um Spezialfälle abzubilden
class HeartRateSeriesAnalyzer(TimeSeriesAnalyzer):
# Konstruktor entfällt, da er von TimeSeriesAnalyzer geerbt wird
def calc_hrv(self):
#<###>
print("HRV is xx ms!")
tsa_hr2 = TimeSeriesAnalyzer([0.1, 0.1, 0.12, 0.14, 0.1, 1.1], 'mV')
tsa_hr2.calc_hrv()

Polymorphismus
Gleichnamige Methoden können in verschiedenen Klassen anders agieren
class HeartRateSeriesAnalyzer(TimeSeriesAnalyzer):
def check_fail(self):
if outage == True:
return True
else:
return False
class PowerTimeSeriesAnalyzer(TimeSeries):
def check_fail(self):
if (too_high or too_low) == True:
return True
else:
return False
<...>
for series in [tsa_hr2, tsa_power]:
print(series.check_fail())
✍️ Freiwillige Übungs-Aufgabe
2.2 Arbeit mit Klassen und Instanzen (Objekten)
🏆 Sakai-Aufgabe 6.2: Objektorientierung
- Nutzen Sie das bestehende Repository und den Branch mit ihrem Namen
- Committen Sie die stabile Lösungen und comitten Sie wieder mit der Commit-Message
Aufgabe62, - Passen Sie den Code der Sakai-Aufgabe 6.1 so an, dass die Super-Klasse
Personexistiert von denen die SubklassenSubjectundSupervisorerben. - Hierbei soll jede Klasse nur die nötigsten Attribute und Methoden enthalten.
- Um Berechnung des maximalen Pules präziser zu machen, soll von nun anstelle des Alters an das Geburtsdatum als verstecktes (private) Attribute gespeichert werden und die Berechnung darauf basieren.
- Geben Sie wieder den Link zum Repository in Sakai ab