Διαφορά μεταξύ κληρονομίας και σύνθεσης

Anonim

Κληρονομικότητα και Σύνθεση

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

Τι είναι η κληρονομιά;

Όπως προαναφέρθηκε, η κληρονομικότητα είναι η ικανότητα μιας τάξης να κληρονομήσει ιδιότητες και συμπεριφορά από μια μητρική τάξη, επεκτείνοντάς την. Η κληρονομιά παρέχει ουσιαστικά επαναχρησιμοποίηση κώδικα επιτρέποντας την επέκταση ιδιοτήτων και συμπεριφοράς μιας υπάρχουσας κλάσης από μια νέα κατηγορία. Αν η τάξη Α επεκτείνει το Β, τότε η τάξη Β ονομάζεται κλάση γονέων (ή κλάσης super) και η κλάση Α ονομάζεται κλάση παιδιού (ή παράγωγη κλάση / κλάση). Σε αυτό το σενάριο, η κλάση Α θα κληρονομήσει όλα τα δημόσια και προστατευμένα χαρακτηριστικά και τις μεθόδους της σούπερ κλάσης (Β). Η υποκατηγορία μπορεί προαιρετικά να παρακάμψει (παρέχει νέα ή εκτεταμένη λειτουργικότητα σε μεθόδους) τη συμπεριφορά που κληρονομείται από την γονική κλάση.

Η κληρονομικότητα αντιπροσωπεύει μια σχέση "is-a" στο OOP. Αυτό ουσιαστικά σημαίνει ότι το Α είναι επίσης Β. Με άλλα λόγια, το Β μπορεί να είναι η τάξη με μια γενική περιγραφή μιας συγκεκριμένης οντότητας πραγματικού κόσμου, αλλά ο Α ορίζει μια συγκεκριμένη εξειδίκευση. Σε ένα πραγματικό πρόβλημα προγραμματισμού στον κόσμο, η κατηγορία Person θα μπορούσε να επεκταθεί για να δημιουργήσει την κλάση Employee. Αυτό ονομάζεται εξειδίκευση. Αλλά θα μπορούσατε επίσης να δημιουργήσετε πρώτα την κλάση Employee και στη συνέχεια να την γενικεύσετε σε μια κατηγορία Άτομο επίσης (δηλ. Γενίκευση). Σε αυτό το παράδειγμα, ο εργαζόμενος θα έχει όλες τις ιδιότητες και συμπεριφορά του προσώπου (δηλαδή, ο εργαζόμενος είναι επίσης ένα πρόσωπο) και μπορεί να περιέχει κάποια πρόσθετη λειτουργικότητα (έτσι, το πρόσωπο δεν είναι υπάλληλος) επίσης.

Τι είναι η Σύνθεση;

Η σύνθεση είναι η ικανότητα μιας κλάσης να περιέχει αντικείμενα διαφορετικών κλάσεων ως δεδομένα μέλους. Για παράδειγμα, η κατηγορία Α θα μπορούσε να περιέχει ένα αντικείμενο της κατηγορίας Β ως μέλος. Εδώ, όλες οι δημόσιες μέθοδοι (ή λειτουργίες) που ορίζονται στο Β μπορούν να εκτελεστούν μέσα στην κλάση Α. Η κλάση Α γίνεται ο περιέκτης, ενώ η κατηγορία Β γίνεται η περιορισμένη κατηγορία. Η σύνθεση αναφέρεται επίσης ως Containership. Σε αυτό το παράδειγμα, μπορεί να ειπωθεί ότι η κλάση Α αποτελείται από την κατηγορία Β. Στο OOP, η σύνθεση αντιπροσωπεύει μια σχέση "έχει-α". Είναι σημαντικό να σημειωθεί ότι, παρόλο που το κοντέινερ έχει πρόσβαση για να εκτελέσει όλες τις δημόσιες μεθόδους της περιεχόμενης κλάσης, δεν είναι σε θέση να αλλάξει ή να παράσχει πρόσθετες λειτουργίες. Όταν πρόκειται για πρόβλημα προγραμματισμού σε πραγματικό κόσμο, ένα αντικείμενο κλασικού κειμένου μπορεί να περιέχεται στη φόρμα κλάσης και έτσι μπορεί να ειπωθεί ότι μια φόρμα περιέχει ένα TextBox (ή εναλλακτικά, μια φόρμα αποτελείται από ένα TextBox).

Ποια είναι η διαφορά μεταξύ κληρονομίας και σύνθεσης;

Παρόλο που η Κληρονομικότητα και η Σύνθεση είναι δύο έννοιες OOP, είναι αρκετά διαφορετικές σε ό, τι επιτρέπουν στον προγραμματιστή να επιτύχει. Η κληρονομιά είναι η ικανότητα μιας κλάσης να κληρονομήσει ιδιότητες και συμπεριφορά από μια γονική τάξη, επεκτείνοντάς την, ενώ η Σύνθεση είναι η ικανότητα μιας κλάσης να περιέχει αντικείμενα διαφορετικών τάξεων ως δεδομένα μέλους. Αν μια τάξη επεκταθεί, κληρονομεί όλες τις δημόσιες και προστατευμένες ιδιότητες / συμπεριφορά και αυτές οι συμπεριφορές μπορεί να παραμεληθούν από την υποκατηγορία. Αλλά αν μια κλάση περιέχεται σε μια άλλη, το δοχείο δεν έχει τη δυνατότητα να αλλάξει ή να προσθέσει συμπεριφορά στα περιεχόμενα. Η κληρονομιά αντιπροσωπεύει μια σχέση "is-a" στο OOP, ενώ η σύνθεση αντιπροσωπεύει μια σχέση "έχει-a".