Skip to main content

Cos'è un mixin?

Nella programmazione di computer, una miscela è una classe ereditata da un'altra classe ma non è pensata per essere istanziata.Una singola classe può ereditare molti mixin, quindi molte raccolte di funzioni possono essere facilmente consolidate.Sebbene molti linguaggi di programmazione comuni utilizzino la metodologia Mixin, ce ne sono molti altri che non lo fanno, tra cui C ++ e Java.In generale, i mixin si trovano nei linguaggi di scripting o in quelle lingue che hanno la capacità di creare script, come JavaScript e Perl.

I mixin sono unici in quanto diventano parte di una sottoclasse durante la compilazione.I loro metodi e costanti sono inclusi nella sottoclasse.Un altro tratto unico delle classi di mixin è che i metodi possono essere definiti e legati agli oggetti in fase di esecuzione.La maggior parte delle lingue utilizza un approccio diverso, i metodi vincolanti e definiti al momento della compilazione anziché in fase di esecuzione.Questo legame in runtime consente ai mixin di essere molto flessibili.

Un problema comune nella eredità multipla è l'ambiguità nella chiamata del metodo e i mixin possono risolvere questo problema perché non seguono esattamente le stesse regole della eredità multipla.Ad esempio, l'eredità multipla può creare un cosiddetto diamante di morte, in cui una classe A genitore ha le sottoclassi B e C e A eredita eredita di classe D da entrambe le classi B e C. Il problema in questo scenario sono che hanno gli stessi metodiIl nome nelle classi A, B e C può essere ereditato nella Classe D, creando più versioni dello stesso metodo senza distinzioni chiare.I mixin risolvono questo problema mantenendo distinta ogni versione del metodo, piuttosto che tentare di sovrascriverli come in eredità multipla standard.

I mixin non prevalgono nei metodi nelle classi in cui sono ereditati.Ad esempio, se una classe A definiva un metodo MyMethod e ereditava un mixin B che definiva anche il metodo MyTod, entrambi questi metodi potevano essere ancora chiamati senza ambiguità e l'implementazione di MyMethod nella classe A sarebbe comunque completamente accessibile.Esattamente come verranno chiamati questi metodi dipende dal linguaggio in cui viene implementata la miscein.

Alcuni linguaggi di programmazione che non usano mixin, come Java, usano le interfacce per imitarli.Le interfacce in queste lingue non emulano la piena funzionalità dei mixin, poiché le interfacce possono contenere solo costanti e dichiarazioni dei metodi.I mixin, d'altra parte, possono contenere implementazioni complete di metodi.Quelle lingue che non supportano i mixin hanno spesso alternative praticabili che possono essere convinti per fare all'incirca la stessa cosa.