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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

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

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

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java

Διδάσκων: Παναγιώτης Ανδρέου

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

Αρχικοποιήσεις Μεταβλητών και Αντικειµένων. Κατασκευαστές. Περίγραμμα. Initializers. Παράδειγμα

Transcript:

Διάλεξη 5: Κλάσεις και Αντικείμενα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Κλάσεις και Αντικείμενα - Κατασκευή, Πρόσβαση Αντικειμένων - Διαχείριση Μνήμης, Garbage collector Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

Αντικείμενα Τα αντικείμενα είναι ο φυσικός τρόπος να αναπαραστήσεις τον πραγματικό κόσμο σε ένα σύστημα Τα αντικείμενα είναι εύκολα στην κατανόηση Τα αντικείμενα έχουν φέρει την επανάσταση στην ανάπτυξη συστημάτων Οι εφαρμογές με αντικείμενα είναι εύκολες στην κατανόηση και στην συντήρηση Τα πάντα είναι αντικείμενα!!! ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 2

Κατηγορίες Αντικειμένων Χειροπιαστά αντικείμενα Πραγματικά αντικείμενα που υπάρχουν στον φυσικό κόσμο Ρόλοι Σκοπός ή ανάθεση ενέργειας ενός άτομο, εξοπλισμού ή οργανισμού Περιστατικά Συμβαίνει ένα φαινόμενο, συμβάν (event) Αλληλεπιδράσεις Αποτέλεσμα σχέσεις μεταξύ αντικειμένων Προδιαγραφές Αντιπροσωπεύουν κανόνες, πρότυπα ή κριτήρια ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 3

Τι είναι ένα αντικείμενο; Οτιδήποτε στον πραγματικό κόσμο Κάτι χειροπιαστό π.χ., ο υπολογιστής Μία διαδικασία, π.χ., δοκιμή μίας μηχανής Μία σχέση, π.χ., ένα συμβόλαιο Κάτι θεωρητικό, π.χ., ένας πίνακας Οτιδήποτε είναι «ουσιαστικό» είναι αντικείμενο ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 4

Το μοντέλο του αντικειμένου Βρίσκεται στο κέντρο Είναι ο τελικός αποδέκτης των πάντων Είναι το σημείο εκκίνησης για την υλοποίηση Βασίζεται στην αφαιρετικότητα (abstraction) Νοητική διαδικασία που επιτρέπει να αντιλαμβανόμαστε και να δομούμε τη γνώση για διάφορες έννοιες του πραγματικού κόσμου σε διάφορα επίπεδα και σε διάφορους τομείς (domains) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 5

Πραγματικός Κόσμος: Αντικείμενα και Τομείς Τομέας (domain):ξεχωριστό μέρος του πραγματικού κόσμου που περιλαμβάνει τις δικές του οντότητες Καθετί είναι αντικείμενα και κάθε αντικείμενο ανήκει σε κάποιο τομέα Τομέας ενός προβλήματος: περιοχή που απευθύνεται το πρόβλημα Ο στόχος είναι να καθοριστεί η εμβέλεια και τα όρια του τομέα προβλήματος Η κατανόηση του τομέα ενός προβλήματος είναι απαραίτητη για την μοντελοποίηση του συστήματος/εφαρμογής ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 6

Αναπαράσταση Αντικειμένων Κάθε αντικείμενο έχει ένα όνομα, π.χ., μπάλα, αυτοκίνητο, κύκλος Τα αντικείμενα έχουν χαρακτηριστικά που καθορίζουν την κατάστασή τους, π.χ., βάρος, μήκος, αριθμός θέσεων Τα αντικείμενα έχουν λειτουργίεςοι οποίες καθορίζουν, τι μπορεί να κάνει ένα αντικείμενο σε κάποιο άλλο αντικείμενο, τι μπορεί να συμβεί σε ένα αντικείμενο, π.χ., πετάω, ξεκινώ, σταματώ, μετρώ. Ορολογία αντικειμενοστρεφή προγραμματισμού Ταυτότητα (identity): Το κλειδί μέσω του οποίου μπορούμε να αποκτήσουμε πρόσβαση στο αντικείμενο Κατάσταση (state): Το σύνολο των δεδομένων που αποθηκεύονται στο εσωτερικό του αντικειμένου Συμπεριφορά (behavior): Το σύνολο των ενεργειών (μεθόδων) που μπορεί να διεκπεραιώσει το αντικείμενο: συναρτήσεις που διαθέτει Όνομα/ Διεύθυνση Μνήμης Πεδία/Τιμές Δεδομένων Λειτουργίες/ Μέθοδοι ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 7

Σχέσεις μεταξύ αντικειμένων Κατάταξη (classification) Σε ποια ομάδα ανήκει το κάθε αντικείμενο Γενίκευση/Ειδίκευση (generalization/specialization) Ποια άλλα αντικείμενα είναι παρόμοια με κάποιο αντικείμενο Συνάθροιση (aggregation) Ποια αντικείμενα «καλύπτονται» από ένα συγκεκριμένο αντικείμενο Συσχέτιση (association) Ειδική σχέση που επιτρέπει σε ένα αντικείμενο να προκαλέσει ένα άλλο αντικείμενο να εκτελέσει κάποια ενέργεια εκ μέρους του ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 8

Κλάσεις και Αντικείμενα Μία κλάση είναι ένα πρότυπο για τη δημιουργία παρόμοιων αντικειμένων. Μία κλάση είναι όπως ένα αρχιτεκτονικό σχέδιο: περιγράφει τις ιδιότητες ενός αντικειμένου Όλα τα αντικείμενα σε μία κλάση έχουν τα ίδια χαρακτηριστικά, τις ίδιες μεθόδους αλλά όχι τις ίδιες τιμές. Από μία κλάση μπορούν να δημιουργηθούν πολλά στιγμιότυπα (αντικείμενα) public class Anthopolis{ Anthopolis Giannis; Anthopolis Athos; Κλάση Αντικείμενα (Στιγμιότυπα) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 9

Πραγματικός Κόσμος: Κλάσεις και Αντικείμενα Το σύνολο όλων των μπάλων μπιλιάρδου είναι μία κλάση Όλες οι μπάλες έχουν τα ίδια χαρακτηριστικά όπως μέγεθος, χρώμα, βάρος x x x Όλες οι μπάλες υποστηρίζουν κάποιες ενέργειες π.χ., κτύπημα, τρύπα y y y Διαφορετικές μπάλες (instances) μπορούν να έχουν διαφορετικό μέγεθος, διαφορετικό χρώμα και διαφορετικό βάρος ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 10

Παραδείγματα: Κλάση class Circle { //Η ακτίνα αυτού του κύκλου double radius = 1.0; //Δημιούργησε ένα αντικείμενο τύπου κύκλος Circle () { ; //Δημιούργησε ένα αντικείμενο τύπου κύκλος //με συγκεκριμένη ακτίνα Circle (double newradius) { radius = newradius; ; //Επέστρεψε το εμβαδό αυτόυ του κύκλου double getarea () { return radius * radius * π; Δεδομένα/ Μεταβλητές Κατασκευαστές Μέθοδοι ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 11

Κλάσεις για τον προγραμματιστή Οι κλάσεις επιτρέπουν την δημιουργία νέων τύπων (παρόμοια με τις δομές (structs) στην C Παράδειγμα: Δημιουργία κλάσης για δημιουργία αντικειμένων που αναπαραστούν σημεία Χ,Υ class Point { int x; int y; Αντίθετα με την C, τώρα κάθεδομή δηλ. κλάση μπορεί να περιλαμβάνει τις δικές τις ενέργειες (methods) User-defined Abstract Data Types Η δημιουργία αντικειμενοστρεφή προγραμμάτων είναι η δημιουργία ADTs class Point { int x; int y; int distance( Point other) { return sqrt( (this.x-other.x) 2 + (this.y-other.y) 2 ; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 12

Παραδείγματα: Αντικείμενα Κλάση Circle Κλάση Test: περιλαμβάνει την μέθοδο main public class TestCircle{ public static void main(string[] args){ Circle a = new Circle(); Circle b = new Circle(5); Circle c = new Circle(20); 3 αντικείμενα a b c της κλάσης Circle object Circle radius = 1.0 object Circle radius = 5.0 object Circle radius = 20.0 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 13

Κατασκευή αντικειμένων Η δήλωση ενός αντικειμένου κάποιου τύπου, π.χ., Circle a δεν σημαίνει και δέσμευσή του στη μνήμη. Η κατασκευή/δημιουργία ενός νέου αντικειμένου γίνεται με τη χρήση της εντολής new. Circle a = new Circle(); Circle a = new Circle(5.0); String s = new String( asdf ); String s = asdf ; Με την κλήση του new, εκτελούνται κάποιες ειδικές μέθοδοι που ονομάζονται κατασκευαστές (constructors) και είναι υπεύθυνοι για την δημιουργία του αντικειμένου και αρχικοποίηση των πεδίων του. Παράδειγμα: class Circle { Circle () { ; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 14

Κατασκευή αντικειμένων (συν.) Constructors Οι κατασκευαστές ΠΡΕΠΕΙ να έχουν το ίδιο όνομα με την κλάση. Μπορούν να υπάρχουν πολλοί κατασκευαστές με το ίδιο όνομα (overloading) αλλά όχι με την ίδια υπογραφή διαφορετικό αριθμό και τύπο παραμέτρων. Οι κατασκευαστές ΔΕΝ επιστρέφουν κάτι. Μπορεί να δέχονται ή να μην δέχονται παραμέτρους Χωρίς παραμέτρους (No-arg constructor), π.χ., Circle(){ Ονομάζεται επίσης και default constructor Με παραμέτρους, π.χ., Circle(double newradius){ Σε περίπτωση που δεν δηλωθεί constructor, δημιουργείται αυτόματα ο default (no-args) constructor. Μετά το κάλεσμα του constructor,μπορεί να γίνει η διασύνδεσή της μεταβλητής με τη μνήμη που έχει δεσμευτεί για το αντικείμενο. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 15

Πρόσβαση στα πεδία/δεδομένα αντικειμένων Η πρόσβαση στα πεδία και τις μεθόδους των αντικειμένων, γίνεται με τη χρήση της τελείας (.). Παραδείγματα: (Circle a = new Circle(5.0);) Πρόσβαση στα δεδομένα: a.radius Πρόσβαση στα δεδομένα: a.getarea(); Ερώτηση:Τι γίνεται στις περιπτώσεις που ο κατασκευαστής δεν δίνει τιμές στα πεδία του αντικειμένου; Απάντηση: Τα πεδία αρχικοποιούνται με τιμές default: Boolean false Strings null Αριθμητικοί τύποι (π.χ., int, float) 0ή 0.0 Char \u0000 ΠΡΟΣΟΧΗ: Η αρχικοποίηση με default δεν ισχύει για μεταβλητές που δηλώνονται μέσα σε μία μέθοδο class Circle { double radius = 1.0; Circle () { ; Test() { COMPILE ERROR!! int x; System.out.println(x); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 16

Ανάθεση Η ανάθεσησεμεταβλητές αρχέγονων τύπων είναι απλή και ακολουθεί γνωστούς κανόνες. Η ανάθεσηενόςαντικειμένουα σεένα άλλο Β, σημαίνει την ανάθεση του χειριστηρίου (handle) α, του Α,στο χειριστήριοbτου Β: b = a; Αποτέλεσμα της ανάθεσης αυτής είναι το bκαι το aνα δείχνουν στο ίδιο αντικείμενο (Α), ενώ η πρόσβαση στο αντικείμενο Β έχει χαθεί. Τοφαινόμενοαυτόλέγεται aliasing (ψευδωνυμία) και είναι αποτέλεσμα του πως η Java χειρίζεται τα αντικείμενα. Η ψευδωνυμία προκύπτει και όταν περνάμε αντικείμενα σαν παραμέτρους σε μια μέθοδο, π.χ., f( Circle a ) { Σεορισμένεςγλώσσεςη μέθοδοςf()θα έκανε ένα αντίγραφο του ορίσματος Circle a, μέσα στο πεδίο ισχύος (scope) της (pass-byvalue). Στην Java όμως περνάμε το χειριστήριο σαν παράμετρο(pass-byreference), κι έτσι μέσα στην f() αλλάζουμε το ίδιο το αντικείμενο. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 17

Ανάθεση: Αρχέγονοι Τύποι vs. Τύποι Αντικειμένων Primitive type e.g., inti= 1 i 1 Object (reference) type e.g., Circle c c reference constructor c: Circle radius = 1 Ανάθεση σε Πρωτόγονο Τύπο i=j i j ΠΡΙΝ 1 2 i j ΜΕΤΑ 2 2 ΠΡΙΝ C1 c1:circle radius = 1 Ανάθεση σε Τύπο Αντικείμενο C1 = C2 C2 c2:circle radius = 2??? C1 c1:circle radius = 1 META C2 c2:circle radius = 2 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 18

Αποκομιστής Σκυβάλων (garbage collector) Στο προηγούμενο παράδειγμα, μετά την ανάθεση c1=c2δεν υπάρχει μεταβλητή που να δείχνει στο αντικείμενο του c1. Το αντικείμενο αυτό είναι για τα σκουπίδια H JVM συλλέγει αυτόματα τα σκουπίδια με τον garbage collector. Αυτό σημαίνει αυτόματη διαχείριση μνήμης αντίθετα με C++. Επίσης σημαίνει περισσότερο χρόνο για προγραμματισμό Ένα αντικείμενο θεωρείται επιλέξιμο από τον garbage collector εάν: Όλες οι αναφορές του είναι null Το αντικείμενο είναι δημιουργημένο σε ένα block και η αναφορά είναι out-ofscope μόλις τελειώσει η εκτέλεση του block Το αντικείμενο έχει αναφορά από ένα αντικείμενο πατέρα μόνο, και όλες οι αναφορές στον πατέρα είναι null (αυτό ισχύει αναδρομικά) Το αντικείμενο αναφέρεται μόνο μέσω ενός WeakHashMap Ο garbage collector έχει άμεση σχέση με τα διάφορες στάδια του κύκλος ζωής ενός αντικειμένου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 19

Κύκλος Ζωής αντικειμένου Τυπικά στάδια ζωής αντικειμένου: 1. Created: Δέσμευση μνήμης, κάλεσμα constructor (ή/και superclass constructor), αρχικοποίηση των μεταβλητών 2. In use (strongly reachable): Τα αντικείμενα που έχουν τουλάχιστο ένα strong reference 3. Invisible: Τα αντικείμενα που ΔΕΝ έχουν κανένα strong reference αλλά μπορεί να υπάρχουν weak references 4. Unreachable: Τα αντικείμενα που ΔΕΝ έχουν κανένα strong ref. 5. Collected: O garbage collector αναγνωρίζει ένα unreachable αντικείμενο 6. Finalized: Τα αντικείμενα έχουν εκτελέσει τη finalize method 7. Deallocated:Το JVM είναι έτοιμο για αποδέσμευση της μνήμης του αντικειμένου Πως διαχειρίζεται το JVM τη μνήμη για το κάθε στάδιο ζωής; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 20

Διαχείριση Μνήμης Στοίβα (stack) Μέρος της μνήμης που παρέχει ταχύτητα. Μεγαλώνει/Μικραίνει ανάλογα με τις μεθόδους που καλούνται Αποθηκεύει τους τοπικούς (method/block) αρχέγονους τύπος Αποθηκεύει τις τοπικές (method/block) reference μεταβλητές Σωρός (Heap) Πιο αργό μέρος της μνήμης που παρέχει όμως χωρητικότητα Αποθηκεύει τις μεταβλητές του αντικειμένου(instanse variables) Αποθηκεύει αντικείμενα που δημιουργούνται με το new Μεγαλώνει/Μικραίνει ανάλογα με τα αντικείμενα που δημιουργούνται Στατική περιοχή (Static Area) (μέρος του Heap) Αποθηκεύει global και static μεταβλητές ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 21

Διαχείριση Μνήμης(συν.) class Obj{ int x; int y; Obj (int a, int y) { x=a; y=b; STACK { int x = 1; Obj obj1 = new Obj(3, 4); Obj obj2 = obj1; HEAP x=1 obj1 obj2 x=3 y=4 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 22

Διαχείριση Μνήμης(συν.) class StackMethods{ void method1(){ method2(); void method2(){ method3(); void method3(){ Circle c = new Circle( 5 ); STEP 1 method1() STEP 2 method2() method1() STEP 4 method2() method1() STEP 5 method1() STEP 6 STACK 1-5 method3(), c method2() method1() STEP 3 radius=5 HEAP ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 23

Διαχείριση Μνήμης (συν.) class TestMemory{ int x = 1; String test = test ; Object obj = new Object(); int[] array = new int[10]; static int STATIC_INT = 12345; HEAP HEAP (STATIC) TestMemory () { radius = newradius; ; void somemethod() () { int x = 1; String test = test ; int[] array = new int[10]; HEAP HEAP STACK STACK STACK ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 24

Αποκομιστής Σκυβάλων (garbage collector)(συν.) Ερώτηση 1. Τι θα γίνει μόλις τελειώσει η εκτέλεση του trycatch; public void run() { try { person p1 = new person( A ); p1.showdetails(); catch (Exception ex) { while( true ) { //do something STACK p1 A HEAP run(), p1 main() Η µεταβλητή p1 γίνεται invinsible ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 25

Αποκομιστής Σκυβάλων (garbage collector)(συν.) Ερώτηση 2. Τι θα γίνει μόλις τελειώσει η εκτέλεση της friends(); public void friends { person p1 = new person( A ); person p2 = new person( B ); p1.friend = p2; p2.friend = p1; STACK friends(), p1, main() p2 p1.friend p1 A B HEAP p2 p2.friend Η µεταβλητές p1 και p2 γίνονται unreachable ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 26