Multiple Dispatch

Weitverbreitete objektorientierte Programmiersprachen wie Java und C++ erlauben die Zuordnung der passendsten Methode zu einem Satz von Argumenten in einem Methodenaufruf zur Laufzeit anhand des ersten Arguments. Dieses Argument ist normalerweise syntaktisch gegenüber den anderen Argumenten hervorgehoben:

<arg1>.<method>(<arg2>, <arg3>, ...).

Die Klasse dieses ersten Arguments wird bestimmt und innerhalb dieser Klasse die benannte Instanzmethode mit den restlichen Argumenten aufgerufen.

Von Multiple Dispatch spricht man, wenn nicht nur das erste, sondern mehrere bzw. alle Argumente herangezogen werden, um die passende Methode aufzufinden.

Eine Programmiersprache, die Multiple Dispatch unterstützt, ist Common Lisp. Hier können sogenannte generische Funktionen aus mehreren Methoden bestehen. Beim Aufruf einer generischen Funktion wird die am besten passende (die spezifischste) Methode unter Berücksichtigung aller Argumente ausgewählt.

Die Mehrheit der objektorientierten Programmiersprachen unterstützen Multiple Dispatch nicht unmittelbar. Das liegt daran, dass dieses Feature eher selten genutzt wird.

Nach einer Studie verwenden etwa ein Drittel der generischen Funktionen nur ein einziges Argument, um die anwendbare Methode zu bestimmen. Bis zu 6.5% der Funktionen werten die Typen von zwei oder mehr Argumenten aus.

Die restlichen Funktionen haben nur eine Methode, so dass die Typen der Argumente nicht in Betracht gezogen werden müssen. Rund 20% der Funktionen haben zwei Methoden und etwa 5% haben drei Methoden.


Quellen

http://en.wikipedia.org/wiki/Multiple_dispatch
http://stackoverflow.com/questions/1749534/multiple-dispatch-in-c

Muschevici, Radu; Potanin, Alex; Tempero, Ewan; Noble, James (2008)
"Multiple dispatch in practice"
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
OOPSLA '08