Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

25.1 Wozu braucht man Funktionszeiger

25.1 Wozu braucht man Funktionszeiger

Im ersten Augenblick macht es nicht viel Sinn, einen Zeiger auf eine Funktion zu definieren, aber dieser Mechanismus ist eigentlich sehr interessant, wenn man Klassen bauen will, deren Funktionalität nachträglich erweitert werden soll. Nun könnte man denken, dass man dies auch mit Vererbung hin bekommt, aber ich meine was anderes.

Stellen Sie sich vor, Sie bauen eine Klasse, welche diverse Attribute besitzt und eine Menge für Sie erledigt. Jetzt soll die Klasse noch zwei Methoden besitzen, um ihre Attributwerte abzuspeichern bzw. sie zu laden. Allerdings wollen Sie sich jetzt noch nicht festlegen, wie und wo die Daten abgelegt werden sollen (z.B. nur in einer Textdatei, oder evtl. auch in einer Datenbank). Dann könnte es ja auch vorkommen, dass sich manche Objekte gar nicht abspeichern sollen. Wie bekommen Sie so etwas hin?

Ein Ansatz wäre, eine Basisklasse zu bauen, die sich weder laden noch speichern kann und dann für jede Erdenkliche Art der Datenhaltung, eine extra Klasse ableiten, welche dann lediglich jeweils die zwei Methoden überschreibt. Aber macht es wirklich Sinn, wegen einer oder zwei Methoden gleich eine neue Klasse zu bauen? Nicht unbedingt und genau hier setzen Funktionszeiger an.

Man kann in die Klasse einfach zwei Zeiger einbauen, die auf Funktionen Zeigen können, welche diese Aufgaben erledigen. Wenn man sich dann eine Instanz der Klasse erzeugt, kann man eine beliebige Funktion an diese Zeiger dranhängen und wenn dann in der Klasse festgestellt wird, dass die Zeiger auf etwas sinnvollen zeigen, können die Funktionen, auf welche die Zeiger verweisen, aufgerufen werden. So erweitert man also ggf. die Funktionalität einer Klasse, ohne sie umschreiben oder neu definieren zu müssen.

Dieses Konzept wird auch sehr oft bei Fensterklassen (grafische Programmierung) benutzt. Beispielsweise gibt es bei Schaltflächen mehrere Funktionszeiger oder auch Funktionshandler genannt, welche für diverse Aufgaben gedacht sind. Eine ist z.B. das reagieren auf einen Mausklick. Genauso gibt es Möglichkeiten, auf das drüber Ziehen der Maus zu reagieren, um die Schaltfläche einzufärben. Da diese Methoden einer Schaltfläche aber nicht zwingend zu ihr gehören, bieten sie nur Zeiger an, an welche man seine eigenen Methoden hängen kann und die auch nur aufgerufen werden, wenn es sie gibt. Normalerweise gehört zu dieser Thematik noch ein s.g. Eventhandling und ganz so, wie ich es eben erklärt habe, funktioniert es in der Realität nicht, aber ich denke, dass man hier gut versteht, warum Funktionszeiger benutzt werden bzw. notwendig sind.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012