<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Hook_%28Informatik%29</id>
	<title>Hook (Informatik) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Hook_%28Informatik%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Hook_(Informatik)&amp;action=history"/>
	<updated>2026-06-02T17:08:31Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Hook_(Informatik)&amp;diff=623942&amp;oldid=prev</id>
		<title>imported&gt;Siegbert v2: Literatur überarbeitet</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Hook_(Informatik)&amp;diff=623942&amp;oldid=prev"/>
		<updated>2024-02-04T02:11:56Z</updated>

		<summary type="html">&lt;p&gt;Literatur überarbeitet&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Hook&amp;#039;&amp;#039;&amp;#039; ({{enS}} für &amp;#039;&amp;#039;Haken&amp;#039;&amp;#039;, auch &amp;#039;&amp;#039;&amp;#039;Einschubmethode&amp;#039;&amp;#039;&amp;#039; genannt) bezeichnet in der [[Programmierung]] eine [[Schnittstelle]], mit der fremder [[Programmcode]] in eine bestehende Anwendung integriert werden kann, um diese zu erweitern, deren Ablauf zu verändern oder um bestimmte Ereignisse abzufangen. Dies kann entweder im [[Quelltext]] geschehen, der entsprechend modifiziert wird, über [[Konfiguration (Computer)|Konfigurationsdateien]], die den Ablauf eines fertigen [[Computerprogramm|Programms]] verändern, oder über Aufruf von Funktionen, denen der auszuführende Programmcode in irgendeiner Form mitgegeben wird. In der Regel ist das Standardverhalten von Einschubmethoden, gar nichts zu tun.&amp;lt;ref&amp;gt;{{Literatur |Autor=Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides |Titel=Entwurfsmuster |Verlag=Addison-Wesley |Ort=München |Jahr=2011 |ISBN=978-3-8273-3043-7 |Seiten=370 |Originaltitel=Design Patterns |Originalsprache=en |Übersetzer=Dirk Riehle |Online={{Google Buch|BuchID=tmNNfSkfTlcC |Seite=370}} |Zitat=Einschubmethoden, die ein Defaultverhalten anbieten, das von Unterklassen bei Bedarf erweitert werden kann. Eine Einschubmethode macht oftmals per Default gar nichts.}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hooks können auch vom Betriebssystem zum Abfangen von Nachrichten zur Verfügung gestellt werden. Damit lassen sich z.&amp;amp;nbsp;B. systemweite [[Tastenkombination|Hotkeys]] implementieren.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Karl Bridge et al. |url=https://learn.microsoft.com/en-us/windows/win32/winmsg/about-hooks |titel=Hooks Overview |werk=learn.microsoft.com |hrsg=Microsoft |datum=2022-09-02 |sprache=en |abruf=2024-02-04}}&amp;lt;/ref&amp;gt; So können zum Beispiel über einen Hook die Tastatur-Nachrichten unabhängig von dem Programm, welches aktuell den Fokus hat, empfangen werden.&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
&lt;br /&gt;
Es gibt mehrere Möglichkeiten, Hooks zu implementieren.&lt;br /&gt;
&lt;br /&gt;
Wenn der Quelltext des zu erweiternden Programms vorliegt, lassen sich prinzipiell immer Erweiterungen vornehmen. Sofern der Code jedoch nicht genau bekannt ist, ist dieses aufwendig, weil diese Erweiterung eventuell umfangreiche Veränderungen erfordert, die obendrein unerwünschte [[Wirkung (Informatik)|Nebenwirkungen]] haben können und zudem mit jeder neuen Version neu eingepflegt werden müssten.&lt;br /&gt;
&lt;br /&gt;
Daher definieren manche Programme bestimmte Stellen, die explizit dazu vorgesehen sind, von anderen erweitert zu werden. Dies kann dadurch geschehen, dass eine [[Funktion (Programmierung)|Funktion]] aufgerufen wird, die im ursprünglichen Programm leer implementiert ist, also nichts bewirkt. Diese kann dann gefahrlos auf eine fremdimplementierte Funktion umgelenkt werden. Die ursprünglich leere Funktion ist dann der Hook.&lt;br /&gt;
&lt;br /&gt;
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] geschieht dies durch [[Vererbung (Programmierung)|Vererbung]] oder durch [[Delegation (Softwareentwicklung)|Delegation]]:&lt;br /&gt;
* Im Falle der Vererbung sind die Hooks leere [[Methode (Programmierung)|Methoden]], die in [[Subklasse|Unterklassen]] ausimplementiert werden können. Ein Beispiel ist das Entwurfsmuster der [[Schablonenmethode]]; hier werden mehrere Methoden hintereinander als Hooks aufgerufen, um Algorithmen mit festem Ablaufrahmen spezialisieren zu können.&lt;br /&gt;
* Im Falle der Delegation wird ein Hook in Form eines [[Objekt (Programmierung)|Objektes]] als [[Attribut (Programmierung)|Attribut]] an den Aufrufer übergeben. Dieses Objekt muss eine bestimmte Schnittstelle implementieren. Ein Beispiel stellt das [[Strategie (Entwurfsmuster)|Strategie-Entwurfsmuster]] dar. Wenn zu erwarten ist, dass der Hook von mehreren unterschiedlichen Dienstleistern genutzt werden wird, kann der Aufrufer den Hook in Form einer [[Liste (Datenstruktur)|Liste]] anstelle eines einfachen Attributs implementieren, sodass mehrere Implementierungen des Hooks der Reihe nach aufgerufen werden können. Dieses geschieht zum Beispiel im Falle eines [[Beobachter (Entwurfsmuster)|Listeners]], um Benutzerinteraktionen abzufangen. Wenn die Liste nur soweit abgearbeitet wird, bis der erste implementierte Hook ein bestimmtes Ergebnis zurückliefert, hat man eine [[Zuständigkeitskette]].&lt;br /&gt;
&lt;br /&gt;
Betriebssystem-Hooks unter [[Windows]] werden in einer eigenen [[Dynamic Link Library|DLL]] implementiert, welche vom [[Betriebssystem]] ohne einen Programmkontext aufgerufen wird. Somit muss ein Programm, welches einen Hook (z.&amp;amp;nbsp;B. zur Benachrichtigung über ein Ereignis) implementiert, seine Ergebnisse über andere Mechanismen von dem in der DLL enthaltenen Code erfahren (z.&amp;amp;nbsp;B. mittels [[Interprozesskommunikation]]).&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Es bleibt die Frage, wie das aufrufende Programm Kenntnis von den Programmteilen erlangt, die die bereitgestellten Hooks nutzen wollen.&lt;br /&gt;
&lt;br /&gt;
Im einfachsten Fall wird der Programmcode direkt verändert, um Zugriff auf die Hooks zu erlangen.&lt;br /&gt;
&lt;br /&gt;
Oder es wird Programmcode über Konfigurationen eingebunden. Dies kann in der [[Prozedurale Programmierung|prozeduralen Programmierung]] über [[Zeiger (Informatik)|Funktionszeiger]] geschehen, indem eine aufzurufende [[Unterprogramm|Unterroutine]] mit ihrer Startadresse eingetragen wird. In der objektorientierten Programmierung wird dagegen eine [[Klasse (Objektorientierung)|Klasse]] über ihren Namen dynamisch geladen; diese Klasse implementiert dann als Unterklasse oder als Delegationsobjekt den vom Hook aufgerufenen Code. Wird [[Dependency Injection]] verwendet, so lassen sich hierüber ebenfalls einfach Hooks konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Eine dritte Möglichkeit besteht darin, ein Objekt oder eine Funktion, welche vom Hook aufgerufen werden soll, über eine [[Zugriffsfunktion]] zu setzen. Dies wird dann gemacht, wenn der Hook von einer [[Programmbibliothek]] bereitgestellt wird, das vom selben Programmteil verwendet wird, welches auch die Hooks nutzen wird. Genutzt wird das beispielsweise beim Listener für Benutzerinteraktionen, welcher oben bereits genannt wurde.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Rückruffunktion]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Siegbert v2</name></author>
	</entry>
</feed>