Bilgisayar programlamasında, bir karışım, başka bir sınıf tarafından miras alınan ancak başlatılması amaçlanmayan bir sınıftır. Tek bir sınıf birçok karışımı devralabilir, bu nedenle birçok fonksiyon koleksiyonu kolayca konsolide edilebilir. Pek çok yaygın programlama dili mixin metodolojisini kullanmasına rağmen, C ++ ve Java dahil olmak üzere pek çok şey vardır. Genel olarak, karışımlar betik dillerinde veya JavaScript ve Perl gibi betik oluşturma becerisine sahip dillerde bulunur.
Karıştırmalar, derleme sırasında bir alt sınıfın parçası olmaları bakımından benzersizdir. Yöntemleri ve sabitleri alt sınıfa dahil edilir. Mixin sınıflarının bir başka benzersiz özelliği, metotların çalışma zamanında nesnelere tanımlanabilmesi ve bağlanabilmesidir. Çoğu dil, çalışma zamanı yerine derleme zamanında farklı bir yaklaşım, bağlama ve tanımlama yöntemleri kullanır. Bu çalışma zamanı bağlama, karışımların çok esnek olmasını sağlar.
Çoklu kalıtımdaki yaygın bir sorun, yöntem çağrımında belirsizliktir ve karışımlar bu sorunu çözebilir çünkü tam olarak çoklu kalıtımla aynı kuralları takip etmiyorlar. Örneğin, çoklu kalıtım, bir A sınıfı B ve C'yi alt sınıflara sahip olduğu ve D sınıfı hem B hem de C sınıfından miras alan bir “ölüm elması” yaratabilir. A, B ve C sınıflarındaki aynı adın tümü D sınıfına miras alınabilir, bu da aynı yöntemin birden fazla versiyonunu açıkça ayırt etmeden yapar. Mixins, bu yöntemi, standart çoklu mirasta olduğu gibi, üzerine yazmaya çalışmak yerine, metodun her versiyonunu farklı tutarak çözer.
Karışımlar, kalıtsal oldukları sınıflardaki yöntemleri geçersiz kılmaz. Örneğin, A sınıfı bir "myMethod" yöntemini tanımladıysa ve "myMethod" yöntemini de tanımlayan bir B karışımını miras aldıysa, bu yöntemlerin her ikisi de yine belirsizlik olmadan çağrılabilir ve A sınıfında "myMethod" uygulaması yine de olur. tamamen erişilebilir. Tam olarak bu yöntemlerin nasıl adlandırılacağı, karışımın uygulandığı dile bağlıdır.
Java gibi bir karışım kullanmayan bazı programlama dilleri, onları taklit etmek için arabirimler kullanır. Bu dillerdeki arayüzler, karışımların tam işlevselliğini taklit etmez, çünkü arayüzler sadece sabitleri ve yöntem bildirimlerini içerebilir. Öte yandan, karışımlar yöntemlerin tam uygulamalarını içerebilir. Mixin'leri desteklemeyen dillerin çoğu zaman kabaca aynı şeyi yapmak için eşekslenebilecek uygun alternatifleri vardır.


