Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 3/3/217 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια prentz@unipi.gr
ΚΑΤΑΝΟΜΗ Σ ΓΙΑ ΒΑΣΙΚΟΥΣ ΤΥΠΟΥΣ ΔΕΔΟΜΕΝΩΝ (PRIMITIVE TYPES, π.χ. int, flot, 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.) χάνεται
ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΚΕΙΜΕΝΩΝ ΚΑΤΑΝΟΜΗ Σ «ΣΥΝΔΕΣΗ ΑΠΟΣΥΝΔΕΣΗ» ΤΥΠΩΝ ΑΝΑΦΟΡΩΝ ΣΕ/ΑΠΟ ΑΝΤΙΚΕΙΜΕΝΑ ΚΑΤΑΣΤΡΟΦΗ ΑΝΤΙΚΕΙΜΕΝΩΝ
public int ; public int ; 1η ενέργεια Κατανομή μνήμης για τα ttributes του αντικειμένου Μεταβλητή αναφοράς (reference tpe) που θα αναφέρεται σε αντικείμενο της κλάσης Point ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; = new Point(); Εντολή με new = ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΚΕΙΜΕΝΟΥ 2η ενέργεια Αναζήτηση κατάλληλου constructor στη δήλωση της κλάσης κλήση του defult constructor (αφού δεν έχει δηλωθεί κάποιος) Αντικείμενο της κλάσης Point στο οποίο αναφέρεται η μεταβλητή αναφοράς (reference tpe) 3η ενέργεια Αρχικοποίηση των μεταβλητών με τις b defult τιμές για ακεραίους (μηδέν)
public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; = new Point(); Point b = ; Ισοδύναμες με : Point = new Point(); Πώς αναφερόμαστε στα και ; b Μέσω της μεταβλητής αναφοράς π.χ..,. Δύο μεταβλητές αναφοράς στο ίδιο αντικείμενο (b.=. και b.=.)
public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; new Point(); = new Point(); Point b = ; b Δημιουργία νέου αντικειμένου στη μνήμη χωρίς καμία μεταβλητή να αναφέρεται σε αυτό (αδύνατον να το χειριστούμε, απροσπέλαστο)
public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; new Point(); = new Point(); = new Point(); Point b = ; b Δημιουργία νέου αντικειμένου στη μνήμη στο οποίο αναφέρεται η μεταβλητή. Τώρα στο 1 ο αντικείμενο αναφέρεται μόνο η μεταβλητή b (. b. κι. b.)
public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; new Point(); = new Point(); = new Point(); Point b = ; Τελική κατάσταση στη μνήμη (3 αντικείμενα τύπου Point και 2 μεταβλητές αναφοράς τύπου Point) b b ΘΕΣΕΙΣ Σ
public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; new Point(); = new Point(); = new Point(); Point b = ; b ΘΕΣΕΙΣ Σ Το αντικείμενο στη μνήμη που δεν έχει καμία μεταβλητή να αναφέρεται σε αυτό, θα καταστραφεί (grbge collection) και θα αποδεσμευτεί ο χώρος μνήμης που καταλαμβάνει. Το grbge collection συμβαίνει αυτόματα και κατά περιόδους.
public int ; public int ; b ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ ΘΕΣΕΙΣ Σ Point ; = new Point(); Point b = ; new Point(); = new Point(); = null; Καταργείται η σύνδεση της μεταβλητής αναφοράς με το αντικείμενο που συνδεόταν. Η μεταβλητή τώρα δεν δείχνει κανένα αντικείμενο. Στη συνέχεια μπορεί να συνδεθεί με άλλο αντικείμενο που θα δημιουργηθεί
public int ; public int ; b ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ ΘΕΣΕΙΣ Σ Point ; = new Point(); Point b = ; new Point(); = new Point(); = null; Καταργείται η σύνδεση της μεταβλητής αναφοράς με το αντικείμενο που συνδεόταν. Η μεταβλητή τώρα δεν δείχνει κανένα αντικείμενο. Στη συνέχεια μπορεί να συνδεθεί με άλλο αντικείμενο που θα δημιουργηθεί grbge collection
public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; new Point(); = new Point(); = new Point(); Point b = ; = null; b c ΘΕΣΕΙΣ Σ 3 Βασικός τύπος δεδομένου όχι reference (μεταβλητή αναφοράς) int c =3; c =b.;
public int ; public int ; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point ; new Point(); = new Point(); = new Point(); Point b = ; = null; int c =3; b c ΘΕΣΕΙΣ Σ 3 c =b.;...συνεχεια ΤΗΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ Καταστροφή αντικειμένων Αποδέσμευση χώρου μνήμης
public int ; public int ; Point ; = new Point(); Poin t b = ; new Point(); = new Point(); = null; double c =3.; ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ c =b.;..
ΚΛΗΣΗ ΤΗΣ ΜΕΘΟΔΟΥ ΤΟΥ ΚΑΤΑΣΚΕΥΑΣΤΗ, ΟΤΑΝ ΥΠΑΡΧΕΙ ΔΗΛΩΜΕΝΟΣ ΚΑΤΑΣΚΕΥΑΣΤΗΣ ΣΤΗΝ ΚΛΑΣΗ
public clss Circle { privte double,,r; ΚΩΔΙΚΑΣ ΚΛΑΣΗΣ public Circle (double 1, double 1, double r1) { = 1 ; = 1 ; r = r1 ; // methods public double re() { public double circumference() { public String tostring() { ΠΡΟΓΡΑΜΜΑ ΧΡΗΣΗΣ ΤΗΣ ΚΛΑΣΗΣ clss usecircle { public sttic void min(string [] rgs[]) { 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, flot, double κ.λ.π.) ούτε String)
public int ; public int ; clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); c center rdius 4 Αντικείμενο της κλάσης Point στο οποίο αναφέρεται η μεταβλητή αναφοράς και η μεταβλητή αναφοράς center του αντικειμένου Ccle Αντικείμενο της κλάσης Ccle στο οποίο αναφέρεται η μεταβλητή αναφοράς c
public int ; public int ; Καταργείται η σύνδεση της reference με το αντικείμενο Point. clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; ΘΕΣΕΙΣ Σ ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); = null; c center Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference και η reference center του αντικειμένου Ccle rdius 4 Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c
public int ; public int ; clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); = null; ΘΕΣΕΙΣ Σ c center Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference και η reference center του αντικειμένου Ccle rdius 4 Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c
public int ; public int ; Κανένα αντικείμενο δεν καταστρέφεται γιατί έχουν references που συνδέονται με αυτά Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference και η reference center του αντικειμένου Ccle clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; c center rdius ΘΕΣΕΙΣ Σ 4 ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); = null; c = null; Καταργείται η σύνδεση της reference c με το αντικείμενο Ccle. Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c
public int ; public int ; clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); = null; c = null; ΘΕΣΕΙΣ Σ c center Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference και η reference center του αντικειμένου Ccle rdius 4 Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c
public int ; public int ; Και τα 2 αντικείμενα θα καταστραφούν γιατί με τη reference center δεν συνδέεται πλέον καμία reference, άρα είναι απροσπέλαστη Αντικείμενο της κλάσης Point. Αναφέρεται σε αυτό η reference και η reference center του αντικειμένου Ccle clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; c center rdius ΘΕΣΕΙΣ Σ 4 ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); = null; c = null; Άρα ο σύνδεσμος της με το αντικείμενο Point είναι άχρηστος Αντικείμενο της κλάσης Ccle. Αναφέρεται σε αυτό η reference c
public int ; public int ; Καταστροφή αντικειμένων, αποδέσμευση χώρου μνήμης clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; c ΘΕΣΕΙΣ Σ ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); = null; c = null;...συνεχεια ΤΗΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ
public int ; public int ; clss Ccle { privte int rdius; privte Point center; public Ccle(Point p, int r) { center = p; rdius = r; ΕΚΤΕΛΕΣΗ ΜΕΜΟΝΩΜΕΝΩΝ ΕΝΤΟΛΩΝ ΠΡΟΓΡΑΜΜΑΤΟΣ Point = new Point(); Ccle c = new Ccle(,4); = null; c = null; ΤΕΛΟΣ ΕΚΤΕΛΕΣΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ
Equlit vs Identit
Πηγές/Acknowledgements Σ. Γεωργαντάκη, Μία τεχνολογικά υποστηριζόμενη διδακτική προσέγγιση για τον αντικειμενοστρεφή προγραμματισμό, Πανεπιστήμιο Πειραιώς