Stub (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Ein Stub (von englisch stub ‚Stubben, Stummel, Stumpf‘) oder Stutzen bezeichnet in der Softwareentwicklung einen Programmcode, der anstelle eines anderen Programmcodes steht. Dabei ist der Programmcode, den der Stub ersetzt, entweder noch nicht entwickelt (Top-Down) oder er ist auf einem anderen Rechner oder in einem anderen Speicherbereich. In den letzten beiden Beispielen ist der Stub der lokale Anknüpfungspunkt um ansonsten nur über komplexe Protokolle erreichbare Softwarekomponenten einfach anzusprechen und diese Komplexität zu verbergen. Ein Stub entspricht dann dem Entwurfsmuster Stellvertreter (Proxy).

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 „Stub-Komponente“ zur Verfügung gestellt. Diese Stub-Komponente 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 Stub-Komponente 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 Vertreter-Stub auf dem Klienten auch proxy. Für das Gegenstück auf dem Server kann man sich bei verschiedenen Techniken aus einer abstrakten Beschreibung ein Grundgerüst erstellen lassen, ein so genanntes Skeleton.

Monomorphische und Polymorphische Stubs[Bearbeiten]

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

Steht der Datentyp fest 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 ein erneutes Aufrufen der Schnittstelle für ein weiteres Objekt zu optimieren. Handelt es sich beim weiteren Objekt jedoch um ein Objekt eines anderen Typs, so muss ein neuer monomorphischer Stub erzeugt werden. Ein monomorphischer Stub hat also 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 Stub-Funktionen zeigt. Der polymorphischer Stub kann dann abhängig vom jeweiligen Datentyp die passende Funktion aufrufen. Wird ein neuer Datentyp aufgerufen, wird eine für den neuen Datentyp optimierte Funktion erzeugt und dem polymorphischen Stub hinzugefügt. Der polymorphische Stub hat allerdings den Nachteil der geringeren Geschwindigkeit aufgrund des Lookups.

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

Siehe auch[Bearbeiten]

Quellen[Bearbeiten]

  1. a b c  Ben Watson: Writing High-Performance .NET Code. 23. Juli 2014, ISBN 9780990583431.