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

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

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

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

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

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

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

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

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

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

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

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

API: Applications Programming Interface

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

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

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

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

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

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

Δέσμευση Μνήμης! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Διαχείριση Μνήµης! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες δέσμευσης μνήμης:! Για την αποδοτική δέσμευση δομών δεδομένων μη προκαθορισμένου μεγέθους.! Για την αποφυγή «διαρροών μνήμης» (memory leaks).! Για την επίδοση του εκτελούμενου προγράμματος (run-time performance). 1 2 Μνήμη προγραμμάτων! Χώρος αποθήκευσης μεταβλητών, δεδομένων, κώδικα, κλπ.! Το UNIX παρέχει στις διεργασίες μας έναν εικονικό χώρο διευθύνσεων (virtual address space). Ποιά από τις ακόλουθες σειρές αντικατοπτρίζει καλύτερα την οργάνωση της ιεραρχίας της μνήμης ενός Η/Υ;! Καταχωρητές, Σκληρός Δίσκος, RAM, Kεντρική Μνήμη! Καταχωρητές, RAM, Σκληρός Δίσκος! Καταχωρητές, Λανθάνουσα Μνήμη, RAM, Δίσκος! Λανθάνουσα Μνήμη, Καταχωρητές, RAM, Δίσκος 3 EΠΛ233 4

Ιεραρχία μνήμης Τι είναι η διεργασία (process);! Tρεχούμενο πρόγραμμα! Yπορουτίνα - συνάρτηση! Ιθαγενής κώδικας ενός προγράμματος! Τίποτα από τα παραπάνω 5 EΠΛ233 6 Σχεδιάγραμμα της μνήμης μιας διεργασίας! Text: δυαδικός (ιθαγενής / τελικός) κώδικας προγράμματος της διεργασίας. Σχεδιάγραμμα μνήμης διεργασιών! Στην Γ/Π C:! Data: σταθερές προγράμματος.! BSS (Block Started by Symbol (BSS): γενικές και στατικές μεταβλητές (most modern assemblers produce a BSS section in their output object module containing all reserved uninitialized space).! Heap: δυναμική μνήμη.! Stack: στοίβα, τοπικές μεταβλητές. int isize; char *f(void) char *p; isize = 8; p = malloc(isize); " BSS " stack " data " heap return p; 7 8

Δέσμευση Μνήμης! Οι γενικές και οι στατικές μεταβλητές κατά την αρχικοποίηση του προγράμματος.! Οι τοπικές μεταβλητές κατά την κλήση μιας υπορουτίνας/μεθόδου.! Η δυναμική μνήμη με τη χρήση της malloc (στη C) και με τη δημιουργία νέων αντικειμένων (JAVA). Αποδέσμευση Μνήμης! Γενικές και στατικές μεταβλητές με τη λήξη ενός προγράμματος.! Τοπικές μεταβλητές με την επιστροφή από μια υπορουτίνα/ μέθοδο.! Δυναμική μνήμη με χρήση της free (στη C) και από τον αποκομιστή σκυβάλων (garbage collector) στη JAVA.! Όλη η μνήμη αποδεσμεύεται με τη λήξη του προγράμματος. 9 10 Αποθηκευτικοί Χώροι Αποθηκευτικοί Χώροι! Καταχωρητές (Registers):! Μέσα στον επεξεργαστή! Γρήγορη πρόσβαση! Μικρός αριθμός! Διαφανείς προς τον προγραμματιστή! Στοίβα (Stack):! Τοποθετείται στον εικονικό χώρο διευθύνσεων μνήμης (RAM)! Απευθείας πρόσβαση από τον επεξεργαστή μέσω του Δείκτη Στοίβας (Stack Pointer)! Χρησιμοποιείται για δεδομένα για τα οποία ο μεταφραστής-java μπορεί να γνωρίζει ακριβές μέγεθος και χρόνο ζωής (ώστε να διαχειρίζεται κατάλληλα τον Δ/Σ).! Πολύ γρήγορη και αποδοτική πρόσβαση.! Αποθηκεύει εγγραφήματα δραστηριοποίησης (activation records ή stack frames).! Περιορισμένης λειτουργικότητας, γι αυτό και χρησιμοποιείται κυρίως για την αποθήκευση ορισμένων μόνο δεδομένων και κυρίως χειριστήριων αντικειμένων.! Σωρός (heap): 11! Τοποθετείται στον εικονικό χώρο διευθύνσεων μνήμης (RAM)! Μνήμη Γενικής χρήσης, όπου «διαβιούν» όλα τα αντικείμενα της JAVA! Πιό ευέλικτος από την στοίβα: ο μεταφραστής δεν χρειάζεται να γνωρίζει εκ των προτέρων πόση μνήμη να δεσμεύσει στον σωρό για την αποθήκευση αντικειμένων, ή τον χρόνο ζωής των καταχωρούμενων αντικειμένων.! Όποτε χρειαστεί να δημιουργηθεί ένα αντικείμενο, πρέπει να γραφτεί ο σχετικός κώδικας για την δημιουργία του και να κληθεί με την χρήση της new. Τότε γίνεται η δέσμευση της μνήμης και εκτελείται ο κώδικας αρχικοποίησης.! Πιό αργή η καταχώρηση και πρόσβαση απ ότι στην στοίβα. 12

Η αποθήκευση των δεδομένων! Στατική Αποθήκευση (static storage)! Η στατική αποθήκευση υποδηλώνει την αποθήκευση δεδομένων σε συγκεκριμένη-αμετάβλητη θέση (fixed location).! Η πραγματική αποθήκευση στατικών δεδομένων γίνεται στη RAM.! Περιέχει δεδομένα τα οποία είναι διαθέσιμα για όλη την διάρκεια εκτέλεσης του προγράμματος.! Η λέξη-κλειδί static μπορεί να χρησιμοποιηθεί για τον προσδιορισμό κάποιου στοιχείου μιας κλάσης ως στατικού.! Τα αντικείμενα στην JAVA δεν τοποθετούνται ποτέ στην στατική μνήμη.! Σταθερή Μνήμη (constant storage)! Αντιστοιχεί στις σταθερές τιμές που χρησιμοποιούνται στον κώδικα. 13 Αποθήκευση εκτός RAM! Αφορά σε δεδομένα τα οποία «διαβιούν» τελείως εκτός του προγράμματος, ενώ το πρόγραμμα δεν τρέχει.! Εκτός ελέγχου από το πρόγραμμα.! Υπάρχουν δύο βασικά παραδείγματα:! Streamed objects: αντικείμενα που μετατρέπονται σε ροή χαρακτήρων (byte stream) συνήθως για να σταλούν σε μιάν άλλη μηχανή.! Persistent objects: αντικείμενα που τοποθετούνται στον δίσκο ώστε να διατηρήσουν την κατάστασή τους όταν το πρόγραμμα τελειώσει.! Βασικό χαρακτηριστικό αυτών των αντικειμένων είναι ότι μπορούν να «μετατραπούν» σε κανονικά αντικείμενα στη RAM, μόλις αυτό χρειασθεί. 14 Αντικείμενα στη JAVA! Τα δεδομένα στην JAVA κωδικοποιούνται σαν αντικείμενα.! Για κάθε αντικείμενο πρέπει να υπάρχει ένα χειριστήριο (handle) μέσω του οποίου αποκτούμε πρόσβαση στο ίδιο το αντικείμενο και το διαχειριζόμαστε (τις μεθόδους του, τα δεδομένα του).! Π.χ. String s; // δημιουργία χειριστηρίου String s = new String( asdf ); // αρχικοποίηση αντικειμένου Δημιουργία αντικειμένων! Μετά την δημιουργία-δήλωση ενός χειριστηρίου, πρέπει να γίνει η διασύνδεσή του με κάποιο νέο αντικείμενο.! Η δημιουργία ενός νέου αντικειμένου γίνεται με τη χρήση της εντολής new: String s = new String( asdf ); // String είναι ειδική περίπτωση τύπου String s = asdf ; BankAcct b1 = new BankAcct(21338, 0.0); 15 16

Αρχέγονοι Τύποι-primitive types! Η δημιουργία αντικειμένων με την new έχει κόστος, λόγω της αποθήκευσης στον σωρό και ό,τι αυτή συνεπάγεται.! Για απλούς-αρχέγονους τύπους δεδομένων, η JAVA ξεφεύγει από τον μοντέλο των αντικειμένων και ακολουθεί την προσέγγιση της C και της C++.! Έτσι, με την δήλωση μιας τοπικής μεταβλητής ως έχουσας αρχέγονο τύπο, δημιουργείται αυτόματα χώρος για την μεταβλητή αυτή - χωρίς χρήση της new - και η μεταβλητή τοποθετείται στην στοίβα.! Τι γίνεται για πεδία δεδομένων αρχέγονων τύπων;! Ο ακριβής χώρος που κρατιέται για μεταβλητές αρχέγονων τύπων καθορίζεται από τον μεταφραστή της JAVA.! Υπάρχουν ωστόσο και κλάσεις-συσκευαστές (wrapper classes) για τους αρχέγονους τύπους: char c = x ; Character C = new Character( x ); 17 18 Πεδίο ισχύος - Εμβέλεια (scoping)! Πεδίο ισχύος μεταβλητών (scoping). Μια μεταβλητή που ορίζεται μέσα σε κάποιο πεδίο, είναι υπαρκτή μέχρι το τέλος του πεδίου αυτού. int x = 12; int q = 96; Read-only object! Σε αντίθεση με την C και την C++, το ακόλουθο είναι συντακτικό σφάλμα: int x = 12; int x = 96; 19 20

Διάρκεια ζωής αντικειμένων Δημιουργία νέων τύπων: κλάσεις! Ένα αντικείμενο που δημιουργείται με χρήση του new διατηρείται ακόμη και μετά το τέλος του σχετικού πεδίου εμβέλειας (scope).! Το αντίστοιχο, ωστόσο, χειριστήριο, εξαφανίζεται:! Ο τύπος των αντικειμένων στην JAVA καθορίζεται με τον ορισμό κλάσεων: class ATypeName /* class body */! Αντικείμενα μιας κλάσης δημιουργούνται με χρήση της new: ATypeName a = new ATypeName(); String s = new String( a string ); /* end of scope */! Στον ορισμό των κλάσεων συμπεριλαμβάνονται:! Πεδία δεδομένων (fields):! Αντικείμενα οποιουδήποτε τύπου, που αντιπροσωπεύονται από κάποια χειριστήρια. Χρήζουν αρχικοποίησης με την new.! Mεταβλητές αρχέγονων τύπων.! Μέθοδοι! Αποκομιστής σκυβάλων (garbage collector) Ο προγραµµατιστής δεν καταστρέφει αντικείµενα!! Κάθε αντικείμενο διατηρεί την δική του μνήμη για τα πεδία δεδομένων του. Τα δεδομένα ενός αντικειμένου δεν μπορούν να διαμοιρασθούν με άλλα αντικείμενα. 21 22 Προκαθορισμένες Τιμές Πεδίων! Αν δεν κάνουμε εμείς ρητή αρχικοποίηση των μελών αρχέγονου τύπου μιας κλάσης, ο μεταγλωττιστής δίνει τις δικές του προκαθορισμένες τιμές, ως εξής:! Για boolean μεταβλητές: false! Για άλλους αρχέγονους τύπους το 0.! Για χειριστήρια αντικειμένων: null void foo() Car r = new Car(); int i = 0; for (i=0; i<20; i++) System.out.println( Hello +i); if (i > 0) r = new Car();! Κανένα! Δύο! Σαράντα τρία! Ένα Πόσα αντικείμενα υπάρχουν στη στοίβα μετά την κλήση και επιστροφή της foo(), εξαιτίας της foo; 23 EΠΛ233 24

Η χρήση του static Στατικότητα! Για την πρόσβαση σε δεδομένα και μεθόδους προϋποτίθεται η δημιουργία σχετικού αντικειμένου.! Υπάρχουν δύο περιπτώσεις όπου αυτό δεν είναι επιθυμητό:! Αν θέλουμε να χρησιμοποιείται μόνο μια θέση αποθήκευσης για κάποιο συγκεκριμένο δεδομένο, ανεξάρτητα του πόσα αντικείμενα δημιουργούνται.! Αν χρειαζόμαστε μεθόδους που δεν αντιστοιχούν σε κάποιο συγκεκριμένο αντικείμενο.! Δηλ., αν θέλουμε να καλούμε μια μέθοδο χωρίς να έχουμε δημιουργήσει αντικείμενα.! Οι δυνατότητες αυτές μπορούν να υλοποιηθούν με την χρήση της λέξης κλειδί static.! Δεδομένα και μέθοδοι που ορίζονται σαν static αποκαλούνται και class-data, class-methods. 25 26 Η χρήση του static 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 28

Παράδειγμα χρήσης static Υλοποίηση Κλάσης Charge! Πώς μπορούμε να κρατάμε ένα μετρητή των αντικειμένων τύπου φορτίo που δημιουργούνται; 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)... 29 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); Βρείτε αν ένα έτος είναι δίσεκτο public class TestLeapYear public static void main(string[] args) int year = Integer.parseInt(args[0]); LeapYear leapyearcheck = new LeapYear(); // 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); System.out.println(LeapYear.isLeapYear(year)); return isleapyear; 31 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; 33