Διαφορά κλειδιού: Η διασύνδεση ή ένα πρωτόκολλο είναι ένας κοινός τρόπος που επιτρέπει σε μη σχετιζόμενα αντικείμενα να επικοινωνούν μεταξύ τους. Αντιπροσωπεύει μια συμπεφωνημένη συμπεριφορά που διευκολύνει την αλληλεπίδραση μεταξύ των δύο αντικειμένων. Μια αφηρημένη κλάση είναι μια κλάση αντικειμένων που δεν μπορούν να δημιουργηθούν παράσταση ή να δημιουργήσουν μια παρουσία ενός αντικειμένου. Αυτή η κατηγορία μπορεί να μην έχει εφαρμογή ή μπορεί να έχει ελλιπή εφαρμογή.
Η Java είναι μια γλώσσα προγραμματισμού, η οποία έχει επηρεαστεί από τη γλώσσα C. Αποδίδει μεγάλο μέρος της σύνταξής του από το C και το C ++, ωστόσο έχει λιγότερες εγκαταστάσεις χαμηλού επιπέδου από τις δύο. Η Java είναι μια γενική γλώσσα προγραμματισμού που έχει σχεδιαστεί για να έχει λιγότερες εξαρτήσεις εφαρμογής σε σύγκριση με προηγούμενες γλώσσες. Είναι ταυτόχρονη, βασισμένη στην τάξη, και μια αντικειμενοστρεφής γλώσσα.
Η Java αναπτύχθηκε από τον James Gosling στην Sun Microsystems και κυκλοφόρησε το 1995. Αρχικά κυκλοφόρησε ως βασικό στοιχείο της πλατφόρμας Java της Sun Microsystems. Από τότε η Sun έχει εκχωρήσει εκ νέου την πλειοψηφία των τεχνολογιών Java της βάσει της Γενικής Δημόσιας Άδειας GNU. Αυτό σημαίνει ότι όλη η τεχνολογία που έχει άδεια χρήσης υπό την GNU General Public License είναι ανοιχτού κώδικα και γενικά διατίθεται χωρίς κόστος. Η Sun Microsystems συγχωνεύθηκε τελικά με την Oracle Corporation. Από το 2012, η Java έχει γίνει μια από τις πιο δημοφιλείς γλώσσες προγραμματισμού για χρήση. Αυτό ισχύει ιδιαίτερα για εφαρμογές ιστού πελάτη-διακομιστή. Πολλά άλλα συστήματα έχουν αναπτύξει εναλλακτικές εφαρμογές τεχνολογιών Sun, όπως το GNU Compiler για Java και το GNU Classpath.
Μια αφηρημένη κλάση είναι μια κλάση αντικειμένων που δεν μπορούν να δημιουργηθούν παράσταση ή να δημιουργήσουν μια παρουσία ενός αντικειμένου. Αυτή η κατηγορία μπορεί να μην έχει εφαρμογή ή μπορεί να έχει ελλιπή εφαρμογή. Μπορεί επίσης να έχει αφηρημένες μεθόδους ή ιδιότητες που μοιράζονται όλες οι υποκατηγορίες. Σε ορισμένες γλώσσες προγραμματισμού, οι αφηρημένοι τύποι χωρίς εφαρμογή είναι γνωστοί ως διεπαφές. Στην Java, ένας αφηρημένος τύπος μπορεί να δημιουργηθεί χρησιμοποιώντας τη λέξη-κλειδί 'abstract' στον ορισμό της κλάσης. Ο σκοπός της ύπαρξης μιας αφηρημένης κλάσης να τοποθετήσει όλες τις μεθόδους που δεν εφαρμόζονται στην αφηρημένη κλάση και να την αφήσει στην υποκλάση για να καθορίσει τον τρόπο εφαρμογής αυτών των τάξεων. Αν μια τάξη έχει μια ενιαία αφηρημένη μέθοδο, η τάξη πρέπει να δηλωθεί ως αφηρημένη κλάση, αν και δεν χρειάζεται να έχουμε τουλάχιστον μία μέθοδο για να δηλώσουμε μια αφηρημένη τάξη.
Το Malliktalksjava.in αναφέρει τις μεγάλες διαφορές μεταξύ διεπαφής και αφηρημένης όπως:
- Η αφηρημένη κλάση έχει τον κατασκευαστή, αλλά η διεπαφή δεν είναι.
- Οι αφηρημένες τάξεις μπορούν να έχουν υλοποιήσεις για μερικά από τα μέλη της (Μέθοδοι), αλλά η διεπαφή δεν μπορεί να έχει εφαρμογή για κανένα από τα μέλη της.
- Τα αφηρημένα μαθήματα πρέπει να έχουν άλλες υποκατηγορίες που θα είναι άχρηστες.
- Οι διεπαφές πρέπει να έχουν υλοποιήσεις από άλλες κατηγορίες που θα είναι άχρηστες
- Μόνο μια διεπαφή μπορεί να επεκτείνει μια άλλη διεπαφή, αλλά κάθε τάξη μπορεί να επεκτείνει μια αφηρημένη κλάση.
- Όλες οι μεταβλητές σε διεπαφές είναι τελικές από προεπιλογή
- Οι διεπαφές παρέχουν μια μορφή πολλαπλής κληρονομικότητας. Μια τάξη μπορεί να επεκτείνει μόνο μία άλλη τάξη.
- Οι διεπαφές περιορίζονται στις δημόσιες μεθόδους και σταθερές χωρίς εφαρμογή. Οι αφηρημένες τάξεις μπορούν να έχουν μερική εφαρμογή, προστατευμένα μέρη, στατικές μεθόδους κ.λπ.
- Μια κατηγορία μπορεί να εφαρμόσει διάφορες διεπαφές. Αλλά σε περίπτωση αφηρημένης τάξης, μια τάξη μπορεί να επεκτείνει μόνο μία αφηρημένη τάξη.
- Οι διεπαφές είναι αργές, καθώς απαιτεί επιπλέον έμμεση εντοπισμό της αντίστοιχης μεθόδου στην πραγματική κατηγορία. Οι αφηρημένες τάξεις είναι γρήγορες.
- Ο τροποποιητής προσβασιμότητας (Δημόσιο / Ιδιωτικό / εσωτερικό) επιτρέπεται για αφηρημένη κλάση. Η διεπαφή δεν επιτρέπει τροποποιητή προσβασιμότητας
- Μια αφηρημένη κλάση μπορεί να περιέχει πλήρεις ή ελλιπείς μεθόδους. Οι διασυνδέσεις μπορούν να περιέχουν μόνο την υπογραφή μιας μεθόδου αλλά κανένα σώμα. Έτσι, μια αφηρημένη κλάση μπορεί να εφαρμόσει μεθόδους, αλλά μια διεπαφή δεν μπορεί να εφαρμόσει μεθόδους.
- Μια αφηρημένη κλάση μπορεί να περιέχει πεδία, κατασκευαστές ή καταστροφείς και να εφαρμόζει ιδιότητες. Μια διεπαφή δεν μπορεί να περιέχει πεδία, κατασκευαστές ή καταστροφείς και έχει μόνο την υπογραφή της ιδιότητας αλλά καμία εφαρμογή.
- Διάφοροι τροποποιητές πρόσβασης, όπως αφηρημένοι, προστατευμένοι, εσωτερικοί, δημόσιοι, εικονικοί κ.λπ., είναι χρήσιμοι σε αφηρημένες κατηγορίες αλλά όχι σε διεπαφές.
- Το πεδίο περίληψης είναι μέχρι την παράγωγη κλάση.
- Το πεδίο εφαρμογής της διεπαφής είναι μέχρι οποιοδήποτε επίπεδο της αλυσίδας κληρονομιάς της.
Οι πληροφορίες για το τραπέζι είναι η ευγένεια των codeproject.com και mindprod.com
Διεπαφή | Αφηρημένη κατηγορία | |
Πολλαπλή κληρονομιά | Μια κλάση μπορεί να κληρονομήσει αρκετές διεπαφές. | Μια τάξη μπορεί να κληρονομήσει μόνο μία αφηρημένη τάξη. |
Προεπιλεγμένη εφαρμογή | Μια διεπαφή δεν μπορεί να παράσχει κανέναν κωδικό, μόνο την υπογραφή. | Μια αφηρημένη κλάση μπορεί να παρέχει πλήρη, προεπιλεγμένο κώδικα ή / και μόνο τις λεπτομέρειες που πρέπει να αντικατασταθούν. |
Τροποποιητές πρόσβασης | Μια διεπαφή δεν μπορεί να έχει τροποποιητές πρόσβασης για τα υποσύνολα, τις λειτουργίες, τις ιδιότητες κλπ. Όλα θεωρούνται δημόσια. | Μια αφηρημένη κλάση μπορεί να περιέχει τροποποιητές πρόσβασης για τις υποσυνθέσεις, τις λειτουργίες και τις ιδιότητες. |
Core vs. Peripheral | Οι διεπαφές χρησιμοποιούνται για τον καθορισμό των περιφερειακών ικανοτήτων μιας τάξης. Με άλλα λόγια, τόσο ο άνθρωπος όσο και το όχημα μπορούν να κληρονομήσουν από μια διεπαφή που μπορεί να μετακινηθεί. | Μια αφηρημένη κλάση ορίζει την ταυτότητα πυρήνα μιας τάξης και εκεί χρησιμοποιείται για αντικείμενα του ίδιου τύπου. |
Ομοιογένεια | Εάν διάφορες εφαρμογές μοιράζονται μόνο υπογραφές μεθόδων τότε είναι καλύτερο να χρησιμοποιηθούν διεπαφές. | Εάν διάφορες εφαρμογές είναι του ίδιου είδους και χρησιμοποιούν κοινή συμπεριφορά ή κατάσταση τότε η αφηρημένη τάξη είναι καλύτερο να χρησιμοποιηθεί. |
Ταχύτητα | Απαιτεί περισσότερο χρόνο για να βρεθεί η πραγματική μέθοδος στις αντίστοιχες τάξεις. | Γρήγορα |
Προσθήκη λειτουργιών | Αν προσθέσουμε μια νέα μέθοδο σε μια διεπαφή τότε πρέπει να εντοπίσουμε όλες τις υλοποιήσεις της διασύνδεσης και να καθορίσουμε την εφαρμογή για τη νέα μέθοδο. | Αν προσθέσουμε μια νέα μέθοδο σε μια αφηρημένη κλάση τότε έχουμε την επιλογή να παρέχουμε προεπιλεγμένη εφαρμογή και συνεπώς όλος ο υπάρχων κώδικας μπορεί να λειτουργήσει σωστά. |
Πεδία και σταθερές | Δεν μπορούν να οριστούν πεδία σε διεπαφές. | Μια αφηρημένη κλάση μπορεί να έχει οριστεί πεδία και σταθερές. |
Συντομία | Οι σταθερές δηλώσεις σε μια διεπαφή είναι όλες τεκμαιρόμενες δημόσιες static τελικό. | Ο κοινός κώδικας μπορεί να προστεθεί σε μια αφηρημένη κλάση. |
Σταθερά | Στατικές τελικές σταθερές μόνο, μπορούν να τις χρησιμοποιήσουν χωρίς να έχουν τα προσόντα σε τάξεις που υλοποιούν τη διεπαφή. | Είναι δυνατές τόσο οι στιγμιαίες όσο και οι στατικές σταθερές. Είναι δυνατός ο υπολογισμός των σταθερών τόσο του στατικού κώδικα όσο και του κωδικού εισόδου του στοιχείου. |
Ευκολία τρίτου μέρους | Μια εφαρμογή διεπαφής μπορεί να προστεθεί σε οποιαδήποτε υπάρχουσα κλάση τρίτου μέρους. | Μια κλάση τρίτου μέρους πρέπει να ξαναγραφεί για να επεκταθεί μόνο από την αφηρημένη κλάση. |
είναι-a εναντίον -able ή can-do | Οι διασυνδέσεις χρησιμοποιούνται συχνά για να περιγράψουν τις περιφερειακές ικανότητες μιας κλάσης και όχι την κεντρική της ταυτότητα, π.χ. μια κλάση Automobile μπορεί να εφαρμόσει τη διεπαφή Recyclable, η οποία θα μπορούσε να εφαρμοστεί σε πολλά κατά τα άλλα τελείως άσχετα αντικείμενα. | Μια αφηρημένη τάξη καθορίζει την ταυτότητα του πυρήνα των απογόνων της. Οι ενσωματωμένες διεπαφές απαριθμούν τα γενικά πράγματα που μπορεί να κάνει μια τάξη, όχι τα πράγματα που είναι τάξη. Σε ένα περιβάλλον Java, οι χρήστες θα πρέπει να εφαρμόσουν συνήθως τη διεπαφή Runnable αντί να επεκτείνουν το Thread, επειδή δεν ενδιαφέρονται πραγματικά να παράσχουν κάποια νέα λειτουργία Thread, συνήθως θέλουν απλώς κάποιος κώδικας να έχει την ικανότητα να εκτελείται ανεξάρτητα. Θέλουν να δημιουργήσουν κάτι που μπορεί να τρέξει σε ένα νήμα, όχι ένα νέο νήμα. Η παρόμοια είναι-ενα εναντίον έχει-μια συζήτηση έρχεται όταν αποφασίσετε να κληρονομήσετε ή να εκχωρήσετε. |
Συνδέω | Ο χρήστης μπορεί να γράψει μια νέα υπομονάδα αντικατάστασης για μια διεπαφή που δεν περιέχει ένα κοινό κομμάτι κώδικα κοινό με τις υπάρχουσες υλοποιήσεις. Όταν ο χρήστης υλοποιεί τη διεπαφή, αρχίζει από την αρχή χωρίς προεπιλεγμένη εφαρμογή. Ο χρήστης πρέπει να αποκτήσει εργαλεία από άλλες κατηγορίες. τίποτα δεν έρχεται με τη διεπαφή εκτός από μερικές σταθερές. Αυτό δίνει στον χρήστη την ελευθερία να εφαρμόσει ένα ριζικά διαφορετικό εσωτερικό σχέδιο. | Ο χρήστης πρέπει να χρησιμοποιήσει την αφηρημένη κλάση όπως είναι για τη βάση κώδικα, με όλες τις αποσκευές του, καλές ή κακές. Ο αφηρημένος συγγραφέας τάξης έχει επιβάλει δομή στον χρήστη. |
Συντήρηση | Εάν ο κώδικας πελάτη μιλάει μόνο από άποψη διεπαφής, μπορείτε εύκολα να αλλάξετε την συγκεκριμένη υλοποίηση πίσω από αυτό, χρησιμοποιώντας μια εργοστασιακή μέθοδο. | Αν ο κώδικας πελάτη μιλάει μόνο σε μια αφηρημένη κλάση, μπορείτε εύκολα να αλλάξετε την συγκεκριμένη υλοποίηση πίσω από αυτό, χρησιμοποιώντας μια εργοστασιακή μέθοδο. |