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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

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

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

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

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

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

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

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

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

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

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

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

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

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

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

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

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

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

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

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

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

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

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

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

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

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

Mεταβλητές (variables) και Σταθερές (constants)

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

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

Εισαγωγή στον Προγραμματισμό

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 7: Πίνακες (Arrays)

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

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

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

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

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

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

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

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

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

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

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

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

Δομημένος Προγραμματισμός

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

Εισαγωγή στα Αντικείμενα

Βασικά της γλώσσας JAVA

Τύποι δεδομένων, τελεστές, μεταβλητές

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

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 18/4/216 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr

Τύποι της Java Primitives vs References Οι πρωταρχικοί (primitive) τύποι είναι οι βασικοί τύποι της java int, long, double, boolean, char, short, bte, float Οι πραγματικές τους τιμές αποθηκεύονται στη μεταβλητή Οι τύποι αναφοράς είναι τα αντικείμενα (objects) Εξ ορισμού τιμή null Χρησιμοποιούνται για την επίκληση των μεθόδων ενός αντικειμένου 25 Pearson Education, Inc. All rights reserved.

Πώς η java αποθηκεύει πρωταρχικούς τύπους? Οι μεταβλητές είναι σαν κούπες σταθερού μεγέθους Οι πρωταρχικοί τύποι είναι αρκετά μικροί για να χωράνε σε μία κούπα

Πώς η java αποθηκεύει αντικείμενα? Τα αντικείμενα είναι πολύ μεγάλα για να χωρέσουν σε μία μεταβλητή/κούπα Αποθηκεύονται αλλού Η μεταβλητή αποθηκεύει έναν αριθμό που εντοπίζει το αντικείμενο

Πώς η java αποθηκεύει αντικείμενα? Τα αντικείμενα είναι πολύ μεγάλα για να χωρέσουν σε μία μεταβλητή/κούπα Αποθηκεύονται αλλού Η μεταβλητή αποθηκεύει έναν αριθμό που εντοπίζει το αντικείμενο

Αναφορές Η τοποθεσία του αντικειμένου ονομάζεται αναφορά (reference) == συγκρίνει αναφορές Bab shiloh1 = new Bab( shiloh ); Bab shiloh2 = new Bab( shiloh ); Είναι shiloh1 == shiloh2?

Αναφορές Η τοποθεσία του αντικειμένου ονομάζεται αναφορά (reference) == συγκρίνει αναφορές Bab shiloh1 = new Bab( shiloh ); Bab shiloh2 = new Bab( shiloh ); Είναι shiloh1 == shiloh2?

Αναφορές Bab shiloh1 = new Bab( shiloh ); Bab shiloh2 = new Bab( shiloh );

Αναφορές Bab mbab = new Bab( dav, true); mbab.name = david ;

Αναφορές Bab mbab = new Bab( dave, true); mbab.name = david ;

Αναφορές Χρησιμοποιώντας = ενημερώνεται η αναφορά bab1 = bab2;

Αναφορές Χρησιμοποιώντας = ενημερώνεται η αναφορά bab1 = bab2;

ΚΑΤΑΝΟΜΗ Σ ΓΙΑ ΒΑΣΙΚΟΥΣ ΤΥΠΟΥΣ ΔΕΔΟΜΕΝΩΝ (PRIMITIVE TYPES, π.χ. int, float, double κ.λ.π.)

Τιμές και Αναφορές Οι διαφορές μεταξύ πρωταρχικών τύπων και αντικειμένων Οι πρωταρχικοί τύποι κρατάνε τιμές Οι τύποι αντικειμένων κρατάνε αναφορές

ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ double = 1.; double = ; = 4.; Μεταβλητή τύπου double στην οποία καταχωρείται η τιμή 1. Κατανομή μνήμης, δηλ. διατίθεται χώρος μέσα στη μνήμη για να αποθηκευθούν οι μεταβλητές 1. 1. 4. Μεταβλητή τύπου double στην οποία καταχωρείται η τιμή της μεταβλητής Αλλαγή της τιμής της μεταβλητής. Η παλιά τιμή (το 1.) χάνεται

double = 1.; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ double = ; = 4.; Μεταβλητή τύπου double στην οποία καταχωρείται η τιμή 1. ΘΕΣΕΙΣ Σ 1. 4. 1. Κατανομή μνήμης, δηλ. διατίθεται χώρος μέσα στην μνήμη για να αποθηκευθούν οι μεταβλητές 1. 1. 4. Κατάσταση στη μνήμη (2 θέσεις μνήμης έχουν καταληφθεί) Μεταβλητή τύπου double στην οποία καταχωρείται η τιμή της μεταβλητής Αλλαγή της τιμής της μεταβλητής. Η παλιά τιμή (το 1.) χάνεται

ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΚΕΙΜΕΝΩΝ ΚΑΤΑΝΟΜΗ Σ «ΣΥΝΔΕΣΗ ΑΠΟΣΥΝΔΕΣΗ» ΤΥΠΩΝ ΑΝΑΦΟΡΩΝ ΣΕ/ΑΠΟ ΑΝΤΙΚΕΙΜΕΝΑ ΚΑΤΑΣΤΡΟΦΗ ΑΝΤΙΚΕΙΜΕΝΩΝ

class Point { a public int ; public int ; 1η ενέργεια Κατανομή μνήμης για τα attributes του αντικειμένου Μεταβλητή αναφοράς (reference tpe) που θα αναφέρεται σε αντικείμενο της κλάσης Point ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; a = new Point(); Εντολή με new = ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΚΕΙΜΕΝΟΥ 2η ενέργεια Αναζήτηση κατάλληλου constructor στη δήλωση της κλάσης κλήση του default constructor (αφού δεν έχει δηλωθεί κάποιος) Αντικείμενο της κλάσης Point στο οποίο αναφέρεται η μεταβλητή αναφοράς (reference tpe) a 3η ενέργεια Αρχικοποίηση των μεταβλητών με τις b default τιμές για ακεραίους (μηδέν)

class Point { public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; a = new Point(); Point b = a; Ισοδύναμες με : Point a= new Point(); Πώς αναφερόμαστε στα και ; a b Μέσω της μεταβλητής αναφοράς a π.χ. a., a. Δύο μεταβλητές αναφοράς στο ίδιο αντικείμενο (b.=a. και b.=a.)

class Point { public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; new Point(); a = new Point(); Point b = a; a b Δημιουργία νέου αντικειμένου στη μνήμη χωρίς καμία μεταβλητή να αναφέρεται σε αυτό (αδύνατον να το χειριστούμε, απροσπέλαστο)

class Point { public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; new Point(); a = new Point(); a = new Point(); Point b = a; a b Δημιουργία νέου αντικειμένου στη μνήμη στο οποίο αναφέρεται η μεταβλητή a. Τώρα στο 1 ο αντικείμενο αναφέρεται μόνο η μεταβλητή b (a. b. κι a. b.)

class Point { public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; new Point(); a = new Point(); a = new Point(); Point b = a; a Τελική κατάσταση στη μνήμη (3 αντικείμενα τύπου Point και 2 μεταβλητές αναφοράς τύπου Point) b a b ΘΕΣΕΙΣ Σ

class Point { public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; new Point(); a = new Point(); a = new Point(); Point b = a; a b ΘΕΣΕΙΣ Σ Το αντικείμενο στη μνήμη που δεν έχει καμία μεταβλητή να αναφέρεται σε αυτό, θα καταστραφεί (garbage collection) και θα αποδεσμευτεί ο χώρος μνήμης που καταλαμβάνει. Το garbage collection συμβαίνει αυτόματα και κατά περιόδους.

class Point { public int ; public int ; a b ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ ΘΕΣΕΙΣ Σ Point a; a = new Point(); Point b = a; new Point(); a = new Point(); a = null; Καταργείται η σύνδεση της μεταβλητής αναφοράς a με το αντικείμενο που συνδεόταν. Η μεταβλητή τώρα δεν δείχνει κανένα αντικείμενο. Στη συνέχεια μπορεί να συνδεθεί με άλλο αντικείμενο που θα δημιουργηθεί

class Point { public int ; public int ; a b ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ ΘΕΣΕΙΣ Σ Point a; a = new Point(); Point b = a; new Point(); a = new Point(); a = null; Καταργείται η σύνδεση της μεταβλητής αναφοράς a με το αντικείμενο που συνδεόταν. Η μεταβλητή τώρα δεν δείχνει κανένα αντικείμενο. Στη συνέχεια μπορεί να συνδεθεί με άλλο αντικείμενο που θα δημιουργηθεί garbage collection

class Point { public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; new Point(); a = new Point(); a = new Point(); Point b = a; a = null; a b c ΘΕΣΕΙΣ Σ 3 Βασικός τύπος δεδομένου όχι reference (μεταβλητή αναφοράς) int c =3; c =b.;

class Point { public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a; new Point(); a = new Point(); a = new Point(); Point b = a; a = null; int c =3; a b c ΘΕΣΕΙΣ Σ 3 c =b.;...συνεχεια ΤΗΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ Καταστροφή αντικειμένων Αποδέσμευση χώρου μνήμης

class Point { public int ; public int ; Point a; a = new Point(); Poin t b = a; new Point(); a = new Point(); a = null; double c =3.; ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ c =b.;..

ΚΛΗΣΗ ΤΗΣ ΜΕΘΟΔΟΥ ΤΟΥ ΚΑΤΑΣΚΕΥΑΣΤΗ, ΟΤΑΝ ΥΠΑΡΧΕΙ ΔΗΛΩΜΕΝΟΣ ΚΑΤΑΣΚΕΥΑΣΤΗΣ ΣΤΗΝ ΚΛΑΣΗ

public class Circle { private double,,r; ΚΩΔΙΚΑΣ ΚΛΑΣΗΣ public Circle (double 1, double 1, double r1) { = 1 ; = 1 ; r = r1 ; // methods public double area() { public double circumference() { public String tostring() { ΠΡΟΓΡΑΜΜΑ ΧΡΗΣΗΣ ΤΗΣ ΚΛΑΣΗΣ class usecircle { public static void main(string [] args[]) { Circle c1 = new Circle(1.,1.,5.); c1 1. 1. 5. 1. 1. r 5. ΜΕΤΑΦΟΡΑ ΡΟΗΣ ΠΕΡΑΣΜΑ ΤΙΜΩΝ ΣΤΙΣ ΠΑΡΑΜΕΤΡΟΥΣ ΕΠΙΣΤΡΟΦΗ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ c1 r ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΗΣ ΔΗΜΙΟΥΡΓΙΑΣ ΑΝΤΙΚΕΙΜΕΝΟΥ ΘΕΣΕΙΣ Σ 1. 1. 5. Π Ρ Ο Γ Ρ / Τ Ο Σ

ΘΕΜΑΤΑ ΚΑΤΑΝΟΜΗΣ Σ ΚΑΙ ΚΑΤΑΣΤΡΟΦΗΣ ΑΝΤΙΚΕΙΜΕΝΩΝ (GARBAGE COLLECTION) ΣΕ COMPOSED ΚΛΑΣΕΙΣ δηλ. κλάσεις που διαθέτουν ιδιοχαρακτηριστικά του τύπου κάποιας άλλης κλάσης (δηλ. ο τύπος τους δεν είναι κάποιος από τους βασικούς τύπους δεδομένων (primitive tpes, π.χ. int, float, double κ.λ.π.) ούτε String)

class Point { public int ; public int ; class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); c center radius a 4 Αντικείμενο της κλάσης Point στο οποίο αναφέρεται η μεταβλητή αναφοράς a και η μεταβλητή αναφοράς center του αντικειμένου Ccle Αντικείμενο της κλάσης Ccle στο οποίο αναφέρεται η μεταβλητή αναφοράς c

class Point { public int ; public int ; Καταργείται η σύνδεση της reference a με το αντικείμενο Point. class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; a ΘΕΣΕΙΣ Σ ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); a = null; c center Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference a και η reference center του αντικειμένου Ccle radius 4 Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c

class Point { public int ; public int ; class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); a = null; a ΘΕΣΕΙΣ Σ c center Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference a και η reference center του αντικειμένου Ccle radius 4 Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c

class Point { public int ; public int ; Κανένα αντικείμενο δεν καταστρέφεται γιατί έχουν references που συνδέονται με αυτά Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference a και η reference center του αντικειμένου Ccle class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; a c center radius ΘΕΣΕΙΣ Σ 4 ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); a = null; c = null; Καταργείται η σύνδεση της reference c με το αντικείμενο Ccle. Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c

class Point { public int ; public int ; class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); a = null; c = null; a ΘΕΣΕΙΣ Σ c center Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference a και η reference center του αντικειμένου Ccle radius 4 Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c

class Point { public int ; public int ; Και τα 2 αντικείμενα θα καταστραφούν γιατί με τη reference center δεν συνδέεται πλέον καμία reference, άρα είναι απροσπέλαστη Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference a και η reference center του αντικειμένου Ccle class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; a c center radius ΘΕΣΕΙΣ Σ 4 ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); a = null; c = null; Άρα ο σύνδεσμος της με το αντικείμενο Point είναι άχρηστος Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c

class Point { public int ; public int ; Καταστροφή αντικειμένων, αποδέσμευση χώρου μνήμης class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; a c ΘΕΣΕΙΣ Σ ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); a = null; c = null;...συνεχεια ΤΗΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ

class Point { public int ; public int ; class Ccle { private int radius; private Point center; public Ccle(Point p, int r) { center = p; radius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point a = new Point(); Ccle c = new Ccle(a,4); a = null; c = null; ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ

Equalit vs Identit

Πηγές/Acknowledgements http://java.sun.com/j2se H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, Μ. Γκιούρδας D. Barnes, M. Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Κλειδάριθμος Βασίλης Χριστοφίδης, Αντικειμενοστρεφής Προγραμματισμός, Πανεπιστήμιο Κρήτης Κ. Τσαγκάρης, Εισαγωγή στις εφαρμογές της Java, Πανεπιστήμιο Πειραιώς Σ. Γεωργαντάκη, Μία τεχνολογικά υποστηριζόμενη διδακτική προσέγγιση για τον αντικειμενοστρεφή προγραμματισμό, Πανεπιστήμιο Πειραιώς Jones, Evan, Adam Marcus, and Eugene Wu. 6.92 Introduction to Programming in Java,Januar IAP 21. (Massachusetts Institute of Technolog: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 1 Mar, 213). License: Creative Commons BY-NC-SA