OOP Einführung

Studiere die Slides für eine detaillierte Einführung in die objektorientierte Programmierung (OOP). Hier im Wiki sind einfach die allerwichtigsten Grundlagen angegeben.

In der objektorientierten Programmierung schreibt man Klassen, von welcher man dann Objekte instanziiert.

Wikipedia sagt dazu:

„Unter einer Klasse (auch Objekttyp genannt) versteht man in der objektorientierten Programmierung ein abstraktes Modell bzw. einen Bauplan für eine Reihe von ähnlichen Objekten.

Die Klasse dient als Bauplan für die Abbildung von realen Objekten in Softwareobjekte und beschreibt Attribute (Eigenschaften) und Methoden (Verhaltensweisen) der Objekte. Verallgemeinernd könnte man auch sagen, dass eine Klasse dem Datentyp eines Objekts entspricht.“

Ein Beispiel für eine Klasse, mit der man Personen z.B. für eine Personalverwaltungssoftware in einer Schule, darstellen kann, ist hier angegeben:

class Person:
    def __init__(self,_name,_address,_birthday,_type,_position,_klasse):
        self.name = _name
        self.address = _address
        self.birthday = _birthday
        self.type = _type
        self.position = _position
        self.klasse = _klasse # can't use 'class' bc is keyword
 
    def get_info(self):
        # TODO: return different string for teachers and students
        return f"Name: {self.name}, Adresse: {self.address}, Geburtstag: {self.birthday}, Typ: {self.type}"
 
    def get_age(self):
        # TODO: determine and return age using datetime module (compare date today with birthdate)
        raise NotImplementedError()
 
    def change_klasse(self,x=1):
        # TODO: change class by x, default value is x=1, example: for x=-1 from 3Mfz -> 2Mfz
        raise NotImplementedError()

Beachte dabei das Keyword self. Dieses repräsentiert das jeweilige Objekt. Beachte auch, dass es Klassenmethoden als erstes Argument übergeben werden muss.

Nun können wir Objekte der Klasse instanziieren:

# instantiate single object:
scb = Person("Bert Schreiner", "Hoehenweg 8, 8590 Romanshorn TG", "07.12.1969", "LP","HL",None)
 
# print an attribute
print(scb.name)
 
# change an attribute
scb.address = "Kirchgasse 7, 8594 Kesswil" # change address of scb
 
# instantiate objects as elements of a list directly
persons = [
    Person("Bert Schreiner", "Hoehenweg 8, 8590 Romanshorn TG", "07.12.1969", "LP","HL",None),
    Person("Monika Hohler", "Seeblickstrasse 17, 9306 Freidorf", "24.05.1990", "LP","LB1",None),
    Person("Verena Keller", "Saentisstrasse 22, 8580 Amriswil", "03.02.2007", "STU",None,"1Fd"),
    Person("Heiri Meier", "Kreisstrasse 3, 9322 Egnach", "11.09.2005", "STU",None,"3Mfz")
]
 
# go through list of objects and print
for person in persons:
    print(person.name)

Halte dich an folgende Style-Konventionen:

  • Attribute: snake_case
  • Klassennamen im UpperCamelCase

  • Implementiere selbst die Klasse Person. Kein Copy-Paste, so viel wie geht aus Erinnerung anstelle Abschreiben
  • Erstelle selbst mind. vier Objekte der Klasse von echten Personen (du selbst, Kolleg:innen, Lehrpersonen, siehe ISY oder nachfragen)
  • Füge weitere Attribute hinzu: Telefonnummer & Mail-Adresse
  • Erweitere getinfo(): Andere Info für LP und STU: - Name: Bert Schreiner, Adresse: … , … , … , Typ: LP, Position: HL - Name: Verena Keller, Adresse: … , … , … , Typ: STU, Klasse: 1Fd - Zeige auch neue Attribute darin an. - Implementiere Klassenmethode increaseklasse(). Gebe Fehlermeldung aus, falls für Lehrperson aufgerufen wird
  • Implementiere Klassenmethode get_age(). Tipp: Verwende datetime-Modul

  • talit/oop_einfuehrung.1654433190.txt.gz
  • Zuletzt geändert: 2022-06-05 12:46
  • von sca