Hva er en Mixin?
I programmering av datamaskiner er en mixin en klasse som er arvet av en annen klasse, men ikke er ment å bli formidlet. En enkelt klasse kan arve mange blandinger, så mange samlinger av funksjoner kan enkelt konsolideres. Selv om mange vanlige programmeringsspråk bruker mixin-metodikken, er det mange flere som ikke gjør det, inkludert C ++ og Java. Generelt finnes mixins på skriptspråk eller de språkene som har muligheten til å lage skript, for eksempel JavaScript og Perl.
Mixins er unike ved at de blir en del av en underklasse under samlingen. Deres metoder og konstanter er inkludert i underklassen. Et annet unikt trekk ved blandingsklasser er at metoder kan defineres og bindes til objekter under kjøretid. De fleste språk bruker en annen tilnærming, bindende og definerende metoder på kompileringstid i stedet for kjøretid. Denne bindingstiden gjør at mixins kan være veldig fleksible.
Et vanlig problem i flere arv er uklarhet i metodeanrop, og mixins kan løse dette problemet fordi de ikke følger nøyaktig de samme reglene som flere arv. For eksempel kan flere arv skape en såkalt "diamant av død", der en overordnet klasse A har underklasser B og C, og en klasse D arver fra både klasse B og C. Problemet i dette scenariet er at metoder som har det samme navnet i klasse A, B og C kan alle arves i klasse D, noe som lager flere versjoner av samme metode uten klare skiller. Mixins løser dette problemet ved å holde hver versjon av metoden distinkt, i stedet for å forsøke å overskrive dem som i standard multiple arv.
Mixins tilsidesetter ikke metoder i klasser de er arvet i. Hvis for eksempel en klasse A definerte en metode "myMethod" og arvet en mixin B som også definerte metode "myMethod", kan begge disse metodene fremdeles kalles uten tvetydighet, og implementeringen av "myMethod" i klasse A vil fortsatt være helt tilgjengelig. Nøyaktig hvordan disse metodene vil bli kalt, avhenger av språket som mixin implementeres i.
Noen programmeringsspråk som ikke bruker mikser, for eksempel Java, bruker grensesnitt for å etterligne dem. Grensesnitt på disse språkene emulerer ikke full funksjonalitet for mixins, fordi grensesnitt bare kan inneholde konstanter og metodedeklarasjoner. Mixins kan derimot inneholde fulle implementeringer av metoder. De språkene som ikke støtter mikser, har ofte levedyktige alternativer som kan kobles til å gjøre omtrent det samme.