..
Μερικές φορές θέλετε να δημιουργήσετε μια κατηγορία αντικειμένων που έχουν "αυτό το" χαρακτηριστικό, αλλά και "αυτό" και "αυτό το άλλο", το οποίο είναι ίσως ήδη γραφτεί σε άλλο σημείο του πηγαίου κώδικα μας.
Με άλλα λόγια, θέλουμε να δημιουργήσουμε μια κατηγορία που δανείζεται μεθόδους και τις ιδιότητες που ορίζονται σε άλλα μέρη του πηγαίου κώδικα ή σε κάποια βιβλιοθήκη.
Αντίθετα, θα μαζεύονται γύρω από τα ίδια χαρακτηριστικά με τον πηγαίο κώδικα μας σε ένα μέρος προσιτή σε όλους. Πώς;
Οι καθαρολόγοι φρίκη object-oriented προγραμματισμό και την υποστήριξη - κατά τη γνώμη μου δεν είναι εντελώς χωρίς λόγο - ότι κάθε ανάγκη αυτού του είδους μπορεί να επιλυθεί με την ορθή χρήση του πολυμορφισμού.
Άλλοι, ιδιαίτερα εάν προέρχονται από την εμπειρία με γλώσσες όπως η C + +, υποστηρίζουν ότι λόγω ακριβώς των απαιτήσεων αυτών με πολλαπλή κληρονομικότητα.
Ρεαλιστικές γλώσσες όπως η Ruby, ωστόσο, να αντιμετωπίσει το θέμα, παρέχοντας μια τεχνική που ονομάζεται "mixin", το όνομα - ακούγεται! - Ένας άνδρας παγωτό της έδωσε την Massuchussets αποτελείται από διάφορες γεύσεις παγωτού (κρέμα, σοκολάτα ...)
Η Ruby τα μείγματα
Τεχνικά, οι Ruby τα μείγματα υλοποιηθεί με τη χρήση μέσα στην τάξη, κωδικό που ορίζεται στο διαφορετικές ενότητες (ενότητα).
Για να πάρουμε ένα ασήμαντο παράδειγμα, ας υποθέσουμε ότι ήθελα να εφαρμόσει ένα πρόγραμμα επεξεργασίας κειμένου που αυτόματα εκτυπώσετε φιλικότητα μου μια επιστολή των επιχειρήσεων. Επειδή θέλετε να εισάγετε μόνο τα απαραίτητα στοιχεία, δηλαδή τον παραλήπτη και το μήνυμα. Το πρόγραμμα θα σκέφτονται τα διάφορα φιλικά όπως, "Sir" και "Φιλικά".
Ας αρχίσουμε από τον ορισμό σε ένα φιλικό μορφή:
module CordialitaLettera
def εκκίνησης (διεύθυνση)
επιστροφή "Αγαπητέ κ.." + παραλήπτη + "\ n"
τέλος
τελική υπογραφή (επιστολή)
επιστροφή επιστολή + "\ n" + "Ειλικρινά, \ nCarlo Smith"
τέλος
τέλος
Τίποτα το ιδιαίτερο, τότε, μόνο δύο μεθόδους που μπορεί να αλλάξει το κείμενο λαμβάνει ως είσοδο.
Ας γράψουμε μια κατηγορία "μικτά" σε αυτές τις μεθόδους, μόλις mixin:
Επιστολές Class
περιλαμβάνει CordialitaLettera
τελικό stampaLettera (παραλήπτη, το μήνυμα)
= Σημείο εκκίνησης (δέκτη)
= + Μετά την επιστολή
βάζει την υπογραφή (επιστολή)
τέλος
τέλος
Επιστολές πάνω από την τάξη έχει μια μέθοδο που λαμβάνει ως είσοδο μόνο τα μεταβλητά τμήματα της επιστολής, με φιλική μορφή καθορίζεται στην ενότητα.
Όπως μπορείτε να δείτε τη σύνταξη είναι παρόμοια με κληρονομιά σε Ruby, ωστόσο, σε αντίθεση με το τελευταίο, σε μια τάξη μπορεί να υλοποιήσει οποιοδήποτε αριθμό εντύπων - και όπως είναι γνωστό, μια κλάση μπορεί να προέρχεται από και μόνο μία κατηγορία γονέα (Ruby δεν υποστηρίζει πολλαπλή κληρονομικότητα!)
Για παράδειγμα, μπορούμε να γράψουμε:
def main ()
Lengin = Lettere.new
lEngine.stampaLettera ('Alessio Saltarini »,
«Απλά προχώρησε στην μεταβίβαση
που ζητήσατε. ')
βάζει
lEngine.stampaLettera («Κατά Ματθαίον Pisconi»,
«Έχω στείλει το φαξ σε nr.038283873.")
τέλος
η οποία επιστρέφει:
Αγαπητοί sig.Alessio Saltarini, Έχω κάνει μόνο τη μεταφορά που ζητήσατε. Με εκτίμηση, Carlo Rossi
Αγαπητοί sig.Matteo Pisconi, Μου στείλετε το φαξ σε nr.038283873. Με εκτίμηση, John DoeΗ τεχνική αυτή, μεταξύ άλλων, μας επιτρέπει να αφομοιώσει τη χρήση του ότι τα μείγματα των διεπαφών σε Java: στην πραγματικότητα, εάν μια τάξη είναι «ανάμειξη» με μια φόρμα, στην πραγματικότητα θα εφαρμόσει τις μεθόδους (και ως εκ τούτου να ικανοποιεί ένα συγκεκριμένο περιβάλλον) .
| |
Ruby και Ruby on Rails (Μάθημα)
Δημιουργία λογισμικού και Web εφαρμογές με Ρουμπίνι και RoR. Από 39 €. |