<?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=Delegation_%28Softwareentwicklung%29</id>
	<title>Delegation (Softwareentwicklung) - 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=Delegation_%28Softwareentwicklung%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Delegation_(Softwareentwicklung)&amp;action=history"/>
	<updated>2026-06-21T21:28:17Z</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=Delegation_(Softwareentwicklung)&amp;diff=628759&amp;oldid=prev</id>
		<title>imported&gt;GünniX: Archivlink geprüft</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Delegation_(Softwareentwicklung)&amp;diff=628759&amp;oldid=prev"/>
		<updated>2022-08-03T04:43:33Z</updated>

		<summary type="html">&lt;p&gt;Archivlink geprüft&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;Delegation&amp;#039;&amp;#039;&amp;#039; (von {{enS|delegation}} ‚Abordnung‘, ‚Übertragung‘) hat in der [[Objektorientierte Programmierung|objektorientierten Programmierung]] verschiedene Bedeutungen, die alle mit dynamischer [[Methode (Programmierung)|Methodenbindung]] zur [[Laufzeit (Informatik)|Programmlaufzeit]] zu tun haben:&lt;br /&gt;
* insbesondere in [[.NET (Plattform)|.NET]]-Sprachen wie [[C-Sharp|C#]] eine objektorientierte Variante von [[Methodenzeiger]]n.&amp;lt;ref&amp;gt;Dirk Louis und Shinja Strasser, &amp;#039;&amp;#039;Microsoft Visual C# 2008 – Das Entwicklerbuch&amp;#039;&amp;#039;, Microsoft Press Deutschland, 2008, ISBN 978-3-86645-507-8, Kapitel &amp;#039;&amp;#039;Delegaten und Ereignisse&amp;#039;&amp;#039;&amp;lt;/ref&amp;gt;&lt;br /&gt;
* objektbasierte Vererbung (im Gegensatz zur üblichen [[Vererbung (Programmierung)|klassenbasierten Vererbung]]). Hierbei übernimmt ein Objekt (automatisch) Eigenschaften und Funktionalitäten, die es selbst nicht explizit definiert, von einem anderen konkreten Objekt, seinem Prototyp&amp;lt;ref&amp;gt;Henry Lieberman, [http://web.media.mit.edu/~lieber/Lieberary/OOP/Delegation/Delegation.html &amp;#039;&amp;#039;Using Prototypical Objects to Implement Shared Behavior in Object Oriented Systems&amp;#039;&amp;#039;], in: OOPSLA, 1986, S. 214–223.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Günter Kniesel, {{Webarchiv |url=http://www.st.informatik.tu-darmstadt.de:8080/lehre/ss02/aose/Papiere/Thema2/dca.ecoop99-revised.pdf |text=&amp;#039;&amp;#039;Type-Safe Delegation for Run-Time Component Adaption&amp;#039;&amp;#039; |wayback=20131212091824}} (PDF; 72&amp;amp;nbsp;kB), ECOOP &amp;#039;99 Proceedings of the 13th European Conference on Object-Oriented Programming, Springer-Verlag London, 1999, table of contents ISBN 3-540-66156-5.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* ursprünglich die Implementierung von Methoden eines Objekts durch Aufruf äquivalenter Methoden eines anderen Objekts, auch {{enS|consultation}} (für Absprache, Beratung) oder &amp;#039;&amp;#039;invocation&amp;#039;&amp;#039; (Aufruf) genannt.&amp;lt;ref&amp;gt;Zur begrifflichen Abgrenzung siehe {{Webarchiv |url=http://javalab.cs.uni-bonn.de/research/darwin/delegation.html |text=&amp;#039;&amp;#039;Darwin Projekt – What is (Not) Delegation&amp;#039;&amp;#039; |wayback=20130213121202}}, Uni Bonn (englisch)&amp;lt;/ref&amp;gt; Diese Variante passt zu den Entwurfsmustern [[Stellvertreter (Entwurfsmuster)|Proxy]] und [[Adapter (Entwurfsmuster)|Adapter]].&lt;br /&gt;
* Die Sprache &amp;#039;&amp;#039;[[Objective-C]]&amp;#039;&amp;#039; kennt das Schlüsselwort &amp;#039;&amp;#039;&amp;#039;delegate&amp;#039;&amp;#039;&amp;#039; als [[Objective-C#Syntax|Funktionalitätsspezialisierung]]: Hier kann ein Objekt zur Laufzeit nach einer beliebigen Funktionalität (Methode) befragt werden. Diese wird dann im Kontext des fragenden Objekts eventuell ausgeführt, als sei sie Teil des fragenden Objekts.&lt;br /&gt;
&lt;br /&gt;
== Hintergrund ==&lt;br /&gt;
Im Bereich der [[Objektorientierte Programmierung|objektorientierten Programmierung]] kann in manchen Fällen durch [[Vererbung (Programmierung)|Vererbung]] oder gängige Beziehungsarten wie die [[Interaktion (Informatik)|Interaktion]] oder [[Aggregation (Informatik)|Aggregation]] keine zufriedenstellende Trennung von [[Dienst (Informatik)|Dienstanbieter]] und -nutzer garantiert werden.&amp;lt;ref&amp;gt;Ulrich Frank und Sören Halter, &amp;quot;[http://www.wi-inf.uni-due.de/FGFrank/documents/Zeitschriftenartikel/Mobis96.pdf Delegation: Eine sinnvolle Ergänzung gängiger objektorientierter Modellierungskonzepte] (PDF; 147&amp;amp;nbsp;kB)&amp;quot;, Informationssystem-Architektur. Rundbrief des GI-Fachausschusses 5.2, 3. Jg., Heft 1, Sept. 1996, S. 16–19.&amp;lt;/ref&amp;gt; Alle zuvor genannten Konzepte erfordern eine Bindung schon vor der Laufzeit. Wird der Dienstanbieter verändert, können die Nutzer diesen unter Umständen nicht mehr nutzen, da sie seine Schnittstellen nicht mehr verstehen. Die Delegation bietet in solchen Fällen eine für die Nutzer konstante Schnittstelle und delegiert die Aufrufe an eine darunter liegende Schicht. In der Informatik wird dieses unter anderem in der Forschung zur [[Künstliche Intelligenz|Künstlichen Intelligenz]] seit langem verwendet.&lt;br /&gt;
&lt;br /&gt;
== Als Entwurfsmuster ==&lt;br /&gt;
In den [[Entwurfsmuster (Buch)|Entwurfsmustern]] der &amp;#039;&amp;#039;[[Entwurfsmuster (Buch)|Gang of Four]]&amp;#039;&amp;#039; (engl. für &amp;#039;&amp;#039;Viererbande&amp;#039;&amp;#039;) wird statt des allgemeinen Delegate vom [[Stellvertreter (Entwurfsmuster)|Proxy]] oder dem [[Adapter (Entwurfsmuster)|Adapter]] gesprochen. Im Allgemeinen kennt der Nutzer eines Dienstes nur die Schnittstelle zu einem Vertreter der Diensterbringung und das Protokoll, d.&amp;amp;nbsp;h. wie die Schnittstelle benutzt werden muss. Der Vertreter verbirgt die Diensterbringung hinter mehr oder weniger dynamischen Verfahren zur Ermittlung eines konkreten Dienstleisters. Eine Aufbereitung der übergebenen Daten ist möglich. Außerdem kann der Vertreter Fehler- und Ausnahmesituationen erkennen und sogar geeignete Maßnahmen wie die Auswahl von Alternativen der Delegation bieten.&lt;br /&gt;
&lt;br /&gt;
== Als Sprachelement ==&lt;br /&gt;
Die einfache Definition der Delegation ist, dass die Funktionsaufrufe das identische Verhalten wie [[Virtuelle Methode|virtuelle Funktionsaufrufe]] aufweisen, es wird immer die am meisten spezifizierte Funktion aufgerufen. Respektive ist es die Originalfunktion, welche den Anfang des sogenannten &amp;#039;&amp;#039;lookups&amp;#039;&amp;#039; (engl. für „Nachschlag“) darstellt, selbst wenn es die Kontrolle einem anderen Objekt übertragen hat. Die Delegation besitzt den Vorteil, dass sie zur Laufzeit erfolgen kann. Sie kann auch während der Laufzeit wieder rückgängig gemacht werden. Die Vererbung könnte auch Funktionsaufrufe derart zusammenfassen, zielt auf den Typ einer Entität und ist auf die Kompilierungszeit beschränkt. Der Nachteil der Delegation ist, dass sie nicht vollständig als typsicher betrachtet werden kann (G. Kniesel zeigte allerdings, dass eine beschränkte Version typsicher sein kann). Die Delegation kann auch als „Laufzeitvererbung für spezifische Objekte“ bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Programmiersprachen unterstützen normalerweise das Konzept der Delegation nicht, allerdings existieren ein paar Ausnahmen: [[ECMAScript]], [[Self (Programmiersprache)|Self]], G. Kniesels Lava&amp;lt;ref&amp;gt;{{Webarchiv |url=http://www.informatik.uni-bonn.de/~gk/ |text=Lava |wayback=20090529063016}}, Uni Bonn&amp;lt;/ref&amp;gt;, sowie das [[Tcl]] Objektsystem [[Tcl#Erweiterungen|Snit]]. Lava benutzt einen expliziten Delegationslink, welcher nie null sein kann und sich nie während der Lebenszeit eines Objektes ändert. Self besitzt das Sprachelement der expliziten &amp;#039;&amp;#039;parent slots&amp;#039;&amp;#039;, welche sich zur Laufzeit verändern können. Da viele &amp;#039;&amp;#039;parent slots&amp;#039;&amp;#039; vorhanden sind, besitzt Self grundsätzlich die Fähigkeit der mehrfachen Vererbung. Die Delegation in [[Self (Programmiersprache)|Self]] wird durch das Sprachelement &amp;#039;&amp;#039;mutable parent slots&amp;#039;&amp;#039; realisiert. Dieses Konzept wird in einer Reihe von Arbeiten in der Literatur über objektorientierter Systementwicklung erläutert, allerdings ist zu beachten, dass keine einheitliche Terminologie existiert. Wie auch bei der unten beschriebenen dualen Vererbung bedarf es eines sorgsam entworfenen Funktions-lookup Schemas.&lt;br /&gt;
&lt;br /&gt;
== Duale Vererbung ==&lt;br /&gt;
Wenn die Programmiersprache die Delegation und die Vererbung unterstützt, kann man die duale Vererbung einsetzen, indem man beide Mechanismen gleichzeitig benutzt&amp;lt;ref&amp;gt;K. B. Graversen, and K. Østerbye, {{Webarchiv |url=http://aosd.net/workshops/splat/2003/papers/Kasper_Graversen.pdf |text=“Implementation of a Role Language for Object-Specific Dynamic Separation of Concerns” |wayback=20081121225649 |archiv-bot=2019-03-12 08:18:05 InternetArchiveBot}} (PDF; 405&amp;amp;nbsp;kB), AOSD Workshop SPLAT: Software engineering Properties of Languages for Aspect Technologies, March 2003.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 class C extends A&lt;br /&gt;
 {&lt;br /&gt;
     delegationlink D d&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In diesem Beispiel sind zusätzliche Regeln bezüglich des &amp;#039;&amp;#039;lookup&amp;#039;&amp;#039; der Funktionen nötig, da zwei Funktionen als potentiell am meisten spezifiziert bezeichnet werden können. Dies wird in K. Graversens Promovierungsthese bezüglich Regeln ausgearbeitet.&lt;br /&gt;
&lt;br /&gt;
== Verwandte Bereiche ==&lt;br /&gt;
Delegation kann als low-level Mechanismus beschrieben werden, welcher dazu dient, Code zwischen zwei Entitäten auszutauschen. Insbesondere objektorientierte Programmiersprachen benutzen die Delegation. Vornehmlich ältere Programmiersprachen geben an, Delegation zu beherrschen, obwohl sie faktisch die Aggregation umsetzen, was mit den unterschiedlichen Definitionen der Delegation zusammenhängt.&lt;br /&gt;
&lt;br /&gt;
Seit neuerer Zeit wird die Forschung zu verteilter Delegation im Bereich der Suchmaschinen betrieben. Clients einer Suchmaschine benutzen eine verteilte Entität, welche die besten Suchergebnisse sowie allgemeine, wiederbenutzbare Funktionalität zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Die Delegation wurde als Lösungsansatz in der [[Aspektorientierte Programmierung|aspektorientierten Programmierung]] von Ernst und Lorenz im Jahr 2003 vorgeschlagen.&lt;br /&gt;
&lt;br /&gt;
Die Delegation stellt in prototypenbasierten Programmiersprachen wie [[JavaScript#Delegationsprinzipien|JavaScript]] eine fundamentale Programmiertechnik dar.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Delegate (CLI)]]&lt;br /&gt;
* [[Adapter (Entwurfsmuster)]]&lt;br /&gt;
* [[Hook (Informatik)]]&lt;br /&gt;
* [[Liskovsches Substitutionsprinzip]]&lt;br /&gt;
* [[Wrapper (Software)]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://javalab.cs.uni-bonn.de/research/darwin/ The Darwin Project – Die Lava Programmiersprache und allgemeine Artikel über die Delegation]&lt;br /&gt;
* [http://www.codeproject.com/kb/cpp/FastDelegate.aspx Schnelle Delegate in C++]&lt;br /&gt;
* [http://www.codeproject.com/kb/cpp/CppDelegateImplementation.aspx Eine neue Art Delegate in C++ zu implementieren]&lt;br /&gt;
* [http://perfectjpattern.sourceforge.net/delegates.html PerfectJPattern Open Source Project] – stellt eine wiederbenutzbare Java-implementation von Delegaten zur Verfügung&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Objektorientierte Programmierung]]&lt;br /&gt;
[[Kategorie:Entwurfsmuster]]&lt;/div&gt;</summary>
		<author><name>imported&gt;GünniX</name></author>
	</entry>
</feed>