Das Kefk Network Wiki befindet sich im Testbetrieb.


Methodenzeiger

Aus Kefk.

Wechseln zu: Navigation, Suche

Ein Methodenzeiger wird bei objektorientierter Programmierung verwendet um auf eine Methode einer Klasse oder einer Objektinstanz zu verweisen. Er ähnelt einem Funktionszeiger. In manchen Programmiersprachen ist es üblich einen Methodenzeiger als "Methode" oder "Referenz auf eine Methode" zu bezeichnen. Es wird zwischen gebundenen und ungebundenen Methodenzeigern unterschieden, je nachdem wann der "self" oder "this" Parameter bestimmt wird.

Inhaltsverzeichnis

Gebundene Methodenzeiger

Bei gebunden Methoden (bound method in Python) enthält der Methodenzeiger einen Zeiger auf eine Methode und einen Zeiger auf eine Objektinstanz. Solche Methodenzeiger lassen sich als Rückruffunktion (callback function) nutzen um Aktionen bei Ereignissen (engl: Events) auszulösen.

Ungebundene Methodenzeiger

Bei ungebundenen (auch: freien) Methoden ("unbound method" in Python, "Method" in Java) enthält der Methodenzeiger einen Verweis auf eine Methode aber keinen Verweis auf eine Objektinstanz. Einem ungebundenen Methodenzeiger muss beim Aufruf eine passende Objektinstanz übergeben werden.

In C++ existieren ebenfalls ungebundene Methodenzeiger. Diese „zeigen“ auf eine Methode einer Klasse und werden beim Aufruf an ein Objekt gebunden. Hierfür existieren die Operatoren .* und ->*. Intern ist ein Methodenzeiger eine Nummer, welche einen Eintrag in der Methodentabelle der Klasse referenziert.

Auch Objective-C bietet ungebundene Methodenzeiger des Typs IMP. Wegen ihrer fehlenden Objekt-Orientierung werden sie allerdings nur selten zur Verbesserung des Laufzeitverhaltens eingesetzt. Ansonsten wird das überlegende Konzept der Selektoren verwendet.

Verwandte Konzepte

Delegates

In C# kann man Delegate-Variablen wie Methodenzeiger verwenden. Zusätzlich unterstützen C#-Delegates weitere Operationen.

Auch in Objective-C werden Delegates verwendet. Sie werden verwendet, um vom Delegierer vordefinierte Mitteilungen (Notifications) an ein Delegate zu senden. Das unterscheidet Delegation von Selektoren:

 …
 // Die Nachricht -didChangeSomethingInteresting: ist durch den Delegierer vorgesetzt.
 if( [myDelegate respondsToSelector:@selector( didChangeSomethingInteresting: )] ) {
     [myDelegate didChangeSomethingInteresting:self];
 } 
 // Bei Selektoren wird die Nachricht erst später bestimmt, hier durch die Variable desiredMessage
 [myTarget performSelektor:[self desiredMessage];

Methodennamen und Selektoren

In Objective-C kann man Methoden über Selektoren ansprechen. Diese basieren nur auf dem Namen einer Methode und können auf beliebige Klassen und Instanzen angewendet werden.

Persönliche Werkzeuge