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 umożliwia miksiny być bardzo elastyczne.
powszechny problemEM w wielokrotnym dziedziczeniu jest niejednoznaczność 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 po klasach B, jak i C. Problem w tym scenariuszu jest to, że metody mają tę samą nazwę w klasach A, B i C, można odziedziczyć w klasę D, tworząc wiele wersji tej samej metody bez wyraźnych wyróżnień. Mixins rozwiązują ten problem, utrzymując każdą wersję metody odrębną, zamiast próbować ich zastąpić, jak w standardowym dziedziczeniu wielokrotnym.
Miksiny nie zastępują metod w klasach, na które są odziedziczone. Na przykład, jeśli klasa A zdefiniowała metodę „MyMetod” i odziedziczyła miksin B, który również zdefiniował metodę „MyMethod”, obie te metody mogą być nadal wywoływane bez dwuznaczności, a wdrożenie „MyMethod” w klasie Anadal byłby całkowicie dostępny. 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.