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

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

Βίντεο: Διαφορά μεταξύ αφηρημένης τάξης και διεπαφής

Βίντεο: Διαφορά μεταξύ αφηρημένης τάξης και διεπαφής
Βίντεο: Γιάνης Βαρουφάκης - Η διαφορά μεταξύ φανατισμού και ριζοσπαστισμού 2024, Ιούλιος
Anonim

Abstract Class vs Interface

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

Τι είναι μια Abstract Class;

Τυπικά, οι Abstract classes, γνωστές και ως Abstract Base Classes (ABC), δεν μπορούν να δημιουργηθούν (δεν μπορεί να δημιουργηθεί μια παρουσία αυτής της κλάσης). Έτσι, οι τάξεις Abstract έχουν νόημα μόνο εάν η γλώσσα προγραμματισμού υποστηρίζει κληρονομικότητα (ικανότητα δημιουργίας υποκλάσεων από την επέκταση μιας κλάσης). Οι αφηρημένες κλάσεις συνήθως αντιπροσωπεύουν μια αφηρημένη έννοια ή οντότητα με μερική ή καθόλου υλοποίηση. Επομένως, οι Abstract classes λειτουργούν ως γονικές κλάσεις από τις οποίες προέρχονται οι θυγατρικές κλάσεις, έτσι ώστε η θυγατρική κλάση θα μοιράζεται τα ημιτελή χαρακτηριστικά της γονικής κλάσης και η λειτουργικότητα μπορεί να προστεθεί για την ολοκλήρωσή τους.

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

Τι είναι μια διεπαφή;

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

Ποια είναι η διαφορά μεταξύ Abstract Class και Interface;

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

Συνιστάται: