ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

Σχετικά έγγραφα
! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

Αντικείμενα και Κλάσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

Βασικά Στοιχεία της Java

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Βασικά Στοιχεία της Java

API: Applications Programming Interface

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Κλάσεις και Αντικείµενα

Wrapper Classes Τοποθέτηση Δεδομένων Κλήση Μεθόδων. Παναγιώτης Σφέτσος, PhD

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

Προγραμματισμός Ι (ΗΥ120)

8. Μέθοδοι (Methods)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Copy Constructor Deep and Shallow Copies

Συναρτήσεις-Διαδικασίες

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Αντικειμενοστρεφής Προγραμματισμός

Διαδικασιακός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Συλλογές, Στοίβες και Ουρές

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Αντικειμενοστρεφής Προγραμματισμός

Αντικείμενα και Κλάσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Αντικειμενοστραφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Παράλληλη Επεξεργασία

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

3 Αλληλεπίδραση Αντικειμένων

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #3

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Δομές Δεδομένων (Data Structures)

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Ε-85: Ειδικά Θέµατα Λογισµικού

Αντικειμενοστρεφής Προγραμματισμός

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Βασικές Έννοιες Δοµών Δεδοµένων

Transcript:

Βασικά στοιχεία προγραµµατισµού στη JAVA

Διαχείριση Μνήµης

3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες δέσμευσης μνήμης: Για την αποδοτική δέσμευση δομών δεδομένων μη προκαθορισμένου μεγέθους. Για την αποφυγή «διαρροών μνήμης» (memory leaks). Για την επίδοση του εκτελούμενου προγράμματος (runtime performance).

4 Μνήμη προγραμμάτων Χώρος αποθήκευσης μεταβλητών, δεδομένων, κώδικα, κλπ. Το UNIX παρέχει στις διεργασίες μας έναν εικονικό χώρο διευθύνσεων (virtual address space).

5 Σχεδιάγραμμα της μνήμης μιας διεργασίας Text: δυαδικός κώδικας προγράμματος της διεργασίας. Data: σταθερές προγράμματος. BSS (Block Started by Symbol (BSS): γενικές και στατικές μεταβλητές (most modern assemblers produce a BSS section in their output object module containing all reserved uninitialized space). Stack: στοίβα, τοπικές μεταβλητές. Heap: δυναμική μνήμη.

6 Σχεδιάγραμμα μνήμης διεργασιών Στην Γ/Π C: int isize; BSS char *f(void) { char *p; stack isize = 8; data p = malloc(isize); heap return p;

7 Δέσμευση Μνήμης Οι γενικές και οι στατικές μεταβλητές κατά την αρχικοποίηση του προγράμματος. Οι τοπικές μεταβλητές κατά την κλήση μιας υπορουτίνας/ μεθόδου. Η δυναμική μνήμη με τη χρήση της malloc (στη C) και με τη δημιουργία νέων αντικειμένων (JAVA).

8 Αποδέσμευση Μνήμης Γενικές και στατικές μεταβλητές με τη λήξη ενός προγράμματος. Τοπικές μεταβλητές με την επιστροφή από μια υπορουτίνα/ μέθοδο. Δυναμική μνήμη με χρήση της free (στη C) και από τον αποκομιστή σκυβάλων (garbage collector) στη JAVA. Όλη η μνήμη αποδεσμεύεται με τη λήξη του προγράμματος.

Αποθηκευτικοί Χώροι Μ. Δικαιάκος Καταχωρητές (Registers): Μέσα στον επεξεργαστή Γρήγορη πρόσβαση Μικρός αριθμός Διαφανείς προς τον προγραμματιστή Στοίβα (Stack): Τοποθετείται στον εικονικό χώρο διευθύνσεων μνήμης (RAM) Απευθείας πρόσβαση από τον επεξεργαστή μέσω του Δείκτη Στοίβας (Stack Pointer) Χρησιμοποιείται για δεδομένα για τα οποία ο μεταφραστής-java μπορεί να γνωρίζει ακριβές μέγεθος και χρόνο ζωής (ώστε να διαχειρίζεται κατάλληλα τον Δ/Σ). Πολύ γρήγορη και αποδοτική πρόσβαση. Αποθηκεύει εγγραφήµατα δραστηριοποίησης (activation records ή stack frames). Περιορισμένης λειτουργικότητας, γιʼ αυτό και χρησιμοποιείται κυρίως για την αποθήκευση ορισμένων μόνο δεδομένων και κυρίως χειριστήριων αντικειμένων. 9

Μ. Δικαιάκος Αποθηκευτικοί Χώροι Σωρός (heap): Τοποθετείται στον εικονικό χώρο διευθύνσεων μνήμης (RAM) Μνήμη Γενικής χρήσης, όπου «διαβιούν» όλα τα αντικείμενα της JAVA Πιό ευέλικτος από την στοίβα: ο μεταφραστής δεν χρειάζεται να γνωρίζει εκ των προτέρων πόση μνήμη να δεσμεύσει στον σωρό για την αποθήκευση αντικειμένων, ή τον χρόνο ζωής των καταχωρούμενων αντικειμένων. Όποτε χρειαστεί να δημιουργηθεί ένα αντικείμενο, πρέπει να γραφτεί ο σχετικός κώδικας για την δημιουργία του και να κληθεί με την χρήση της new. Τότε γίνεται η δέσμευση της μνήμης και εκτελείται ο κώδικας αρχικοποίησης. Πιό αργή η καταχώρηση και πρόσβαση απʼ ότι στην στοίβα. 10

11 Η αποθήκευση των δεδομένων Στατική Αποθήκευση (static storage) Η στατική αποθήκευση υποδηλώνει την αποθήκευση δεδομένων σε συγκεκριµένη-αµετάβλητη θέση (fixed location). Η πραγματική αποθήκευση στατικών δεδομένων γίνεται στη RAM. Περιέχει δεδομένα τα οποία είναι διαθέσιμα για όλη την διάρκεια εκτέλεσης του προγράμματος. Η λέξη-κλειδί static μπορεί να χρησιμοποιηθεί για τον προσδιορισμό κάποιου στοιχείου μιας κλάσης ως στατικού. Τα αντικείμενα στην JAVA δεν τοποθετούνται ποτέ στην στατική μνήμη. Σταθερή Μνήµη (constant storage) Αντιστοιχεί στις σταθερές τιμές που χρησιμοποιούνται στον κώδικα.

Αποθήκευση εκτός RAM Μ. Δικαιάκος Αφορά σε δεδομένα τα οποία «διαβιούν» τελείως εκτός του προγράμματος, ενώ το πρόγραμμα δεν τρέχει. Εκτός ελέγχου από το πρόγραμμα. Υπάρχουν δύο βασικά παραδείγματα: Streamed objects: αντικείμενα που μετατρέπονται σε ροή χαρακτήρων (byte stream) συνήθως για να σταλούν σε μιάν άλλη μηχανή. Persistent objects: αντικείμενα που τοποθετούνται στον δίσκο ώστε να διατηρήσουν την κατάστασή τους όταν το πρόγραμμα τελειώσει. Βασικό χαρακτηριστικό αυτών των αντικειμένων είναι ότι μπορούν να αναστηθούν σε κανονικά αντικείμενα της RAM, όταν χρειασθεί. 12

Αντικείµενα, Κλάσεις, Αρχέγονοι Τύποι, Μέθοδοι

Αντικείμενα στη JAVA Τα δεδομένα στην JAVA κωδικοποιούνται σαν αντικείμενα. Για κάθε αντικείμενο πρέπει να υπάρχει ένα χειριστήριο (handle) μέσω του οποίου αποκτούμε πρόσβαση στο ίδιο το αντικείμενο και το διαχειριζόμαστε (τις μεθόδους του, τα δεδομένα του). Π.χ. String s; // δηµιουργία χειριστηρίου String s = new String( asdf ); // αρχικοποίηση αντικειµένου Μ. Δικαιάκος 14

15 Δημιουργία αντικειμένων Μετά την δημιουργία-δήλωση ενός χειριστηρίου, πρέπει να γίνει η διασύνδεσή του με κάποιο νέο αντικείμενο. Η δημιουργία ενός νέου αντικειμένου γίνεται με τη χρήση της εντολής new: String s = new String( asdf ); // String είναι ειδική περίπτωση τύπου String s = asdf ; BankAcct b1 = new BankAcct(21338, 0.0);

16 Αρχέγονοι Τύποι-primitive types Η δημιουργία αντικειμένων με την new έχει κόστος, λόγω της αποθήκευσης στον σωρό και ό,τι αυτή συνεπάγεται. Για απλούς-αρχέγονους τύπους δεδομένων, η JAVA ξεφεύγει από τον μοντέλο των αντικειμένων και ακολουθεί την προσέγγιση της C και της C++. Έτσι, με την δήλωση μιας τοπικής μεταβλητής ως έχουσας αρχέγονο τύπο, δημιουργείται αυτόματα χώρος για την μεταβλητή αυτή - χωρίς χρήση της new - και η μεταβλητή τοποθετείται στην στοίβα. Τι γίνεται για πεδία δεδομένων αρχέγονων τύπων; Ο ακριβής χώρος που κρατιέται για μεταβλητές αρχέγονων τύπων καθορίζεται από τον μεταφραστή της JAVA. Υπάρχουν ωστόσο και κλάσεις-συσκευαστές (wrapper classes) για τους αρχέγονους τύπους: char c = x ; Character C = new Character( x );

17

18 Read-only object

19 Πεδίο ισχύος - Εμβέλεια (scoping) Πεδίο ισχύος μεταβλητών (scoping). Μια μεταβλητή που ορίζεται μέσα σε κάποιο πεδίο, είναι υπαρκτή μέχρι το τέλος του πεδίου αυτού. { int x = 12; { int q = 96; Σε αντίθεση με την C και την C++, το ακόλουθο είναι συντακτικό σφάλμα: { int x = 12; { int x = 96;

20 Χρόνος ζωής αντικειμένων Ένα αντικείμενο που δημιουργείται με χρήση του new διατηρείται ακόμη και μετά το τέλος του σχετικού πεδίου εμβέλειας (scope). Το αντίστοιχο, ωστόσο, χειριστήριο, εξαφανίζεται: { String s = new String( a string ); /* end of scope */ Αποκομιστής σκυβάλων (garbage collector) Ο προγραµµατιστής δεν καταστρέφει αντικείµενα!

21 Δημιουργία νέων τύπων: κλάσεις Ο τύπος των αντικειμένων στην JAVA καθορίζεται με τον ορισμό κλάσεων. Π.χ: class ATypeName { /* class body */ Αντικείμενα μιας κλάσης δημιουργούνται με χρήση της new: ATypeName a = new ATypeName(); Στον ορισμό των κλάσεων συμπεριλαμβάνονται: Πεδία δεδομένων (fields): Αντικείμενα οποιουδήποτε τύπου, που αντιπροσωπεύονται από κάποια χειριστήρια. Χρήζουν αρχικοποίησης με την new. Mεταβλητές αρχέγονων τύπων. Μέθοδοι Κάθε αντικείμενο διατηρεί την δική του μνήμη για τα πεδία δεδομένων του. Τα δεδομένα ενός αντικειμένου δεν μπορούν να διαμοιρασθούν με άλλα αντικείμενα.

22 Προκαθορισμένες Τιμές Πεδίων Αν δεν κάνουμε εμείς ρητή αρχικοποίηση των μελών αρχέγονου τύπου μιας κλάσης, ο μεταγλωττιστής δίνει τις δικές του προκαθορισμένες τιμές, ως εξής: Για boolean μεταβλητές: false Για άλλους αρχέγονους τύπους το 0. Για χειριστήρια αντικειμένων: null

Στατικότητα

Η χρήση του static Μ. Δικαιάκος Για την πρόσβαση σε δεδομένα και μεθόδους προϋποτίθεται η δημιουργία σχετικού αντικειμένου. Υπάρχουν δύο περιπτώσεις όπου αυτό δεν είναι επιθυμητό: Αν θέλουμε να χρησιμοποιείται μόνο μια θέση αποθήκευσης για κάποιο συγκεκριμένο δεδομένο, ανεξάρτητα του πόσα αντικείμενα δημιουργούνται. Αν χρειαζόμαστε μεθόδους που δεν αντιστοιχούν σε κάποιο συγκεκριμένο αντικείμενο. Δηλ., αν θέλουμε να καλούμε τη μέθοδο χωρίς να έχουμε δημιουργήσει αντικείμενα. Οι δυνατότητες αυτές μπορούν να υλοποιηθούν με την χρήση της λέξης κλειδί static. Δεδομένα και μέθοδοι που ορίζονται σαν static αποκαλούνται και class-data, class-methods. 24

25 Η χρήση του static

26 Static (παραδείγματα) class StaticTest { static int i = 47; StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); st1.i και st2.i δείχνουν στην ίδια τιμή. Αναφορά σε στατικές μεταβλητές: είτε μέσω αντικειμένου είτε μέσω κλάσης: StaticTest.i ++; class StaticFun { static void incr() {StaticTest.i ++; StaticFun sf = new StaticFun(); sf.incr(); StaticFun.incr();

27 Παράδειγμα δέσμευσης μνήμης public class ChargeClient { public static void main(string[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); Charge c1 = new Charge(.51,.63, 21.3); Charge c2 = new Charge(.13,.94, 81.9); double v1 = c1.potentialat(x, y); double v2 = c2.potentialat(x, y); StdOut.println(v1+v2);

28 Παράδειγμα χρήσης static Πώς μπορούμε να κρατάμε ένα μετρητή των αντικειμένων τύπου φορτίo που δημιουργούνται;

29 Υλοποίηση Κλάσης Charge public class Charge { private double rx, ry; private double q; static int counter=0; // position // charge // charge counter public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; counter += 1; public double potentialat(double x, double y) {... public String tostring() { return q + number + counter + " at " + "(" + rx + ", " + ry + ")";

30 Χρήση στατικών μεθόδων (class methods) public class LeapYear { public static boolean isleapyear(int year) { boolean isleapyear; // divisible by 4 isleapyear = (year % 4 == 0); // divisible by 4 and not 100 isleapyear = isleapyear && (year % 100!= 0); // divisible by 4 and not 100 unless divisible by 400 isleapyear = isleapyear (year % 400 == 0); return isleapyear;

31 Βρείτε αν ένα έτος είναι δίσεκτο public class TestLeapYear { public static void main(string[] args) { int year = Integer.parseInt(args[0]); LeapYear leapyearcheck = new LeapYear(); System.out.println(LeapYear.isLeapYear(year));

32 Βρείτε τυχαίο ακέραιο μεταξύ 0 - Ν public class RandomInteger { public static int printrandint(int max) { // a pseudo-random real between 0.0 and 1.0 double r = Math.random(); // a pseudo-random integer between 0 and N-1 int n = (int) (r * max); return n;