Methodenzeiger

Methodenzeiger

Ein Methodenzeiger wird bei objektorientierter Programmierung verwendet um auf eine Methode einer Klasse oder einer Objektinstanz zu verweisen. Er ähnelt einem Funktionszeiger (einem Zeiger auf eine Funktion). 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 gebundenen 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 überlegene Konzept der Selektoren verwendet.

Verwandte Konzepte

Delegates

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

Delegates in spät bindenden Sprachen

In spät bindenden Sprachen wie Objective-C ist zwischen der Nachricht ("Methodenaufruf") und der Methode zu unterscheiden. Der Compiler übersetzt eine Methode und deren Aufruf nicht in einen Index für eine vtab. Vielmehr bleibt die Nachricht unverändert bestehen. Die Liste der Methoden eines Objektes ist ein assoziatives Array, enthält also einen Verweis von Nachrichtenname auf Methode. Daher ist es möglich, erst zur Laufzeit anhand der Nachrichten zu entscheiden, welche Methode ausgeführt werden soll. Als Folge davon ist es nicht notwendig, die Klasse des Empfängers zu kennen oder dass die Methode bereits in einer bekannten Superklasse wenigstens abstrakt definiert ist.

  …
  id myDelegate; // Instanz beliebiger (unbekannter) Klasse
  SEL messageSelector = @selector( sender:doSomethingWithObject: ); // Nachrichtenname
 
  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 Empfänger angenommen werden kann. Da Delegates nicht alle Methoden implementieren müssen, 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 lässt sich das Vorhandensein von Methodenimplementierung vortäuschen und auf diese Weise eine Nachricht weiterleiten (Forward-Invocation, Proxy).


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Dereferenzieren — Mit Zeiger oder Pointer wird in der Informatik eine spezielle Variable bezeichnet, die auf eine andere Variable oder Funktion verweist. Der referenzierte Speicherbereich enthält entweder Daten (Objekt, Variable) oder Programmcode. Zeiger auf… …   Deutsch Wikipedia

  • Dereferenzierung — Mit Zeiger oder Pointer wird in der Informatik eine spezielle Variable bezeichnet, die auf eine andere Variable oder Funktion verweist. Der referenzierte Speicherbereich enthält entweder Daten (Objekt, Variable) oder Programmcode. Zeiger auf… …   Deutsch Wikipedia

  • Pointer (Informatik) — Mit Zeiger oder Pointer wird in der Informatik eine spezielle Variable bezeichnet, die auf eine andere Variable oder Funktion verweist. Der referenzierte Speicherbereich enthält entweder Daten (Objekt, Variable) oder Programmcode. Zeiger auf… …   Deutsch Wikipedia

  • Zeigerarithmetik — Mit Zeiger oder Pointer wird in der Informatik eine spezielle Variable bezeichnet, die auf eine andere Variable oder Funktion verweist. Der referenzierte Speicherbereich enthält entweder Daten (Objekt, Variable) oder Programmcode. Zeiger auf… …   Deutsch Wikipedia

  • Zeigervariable — Mit Zeiger oder Pointer wird in der Informatik eine spezielle Variable bezeichnet, die auf eine andere Variable oder Funktion verweist. Der referenzierte Speicherbereich enthält entweder Daten (Objekt, Variable) oder Programmcode. Zeiger auf… …   Deutsch Wikipedia

  • COM+ — Das Component Object Model [kəmˈpoʊnənt ˈɒbdʒɪkt ˈmɒdl] (Abk. COM) ist eine von Microsoft entwickelte Plattform Technologie, um unter dem Betriebssystem Windows Interprozesskommunikation und dynamische Objekterzeugung zu ermöglichen. COM fähige… …   Deutsch Wikipedia

  • Zeiger (Informatik) — Der Zeiger a zeigt auf Variable b. Die Variable b enthält eine Nummer (hexadezimal 01101101) und die Variable a enthält die Speicheradresse von b (hexadezimal 1008). In diesem Fall passen die Adresse und die Daten in ein 32 bit Wort. Mit Zeiger… …   Deutsch Wikipedia

  • Signal-Slot-Mechanismus — Signale und Slots sind ein Konzept aus der Programmierung. Sie realisieren einen ereignisgesteuerten Programmfluss beziehungsweise eine ereignisgesteuerte Kommunikation zwischen Programmobjekten. Ursprünglich geprägt wurde der Begriff durch die… …   Deutsch Wikipedia

  • Signal-Slot-System — Signale und Slots sind ein Konzept aus der Programmierung. Sie realisieren einen ereignisgesteuerten Programmfluss beziehungsweise eine ereignisgesteuerte Kommunikation zwischen Programmobjekten. Ursprünglich geprägt wurde der Begriff durch die… …   Deutsch Wikipedia

  • Signal/Slot-Konzept — Signale und Slots sind ein Konzept aus der Programmierung. Sie realisieren einen ereignisgesteuerten Programmfluss beziehungsweise eine ereignisgesteuerte Kommunikation zwischen Programmobjekten. Ursprünglich geprägt wurde der Begriff durch die… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”