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

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

Πώς λειτουργεί η κληρονομικότητα

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

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

instagram viewer

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

Έτσι λειτουργεί η κληρονομιά.

Χρήση κληρονομικότητας στην Java

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

Για παράδειγμα, Το C ++ είναι επίσης μια αντικειμενοστρεφής γλώσσα προγραμματισμού. Το C ++ υποστηρίζει αυτό που είναι γνωστό ως πολλαπλή κληρονομιά, ενώ η Java υποστηρίζει μόνο μία κληρονομιά.

Αυτό σημαίνει ότι στην Java μια γονική τάξη μπορεί να έχει πολλές παιδικές τάξεις, αλλά κάθε παιδική τάξη μπορεί να έχει μόνο μία γονική τάξη (μία κληρονομιά). Ωστόσο, υπάρχει ένας τρόπος να επιτευχθεί έμμεση πολλαπλή κληρονομιά στην Java, δημιουργώντας μια σχέση παππούδων, γονέα και παιδιού.

Δημιουργία της τάξης γονέων στην Java

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

Παράδειγμα τάξης γονέων φρούτων


φρούτα δημόσιας τάξης {
// Μεταβλητή δήλωση
προστατευμένος σπόρος χορδών
προστατευμένο δέρμα StringColor;
προστατευμένη γεύση χορδών;
// Προεπιλεγμένος κατασκευαστής
δημόσια φρούτα () {
σπόρος = "";
skinColor = "";
γεύση = "";
}
// Κύριος κατασκευαστής
δημόσια φρούτα (String seed, String skinColor, String γεύση) {
this.seed = σπόρος;
this.skinColor = skinColor;
this.taste = γεύση;
}
// getters και ρυθμιστές
δημόσια συμβολοσειρά getSeed () {
επιστροφή σπόρων?
}
public void setSeed (String seed) {
this.seed = σπόρος;
}
δημόσια συμβολοσειρά getSkinColor () {
επιστροφή skinColor;
}
public void setSkinColor (String skinColor) {
this.skinColor = skinColor;
}
δημόσια συμβολοσειρά getTaste () {
επιστροφή γεύση?
}
public void setTaste (String γεύση) {
this.taste = γεύση;
}
// μέθοδος φαγητού
δημόσιο κενό τρώνε () {
// γενικός κωδικός για τον τρόπο κατανάλωσης φρούτων
}
// μέθοδος χυμού
δημόσιος χυμός κενού () {
// γενικός κώδικας για το χυμό φρούτων
}
}

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

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

Δημιουργία παιδικών τάξεων στην Java

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

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

Παράδειγμα παιδικής κλάσης πορτοκαλιού


δημόσια τάξη Πορτοκαλί επεκτείνει τα φρούτα {
// μεταβλητή δήλωση
ιδιωτικά supremes int?
// προεπιλεγμένος κατασκευαστής
δημόσια πορτοκαλί () {
supremes = 0;
}
// πρωτογενής κατασκευαστής
δημόσιο πορτοκάλι (String seed, String skinColor, String γεύση, int supremes) {
σούπερ (σπόρος, χρώμα δέρματος, γεύση);
this.supremes = supremes;
}
// getters και ρυθμιστές
δημόσια int getupremes () {
επιστροφή supremes;
}
δημόσια κενά setupremes (int supremes) {
this.supremes = supremes;
}
// μέθοδος φαγητού
δημόσιο κενό τρώνε () {
// πώς να φάτε ένα πορτοκάλι
}
// μέθοδος χυμού
δημόσιος χυμός κενού () {
// πώς να χυμό και πορτοκάλι
}
// μέθοδος φλούδας
δημόσια φλούδα κενού () {
// πώς να ξεφλουδίσετε ένα πορτοκάλι
}
}

Υπάρχει μια διαφορά μεταξύ της εμφάνισης μιας κανονικής δήλωσης κλάσης Java και της υπάρχουσας στον παραπάνω κώδικα. Η λέξη-κλειδί "επεκτείνεται" είναι αυτό που χρησιμοποιείται στην Java για να καταστεί δυνατή η κληρονομιά.

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

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

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

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

Οι Ρόλοι Κατασκευαστές παίζουν στην κληρονομικότητα

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

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

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

Η μέθοδος "super" στον κύριο κατασκευαστή μας παραπάνω είναι απαραίτητη επειδή καθορίζει ότι ο κύριος κατασκευαστής - και Δεν πρέπει να καλείται ο προεπιλεγμένος κατασκευαστής - της μητρικής κλάσης φρούτων όποτε ένα πορτοκαλί αντικείμενο με παραμέτρους είναι δημιουργήθηκε.

Τώρα μπορείτε να χρησιμοποιήσετε την κληρονομικότητα στην Java

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

Πιστωτική εικόνα: Andreas Wohlfahrt /Πεξέλ

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

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

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

Σχετικά θέματα
  • Προγραμματισμός
  • Ιάβα
  • Αντικειμενοστραφής προγραμματισμός
Σχετικά με τον Συγγραφέα
Kadeisha Kean (Δημοσιεύθηκαν 3 άρθρα)

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

Περισσότερα από την Kadeisha Kean

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

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

Ένα ακόμη βήμα…!

Επιβεβαιώστε τη διεύθυνση email σας στο email που μόλις σας στείλαμε.

.