Co to jest mixin?
W programowaniu komputerowym mixin jest dziedziczoną przez inną klasę, ale nie jest przeznaczona do tworzenia instancji. Jedna klasa może odziedziczyć wiele miksów, więc wiele kolekcji funkcji można łatwo skonsolidować. Chociaż wiele popularnych języków programowania używa metodologii mixin, istnieje wiele innych, które tego nie robią, w tym C ++ i Java. Ogólnie rzecz biorąc, mixiny znajdują się w językach skryptowych lub tych, które mają możliwość tworzenia skryptów, takich jak JavaScript i Perl.
Mixiny są wyjątkowe, ponieważ stają się częścią podklasy podczas kompilacji. Ich metody i stałe są zawarte w podklasie. Inną unikalną cechą klas mixin jest to, że metody mogą być definiowane i powiązane z obiektami w czasie wykonywania. Większość języków stosuje inne podejście, wiążąc i definiując metody w czasie kompilacji, a nie w czasie wykonywania. To wiązanie środowiska wykonawczego pozwala na bardzo elastyczne miksy.
Częstym problemem w wielokrotnym dziedziczeniu jest niejednoznaczność w wywoływaniu metod, a mixiny mogą rozwiązać ten problem, ponieważ nie przestrzegają dokładnie tych samych reguł co wielokrotne dziedziczenie. Na przykład wielokrotne dziedziczenie może stworzyć tak zwany „diament śmierci”, w którym nadrzędna klasa A ma podklasy B i C, a klasa D dziedziczy po obu klasach B i C. Problemem w tym scenariuszu są metody, które mają ta sama nazwa w klasach A, B i C może zostać odziedziczona do klasy D, tworząc wiele wersji tej samej metody bez wyraźnych różnic. Mixiny rozwiązują ten problem, utrzymując odrębność każdej wersji metody, zamiast próbować je zastąpić, jak w przypadku standardowego dziedziczenia wielokrotnego.
Mixiny nie zastępują metod w klasach, do których są dziedziczone. Na przykład, jeśli klasa A zdefiniowała metodę „myMethod” i odziedziczyła mieszankę B, która również zdefiniowała metodę „myMethod”, obie z tych metod można by jeszcze wywołać bez dwuznaczności, a implementacja „myMethod” w klasie A nadal byłaby całkowicie dostępny. Dokładne wywołanie tych metod zależy od języka, w którym zaimplementowano mixin.
Niektóre języki programowania, które nie używają miksów, takie jak Java, używają interfejsów do ich naśladowania. Interfejsy w tych językach nie emulują pełnej funkcjonalności mixin, ponieważ interfejsy mogą zawierać tylko stałe i deklaracje metod. Z drugiej strony mixiny mogą zawierać pełne implementacje metod. Te języki, które nie obsługują miksów, często mają realne alternatywy, które można nakłonić do zrobienia mniej więcej tego samego.