Skip to main content

Co to jest mixin?

W programowaniu komputerowym mixin to klasa odziedziczona przez inną klasę, ale nie ma być instancji.Pojedyncza klasa może odziedziczyć wiele miksów, więc wiele zbiorów funkcji można łatwo skonsolidować.Chociaż wiele typowych języków programowania używa metodologii Mixina, istnieje wiele innych, w tym C ++ i Java.Ogólnie rzecz biorąc, miksiny znajdują się w językach scenariuszy lub językach, które mają możliwość tworzenia skryptów, takich jak JavaScript i Perl.

Miksiny są wyjątkowe, ponieważ stają się częścią podklasy podczas kompilacji.Ich metody i stałe są zawarte w podklasie.Kolejną unikalną cechą klas miksiny jest to, że metody można zdefiniować i związać z obiektami w czasie wykonywania.Większość języków stosuje inne podejście, wiązanie i definiowanie metod w czasie kompilacji, a nie w czasie wykonywania.To wiązanie w czasie wykonywania pozwala miksinom być bardzo elastycznym.

Powszechnym problemem w wielokrotnym dziedziczeniu jest dwuznaczność w wywoływaniu metod, a miksiny mogą rozwiązać ten problem, ponieważ nie przestrzegają dokładnie takich samych reguł, jak dziedzictwo wielokrotne.Na przykład wielokrotne dziedziczenie może stworzyć tak zwany diament śmierci, w którym klasa nadrzędna A ma podklasy B i C, a klasa D dziedzicza zarówno z klas B, jak i C. Problem w tym scenariuszu są metody, które mają takie sameNazwa w klasach A, B i C można odziedziczyć na klasę D, tworząc wiele wersji tej samej metody bez wyraźnych rozróżnień.Mixiny rozwiązują ten problem, utrzymując każdą wersję metody odrębną, zamiast próbować nadpisywać je, jak w standardowym dziedziczeniu wielokrotnym.

Mixiny nie zastępują metod w klasach, w których są odziedziczone.Na przykład, jeśli klasa A zdefiniowała metodę MyMetod i odziedziczyła miksinę, która również zdefiniowała metodę MyMetod, obie te metody mogłyby być nadal wywoływane bez dwuznaczności, a implementacja MyMethod w klasie A nadal byłaby całkowicie dostępna.Dokładnie sposób, w jaki te metody byłyby wywoływane, zależy od języka, w którym wdrażany jest miksina.

Niektóre języki programowania, które nie używają miksin, takich jak Java, używają interfejsów do ich naśladowania.Interfejsy w tych językach nie naśladują pełnej funkcjonalności miksin, ponieważ interfejsy mogą zawierać tylko stałe i deklaracje metod.Z drugiej strony miksiny mogą zawierać pełne implementacje metod.Te języki, które nie obsługują miksin, często mają realne alternatywy, które można nakłonić, aby zrobić mniej więcej to samo.