Εάν μπορείτε να οδηγήσετε ένα 4θυρο προαστιακό αυτοκίνητο, μπορείτε επίσης να οδηγήσετε ένα φορτηγό. Εάν έχετε οδηγήσει αυτοκίνητο με κινητήρα καύσης, μπορείτε επίσης να οδηγήσετε ηλεκτρικό αυτοκίνητο.

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

Απλώς μπαίνεις, λυγίζεις, ξεκινάς το όχημα, το βάζεις σε ταχύτητα και οδηγείς. Αυτό συμβαίνει επειδή τα αυτοκίνητα, τα φορτηγά και τα φορτηγά είναι πολυμορφικό.

Πολυμορφισμός: Σπάσιμο

Ας δούμε τη λέξη πολυμορφισμός. Μπορείτε να το διασπάσετε σε πολυ, μορφ, και θεωρία.

Πολυ σημαίνει πολλές, όπως το πώς πολύγωνο σημαίνει πολλές γωνίες. Όταν χρησιμοποιείται ως ουσιαστικό, α μορφ είναι μια παραλλαγή ενός είδους. Και θεωρία μπορεί να σημαίνει σύστημα.

Έτσι, πολυμορφισμός σημαίνει απλά ένα σύστημα πολλών παραλλαγών. Ωστόσο, αυτό δεν σας λέει πολλά για το πώς χρησιμοποιείται στον προγραμματισμό. Αυτό είναι το επόμενο.

instagram viewer

Αν περπατά σαν πάπια... Γιατί τα πολυμορφικά αντικείμενα είναι φοβερά

Όταν δημιουργείτε μια κλάση στον κώδικά σας που κληρονομείται από μια άλλη κλάση, δεσμεύετε τη νέα κλάση σε μια σύμβαση. Η σύμβαση αναφέρει ότι κάθε μεταβλητή και συνάρτηση στον γονέα θα είναι επίσης στο παιδί.

Κάθε όχημα διαθέτει τιμόνι, πετάλια γκαζιού και φρένων και φλας. Δεν χρειάζεται να ανοίξετε την κουκούλα για να οδηγήσετε αυτοκίνητο. Το μόνο που έχει σημασία είναι ότι είναι αυτοκίνητο.

Το ίδιο ισχύει για τις κλάσεις που κληρονομούν από άλλες κλάσεις. Ακολουθεί ένα παράδειγμα στο TypeScript:


όχημα κλάσης {
private _engine: string;
ιδιωτικά ελαστικά: αριθμός;
κατασκευαστής (κινητήρας: string = "καύση", ελαστικά: αριθμός = 4) {
this._engine = κινητήρας;
this._ ελαστικά = ελαστικά?
}
επιτάχυνση (ταχύτητα: αριθμός) {
console.log ("επιτάχυνση με ταχύτητα" + ταχύτητα);
}
φρένο (πίεση: αριθμός) {
console.log ("εφαρμογή" + πίεση + "πίεση");
}
στρίψτε αριστερά() {
console.log ("στρίβοντας αριστερά");
}
στρίψτε δεξιά() {
console.log ("στρίβοντας δεξιά");
}
}
class Car επεκτείνει το όχημα {
}
η κατηγορία Tesla επεκτείνει το αυτοκίνητο {
κατασκευαστής () {
σούπερ ("ηλεκτρικό")?
}
}

Σε αυτό το παράδειγμα, υπάρχει ένα Οχημα τάξη. ο Αυτοκίνητο η κλάση κληρονομεί από το Οχημα τάξη. Και Tesla κληρονομεί από Αυτοκίνητο. Τώρα ας δημιουργήσουμε μερικά αντικείμενα και τα κοιτάμε.

let myCoupe: Car = new Vehicle ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
let mySedan: Vehicle = new Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Μπορείτε να δείτε ότι δηλώσαμε myCoupe να είσαι α Αυτοκίνητο και mySedan να είσαι α Οχημα. Στη συνέχεια υποδείξαμε myCoupe ως νέο Οχημα και mySedan ως νέο Tesla. Αν εσύ επισκεφτείτε το sandbox TypeScript και εκτελέστε τον κώδικα, θα δείτε ότι λειτουργεί χωρίς σφάλμα. Και συμπεριφέρεται όπως θα περιμένατε, με βάση τη σύμβαση.

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

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

Ο πολυμορφισμός κάνει τον κωδικό σας αλεξίσφαιρο

Ένα άλλο πλεονέκτημα της σύμβασης πολυμορφισμού είναι η εγγύηση ότι ο κωδικός σας θα λειτουργήσει. Εάν έχετε πληκτρολογήσει έντονα όλες τις μεταβλητές σας και τι επιστρέφει κάθε συνάρτηση, γνωρίζετε ότι κάθε παιδί θα ταιριάζει πάντα με μεταβλητές, συναρτήσεις και τύπους.

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

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

Ο πολυμορφισμός είναι τεράστιος και εδώ είναι 10 ακόμη αρχές προγραμματισμού που πρέπει να γνωρίζετε.

Εξασκηθείτε στον πολυμορφισμό

  • Χρησιμοποιήστε τον σύνδεσμο sandbox παραπάνω για να δημιουργήσετε ένα Σκάφος τάξη.
  • Πειραματίστε ένα νέο αντικείμενο σκάφους με τέτοιο τρόπο ώστε να είναι α Οχημα τύπου, αλλά εξακολουθεί να μοιάζει με βάρκα.
  • Βεβαιωθείτε ότι το σκάφος εξακολουθεί να συμπεριφέρεται σαν όχημα.

Ένα Τελικό Παράδειγμα Πολυμορφισμού

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

Φανταστείτε ότι δημιουργείτε μια εφαρμογή ιστού που συνδέεται με μια βάση δεδομένων MySQL. Στη συνέχεια, το αφεντικό αποφασίζει να μεταβεί σε μια βάση δεδομένων PostgreSQL. Αυτό σημαίνει ότι πρέπει να ξαναγράψετε όλες τις κλήσεις της βάσης δεδομένων σας;

Όχι, δεν το κάνει. Εάν η εφαρμογή σας χρησιμοποιεί ένα Πρόσβαση δεδομένων τάξη με υποκατηγορίες που στην πραγματικότητα ανακατεύονται με τα δεδομένα, είστε τυχεροί. ο Πρόσβαση δεδομένων Η κλάση καθορίζει τον τρόπο με τον οποίο η εφαρμογή σας αλληλεπιδρά με τα δεδομένα και όχι πώς αλληλεπιδρά με τη βάση δεδομένων.

Έχετε υποκατηγορίες όπως MySQLAccess και PostgresQLAccess που κάνουν όλη τη βρώμικη δουλειά. Αλλά αν η εφαρμογή σας έχει μόνο Πρόσβαση δεδομένων αντικείμενα, μπορείτε να ανταλλάξετε βάσεις δεδομένων χωρίς να ξαναγράψετε μία γραμμή κώδικα εφαρμογής.

ΜερίδιοΤιτίβισμαΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ
Πώς να οργανώσετε τον κώδικα σας με αντικείμενο και κληρονομικότητα

Ο σωστός προγραμματισμός με αντικειμενικό προσανατολισμό σημαίνει ότι πρέπει να γνωρίζετε για την κληρονομικότητα και πώς μπορεί να απλοποιήσει την κωδικοποίηση και να μειώσει τα σφάλματα.

Διαβάστε Επόμενο

Σχετικά θέματα
  • Προγραμματισμός
  • Προγραμματισμός
  • Αντικειμενοστραφής προγραμματισμός
Σχετικά με τον Συγγραφέα
Λι Νέιθαν (Δημοσιεύθηκαν 19 άρθρα)

Ο Λι είναι ένας νομάδας πλήρους απασχόλησης και ένας πολύπαθος με πολλά πάθη και ενδιαφέροντα. Μερικά από αυτά τα πάθη περιστρέφονται γύρω από την παραγωγικότητα, την προσωπική ανάπτυξη και τη γραφή.

Περισσότερα από τον Lee Nathan

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή