Skip to main content

Hva er en mixin?

I dataprogrammering er en mixin en klasse som arves av en annen klasse, men ikke er ment å bli instantiert.En enkelt klasse kan arve mange mixins, 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 i 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.En annen unik egenskap ved mixin -klasser er at metoder kan defineres og bundes til objekter ved kjøretid.De fleste språk bruker en annen tilnærming, bindende og definerende metoder på kompileringstidspunktet i stedet for kjøretid.Denne runtime -bindingen gjør at mixins kan være veldig fleksibel.

Et vanlig problem i flere arv er uklarhet i metodekalling, 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 dødsdiamant, der en foreldreklasse 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 sammeNavn i klasse A, B og C kan alle arves til klasse D, noe som gjør flere versjoner av den samme metoden uten klare distinksjoner.Mixins løser dette problemet ved å holde hver versjon av metoden distinkt, i stedet for å prøve å overskrive dem som i standard flere arv.

Mixins overstyrer ikke metoder i klasser de er arvet i.For eksempel, hvis en klasse A definerte en metode mymetod og arvet en mixin B som også definerte metode -mymetod, kan begge disse metodene fremdeles kalles uten tvetydighet, og implementeringen av mymetod i klasse A ville 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 mixins, for eksempel Java, bruker grensesnitt for å etterligne dem.Grensesnitt på disse språkene etterligner ikke den fulle funksjonaliteten til mixins, fordi grensesnitt bare kan inneholde konstanter og metodedeklarasjoner.Mixins, derimot, kan inneholde fulle implementeringer av metoder.Disse språkene som ikke støtter mixins har ofte levedyktige alternativer som kan kokes for å gjøre omtrent det samme.