what is abstraction java learn with examples
Αυτό το σεμινάριο εξηγεί τι είναι η Αφαίρεση στην Java μαζί με παραδείγματα προγραμματισμού. Θα μάθετε επίσης τι είναι μια αφηρημένη τάξη και γιατί χρησιμοποιείται:
Σε αυτήν τη σειρά JAVA, θα συζητήσουμε τα σημαντικά χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού (OOP) που είναι επίσης γνωστά ως τέσσερις πυλώνες, δηλαδή αφαίρεση, ενθυλάκωση, κληρονομικότητα και πολυμορφισμός.
Ο πρώτος πυλώνας του OOP είναι «Αφαίρεση». 'Η αφαίρεση είναι η διαδικασία επιλογής δεδομένων για την εμφάνιση μόνο των σχετικών πληροφοριών στον χρήστη.'
=> Ρίξτε μια ματιά στον οδηγό για αρχάριους Java εδώ.
Τι θα μάθετε:
- Αφαίρεση στο OOP
- Τι είναι η αφαίρεση στην Java
- Διαφορά μεταξύ αφαίρεσης και ενθυλάκωσης
- συμπέρασμα
Αφαίρεση στο OOP
Με απλούς όρους, η αφαίρεση «εμφανίζει» μόνο τα σχετικά χαρακτηριστικά των αντικειμένων και «κρύβει» τις περιττές λεπτομέρειες.
Για παράδειγμα, όταν οδηγούμε αυτοκίνητο, ανησυχούμε μόνο για την οδήγηση του αυτοκινήτου, όπως εκκίνηση / διακοπή του αυτοκινήτου, επιτάχυνση / διακοπή, κλπ. Δεν ανησυχούμε για το πώς λειτουργεί ο πραγματικός μηχανισμός εκκίνησης / διακοπής ή επιτάχυνσης / πέδησης εσωτερικά. Δεν ενδιαφερόμαστε απλώς για αυτές τις λεπτομέρειες.
Αυτό που μας απασχολεί είναι η «αφηρημένη» άποψη αυτών των λειτουργιών που θα μας βοηθήσουν να προωθήσουμε το αυτοκίνητο προς τα εμπρός και να φτάσουμε στον προορισμό μας. Αυτό είναι ένα απλό παράδειγμα αφαίρεσης.
Έτσι, το αυτοκίνητο διαθέτει όλους τους μηχανισμούς και τις διαδικασίες, αλλά από την οπτική γωνία του τελικού χρήστη, δηλαδή από την άποψη του οδηγού αυτοκινήτου, θα ενδιαφέρεται μόνο για την αφηρημένη άποψη αυτών των διαδικασιών.
Η αφαίρεση μειώνει τις προσπάθειες προγραμματισμού και συνεπώς την πολυπλοκότητα. Ένας τελικός χρήστης που χρησιμοποιεί την εφαρμογή δεν χρειάζεται να ανησυχεί για τον τρόπο υλοποίησης μιας συγκεκριμένης δυνατότητας. Αυτός / αυτή μπορεί να χρησιμοποιήσει τις δυνατότητες όπως απαιτείται.
Έτσι, στην αφαίρεση, ασχολούμαστε με ιδέες και όχι με τα γεγονότα. Αυτό σημαίνει ότι κρύβουμε τις λεπτομέρειες εφαρμογής από τον χρήστη και εκθέτουμε μόνο τη λειτουργικότητα στον τελικό χρήστη. Με αυτόν τον τρόπο ο χρήστης θα γνωρίζει μόνο 'τι κάνει' και όχι 'πώς το κάνει'.
Η αφαίρεση στο OOP μπορεί να είναι δύο τύπων.
# 1) Αφαίρεση δεδομένων
Στην αφαίρεση δεδομένων, δημιουργούμε ως επί το πλείστον σύνθετους τύπους δεδομένων και αποκρύπτουμε την εφαρμογή τους. Εκθέτουμε μόνο τις λειτουργίες για χειρισμό αυτών των τύπων δεδομένων χωρίς να αναφερθούμε στις λεπτομέρειες της εφαρμογής τους.
Ένα πλεονέκτημα αυτής της προσέγγισης είναι ότι μπορούμε να αλλάξουμε την εφαρμογή ανά πάσα στιγμή χωρίς να αλλάξουμε τη συμπεριφορά που εκτίθεται στον χρήστη.
# 2) Αφαίρεση ελέγχου
Το Control abstraction συλλέγει όλες τις δηλώσεις ελέγχου που αποτελούν μέρος της εφαρμογής και τις εκθέτει ως μονάδα. Αυτή η λειτουργία χρησιμοποιείται όταν πρέπει να εκτελέσουμε μια λειτουργική λειτουργία χρησιμοποιώντας αυτήν τη μονάδα ελέγχου.
Η αφαίρεση ελέγχου αποτελεί την κύρια μονάδα δομημένου προγραμματισμού και χρησιμοποιώντας την αφαίρεση ελέγχου μπορούμε να ορίσουμε απλές λειτουργίες σε σύνθετα πλαίσια.
Τι είναι η αφαίρεση στην Java
Καθώς η Java είναι μια γλώσσα OOP, η αφαίρεση μπορεί να θεωρηθεί ως ένα από τα σημαντικά χαρακτηριστικά και δομικά στοιχεία της γλώσσας Java. Στην Java, η αφαίρεση πραγματοποιείται χρησιμοποιώντας μια αφηρημένη κλάση και διεπαφή.
Πώς λοιπόν εφαρμόζουμε την αφαίρεση στην Java; Η Java παρέχει έναν 'αφηρημένο' τροποποιητή χωρίς πρόσβαση για την εφαρμογή της αφαίρεσης. Αυτός ο αφηρημένος τροποποιητής μπορεί να χρησιμοποιηθεί με τάξεις και μεθόδους αλλά όχι με μεταβλητές.
Η διεπαφή παρέχει πλήρη αφαίρεση, δηλαδή παρέχει μόνο πρωτότυπα μεθόδων και όχι την εφαρμογή τους. Μια αφηρημένη τάξη παρέχει μερική αφαίρεση όπου τουλάχιστον μία μέθοδος δεν πρέπει να εφαρμόζεται.
Σε αυτό το σεμινάριο, θα συζητήσουμε λεπτομερώς την αφαίρεση με αφηρημένες τάξεις. Θα διερευνήσουμε διεπαφές λεπτομερώς στα επόμενα σεμινάρια μας.
Παράδειγμα αφαίρεσης Java
Ας δούμε το παρακάτω παράδειγμα.
//abstract class abstract class Car{ abstract void accelerate(); } //concrete class class Suzuki extends Car{ void accelerate(){ System.out.println('Suzuki::accelerate'); } } class Main{ public static void main(String args()){ Car obj = new Suzuki(); //Car object =>contents of Suzuki obj.accelerate(); //call the method } }
Παραγωγή:
Το απλό παράδειγμα αφαίρεσης που δίνεται παραπάνω έχει ένα αυτοκίνητο κατηγορίας. Σε αυτήν την κατηγορία Αυτοκίνητο, έχουμε μια αφηρημένη μέθοδο για την επιτάχυνση (). Στη συνέχεια κληρονομούμε αυτήν την τάξη στην κατηγορία Suzuki. Μέσα στην κατηγορία Suzuki, εφαρμόζουμε τη μέθοδο επιτάχυνσης.
Το παραπάνω παράδειγμα δείχνει απλά τον τρόπο με τον οποίο μια αφηρημένη τάξη ορίζεται, κληρονομείται και στη συνέχεια χρησιμοποιείται στο πρόγραμμα.
Τι είναι το Java Abstract Class
Αναφέραμε ήδη ότι η Java εφαρμόζει αφαίρεση χρησιμοποιώντας αφηρημένες κλάσεις και διεπαφές. Ας εξερευνήσουμε πρώτα όλα σχετικά με την αφηρημένη τάξη.
Μια αφηρημένη κλάση μπορεί να οριστεί ως μια κλάση που δηλώνεται με τη λέξη-κλειδί «αφηρημένη» και έχει έναν περιορισμό που δεν μπορεί να τεκμηριωθεί.
Μια αφηρημένη τάξη μπορεί να έχει ή να μην έχει καμία αφηρημένη μέθοδο (μια μέθοδος χωρίς εφαρμογή). Όσον αφορά το JVM, μια αφηρημένη τάξη είναι μια ελλιπής τάξη που δεν έχει πλήρη συμπεριφορά.
Η γενική σύνταξη μιας αφηρημένης τάξης δίνεται παρακάτω:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Όπως φαίνεται στη σύνταξη της παραπάνω αφηρημένης τάξης, μπορούμε να έχουμε αφηρημένες και μη αφηρημένες μεθόδους σε μια αφηρημένη τάξη. Η λέξη-κλειδί «περίληψη» προηγείται της δήλωσης τάξης.
Με λίγα λόγια, μια αφηρημένη τάξη μπορεί να περιγραφεί όπως φαίνεται παρακάτω.
Αφηρημένη μέθοδος στην Ιάβα
Μια αφηρημένη μέθοδος είναι μια μέθοδος όπου προηγείται μια «αφηρημένη» λέξη-κλειδί χωρίς καμία εφαρμογή. Μια αφηρημένη μέθοδος δηλώνεται μέσα σε μια αφηρημένη τάξη.
Μια αφηρημένη μέθοδος είναι αυτή που καθιστά μια τάξη ελλιπή καθώς δεν έχει εφαρμογή. Ως εκ τούτου, όταν συμπεριλαμβάνουμε μια αφηρημένη μέθοδο στην τάξη, φυσικά η τάξη γίνεται ατελής.
Μπορούμε να χρησιμοποιήσουμε την αφηρημένη μέθοδο εφαρμόζοντας την σε μια υποκατηγορία, δηλαδή μια κλάση κληρονομεί την αφηρημένη τάξη και στη συνέχεια εφαρμόζει ή παρέχει τον κώδικα για όλες τις αφηρημένες μεθόδους που δηλώνονται στην αφηρημένη τάξη, παρακάμπτοντάς τις.
Έτσι καθίσταται υποχρεωτική η παράκαμψη της αφηρημένης μεθόδου στην υποκατηγορία. Εάν η αφηρημένη μέθοδος δεν εφαρμόζεται και στην υποκατηγορία, τότε πρέπει να δηλώσουμε την υποκατηγορία επίσης ως «αφηρημένη».
Η γενική δήλωση της αφηρημένης μεθόδου είναι:
αφηρημένη κενός methodName (παράμετρος_ λίστα);
Κατά τη σύνταξη της αφηρημένης μεθόδου, πρέπει να θυμόμαστε τους ακόλουθους κανόνες:
πολυμορφισμός χρόνου εκτέλεσης σε c ++
- Μια τάξη που περιέχει μία ή περισσότερες αφηρημένες μεθόδους είναι μια αφηρημένη τάξη.
- Ορισμένες άλλες λέξεις-κλειδιά δεν πρέπει να χρησιμοποιούνται με την αφηρημένη λέξη-κλειδί.
Έτσι, οι ακόλουθοι συνδυασμοί είναι παράνομοι στην Java.
- τελικός
- αφηρημένη μητρική
- αφηρημένη στατική
- αφηρημένη ιδιωτική
- αφηρημένη συγχρονισμένη
- περίληψη
Ας εφαρμόσουμε ένα παράδειγμα μιας αφηρημένης τάξης και μιας αφηρημένης μεθόδου.
//abstract class abstract class Bank{ abstract int getInterestRate(); } //concrete class class Citi extends Bank{ int getInterestRate(){return 7;} } //concrete class class HSBC extends Bank{ int getInterestRate(){return 6;} } class Main{ public static void main(String args()){ Bank b; b = new Citi (); // concrete class object System.out.println('Citi Rate of Interest is: '+b.getInterestRate()+'%'); b = new HSBC (); // concrete class object System.out.println('HSBC Rate of Interest is: '+b.getInterestRate()+'%'); } }
Παραγωγή:
Στο παραπάνω παράδειγμα, έχουμε τραπεζική τάξη. Σε αυτήν την τάξη, έχουμε μια αφηρημένη μέθοδο, getInterestRate (). Στη συνέχεια δηλώνουμε δύο τάξεις - ICICI και BOI που κληρονομούν από την τάξη της Τράπεζας. Και οι δύο αυτές τάξεις εφαρμόζουν τη μέθοδο getInterestRate () επιστρέφοντας τα αντίστοιχα επιτόκια τους.
Στη συνέχεια, στην κύρια μέθοδο, δημιουργούμε ένα αντικείμενο τράπεζας. Πρώτον, το αντικείμενο τράπεζας περιέχει ένα αντικείμενο κατηγορίας ICICI και εμφανίζει το επιτόκιο. Στη συνέχεια, δημιουργείται το αντικείμενο BOI και εμφανίζει το επιτόκιο.
Έτσι, μπορούμε να υποθέσουμε ότι η τάξη της Τράπεζας είναι ένα είδος σκίτσου ή δομής που μας επιτρέπει να έχουμε επιτόκιο. Από αυτήν τη δομή, μπορούμε να δημιουργήσουμε όσες συγκεκριμένες κατηγορίες θέλουμε και μετά μπορούμε να πάρουμε τα αντίστοιχα επιτόκια για κάθε τραπεζικό αντικείμενο (αυτό φαίνεται στην κύρια μέθοδο).
Ποια είναι η χρήση μιας αφηρημένης κλάσης στην Ιάβα
Γιατί χρησιμοποιούμε μια αφηρημένη τάξη όταν στην πραγματικότητα δεν έχει δική της εφαρμογή;
Μαζί με την απάντηση στην παραπάνω ερώτηση, θα παρουσιάσουμε επίσης πώς να χρησιμοποιήσετε μια αφηρημένη τάξη στο παράδειγμα που ακολουθεί.
Ας εξετάσουμε ένα παράδειγμα οχημάτων. Γνωρίζουμε ότι τα οχήματα μπορούν να είναι πολλών τύπων. Μπορούμε να έχουμε αυτοκίνητα, σκούτερ, ποδήλατα, μοτοποδήλατα, λεωφορεία κ.λπ. Αν και υπάρχουν πολλοί τύποι οχημάτων, έχουν κάποιες ιδιότητες ή χαρακτηριστικά που είναι κοινά σε όλα τα οχήματα ανεξάρτητα από τον τύπο τους.
Για παράδειγμα, κάθε όχημα έχει ένα μοντέλο, αριθμό πλαισίου, χρώμα κ.λπ. Κάθε ένα από αυτά έχει λειτουργίες όπως εκκίνηση, διακοπή, επιτάχυνση, φρένο κ.λπ. Τώρα κάθε όχημα θα έχει τις παραπάνω ιδιότητες και μεθόδους που είναι κοινές και στα άλλα. Ταυτόχρονα ως χρήστης οχήματος, ενδέχεται να μην μας ενδιαφέρει ορισμένες πτυχές.
Για παράδειγμα, Εάν ένα άτομο οδηγεί αυτοκίνητο, αυτό που θα του ενδιαφέρει είναι απλώς να ξεκινήσει και να σταματήσει το όχημα ή να επιταχύνει ή να φρενάρει το όχημα. Δεν θα ενδιαφέρεται να μάθει πώς ξεκινά ή σταματά το όχημα. Ενδιαφερόμαστε μόνο για την αφηρημένη λειτουργία των συναρτήσεων και όχι για τις λεπτομέρειες τους.
Τώρα, εάν θέλουμε να αντιπροσωπεύσουμε το παραπάνω παράδειγμα συστήματος σε μια εφαρμογή λογισμικού, τότε πώς το σχεδιάζουμε; Πρώτα απ 'όλα, θα εφαρμόσουμε κάποια αφαίρεση. Τώρα, γνωρίζουμε ότι ορισμένες λειτουργίες είναι κοινές, αλλά ανάλογα με κάθε μοντέλο, η υλοποίηση αυτών των λειτουργιών θα είναι διαφορετική.
Κατ 'αρχάς, δηλώνουμε μια αφηρημένη κατηγορία 'Όχημα'.
Έχουμε δείξει αυτό το σύστημα παρακάτω:
Έτσι θα έχουμε μια αφηρημένη κατηγορία Οχήματος και θα υπάρχει μια συγκεκριμένη κατηγορία που θα αντιπροσωπεύει κάθε μοντέλο του οχήματος. Για λόγους απεικόνισης, χρησιμοποιήσαμε μόνο τρία μοντέλα, δηλαδή αυτοκίνητο, ποδήλατο και σκούτερ.
Δίνεται παρακάτω η ιεραρχία τάξης από το παραπάνω σύστημα.
abstract class Vehicle{ abstract void start () ; abstract void stop (); abstract void accelerate (); abstract void brake (); } class Car extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Bike extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Scooter extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} }
Έτσι, θα έχουμε μια αφηρημένη κατηγορία Οχημάτων και τρεις κατηγορίες Car, Bike και Scooter. Κάθε μία από αυτές τις κατηγορίες θα επεκτείνει την κατηγορία Οχήματος και θα παρακάμψει κάθε μία από τις αφηρημένες μεθόδους.
απροσδιόριστη αναφορά στη συνάρτηση κλάσης c ++
Έτσι, γενικά, όποτε πρέπει να αντιπροσωπεύσουμε ένα τέτοιο σύστημα που έχει κοινές μεθόδους ή λειτουργίες για να αντιπροσωπεύσει, τότε για να παρουσιάσουμε μόνο την εξωτερική προοπτική στον χρήστη, πηγαίνουμε για αφαίρεση. Ως αποτέλεσμα, παίρνουμε τις κοινές μεθόδους και τις αντιπροσωπεύουμε ως αφηρημένες μεθόδους και συλλέγουμε αυτές τις αφηρημένες μεθόδους σε μια κοινή αφηρημένη τάξη.
Μόλις έχουμε το περίγραμμα ενός συστήματος που αντιπροσωπεύεται ως μια αφηρημένη τάξη και οι λειτουργίες ως αφηρημένες μέθοδοι, μπορούμε στη συνέχεια να αντλήσουμε οποιονδήποτε αριθμό κλάσεων από τη δεδομένη αφηρημένη τάξη και να παρακάμψουμε τις αφηρημένες μεθόδους για την εφαρμογή αυτών των λειτουργιών για κάθε κατηγορία.
Με αυτόν τον τρόπο καθίσταται χρήσιμο ο σχεδιασμός ενός συστήματος.
Αφηρημένη κλάση και διεπαφή
Έχουμε δει την αφηρημένη τάξη παραπάνω. Οι διεπαφές είναι ακόμη άλλα δομικά στοιχεία που εφαρμόζουν την αφαίρεση. Οι διεπαφές είναι συμβόλαια και οι κλάσεις που εφαρμόζουν τη διεπαφή πρέπει να τηρούν αυτά τα συμβόλαια.
Οι συμβάσεις στις διεπαφές δεν είναι τίποτα άλλο παρά μέθοδοι που δεν εφαρμόζονται. Μέσα στις διεπαφές, θα έχουμε μόνο πρωτότυπα μεθόδων. Δεν θα υπάρχει ενιαία εφαρμογή μεθόδων μέσα σε διεπαφές.
Εάν έχουμε μια δήλωση διεπαφής ως εξής:
public interface interfaceA{ void myInterfaceMethod (); }
Στη συνέχεια, κάθε κλάση που εφαρμόζει το interfaceA πρέπει να παρακάμψει το «myInterfaceMethod».
Εάν καθόλου δεν παρακάμψουμε τη μέθοδο σε μια τάξη, τότε αυτή η τάξη αντιπροσωπεύεται ως αφηρημένη.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Θα έχουμε ένα ξεχωριστό σεμινάριο για τη διεπαφή αργότερα.
Στη συνέχεια, ας συζητήσουμε μερικές από τις διαφορές μεταξύ των κλάσεων Abstract και Interfaces στην Java.
Διαφορά μεταξύ αφηρημένης κλάσης και διεπαφής
Περίληψη τάξη | Διεπαφή |
---|---|
Μια αφηρημένη τάξη μπορεί να έχει ιδιωτικά ή προστατευμένα μέλη δεδομένων εκτός από δημόσια μέλη. | Τα μέλη της διεπαφής είναι από προεπιλογή δημόσια. |
Μια αφηρημένη τάξη μπορεί να έχει αφηρημένες και / ή μη αφηρημένες μεθόδους. | Μια διεπαφή μπορεί να έχει μόνο αφηρημένες μεθόδους. |
Η περίληψη μπορεί ή όχι να περιέχει τις τελικές μεταβλητές. | Οι διεπαφές μπορούν να είναι οι τελικές μεταβλητές ως προεπιλεγμένες μεταβλητές. |
Μια αφηρημένη τάξη μπορεί να έχει τελικές, στατικές ή μη στατικές ή μη τελικές μεταβλητές. | Οι διεπαφές μπορούν να έχουν μόνο τελικές και στατικές μεταβλητές. |
Μια αφηρημένη κλάση μπορεί να παρέχει εφαρμογή διεπαφής. | Οι διεπαφές δεν μπορούν να εφαρμόσουν μια αφηρημένη τάξη. |
Μια αφηρημένη τάξη κληρονομείται χρησιμοποιώντας τη λέξη-κλειδί 'επεκτείνεται'. | Η διεπαφή υλοποιείται χρησιμοποιώντας τη λέξη-κλειδί «υλοποιεί». |
Μια αφηρημένη κλάση μπορεί να επεκτείνει άλλες κατηγορίες ή να εφαρμόσει πολλαπλές διεπαφές. | Η διεπαφή μπορεί να εφαρμόσει μόνο μια άλλη διεπαφή. |
Πότε να χρησιμοποιήσετε αφηρημένη κλάση και διεπαφή στην Java
Η απόφαση σχετικά με το πότε θα χρησιμοποιηθεί αφηρημένη κλάση και πότε να χρησιμοποιηθούν διεπαφές στην εφαρμογή Java θα πρέπει να ληφθεί έξυπνα μετά την πλήρη κατανόηση του προβλήματος. Υπάρχουν δύο πτυχές που πρέπει να λάβουμε υπόψη, όπως φαίνεται παρακάτω.
Περίληψη Μαθήματα με Μερική Συμπεριφορά
Γνωρίζουμε ότι οι αφηρημένες τάξεις μπορεί να μην εφαρμόζονται πλήρως λιγότερο. Μπορούν να έχουν μερική συμπεριφορά. Από την άλλη πλευρά, οι διεπαφές δεν έχουν καμία εφαρμογή. Έτσι, όταν πρέπει να επιλέξουμε ανάμεσα σε μια αφηρημένη τάξη και μια εφαρμογή, τότε πρέπει να εξετάσουμε αυτήν την πτυχή της εφαρμογής μας.
Αυτό σημαίνει ότι πρέπει πρώτα να αποφασίσουμε εάν η εφαρμογή που σχεδιάζουμε έχει κάποια κοινή μερική εφαρμογή που μπορούμε να διαχωρίσουμε σε μια αφηρημένη τάξη.
Για παράδειγμα, θεωρήστε ότι σχεδιάζουμε μια διαδικτυακή εφαρμογή. Για αυτό, θα πρέπει να χρησιμοποιήσουμε κάποια τεχνολογία Ιστού όπως το Servlet, το REST API κ.λπ. Τώρα καθεμία από αυτές τις τεχνολογίες ιστού έχει κάποιες τεχνικές ή βήματα που πρέπει να εφαρμοστούν ανεξάρτητα από την εφαρμογή που αναπτύσσουμε. Στη συνέχεια, χτίζουμε την προσαρμοσμένη εφαρμογή μας.
Έτσι σε αυτήν την περίπτωση, ο οριστικός κώδικας που πρέπει να εκτελέσει η τεχνολογία Ιστού μπορεί να τοποθετηθεί σε μια αφηρημένη τάξη. Μπορούμε να έχουμε μια διεπαφή για αυτό; Όχι. Αυτό συμβαίνει επειδή η διεπαφή δεν μπορεί να έχει εφαρμογή.
Διεπαφές μόνο με συμβόλαιο
Γνωρίζουμε ότι οι διεπαφές έχουν συμβόλαια ή μεθόδους που αποτελούν μέρος αυτής. Αυτές οι μέθοδοι είναι μόνο πρωτότυπα. Πρέπει να εφαρμόσουμε αυτές τις διεπαφές σε μια τάξη και στη συνέχεια να παρακάμψουμε τις μεθόδους.
Τώρα εξετάστε τη διασύνδεση χάρτη του Java Συλλογές Framework. Πολλές τάξεις όπως HashMap, TreeMap και HashTable κ.λπ. εφαρμόζουν αυτήν τη διεπαφή. Κάθε μία από αυτές τις τάξεις έχει διαφορετική εφαρμογή. Δεν έχουν κοινή συμπεριφορά που μπορεί να αναπαρασταθεί στην αφηρημένη τάξη.
Αυτό που κάνουμε λοιπόν είναι να σχεδιάσουμε μια διεπαφή με πρωτότυπα μεθόδων και στη συνέχεια να εφαρμόσουμε καθεμία από τις τάξεις.
Με αυτόν τον τρόπο πρέπει να σταθμίσουμε κάθε παράγοντα σωστά προτού επιλέξουμε μεταξύ μιας αφηρημένης κλάσης και μιας διεπαφής.
Διαφορά μεταξύ αφαίρεσης και ενθυλάκωσης
Ας συζητήσουμε μερικές από τις διαφορές μεταξύ της αφαίρεσης και ενός ακόμη σημαντικού χαρακτηριστικού του OOP, δηλαδή της ενθυλάκωσης.
Αφαίρεση | Ενθυλάκωση |
---|---|
Διαδικασία απόκτησης και αφαίρεσης των πληροφοριών | Διαδικασία δέσμευσης των πληροφοριών. |
Η τεχνική αφαίρεσης είναι σε επίπεδο σχεδίασης ή διεπαφής. | Ο μηχανισμός ενθυλάκωσης βρίσκεται στο επίπεδο εφαρμογής. |
Η αφαίρεση κρύβει τις λεπτομέρειες. | Η ενθυλάκωση δεσμεύει τις πληροφορίες σε μία μονάδα διασφαλίζοντας την ασφάλεια των πληροφοριών. |
Η αφαίρεση εφαρμόζεται χρησιμοποιώντας αφηρημένες τάξεις και διεπαφές. | Οι τροποποιητές πρόσβασης, δηλαδή δημόσιοι, ιδιωτικοί και προστατευμένοι και προεπιλεγμένοι, παίζουν ρόλο στην ενθυλάκωση. |
Στην αφαίρεση, η μόνη αφηρημένη προβολή παρουσιάζεται στον χρήστη ενώ πολύπλοκα και λεπτομερή δεδομένα είναι κρυμμένα από τον χρήστη. | Στην ενθυλάκωση, τα δεδομένα ομαδοποιούνται ως μονάδα και μπορούν να προστατευτούν ή να γίνουν προσβάσιμα χρησιμοποιώντας τροποποιητές πρόσβασης και μεθόδους λήψης και ρύθμισης. |
Συχνές Ερωτήσεις
Q # 1) Η αφαίρεση και τα δεδομένα κρύβονται τα ίδια;
Απάντηση: Όχι, η αφαίρεση και η απόκρυψη δεδομένων δεν είναι τα ίδια. Αλλά και τα δύο είναι σημαντικά χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού. Ενώ η αφαίρεση είναι μια διαδικασία απόκρυψης των λεπτομερειών του φόντου, η απόκρυψη δεδομένων είναι μια τεχνική μόνωσης των δεδομένων από την άμεση πρόσβαση.
Q # 2) Ποια είναι τα πλεονεκτήματα της αφαίρεσης;
Απάντηση: Λίγα πλεονεκτήματα της αφαίρεσης δίδονται παρακάτω:
- Κρύβοντας τις λεπτομέρειες φόντου και εκθέτοντας μόνο την αφηρημένη προβολή στον χρήστη, η αφαίρεση κάνει τον κώδικα απλούστερο και πιο ευανάγνωστο.
- Καθώς η αφαίρεση προστατεύει περιττές λεπτομέρειες, κάνει τον κώδικα μικρότερο.
- Η συντήρηση κώδικα μπορεί να γίνει περίπλοκη και δύσκολη χωρίς αφαίρεση.
Q # 3) Γιατί είναι τόσο σημαντική η αφαίρεση;
Απάντηση: Η αφαίρεση μας επιτρέπει να αποκρύπτουμε λεπτομέρειες στο παρασκήνιο που είναι σημαντικές και μπορούν να οδηγήσουν σε χάος εάν διαρρεύσουν στον κόσμο. Κρύβοντας τις λεπτομέρειες φόντου και εκθέτοντας μόνο την απαιτούμενη διεπαφή στον χρήστη, η αφαίρεση κάνει τις εφαρμογές πιο απλές.
Q # 4) Εξηγήστε την αφαίρεση με ένα παράδειγμα σε πραγματικό χρόνο.
Απάντηση: Υπάρχουν πολλά παραδείγματα αφαίρεσης σε πραγματικό χρόνο, όπως γεωμετρικά σχήματα, οχήματα κ.λπ. Ένα άλλο παράδειγμα είναι το ATM (Automated Teller Machine). Το ATM υποστηρίζει λειτουργίες όπως ανάληψη μετρητών, έλεγχος υπολοίπου, μεταφορά χρημάτων κ.λπ. Αλλά δεν γνωρίζουμε πώς λειτουργούν αυτές οι λειτουργίες εσωτερικά.
Μας δίνεται μόνο μια οθόνη με διεπαφή χρήστη για την επιλογή και την εκτέλεση των απαιτούμενων λειτουργιών.
Ε # 5) Μπορούμε να επιτύχουμε αφαίρεση χωρίς ενθυλάκωση;
Απάντηση: Η αφαίρεση προστατεύει τις λεπτομέρειες εφαρμογής και η ενθυλάκωση κρύβει τις λεπτομέρειες του αντικειμένου. Το αντικείμενο είναι η αφηρημένη μορφή του πραγματικού κόσμου και οι λεπτομέρειες του κρύβονται χρησιμοποιώντας ενθυλάκωση. Επομένως απαιτείται ενθυλάκωση για αφαίρεση.
συμπέρασμα
Σε αυτό το σεμινάριο, έχουμε συζητήσει λεπτομερώς την αφαίρεση στην Java. Η αφαίρεση είναι μια τεχνική απόκρυψης περιττών λεπτομερειών από τον χρήστη. Ο χρήστης έχει πρόσβαση μόνο στις σχετικές λεπτομέρειες. Οι λειτουργίες οχημάτων ή ATM είναι κλασικά παραδείγματα αφαίρεσης στον πραγματικό κόσμο.
Όταν χρησιμοποιούμε ATM, ενδιαφερόμαστε μόνο να εκτελέσουμε τις λειτουργίες όπως ανάληψη μετρητών κ.λπ. χωρίς να χρειάζεται να γνωρίζουμε τις λεπτομέρειες σχετικά με το πώς ακριβώς εκτελείται αυτή η λειτουργία εσωτερικά.
Η Java παρέχει αφαίρεση μέσω αφηρημένων τάξεων και διεπαφών. Ενώ οι διεπαφές παρέχουν αφαίρεση 100%, οι αφηρημένες τάξεις παρέχουν μερική αφαίρεση. Η επιλογή μεταξύ διεπαφών και αφηρημένων τάξεων θα πρέπει να γίνεται ανάλογα με την εφαρμογή που θα αναπτυχθεί και επίσης ποιες πληροφορίες πρέπει να εκτίθενται στον χρήστη.
Συζητήσαμε επίσης τις αφηρημένες μεθόδους σε αυτό το σεμινάριο μαζί με τις διαφορές μεταξύ αφηρημένων τάξεων και διεπαφών.
=> Ελέγξτε ΟΛΑ τα Εκπαιδευτικά Java εδώ.
Συνιστώμενη ανάγνωση
- Java Interface και Abstract Class Tutorial με παραδείγματα
- Java Integer και Java BigInteger Class με παραδείγματα
- Εκπαιδευτικό μάθημα Java Scanner με παραδείγματα
- Τι είναι το Java Java | Java Vector Class Tutorial με παραδείγματα
- Java Enum: Java Enumeration Tutorial με παραδείγματα
- Βασικά Java: Java Syntax, Java Class και Core Java Concepts
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- Java Iterator: Μάθετε να χρησιμοποιείτε Iterators στην Java με παραδείγματα