java:objects

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:objects [2016/01/22 15:41]
gthanos
java:objects [2016/01/24 16:56]
gthanos [Χρήση των πεδίων ενός αντικειμένου]
Line 3: Line 3:
 Μέχρι τώρα αναφέραμε στην [[ oop:​introduction | "​Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό"​ ]] ότι η κλάση είναι το βασικό σχέδιο μέσα από το οποίο δημιουργούνται επιμέρους αντικείμενα που φέρουν τα χαρακτηριστικά της κλάσης. Επίσης,​ δείξαμε πως ορίζουμε μία κλάση μέσα από παραδείγματα,​ αλλά δεν δείξαμε πως δημιουργούμε αντικείμενα από τις κλάσεις που ορίσαμε. ​ Μέχρι τώρα αναφέραμε στην [[ oop:​introduction | "​Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό"​ ]] ότι η κλάση είναι το βασικό σχέδιο μέσα από το οποίο δημιουργούνται επιμέρους αντικείμενα που φέρουν τα χαρακτηριστικά της κλάσης. Επίσης,​ δείξαμε πως ορίζουμε μία κλάση μέσα από παραδείγματα,​ αλλά δεν δείξαμε πως δημιουργούμε αντικείμενα από τις κλάσεις που ορίσαμε. ​
  
-Παρακάτω δίνεται ​ένα πρόγραμμα ​που δημιουργεί συγκεκριμένα αντικείμενα του τύπου **Point** και **Rectangle** και εκτυπώνει τα αποτελέσματα στην κονσόλα.+Παρακάτω δίνεται ​η κλάση **CreateObjectDemo** ​που δημιουργεί συγκεκριμένα αντικείμενα του τύπου **Point** και **Rectangle** και εκτυπώνει τα αποτελέσματα στην κονσόλα. ​Οι κλάσεις **Point** και **Rectangle** δίνονται επίσης παρακάτω:​
  
 <code java Point.java>​ <code java Point.java>​
Line 123: Line 123:
  
 <​code>​ <​code>​
-javac Point.java +javac Point.java ​             // μεταγλώττιση της κλάσης Point 
-javac Rectange.java +javac Rectange.java ​          // μεταγλώττιση της κλάσης Rectangle 
-javac CreateObjectDemo.java+javac CreateObjectDemo.java ​  // μεταγλώττιση της κλάσης CreateObjectDemo
 </​code>​ </​code>​
  
Line 222: Line 222:
  
 <code java> <code java>
-                          ​// cadencespeed, gear +   // fields are widthheight 
-   Bicycle bicycle ​= new Bicycle(10, 20, 30); +   Rectangle rect = new Rectangle(10,20); 
-   ​System.out.println("​Bicycle speed is " + bicycle.speed);+   ​System.out.println("​Rectangle dimensions are " + rect.width + ", rect.height);
 </​code>​ </​code>​
  
 <WRAP important 80% center round> <WRAP important 80% center round>
-Απαραίτητη προϋπόθεση για να δουλέψει ο παραπάνω κώδικας είναι το πεδίο speed να είναι προσβάσιμο, δηλαδή να μην έχει προσδιοριστή τύπου **private**.+Απαραίτητη προϋπόθεση για να δουλέψει ο παραπάνω κώδικας είναι τα πεδία width και height ​να είναι προσβάσιμα, δηλαδή να μην έχουν ​προσδιοριστή ​πρόσβασης ​τύπου **private**.
 </​WRAP>​ </​WRAP>​
  
Line 255: Line 255:
 Πως όμως αποδεσμεύεται η μνήμη που δεσμεύτηκε προηγούμενα από το πρόγραμμα μας, αλλά δεν την χρειαζόμαστε πλέον; Αν η μνήμη δεν αποδεσμεύεται και το πρόγραμμα μας τρέξει για αρκετή ώρα δεσμεύοντας μνήμη, τότε είναι σίγουρο ότι θα το τερματίσει το λειτουργικό σύστημα. Η απάντηση,​ όσον αφορά την αποδέσμευση μνήμης στη Java γίνεται μέσω του μηχανισμού **Garbage Collection** και επεξηγείται εν συντομία παρακάτω. Πως όμως αποδεσμεύεται η μνήμη που δεσμεύτηκε προηγούμενα από το πρόγραμμα μας, αλλά δεν την χρειαζόμαστε πλέον; Αν η μνήμη δεν αποδεσμεύεται και το πρόγραμμα μας τρέξει για αρκετή ώρα δεσμεύοντας μνήμη, τότε είναι σίγουρο ότι θα το τερματίσει το λειτουργικό σύστημα. Η απάντηση,​ όσον αφορά την αποδέσμευση μνήμης στη Java γίνεται μέσω του μηχανισμού **Garbage Collection** και επεξηγείται εν συντομία παρακάτω.
  
-Περιοδικά το **JVM** κοιτάει εάν υπάρχει δεσμευμένη μνήμη για αντικείμενα στα οποία δεν υφίστανται πλέον μεταβλητές που δείχνουν σε αυτά. Σε αυτές τις περιπτώσεις,​ ελευθερώνεται η μνήμη που έχει δεσμευτεί για τα αντικείμενα που εντόπισε το JVM. Ο μηχανισμός αυτός ονομάζεται **Garbage Collection** ​και ​απαντάται σε αρκετές γλώσσες υψηλού επιπέδου απελευθερώνοντας τον προγραμματιστή από την ευθύνη αποδέσμευσης της μνήμης που δεσμεύτηκε προηγούμενα.+Περιοδικά το **JVM** κοιτάει εάν υπάρχει δεσμευμένη μνήμη για αντικείμενα στα οποία δεν υφίστανται πλέον μεταβλητές που δείχνουν σε αυτά, δηλαδή δεν υφίστανται references προς ​αυτά. Σε αυτές τις περιπτώσεις,​ ελευθερώνεται η μνήμη που έχει δεσμευτεί για τα αντικείμενα αυτή της κατηγορίας. Παράλληλα η αποδέσμευση της μνήμης και η διαγραφή ​των αντικειμένων ​πιθανόν ​συνεπάγεται ότι και ​νέα αντικείμενα δεν διαθέτουν αναφορές προς αυτά κ.ο.κ. Η διαδικασία συνεχίζεται μέχρι να αποδεσμευτεί όλη η δυναμικά δεσμευμένη μνήμη.  
 + 
 +Ο μηχανισμός ​**Garbage Collection** απαντάται σε αρκετές γλώσσες υψηλού επιπέδουαπελευθερώνοντας τον προγραμματιστή από την ευθύνη αποδέσμευσης της μνήμης που δεσμεύτηκε προηγούμενα. Η ευθύνη της αποδέσμευσης μνήμης επαφίεται στο Garbage Collector, πράγμα που κάνει λιγότερο επίπονο τον προγραμματισμό
  
-Η ευθύνη της αποδέσμευσης μνήμης ​επαφίεται ​στο Garbage Collector, ​πράγμα που κάνει πιο ​εύκολη τη ζωή του ​προγραμματιστή. Από την άλλη, ​σε προγράμματα που απαιτούν πολύ υψηλές επιδόσεις ή έχουν αυστηρούς περιορισμούς ως προς τον χρόνο εκτέλεσης τους, ​ο αλγόριθμος που χρησιμοποιεί ​ο Garbage Collector μπορεί να εισάγει μη αποδεκτή καθυστέρηση.+Φυσικά η δυνατότητα ​του **Garbage Collection** ​συνεπάγεται ​ότι ένα ​παράλληλο νήμα, τρέχει περιοδικά και ελευθερώνει ​την μνήμη, πράγμα που πιθανόν να εισάγει καθυστερήσεις σε συγκεκριμένες εφαρμογές. Σε προγράμματα που απαιτούν πολύ υψηλές επιδόσεις ή έχουν αυστηρούς περιορισμούς ως προς τον χρόνο εκτέλεσης τους, ​η παράλληλη εκτέλεση του Garbage Collector μπορεί να εισάγει μη αποδεκτή καθυστέρηση.
  
 Περισσότερα για την λειτουργία του Garbage Collector και τις εναλλακτικές υλοποιήσεις μπορείτε να βρείτε [[http://​www.oracle.com/​webfolder/​technetwork/​tutorials/​obe/​java/​gc01/​index.html|εδώ]]. Περισσότερα για την λειτουργία του Garbage Collector και τις εναλλακτικές υλοποιήσεις μπορείτε να βρείτε [[http://​www.oracle.com/​webfolder/​technetwork/​tutorials/​obe/​java/​gc01/​index.html|εδώ]].
java/objects.txt · Last modified: 2018/02/16 16:03 by gthanos