Αντικειμενοστραφής προγραμματισμός#
Η Perl διαθέτει δύο συστήματα αντικειμένων που συνυπάρχουν: την σύγχρονη σύνταξη class/field/method που εισήχθη στην 5.38 (κωδική ονομασία Corinna) και το κλασικό μοντέλο bless/@ISA που προηγείται κατά τρεις δεκαετίες. Η pperl υποστηρίζει και τα δύο, και τα δύο εμφανίζονται σε πραγματικό κώδικα που θα διαβάσετε και θα συντηρήσετε.
Η σύντομη εκδοχή:
Για νέο κώδικα, χρησιμοποιήστε
class. Η σύνταξη είναι πρώτης τάξης, ο κατασκευαστής δημιουργείται για εσάς, τα πεδία είναι γνήσια ιδιωτικά, και η απλή κληρονομικότητα έχει καθαρή δηλωτική μορφή.Για παλαιό κώδικα, κατανοήστε τα
bless,@ISAκαι τη σύμβαση$self = shift. Θα τα συναντήσετε σε κάθε βάση κώδικα πριν την 5.38, σε κάθε κύρια διανομή του CPAN και σε μεγάλο μέρος της ίδιας της Perl πυρήνα.Τα Moose, Moo, Class::Accessor, Object::Pad είναι τα οικοσυστήματα του CPAN που κάλυψαν τις τραχιές γωνίες του κλασικού μοντέλου όσο το χαρακτηριστικό του πυρήνα ήταν ακόμη υπό σχεδίαση. Αποτελούν ιστορικό κεφάλαιο· ο νέος κώδικας στρέφεται στο
classτου πυρήνα.
Αυτό το δέντρο οδηγιών καλύπτει και τα δύο συστήματα από άκρη σε άκρη. Διαβάστε τα κεφάλαια με τη σειρά σε μια πρώτη ανάγνωση ή μεταβείτε σε αυτό που ταιριάζει στον κώδικα που έχετε μπροστά σας.
Ποιο κεφάλαιο χρειάζεστε#
Σύγχρονες κλάσεις -
class,field,method,ADJUST,:param,:reader. Ο συνιστώμενος τρόπος συγγραφής αντικειμενοστραφούς κώδικα στην pperl.Κλασική αντικειμενοστρέφεια -
bless,@ISA,sub new, accessors με το χέρι,SUPER::. Το μοντέλο που θα συντηρείτε σε υπάρχοντα κώδικα.Κληρονομικότητα και επίλυση μεθόδων - πώς λειτουργεί η αναζήτηση μεθόδου,
isa,can,DOES, MRO και οι παγίδες της πολλαπλής κληρονομικότητας.Ρόλοι και ανάθεση - πρότυπα σύνθεσης για συμπεριφορά κοινή σε άσχετες κλάσεις.
Μετάβαση από κλασική σε σύγχρονη - μια μηχανική συνταγή για τη μετατροπή μιας κλάσης βασισμένης σε
blessστο χαρακτηριστικόclass, και τα σημεία όπου η μετάφραση δεν είναι μηχανική.
Πότε να χρησιμοποιείτε αντικειμενοστρέφεια#
Η αντικειμενοστρέφεια είναι εργαλείο, όχι ύφος. Στραφείτε σε αυτήν όταν:
Το πρόβλημα έχει μικρό λεξιλόγιο ουσιαστικών (χρήστης, συνεδρία, αίτημα, εγγραφή) και μεγαλύτερο λεξιλόγιο ρημάτων που ενεργούν σε καθένα.
Ένα κομμάτι δεδομένων φέρει αναλλοίωτες ιδιότητες που πρέπει να επιβάλλονται σε ένα σημείο του κώδικα, όχι σε κάθε σημείο κλήσης.
Αναμένετε ότι η υλοποίηση πίσω από ένα σύνολο λειτουργιών θα αλλάξει, ενώ οι ίδιες οι λειτουργίες θα παραμείνουν σταθερές.
Μοντελοποιείτε μια κατηγορία με παραλλαγές και θέλετε ο πολυμορφισμός να επιλέγει τη σωστή συμπεριφορά.
Μη στρέφεστε στην αντικειμενοστρέφεια όταν:
Το πρόγραμμα είναι μικρό, γραμμικό και χωρίς επαναχρησιμοποιήσιμα ουσιαστικά.
Ένα απλό hash από hashes ή μια closure αρκούν.
Ο μόνος λόγος για να γράψετε μια κλάση είναι «μου φάνηκε πιο επαγγελματικό». Ένα σενάριο δώδεκα γραμμών δεν χρειάζεται κλάση.
Σημείωση για την εμβέλεια#
Αυτό το δέντρο είναι εγχειρίδιο εκμάθησης, όχι αναφορά. Οι εξαντλητικοί πίνακες σύνταξης βρίσκονται στις σελίδες αναφοράς ανά δεσμευμένη λέξη:
Συνδεθείτε σε αυτές όποτε χρειάζεστε την πλήρη επιφάνεια υπογραφής· αυτό το δέντρο σάς δίνει την επισκόπηση του προγραμματιστή που εργάζεται.