Μεταβλητή Instance vs Local Variable
Μια μεταβλητή παρουσίας είναι ένας τύπος μεταβλητής που υπάρχει στον αντικειμενοστραφή προγραμματισμό. Είναι μια μεταβλητή που ορίζεται σε μια κλάση και κάθε αντικείμενο αυτής της κλάσης διατηρεί ένα ξεχωριστό αντίγραφο αυτής της μεταβλητής. Από την άλλη πλευρά, η χρήση τοπικών μεταβλητών δεν περιορίζεται σε αντικειμενοστρεφείς γλώσσες προγραμματισμού. Είναι μια μεταβλητή που μπορεί να αξιολογηθεί μόνο μέσα σε ένα συγκεκριμένο μπλοκ κώδικα (π.χ. συνάρτηση, μπλοκ βρόχου κ.λπ.) στο οποίο ορίζεται. Για αυτόν τον λόγο, οι τοπικές μεταβλητές λέγεται ότι έχουν τοπικό εύρος.
Τι είναι μια μεταβλητή παρουσίας;
Οι μεταβλητές instance χρησιμοποιούνται στον αντικειμενοστραφή προγραμματισμό για την αποθήκευση της κατάστασης κάθε αντικειμένου σε μια κλάση. Είναι επίσης γνωστές ως μεταβλητές μέλους ή μεταβλητές πεδίου. Οι μεταβλητές παρουσίας δηλώνονται χωρίς τη χρήση της στατικής λέξης-κλειδιού στην Java. Οι τιμές που είναι αποθηκευμένες σε μεταβλητές στιγμιότυπου είναι μοναδικές για κάθε αντικείμενο (κάθε αντικείμενο έχει ξεχωριστό αντίγραφο) και οι τιμές που είναι αποθηκευμένες σε αυτές αντιπροσωπεύουν την κατάσταση αυτού του αντικειμένου. Ο χώρος για παράδειγμα μια μεταβλητή εκχωρείται στο σωρό, όταν αυτό το αντικείμενο εκχωρείται στο σωρό. Επομένως, οι μεταβλητές στιγμιότυπου διατηρούνται στη μνήμη όσο το αντικείμενο είναι ζωντανό. Για παράδειγμα, το χρώμα ενός αυτοκινήτου είναι ανεξάρτητο από το χρώμα ενός άλλου αυτοκινήτου. Έτσι, το χρώμα ενός αντικειμένου αυτοκινήτου μπορεί να αποθηκευτεί σε μια μεταβλητή παρουσίας. Στην πράξη, οι μεταβλητές στιγμιότυπου δηλώνονται εντός κλάσεων και εκτός μεθόδων. Συνήθως, οι μεταβλητές στιγμιότυπου δηλώνονται ως ιδιωτικές, έτσι ώστε να είναι δυνατή η πρόσβαση σε αυτές μόνο εντός της κλάσης που δηλώνεται.
Τι είναι μια τοπική μεταβλητή;
Οι τοπικές μεταβλητές είναι μεταβλητές που έχουν τοπικό εύρος και δηλώνονται μέσα σε ένα συγκεκριμένο μπλοκ κώδικα. Οι τοπικές μεταβλητές μπορούν να θεωρηθούν ως μεταβλητές που χρησιμοποιούνται από μια μέθοδο για την αποθήκευση της προσωρινής της κατάστασης. Το εύρος μιας τοπικής μεταβλητής προσδιορίζεται χρησιμοποιώντας τη θέση στην οποία δηλώνεται η μεταβλητή και δεν χρησιμοποιούνται ειδικές λέξεις-κλειδιά για το σκοπό αυτό. Συνήθως, η πρόσβαση σε μια τοπική μεταβλητή περιορίζεται εντός του μπλοκ κώδικα που δηλώνεται (δηλαδή μεταξύ των αγκύλων ανοίγματος και κλεισίματος αυτού του μπλοκ κώδικα). Οι τοπικές μεταβλητές συνήθως αποθηκεύονται στη στοίβα κλήσεων. Αυτό θα επέτρεπε στις αναδρομικές κλήσεις συναρτήσεων να διατηρήσουν τα δικά τους αντίγραφα των τοπικών μεταβλητών που θα αποθηκευτούν σε ξεχωριστούς χώρους διευθύνσεων μνήμης. Όταν η μέθοδος ολοκληρώσει την εκτέλεσή της, πληροφορίες σχετικά με αυτήν τη μέθοδο εμφανίζονται από τη στοίβα κλήσεων, καταστρέφοντας επίσης τις τοπικές μεταβλητές που είχαν αποθηκευτεί.
Ποια είναι η διαφορά μεταξύ της μεταβλητής παρουσίας και της τοπικής μεταβλητής;
Οι μεταβλητές instance δηλώνονται μέσα σε κλάσεις εκτός μεθόδων και αποθηκεύουν την κατάσταση ενός αντικειμένου, ενώ οι τοπικές μεταβλητές δηλώνονται μέσα σε μπλοκ κώδικα και χρησιμοποιούνται για την αποθήκευση της κατάστασης μιας μεθόδου. Μια μεταβλητή παρουσίας είναι ζωντανή όσο το αντικείμενο που περιέχει αυτήν τη μεταβλητή είναι ζωντανό, ενώ μια τοπική μεταβλητή είναι ζωντανή κατά την εκτέλεση αυτής της μεθόδου/μπλοκ κώδικα. Μια μεταβλητή παρουσίας (που δηλώνεται δημόσια) μπορεί να προσπελαστεί εντός της κλάσης, ενώ μια τοπική μεταβλητή μπορεί να προσπελαστεί μόνο μέσα στο μπλοκ κώδικα που έχει δηλωθεί. Η χρήση μεταβλητών παρουσίας περιορίζεται μόνο στον αντικειμενοστραφή προγραμματισμό, ενώ οι τοπικές μεταβλητές δεν έχουν τέτοιο περιορισμό.