java:objects

Differences

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

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
java:objects [2015/01/22 08:30]
gthanos created
java:objects [2015/02/05 10:27]
gthanos [Garbage Collection]
Line 1: Line 1:
 ====== Δημιουργώντας Αντικείμενα ====== ====== Δημιουργώντας Αντικείμενα ======
  
-Μέχρι τώρα αναφέραμε ότι η κλάση είναι το βασικό σχέδιο μέσα από το οποίο δημιουργούνται επιμέρους αντικείμενα που φέρουν τα χαρακτηριστικά της κλάσης. Επίσης,​ δείξαμε πως ορίζουμε μία κλάση μέσα απο παραδείγματα,​ αλλά δεν δείξαμε πως δημιουργούμε αντικείμενα από τις κλάσεις που ορίσαμε. ​+Μέχρι τώρα αναφέραμε ​στην [[ oop:​introduction | "​Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό"​ ]] ότι η κλάση είναι το βασικό σχέδιο μέσα από το οποίο δημιουργούνται επιμέρους αντικείμενα που φέρουν τα χαρακτηριστικά της κλάσης. Επίσης,​ δείξαμε πως ορίζουμε μία κλάση μέσα από παραδείγματα,​ αλλά δεν δείξαμε πως δημιουργούμε αντικείμενα από τις κλάσεις που ορίσαμε. ​
  
 Παρακάτω δίνεται ένα πρόγραμμα που δημιουργεί συγκεκριμένα αντικείμενα και εκτυπώνει τα αποτελέσματα στην κονσόλα. Παρακάτω δίνεται ένα πρόγραμμα που δημιουργεί συγκεκριμένα αντικείμενα και εκτυπώνει τα αποτελέσματα στην κονσόλα.
Line 66: Line 66:
    ​public int getWidth() {    ​public int getWidth() {
        ​return width;        ​return width;
 +   }
 +   
 +   ​public int getArea() {
 +       ​return width * height;
    }    }
        
Line 71: Line 75:
    ​public void move(int x, int y) {    ​public void move(int x, int y) {
        ​origin.setX( origin.getX() + x );        ​origin.setX( origin.getX() + x );
-       ​origin.setY( origin.getY() + y )+       ​origin.setY( origin.getY() + y );
    }    }
        
Line 105: Line 109:
     }     }
 } }
 +</​code>​
 +
 +Για να μεταγλωτίσουμε τα παραπάνω πρόγραμμα αρκεί να γράψουμε
 +
 +<​code>​
 +javac Point.java
 +javac Rectange.java
 +javac CreateObjectDemo.java
 +</​code>​
 +
 +και για να το τρέξουμε γράφουμε
 +
 +<​code>​
 +java CreateObjectDemo
 </​code>​ </​code>​
  
Line 120: Line 138:
  
 Από τα πάραπάνω αξίζει να προσέξουμε τα εξής. Από τα πάραπάνω αξίζει να προσέξουμε τα εξής.
 +  - Εκτελούμε την κλάση η οποία περιέχει την μέθοδο **main** η οποία εκκινεί την εκτέλεση του προγράμματος <​code>​public static void main(String[] args) { .... } </​code>​
   - Η κλάση Rectangle έχει δύο κατασκευαστές οι οποίοι καλούνται εναλλάξ στη συνάρτηση **main** προκειμένου να αρχικοποιήσουν τα αντικείμενα (**objects**) ''​rectOne''​ και ''​rectTwo''​.   - Η κλάση Rectangle έχει δύο κατασκευαστές οι οποίοι καλούνται εναλλάξ στη συνάρτηση **main** προκειμένου να αρχικοποιήσουν τα αντικείμενα (**objects**) ''​rectOne''​ και ''​rectTwo''​.
   - H συνάρτηση ''​System.out.println()''​ εκτυπώνει ένα αλφαριθμητικό (string) ακολουθούμενο από χαρακτήρα αλλαγής γραμμής.   - H συνάρτηση ''​System.out.println()''​ εκτυπώνει ένα αλφαριθμητικό (string) ακολουθούμενο από χαρακτήρα αλλαγής γραμμής.
Line 200: Line 219:
  
 <WRAP tip> <WRAP tip>
-Όπως προείπαμε μία καλή προγραμματιστική πρακτική είναι η απόκρυψη των πεδίων κάθε κλάσης και η δήλωση συναρτήσεων για την πρόσβαση στα δεδομένα της. Σε αυτή την περίπτωση η πρόσβαση στα πεδία των αντικειμένων είναι μη επιτρεπτή (ο compiler δεν μεταγλωττίζει το πρόγραμμα).+Όπως προείπαμε μία καλή προγραμματιστική πρακτική είναι η απόκρυψη των πεδίων κάθε κλάσης και η δήλωση συναρτήσεων για την πρόσβαση στα δεδομένα της. Σε αυτή την περίπτωση η απευθείας ​πρόσβαση στα πεδία των αντικειμένων είναι μη επιτρεπτή (ο compiler δεν μεταγλωττίζει το πρόγραμμα). Η πρόσβαση σε μεταβλητές που έχουν τον προσδιοριστή **private** μπορεί να γίνει μόνο μέσω βοηθητικών συναρτήσεων (set/get) που έχουν το προσδιοριστή **public**.
 </​WRAP>​ </​WRAP>​
  
Line 219: Line 238:
 ===== Garbage Collection ===== ===== Garbage Collection =====
  
-Οι γλώσσες υψηλού επιπέδου που μέχρι τώρα έχετε γνωρίσει (**C**) αναθέτους την ευθύνη δέσμευση μνήμης στον προγραμματιστή μέσω των συναρτήσεων **malloc()** και **free()**. Σε αντιδιαστολή,​ η **JAVA** αφήνει τον προγραμματιστεί να ορίσει όσα αντικείμενα επιθυμεί και δεσμεύει την μνήμη για αυτά μέσω του τελεστή **new**.+Οι γλώσσες υψηλού επιπέδου που μέχρι τώρα έχετε γνωρίσει (**C**) αναθέτουν την ευθύνη δέσμευση μνήμης στον προγραμματιστή μέσω των συναρτήσεων **malloc()** και **free()**. Σε αντιδιαστολή,​ η **JAVA** αφήνει τον προγραμματιστεί να ορίσει όσα αντικείμενα επιθυμεί και δεσμεύει την μνήμη για αυτά μέσω του τελεστή **new**
 + 
 +Πως όμως αποδεσμεύεται η μνήμη που δεσμεύτηκε προηγούμενα από το πρόγραμμα μας, αλλά δεν την χρειαζόμαστε πλέον; Αν η μνήμη δεν αποδεσμεύεται και το πρόγραμμα μας τρέξει για αρκετή ώρα δεσμεύοντας μνήμη, τότε είναι σίγουρο ότι θα το τερματίσει το λειτουργικό σύστημα. Η απάντηση,​ όσον αφορά την αποδέσμευση μνήμης στη Java δίνεται παρακάτω. 
 + 
 +Περιοδικά το **JVM** κοιτάει εάν υπάρχει δεσμευμένη μνήμη για αντικείμενα στα οποία δεν υφίστανται πλέον μεταβλητές που δείχνουν σε αυτά. Σε αυτές τις περιπτώσεις,​ ελευθερώνεται η μνήμη που έχει δεσμευτεί για τα αντικείμενα που εντόπισε το JVM. Ο μηχανισμός αυτός ονομάζεται **Garbage Collection** και απαντάται σε αρκετές γλώσσες υψηλού επιπέδου απελευθερώνοντας τον προγραμματιστή από την ευθύνη αποδέσμευσης της μνήμης που δεσμεύτηκε προηγούμενα.
  
-Περιοδικά το **JVM** κοιτάει εάν υπάρχουν ​αντικείμενα για τα οποία δεν υπάρχουν πλέον μεταβλητές που δείχνουν σε αυτά. Σε αυτές τις περιπτώσεις ελευθερώνει την ​μνήμη που ​έχει δεσμευτεί για τα αντικείμενα που εντόπισε. Ο μηχανισμός ​αυτός ονομάζεται **Garbage Collection** και απαντάται σε αρκετές γλώσσες υψηλού επιπέδου απελευθερώνοντας τον ​προγραμματιστή από την ​ευθύνη αποδέσμευσης ​της μνήμης που δεσμέυτηκε.+Η ευθύνη της αποδέσμευσης μνήμης ​επαφίεται στο Garbage Collector, ​πράγμα που ​κάνει πιο εύκολη τη ζωή του προγραμματιστή. Από την άλλη, ​σε προγράμματα ​που απαιτούν πολύ υψηλές ​επιδόσεις ή έχουν αυστηρούς περιορισμούς ως προς ​τον χρόνο ​εκτέλεσης τους, ο αλγόριθμος που χρησιμοποιεί ο 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