This is an old revision of the document!


Objektorientierte Programmierung (OOP)

Unter dem Begriff “objektorientierte Programmierung (OOP)” werden ganz verschiedene Charakteristiken zusammengefasst. Wir betrachten im Folgenden nur die Datenkapselung und lassen weitere Aspekte wie Polymorphismus und Vererbung (vorerst) weg.

Eine Grundeigenschaft der OOP ist es, Daten und Funktionen, die diese Daten verarbeiten, in einer Klasse zusammenzufügen.

guetzli.py
class Guetzli:
    def __init__(self, name):
        self.name = name
 
    def say(self):
        print("  --> Ich mag %s" % self.name)
 
    def umtaufen(self, neu):
        self.name = neu
 
 
zimt = Guetzli("Zimtstern")
mailand = Guetzli("Mailaenderli")
 
print("zimt.say():")
zimt.say()
print("mailand.say():")
mailand.say()
 
print("referenz = zimt")
referenz = zimt
print("referenz.say():")
referenz.say()
print("referenz.umtaufen(\"Leckerli\")")
referenz.umtaufen("Leckerli")
print("zimt.say():")
zimt.say()

Eine Klasse bildet die Vorlage, aufgrund welcher Instanzen erzeugt werden können:

zimt = Guetzli("Zimtstern")

Die Klasse ist mit der Ausstechform vergleichbar, mit welcher viele unabhängige Guetzli, d.h. Instanzen erzeugt werden können. Diese Instanzen werden nicht direkt in einer Variablen gespeichert, sondern nur eine Referenz darauf (so quasi wo im Speicher die Information liegt). Die Zeile

referenz = zimt

erzeugt also keine neue Instanz (kein zusätzliches Guetzli), sondern beide Variablen zeigen auf den gleichen Speicherbereich. Eine Instanz zu kopieren ist nicht trivial, weil darin selbst wieder Referenzen auf weitere Instanzen vorhanden sein können.

Die Instanz selbst muss immer als Parameter übergeben werden, der immer self heisst. Die Zeile

referenz.umtaufen("Leckerli")

ist eine Kurzform für

Guetzli.umtaufen(referenz, "Leckerli")

d.h. von der Klasse Guetzli, wird die Methode (so nennt man Funktionen in Klassen) umtaufen aufgerufen, und zwar mit der Referenz auf (hier) das Zimtguetzli.

  • lehrkraefte/blc/informatik/ffprg1-2019/oop-intro.1554189575.txt.gz
  • Last modified: 2019/04/02 09:19
  • by Ivo Blöchliger