Hvad er en mixin?
I computerprogrammering er en mixin en klasse, der er arvet af en anden klasse, men ikke er beregnet til at blive instantieret. En enkelt klasse kan arve mange mixins, så mange samlinger af funktioner kan let konsolideres. Selvom mange almindelige programmeringssprog bruger Mixin -metodikken, er der mange flere, der ikke gør det, inklusive C ++ og Java. Generelt findes mixins på scripting -sprog eller de sprog, der har evnen til at skabe scripts, såsom JavaScript og Perl.
mixins er unikke, idet de bliver en del af en underklasse under samlingen. Deres metoder og konstanter er inkluderet i underklassen. En anden unik egenskab ved mixin -klasser er, at metoder kan defineres og bundet til objekter ved runtime. De fleste sprog bruger en anden tilgang, binding og definerende metoder på kompileringstid snarere end runtime. Denne runtime -binding gør det muligt for mixins at være meget fleksibel.
En fælles ProblEm i flere arv er tvetydighed i metodeopkald, og mixins kan løse dette problem, fordi de ikke følger nøjagtigt de samme regler som flere arv. F.eks. Kan multiple arv skabe en såkaldt "Diamond of Death", hvor en forældreklasse A har underklasser B og C, og en klasse D arver fra både klasser B og C. Problemet i dette scenarie er, at metoder, der har samme navn i klasser A, B og C, alle kan være arvet til klasse D, hvilket gør flere versioner af samme metode uden klare sondringer. Mixins løser dette problem ved at holde hver version af metoden distinkt i stedet for at forsøge at overskrive dem som i standard multiple arv.
mixins tilsidesætter ikke metoder i klasser, hvor de er arvet. For eksempel, hvis en klasse A definerede en metode "MyMethod" og arvet en mixin B, der også definerede metoden "MyMethod", kunne begge disse metoder stadig kaldes uden tvetydighed, og implementeringen af "MyMethod" i klasse Aville stadig være helt tilgængelig. Præcis hvordan disse metoder ville blive kaldt afhænger af det sprog, hvor mixin implementeres.
Nogle programmeringssprog, der ikke bruger mixins, såsom Java, bruger grænseflader til at efterligne dem. Grænseflader på disse sprog emulerer ikke den fulde funktionalitet af mixins, fordi grænseflader kun kan indeholde konstanter og metodeklarationer. Mixins kan på den anden side indeholde fulde implementeringer af metoder. De sprog, der ikke understøtter mixins, har ofte levedygtige alternativer, der kan lokkes til at gøre omtrent den samme ting.