Διαφορά μεταξύ εικονικής και αφηρημένης

Anonim

Virtual vs. Abstract

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

Περίληψη

Συνήθως, οι αφηρημένες κλάσεις, γνωστές και ως Αφηρημένες κλάσεις βάσης (ABC), δεν μπορούν να παρουσιαστούν (δεν είναι δυνατή η δημιουργία μιας εμφάνισης αυτής της κλάσης). Έτσι, οι κλάσεις Abstract έχουν νόημα μόνο αν η γλώσσα προγραμματισμού υποστηρίζει την κληρονομικότητα (δυνατότητα δημιουργίας υποκατηγοριών από την επέκταση μιας κλάσης). Τα αφηρημένα μαθήματα αντιπροσωπεύουν συνήθως μια αφηρημένη έννοια ή οντότητα με μερική ή μη εφαρμογή. Επομένως, οι αφηρημένες κλάσεις δρουν ως γονικές τάξεις από τις οποίες προέρχονται οι κλάσεις των παιδιών, έτσι ώστε η τάξη των παιδιών να μοιράζεται τα ελλιπή χαρακτηριστικά της μητρικής τάξης και να μπορούν να προστεθούν λειτουργικότητες για την ολοκλήρωσή τους. Τα αφηρημένα μαθήματα μπορεί να περιέχουν αφηρημένες μεθόδους Υποκατηγορίες που επεκτείνουν μια αφηρημένη κλάση μπορούν να εφαρμόσουν αυτές τις (κληρονομικές) αφηρημένες μεθόδους. Εάν η τάξη των παιδιών εφαρμόζει όλες αυτές τις αφηρημένες μεθόδους, είναι μια συγκεκριμένη τάξη. Αλλά αν όχι, η τάξη των παιδιών γίνεται επίσης μια κατηγορία Abstract. Αυτό σημαίνει ότι όταν ο προγραμματιστής ορίζει μια τάξη ως Περίληψη, λέει ότι η τάξη θα είναι ατελής και θα έχει στοιχεία που πρέπει να συμπληρωθούν από τις κληρονομικές υποκλάσεις. Αυτός είναι ένας καλός τρόπος για να δημιουργηθεί μια σύμβαση μεταξύ δύο προγραμματιστών, η οποία απλοποιεί τα καθήκοντα στην ανάπτυξη λογισμικού. Ο προγραμματιστής, ο οποίος γράφει κώδικα για να κληρονομήσει, πρέπει να ακολουθήσει ακριβώς τους ορισμούς των μεθόδων (αλλά φυσικά μπορεί να έχει και τη δική του εφαρμογή). Στην Java και C #, οι αφηρημένες κλάσεις και οι μέθοδοι δηλώνονται χρησιμοποιώντας την λέξη Αφηρημένη.

Οι εικονικές μέθοδοι / λειτουργίες παρέχουν τη δυνατότητα προαιρετικής αντικατάστασης της συμπεριφοράς από μια τάξη κληρονομίας (χρησιμοποιώντας μια λειτουργία με την ίδια υπογραφή). Η έννοια της εικονικής λειτουργίας είναι σημαντική στο ακόλουθο σενάριο. Ας υποθέσουμε ότι μια κλάση προέρχεται από μια κλάση παιδιού, τότε κάθε φορά που χρησιμοποιείται ένα αντικείμενο της παράγωγης κλάσης, μπορεί να αναφέρεται σε ένα αντικείμενο της κλάσης βάσης ή της παράγωγης κλάσης. Όμως, η συμπεριφορά κλήσης μεθόδου μπορεί να είναι διφορούμενη εάν οι μέθοδοι της βασικής κλάσης παραμεληθούν. Έτσι, για να επιλυθεί αυτή η ασάφεια, χρησιμοποιείται εικονική λέξη-κλειδί. Εάν η μέθοδος έχει επισημανθεί ως Εικονική, τότε η συνάρτηση της παράγωγης κλάσης καλείται (εάν υπάρχει) ή αλλιώς καλείται η συνάρτηση της βασικής κλάσης. Για παράδειγμα, στην C ++, η εικονική λέξη-κλειδί χρησιμοποιείται ακριβώς γι 'αυτό το σκοπό. Στο C #, η εικονική λέξη-κλειδί χρησιμοποιείται με παρόμοιο τρόπο, αλλά επιπλέον, η παράκαμψη της λέξης-κλειδιού θα πρέπει να χρησιμοποιείται για την τροποποίηση όλων των μεθόδων που έχουν αντικατασταθεί.Αλλά στη Java, δεν υπάρχει ρητή εικονική λέξη-κλειδί. Όλες οι μη στατικές μέθοδοι θεωρούνται εικονικές. Οι εικονικές λειτουργίες που δεν διαθέτουν σώμα ονομάζονται λειτουργίες Pure Virtual. Στην Java και C #, οι αφηρημένες μέθοδοι είναι στην πραγματικότητα Pure Virtual.

Διαφορά μεταξύ Εικονικής και Αφηρημένης

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