<?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=Mixin</id>
	<title>Mixin - 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=Mixin"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Mixin&amp;action=history"/>
	<updated>2026-05-28T22:56:25Z</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=Mixin&amp;diff=1620384&amp;oldid=prev</id>
		<title>imported&gt;Sebastian.Dietrich: /* Programmiersprachen, die Mixins verwenden */ auch bei java</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Mixin&amp;diff=1620384&amp;oldid=prev"/>
		<updated>2024-12-14T09:31:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Programmiersprachen, die Mixins verwenden: &lt;/span&gt; auch bei java&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Als &amp;#039;&amp;#039;&amp;#039;Mixin&amp;#039;&amp;#039;&amp;#039; wird in der [[Objektorientierte Programmierung|objektorientierten Programmierung]] ein zusammengehöriges, mehrfach verwendbares Bündel von Funktionalität bezeichnet, das zu einer [[Klasse (Programmierung)|Klasse]] hinzugefügt werden kann. Von manchen [[Programmiersprache]]n werden Mixins direkt unterstützt, beispielsweise von [[Ruby (Programmiersprache)|Ruby]], [[Scala (Programmiersprache)|Scala]], [[Tcl|Tool Command Language]] oder [[Go (Programmiersprache)|Go]]. In anderen Sprachen wird dieses [[Entwurfsmuster]] abhängig von den Möglichkeiten der jeweiligen Programmiersprache beispielsweise mittels &amp;#039;&amp;#039;&amp;#039;Mixin-Klassen&amp;#039;&amp;#039;&amp;#039; in Verbindung mit [[Mehrfachvererbung]] oder, wie z.&amp;amp;nbsp;B. in [[JavaScript#Delegationsprinzipien|JavaScript]],&amp;lt;ref&amp;gt;[http://peterseliger.blogspot.de/2014/06/die-vielen-talente-von-javascript.html#die-vielen-talente-von-javascript-rollen-orientierte-programmieransätze-wie-traits-und-mixins-verallgemeinern-zu-können Die vielen Talente von JavaScript Rollen-orientierte Programmieransätze wie Traits und Mixins verallgemeinern zu können], 5. Juni 2014.&amp;lt;/ref&amp;gt; mittels [[Generische Programmierung|generischer Programmierung]] umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Im Unterschied zu [[Schnittstelle (Objektorientierung)|Schnittstellen]] &amp;#039;&amp;#039;(interface)&amp;#039;&amp;#039;, wie sie beispielsweise in [[Java (Programmiersprache)|Java]] und [[C-Sharp|C#]] üblich sind, enthält ein Mixin aber typischerweise bereits Funktionalität, die verwendet werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein [[Trait (Programmierung)|Trait]] ist eine besondere Form eines Mixins mit einer flexibleren Integration in Klassen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
[[Datei:MixinPgmExample.svg|mini|hochkant=1.8|Modellierung eines Schachspiels ([[Unified Modeling Language|UML]]) und Mixin für [[Persistenz (Informatik)|Persistenz]]]]&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel stellt einen Anwendungsfall des Mixin-Entwurfsmusters dar. Es enthält eine Klassenhierarchie, die ein [[Schach]]spiel modelliert. In diesem Modell ist es für die Klassen &amp;lt;code&amp;gt;Zugfolge&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Spielstellung&amp;lt;/code&amp;gt; angebracht, diese [[Persistenz (Informatik)|persistent]] machen zu können. Das bedeutet, dass Objekte dieser Klassen in einem nicht-flüchtigen [[Datenspeicher|Speichermedium]] –&amp;amp;nbsp;beispielsweise einer [[Datenbank]]&amp;amp;nbsp;– gespeichert und aus diesem wieder rekonstruiert werden können. Für andere Klassen dieses Modells ist die Unterstützung einer Persistenz dagegen nicht sinnvoll.&lt;br /&gt;
&lt;br /&gt;
Das Mixin &amp;lt;code&amp;gt;Persistenz&amp;lt;/code&amp;gt; könnte die Methoden &amp;lt;code&amp;gt;StoreInDatabase&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;RestoreFromDatabase&amp;lt;/code&amp;gt; enthalten und mittels dieser ein Objekt der Klassen, bei denen dieses Mixin eingebunden wird, in der Datenbank speichern beziehungsweise aus dieser rekonstruieren.&lt;br /&gt;
&lt;br /&gt;
== Mixins und Vererbung ==&lt;br /&gt;
Während in Sprachen wie [[C++]] und [[Eiffel (Programmiersprache)|Eiffel]] Mixins als Klassen unter Verwendung von [[Mehrfachvererbung]] abgebildet werden, gibt es auch die Sichtweise, eine Mixin-basierte Vererbung als Verallgemeinerung des in klassischen objektorientierten Sprachen wie [[Smalltalk (Programmiersprache)|Smalltalk]] oder [[Simula]] implementierten [[Vererbung (Programmierung)|Vererbungmechanismus]] zu sehen. Wenn man Vererbung als inkrementellen Mechanismus betrachtet, der eine Basisklasse (B) modifiziert, ist das Ergebnis (E) eine Art Kombination der Basisklasse mit einer Modifikation (M). Dies lässt sich folgendermaßen formulieren:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = B \, \triangle \, M = B + M(B)&amp;lt;/math&amp;gt;&lt;br /&gt;
Bei der Vererbung in konventioneller Form hat die Modifikation (M) keine unabhängige Existenz, sie ist Teil des Ergebnisses (E). Im Gegensatz dazu geht man bei der Mixin-basierenden Vererbung vom Standpunkt aus, dass die Modifikation eine Abstraktion ist, die unabhängig von der Basisklasse (B) und dem Ergebnis ist. Diese Modifikation ist das Mixin, das Symbol &amp;lt;math&amp;gt;\triangle&amp;lt;/math&amp;gt; steht für die &amp;#039;&amp;#039;Mixin Application&amp;#039;&amp;#039;, also die Anwendung des Mixins.&lt;br /&gt;
&lt;br /&gt;
== Programmiersprachen, die Mixins verwenden ==&lt;br /&gt;
In einzelnen Programmiersprachen sind Mixins Teil der Programmiersprache selbst. Beispiele hierfür sind die Programmiersprachen [[Object REXX|ooRexx]], [[Ruby (Programmiersprache)|Ruby]]&amp;lt;ref&amp;gt;Ruby und Mixins: [http://www.ruby-lang.org/de/about/ Webseite des Herstellers]&amp;lt;/ref&amp;gt; und [[Tcl|Tool Command Language]].&amp;lt;ref&amp;gt;Mixin in TclOO: [https://www.tcl.tk/man/tcl/TclCmd/define.htm#M13 Webseite des Herstellers]&amp;lt;/ref&amp;gt; Teilweise kann die Mixin-Funktionalität in anderen Programmiersprachen mit externen Bibliotheken realisiert werden (etwa [[Java (Programmiersprache)|Java]]&amp;lt;ref&amp;gt;Beispiel für Java mit CGLIB: [https://github.com/literadix/JavaMixins Multiple class inheritance in Java made easy]&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Seit [[C-Sharp|C#]] 8.0 und Java 8 können Schnittstellen Standardimplementierungen haben, wodurch eine Mixin-Funktionalität möglich ist.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Bill Wagner |url=https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/mixins-with-default-interface-methods |titel=Create mixin types using default interface methods |werk=Microsoft technical documentation |hrsg=Microsoft |datum=2021-09-15 |sprache=en-us |abruf=2022-04-18}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine umfangreiche Liste von Programmiersprachen, die Mixins unterstützen, kann im englischsprachigen Wikipedia-Artikel zu Mixins nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Iain D. Craig: &amp;#039;&amp;#039;Object-Oriented Programming Languages: Interpretation&amp;#039;&amp;#039;. Springer Verlag, London 2007, ISBN 1-84628-773-1&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.cs.utexas.edu/~wcook/papers/MixinBasedInheritance/MixinBasedInheritance.pdf Gilad Bracha, William Cook: &amp;#039;&amp;#039;Mixin-based Inheritance&amp;#039;&amp;#039;.] (PDF; 172&amp;amp;nbsp;kB)&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;/div&gt;</summary>
		<author><name>imported&gt;Sebastian.Dietrich</name></author>
	</entry>
</feed>