Wat is een mixin?

In computerprogrammering is een mixin een klasse die wordt geërfd door een andere klasse maar die niet is bedoeld om te worden geïnstantieerd. Een enkele klasse kan veel mixins erven, dus veel collecties met functies kunnen eenvoudig worden geconsolideerd. Hoewel veel veelgebruikte programmeertalen de mixin-methode gebruiken, zijn er nog veel meer die dat niet doen, waaronder C ++ en Java. Over het algemeen worden mixins gevonden in scripttalen of in die talen die scripts kunnen maken, zoals JavaScript en Perl.

Mixins zijn uniek omdat ze tijdens het compileren deel uitmaken van een subklasse. Hun methoden en constanten zijn opgenomen in de subklasse. Een ander uniek kenmerk van mixin-klassen is dat methoden tijdens runtime kunnen worden gedefinieerd en aan objecten worden gebonden. De meeste talen gebruiken een andere aanpak, bindende en definiërende methoden tijdens het compileren in plaats van runtime. Door deze looptijdbinding kunnen mixins zeer flexibel zijn.

Een veel voorkomend probleem bij meervoudige overerving is dubbelzinnigheid bij het aanroepen van methoden, en mixins kunnen dit probleem oplossen omdat ze niet precies dezelfde regels volgen als meervoudige overerving. Meerdere overerving kan bijvoorbeeld een zogenaamde 'diamanten des doods' creëren, waarbij een ouderklasse A subklassen B en C heeft en een klasse D van beide klassen B en C ervaart. Het probleem in dit scenario is dat methoden die dezelfde naam in klassen A, B en C kan allemaal worden overgeërfd in klasse D, waardoor meerdere versies van dezelfde methode zonder duidelijk onderscheid worden gemaakt. Mixins lossen dit probleem op door elke versie van de methode apart te houden in plaats van te proberen ze te overschrijven zoals bij standaard multiple inheritance.

Mixins hebben geen voorrang op methoden in klassen waarin ze zijn geërfd. Als een klasse A bijvoorbeeld een methode "myMethod" definieerde en een mixin B erfde die ook methode "myMethod" definieerde, zouden beide methoden nog steeds zonder dubbelzinnigheid kunnen worden aangeroepen, en de implementatie van "myMethod" in klasse A zou nog steeds volledig toegankelijk. Hoe deze methoden precies worden genoemd, hangt af van de taal waarin de mix is ​​geïmplementeerd.

Sommige programmeertalen die geen mixins gebruiken, zoals Java, gebruiken interfaces om ze na te bootsen. Interfaces in deze talen emuleren niet de volledige functionaliteit van mixins, omdat interfaces alleen constanten en methodedeclaraties kunnen bevatten. Mixins kunnen daarentegen volledige implementaties van methoden bevatten. De talen die geen mixins ondersteunen, hebben vaak haalbare alternatieven die kunnen worden overgehaald om ongeveer hetzelfde te doen.

ANDERE TALEN

heeft dit artikel jou geholpen? bedankt voor de feedback bedankt voor de feedback

Hoe kunnen we helpen? Hoe kunnen we helpen?