www.wikidata.de-de.nina.az
Ein Methodenzeiger wird bei objektorientierter Programmierung verwendet um auf eine Methode einer Klasse oder einer Objektinstanz zu verweisen Er ahnelt einem Funktionszeiger einem Zeiger auf eine Funktion In manchen Programmiersprachen ist es ublich 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 1 Gebundene Methodenzeiger 2 Ungebundene Methodenzeiger 2 1 Beispiel in C 3 Verwandte Konzepte 3 1 Delegates 3 2 Delegates in spat bindenden Sprachen 4 WeblinksGebundene Methodenzeiger BearbeitenBei gebundenen Methoden bound method in Python enthalt der Methodenzeiger einen Zeiger auf eine Methode und einen Zeiger auf eine Objektinstanz Solche Methodenzeiger lassen sich als Ruckruffunktion callback function nutzen um Aktionen bei Ereignissen engl Events auszulosen Ungebundene Methodenzeiger BearbeitenBei ungebundenen auch freien Methoden unbound method in Python Method in Java enthalt der Methodenzeiger einen Verweis auf eine Methode aber keinen Verweis auf eine Objektinstanz Einem ungebundenen Methodenzeiger muss beim Aufruf eine passende Objektinstanz ubergeben werden In C existieren ebenfalls ungebundene Methodenzeiger Diese zeigen auf eine Methode einer Klasse und werden beim Aufruf an ein Objekt gebunden Hierfur existieren die Operatoren und gt 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 Objektorientierung werden sie allerdings nur selten zur Verbesserung des Laufzeitverhaltens eingesetzt Ansonsten wird das uberlegene Konzept der Selektoren verwendet Beispiel in C Bearbeiten include lt iostream gt class Auto public 4 member functions Methoden void starten std cout lt lt Starten lt lt std endl void beschleunigen double beschleunigung void bremsen double verzoegerung void ausschalten int main Auto a erzeuge method ptr und initialisiere ihn mit Auto starten void Auto method ptr amp Auto starten rufe Methode auf die method ptr zeigt in dem Falle a starten a method ptr FEHLER Falscher Methodentyp da Auto beschleunigen einen Parameter erwartet method ptr amp Auto beschleunigen return 0 Verwandte Konzepte BearbeitenDelegates Bearbeiten In NET Sprachen wie C VB NET oder D werden Delegate Variablen fur die Erstellung typsicherer Methodenzeiger verwendet Zusatzlich unterstutzen NET Delegates weitere Operationen Delegates in spat bindenden Sprachen Bearbeiten In spat bindenden Sprachen wie Objective C ist zwischen der Nachricht Methodenaufruf und der Methode zu unterscheiden Der Compiler ubersetzt eine Methode und deren Aufruf nicht in einen Index fur eine vtab Vielmehr bleibt die Nachricht unverandert bestehen Die Liste der Methoden eines Objektes ist ein assoziatives Array enthalt also einen Verweis von Nachrichtenname auf Methode Daher ist es moglich erst zur Laufzeit anhand der Nachrichten zu entscheiden welche Methode ausgefuhrt werden soll Als Folge davon ist es nicht notwendig die Klasse des Empfangers zu kennen oder dass die Methode bereits in einer bekannten Superklasse wenigstens abstrakt definiert ist Instanz beliebiger unbekannter Klasse id myDelegate Nachrichtenname SEL messageSelector selector sender doSomethingWithObject if myDelegate respondsToSelector messageSelector myDelegate sender self doSomethingWithObject anObject Es ist zu beachten dass durch die Verwendung von id jede Instanz jeder beliebigen Klasse als Empfanger angenommen werden kann Da Delegates nicht alle Methoden implementieren mussen wird zur Laufzeit abgefragt ob eine entsprechende Implementierung vorliegt Delegating ist also ein Angebot keine Pflicht Es dient der Vermeidung von Ableitungen White Boxing und Herstellung einer definierten API zur Funktionsspezialisierung Implementierungsseitig lasst sich das Vorhandensein von Methodenimplementierung vortauschen und auf diese Weise eine Nachricht weiterleiten Forward Invocation Proxy Weblinks BearbeitenPointers to member functions C FAQ englisch 15 theoretisch und praktisch fundierte Artikel zu Methodenzeigern Abgerufen von https de wikipedia org w index php title Methodenzeiger amp oldid 210985873