Stub (Programmierung)

Ein Stub (von englisch stub‚ Stubben, Stummel, Stumpf) oder Stutzen bezeichnet in der Softwareentwicklung einen – üblicherweise relativ einfachen und kurzen – Programmcode, der anstelle eines anderen, meist komplexeren, Programmcodes steht. Dabei ist der eigentliche Programmcode, der durch den Stub ersetzt wird, noch nicht entwickelt (Top-Down-Ansatz) oder auf einem anderen Rechner oder in einem anderen Speicherbereich. Liegt der Code an einem anderen Ort, so ist der Stub der lokale Anknüpfungspunkt, um Softwarekomponenten einfach anzusprechen, die ansonsten nur über komplexe Protokolle erreichbar wären bzw. sind und um diese Komplexität zu verbergen. Ein Stub entspricht dann dem Entwurfsmuster eines Stellvertreters.

Insbesondere kommen Stubs bei der Entwicklung verteilter Systeme zur Anwendung: Die Funktionalität eines entfernten, nur über ein Netzwerk erreichbaren Softwaresystems wird auf dem lokalen System in Form einer „Stubkomponente“ zur Verfügung gestellt. Diese Stubkomponente kann von der Software des lokalen Systems so angesprochen werden, als wäre die Funktionalität des entfernten Systems lokal vorhanden (Zugriffstransparenz). Statt aber diese gewünschte Funktion tatsächlich zu implementieren, übersetzt die Stubkomponente die Anfragen in Netzwerkaufrufe (Marshalling), kommuniziert mit dem fernen System und delegiert die Aktion an dieses. Für das nutzende System bleibt dieser Kommunikationsvorgang verborgen.

Bei einer Kommunikation nach dem Client-Server-Modell (RPC, RMI) heißt der lokale Vertreterstub auf dem Client auch proxy. Bei verschiedenen Techniken kann aus einer abstrakten Beschreibung ein Grundgerüst (Skeleton) für das Gegenstück auf dem Server erstellt werden.

Mono- und polymorphische Stubs

Ein Programm, welches die Methode eines Interfaces aufruft, muss beim ersten Zugriff den dahinterliegenden Datentyp ermitteln.

Steht der Datentyp fest, so wird ein monomorphischer Stub[1] erzeugt, der eine Funktion für den Zugriff auf die passende Methode für den jeweiligen Datentyp implementiert. Der Stub kann gespeichert werden, um einen erneuten Aufruf der Schnittstelle für ein weiteres Objekt zu optimieren. Ist das weitere Objekt jedoch typverschieden, so muss ein neuer monomorphischer Stub erzeugt werden. Ein monomorphischer Stub hat somit den Nachteil, dass er nur für einen bestimmten, konkreten Datentyp geeignet ist.

Im Gegensatz dazu besitzt ein polymorphischer Stub[1] eine Hashtabelle, welche auf eine Liste von Stubfunktionen zeigt. Der polymorphische Stub kann dann – vom jeweiligen Datentyp abhängig – die passende Funktion aufrufen. Beim Aufruf eines neuen Datentyps wird eine für diesen optimierte Funktion erzeugt und dem polymorphischen Stub hinzugefügt. Der polymorphische Stub ist allerdings aufgrund des Lookups langsamer.

Einige Implementierungen wie die Common Language Runtime unterstützen sowohl mono- als auch polymorphische Stubs.[1] Welcher Stubtyp verwendet wird, entscheidet dabei eine Heuristik.

Siehe auch

Einzelnachweise

  1. a b c Ben Watson: Writing High-Performance .NET Code. 2014, ISBN 978-0-9905834-3-1 (englisch).