Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Hook (Informatik)

Hook (englisch für Haken, auch Einschubmethode genannt) bezeichnet in der Programmierung eine Schnittstelle, mit der fremder Programmcode in eine bestehende …

Inhalt5 Abschnitte
  1. 1. Grundidee und Zweck
  2. 2. Implementierung im Programmcode
  3. 3. Hooks in objektorientierter Programmierung
  4. 4. Betriebssystem-Hooks
  5. 5. Einbindung und Konfiguration

Grundidee und Zweck

Ein Hook, auch Einschubmethode genannt, ist in der Programmierung eine Schnittstelle, über die fremder Programmcode in eine bestehende Anwendung eingebunden werden kann. Dadurch lässt sich ein Programm erweitern, sein Ablauf verändern oder ein bestimmtes Ereignis abfangen. Typisch ist, dass ein Hook im Standardfall nichts tut, also erst durch zusätzlichen Code eine Wirkung bekommt.

Hooks können an verschiedenen Stellen wirken: direkt im Quelltext, über Konfigurationsdateien, durch den Aufruf von Funktionen, denen der auszuführende Code mitgegeben wird, oder durch Mechanismen des Betriebssystems. Betriebssysteme können Hooks zum Abfangen von Nachrichten bereitstellen. Damit lassen sich zum Beispiel systemweite Hotkeys umsetzen: Ein Programm kann Tastatur-Nachrichten empfangen, unabhängig davon, welches Programm gerade den Fokus hat.

Implementierung im Programmcode

Wenn der Quelltext eines Programms vorliegt, kann man es grundsätzlich direkt erweitern. Das ist aber oft aufwendig, besonders wenn der Code nicht genau bekannt ist. Solche Änderungen können viele Anpassungen erfordern, unerwünschte Nebenwirkungen haben und müssen bei jeder neuen Programmversion erneut eingepflegt werden.

Darum legen manche Programme bestimmte Stellen ausdrücklich als Erweiterungspunkte fest. Ein typischer Hook ist dann eine Funktion, die im ursprünglichen Programm leer implementiert ist und deshalb zunächst nichts bewirkt. Diese leere Funktion kann später auf eine fremdimplementierte Funktion umgelenkt werden. So kann zusätzlicher Code eingebunden werden, ohne den übrigen Programmablauf stark zu verändern.

Hooks in objektorientierter Programmierung

In der objektorientierten Programmierung werden Hooks vor allem durch Vererbung oder Delegation umgesetzt.

Bei Vererbung sind Hooks leere Methoden, die in Unterklassen ausprogrammiert werden können. Ein Beispiel ist das Entwurfsmuster der Schablonenmethode. Dabei werden mehrere Methoden nacheinander als Hooks aufgerufen, um einen Algorithmus mit festem Ablaufrahmen an bestimmten Stellen zu spezialisieren.

Bei Delegation wird ein Hook als Objekt an den aufrufenden Programmteil übergeben, meist als Attribut. Dieses Objekt muss eine bestimmte Schnittstelle implementieren. Ein Beispiel dafür ist das Strategie-Entwurfsmuster. Wenn mehrere verschiedene Dienstleister denselben Hook nutzen sollen, kann der Aufrufer statt eines einzelnen Attributs eine Liste verwenden. Dann werden mehrere Hook-Implementierungen der Reihe nach aufgerufen. Das geschieht zum Beispiel bei einem Listener, der Benutzerinteraktionen abfängt. Wird die Liste nur so lange abgearbeitet, bis der erste Hook ein bestimmtes Ergebnis zurückliefert, spricht man von einer Zuständigkeitskette.

Betriebssystem-Hooks

Betriebssystem-Hooks unter Windows werden in einer eigenen DLL implementiert. Eine DLL ist eine Programmbibliothek, die von anderen Programmen oder vom Betriebssystem geladen werden kann. Diese Hook-DLL wird vom Betriebssystem ohne einen Programmkontext aufgerufen.

Ein Programm, das einen solchen Hook einsetzt, etwa zur Benachrichtigung über ein Ereignis, muss deshalb auf anderem Weg erfahren, welche Ergebnisse der Code in der DLL liefert. Dafür kann zum Beispiel Interprozesskommunikation verwendet werden, also ein Mechanismus, mit dem verschiedene Prozesse Daten austauschen.

Einbindung und Konfiguration

Ein wichtiges Problem ist, wie das aufrufende Programm erfährt, welche Programmteile die vorhandenen Hooks nutzen wollen.

Die einfachste Möglichkeit ist, den Programmcode direkt zu verändern, damit Zugriff auf die Hooks entsteht. Eine andere Möglichkeit ist die Einbindung über Konfiguration. In der prozeduralen Programmierung kann das über Funktionszeiger geschehen: Dabei wird die Startadresse einer aufzurufenden Unterroutine eingetragen. In der objektorientierten Programmierung kann eine Klasse dynamisch über ihren Namen geladen werden. Diese Klasse implementiert dann als Unterklasse oder als Delegationsobjekt den Code, der vom Hook aufgerufen wird. Auch Dependency Injection kann verwendet werden, um Hooks einfach zu konfigurieren.

Eine dritte Möglichkeit ist, ein Objekt oder eine Funktion über eine Zugriffsfunktion zu setzen. Dieses Objekt oder diese Funktion wird dann vom Hook aufgerufen. Das wird vor allem genutzt, wenn der Hook von einer Programmbibliothek bereitgestellt wird, die von demselben Programmteil verwendet wird, der auch die Hooks nutzen möchte. Ein Beispiel dafür ist ein Listener für Benutzerinteraktionen.

Weiterlesen

Programmierung Beim Programmieren sind wesentliche Aspekte zur Softwarequalität zu berücksichtigen und durch die Gestaltung des Quellcodes umzusetzen. Siehe dazu als Beispiele … Programmcode Als Programmcode (oder Programmkode) werden die Anweisungen bezeichnet, die im Rahmen der Softwareentwicklung für ein bestimmtes Computerprogramm oder einen … Quelltext Quelltext, auch Quellcode (englisch source code) oder unscharf Programmcode genannt, ist in der Informatik der für Menschen lesbare, in einer … Wirkung (Informatik) In der theoretischen Informatik bezeichnet eine (spezifizierte) Wirkung die Veränderung des Zustands, in dem sich eine abstrakte Maschine befindet. Funktion (Programmierung) Eine Funktion (englisch function) ist in der Informatik und in verschiedenen höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, … Objektorientierte Programmierung Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee besteht darin … Vererbung (Programmierung) Die Vererbung dient dazu, aufbauend auf existierenden Klassen neue zu schaffen, wobei die Beziehung zwischen ursprünglicher und neuer Klasse dauerhaft ist. Eine … Delegation (Softwareentwicklung) Delegation (Softwareentwicklung) dynamischer Methodenbindung zur Programmlaufzeit, In der Informatik wird dieses unter anderem in der Forschung zur Künstlichen … Methode (Programmierung) Methoden (englisch method oder member function) sind in der objektorientierten Programmierung Unterprogramme in der Form von Funktionen oder Prozeduren, … Objekt (Programmierung) Ein Objekt in der Programmierung bezeichnet eine inhaltlich zusammengehörige Datenmenge: In der objektorientierten Programmierung wird eine Objektinstanz … Attribut (Programmierung) Ein Attribut (von lateinisch attribuere ‚zuteilen', ‚zuordnen'), auch Eigenschaft genannt, gilt im Allgemeinen als Merkmal, Kennzeichen, Informationsdetail … Liste (Datenstruktur) Eine verkettete Liste ist eine dynamische Datenstruktur, in der Datenelemente geordnet gespeichert sind.