Nella programmazione orientata agli oggetti , una classe mixin o mixin è una classe concepita per essere composta da ereditarietà multipla con un'altra classe per fornirle funzionalità. Questo è un caso di riutilizzo dell'implementazione. Ogni mixin rappresenta un servizio che può essere innestato nelle classi eredi.
A differenza di una classe, un mixin non è pensato per essere utilizzato da solo.
Semanticamente, non esiste una relazione "è tipo" tra un'istanza e un mixin.
I mixin sono talvolta definiti come una "sottoclasse astratta", cioè una classe senza una superclasse concreta.
Un interfaccia (in Java, C # o Pascal) o di una classe virtuale pura (in C ++) o di un protocollo (in Objective C ) è una classe astratta , senza applicazione: tutti i metodi sono astratti.
Al contrario , un mixin contiene metodi concreti.
Le linee provengono dal linguaggio del Sé . Sono simili ai mixin tranne per il fatto che la loro composizione non è necessariamente lineare, grazie a un meccanismo per risolvere più conflitti di ereditarietà , quando alcuni hanno metodi con lo stesso nome.
Sono apparsi nel 1986 in Flavours (in) , un precursore del Common Lisp Object System .