Skip to main content

Τι είναι ένα μίγμα;

Στον προγραμματισμό υπολογιστών, ένα mixin είναι μια κλάση που κληρονομείται από μια άλλη τάξη, αλλά δεν προορίζεται να παρουσιαστεί.Μια ενιαία κλάση μπορεί να κληρονομήσει πολλές mixins, τόσες πολλές συλλογές λειτουργιών μπορούν να ενοποιηθούν εύκολα.Αν και πολλές κοινές γλώσσες προγραμματισμού χρησιμοποιούν τη μεθοδολογία Mixin, υπάρχουν πολλά άλλα που δεν το κάνουν, συμπεριλαμβανομένων των C ++ και Java.Σε γενικές γραμμές, οι μίξινς βρίσκονται σε γλώσσες δέσμης ενεργειών ή σε εκείνες τις γλώσσες που έχουν τη δυνατότητα να δημιουργούν σενάρια, όπως το JavaScript και το Perl.

Mixins είναι μοναδικές στο ότι γίνονται μέρος μιας υποκατηγορίας κατά τη διάρκεια της συλλογής.Οι μέθοδοι και οι σταθερές τους περιλαμβάνονται στην υποκατηγορία.Ένα άλλο μοναδικό χαρακτηριστικό των κλάσεων mixin είναι ότι οι μέθοδοι μπορούν να οριστούν και να δεσμευτούν σε αντικείμενα κατά το χρόνο εκτέλεσης.Οι περισσότερες γλώσσες χρησιμοποιούν μια διαφορετική προσέγγιση, δέσμευση και καθοριστικές μεθόδους σε χρόνο μεταγλώττισης και όχι χρόνο εκτέλεσης.Αυτή η δέσμευση χρόνου εκτέλεσης επιτρέπει σε μίξιν να είναι πολύ ευέλικτες.

Ένα κοινό πρόβλημα στην πολλαπλή κληρονομιά είναι η ασάφεια στην κλήση μεθόδων και οι μίξινς μπορούν να λύσουν αυτό το πρόβλημα επειδή δεν ακολουθούν ακριβώς τους ίδιους κανόνες με την πολλαπλή κληρονομιά.Για παράδειγμα, η πολλαπλή κληρονομιά μπορεί να δημιουργήσει ένα λεγόμενο διαμάντι του θανάτου, όπου μια γονική κατηγορία Α έχει υποκατηγορίες Β και Γ και μια κατηγορία D κληρονομεί από τις δύο κατηγορίες Β και Γ. Το πρόβλημα σε αυτό το σενάριο είναι ότι οι μέθοδοι που έχουν το ίδιοΤο όνομα στις κλάσεις Α, Β και Γ μπορούν να κληρονομηθούν στην κατηγορία Δ, καθιστώντας πολλαπλές εκδόσεις της ίδιας μεθόδου χωρίς σαφείς διακρίσεις.Οι μίξινς επιλύουν αυτό το πρόβλημα διατηρώντας κάθε εκδοχή της μεθόδου ξεχωριστή, αντί να προσπαθούν να τα αντικαταστήσουν όπως στην τυπική πολλαπλή κληρονομιά. Οι μίμινες δεν παρακάμπτουν τις μεθόδους στις κατηγορίες στις οποίες κληρονομούνται.Για παράδειγμα, εάν μια κατηγορία Α έχει οριστεί μια μέθοδο mymethod και κληρονόμησε ένα mixin b που επίσης καθόρισε τη μέθοδο mymethod, και οι δύο από αυτές τις μεθόδους θα μπορούσαν ακόμα να καλούνται χωρίς ασάφεια και η εφαρμογή του mymethod στην κατηγορία Α θα εξακολουθούσε να είναι εντελώς προσβάσιμη.Ακριβώς πώς θα ονομάζονται αυτές οι μέθοδοι εξαρτάται από τη γλώσσα στην οποία εφαρμόζεται η μίκα.Οι διεπαφές σε αυτές τις γλώσσες δεν μιμούνται την πλήρη λειτουργικότητα των mixins, επειδή οι διεπαφές μπορούν να περιέχουν μόνο σταθερές και δηλώσεις μεθόδου.Οι mixins, από την άλλη πλευρά, μπορούν να περιέχουν πλήρεις εφαρμογές μεθόδων.Αυτές οι γλώσσες που δεν υποστηρίζουν mixins συχνά έχουν βιώσιμες εναλλακτικές λύσεις που μπορούν να καλυφθούν για να κάνουν περίπου το ίδιο πράγμα.