Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού - Κλάσεις ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014:

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Προγραμματισμός Windows Κεφάλαιο 2: Τύποι και exceptions (σφάλματα) Μέρη έχουν παρθεί από το αγγλικό presentation του καθηγητή Dr. Juan Vargas για το μάθημα.
Advertisements

ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Σύγκριση Java και C++ Μεταπτυχιακό Εφαρμοσμένης Πληροφορικής - Αλέξανδρος Χατζηγεωργίου, Νοέμβριος 2004.
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Methods, Constructors and Field.
ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Και ομοιότητες και διαφορές με την C.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πολυμορφισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Data Types, Variables, and Arithmetic.
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων.
Εισαγωγή στη Java (Μέρος B’) Για όσους γνωρίζουν C++ Βασίλης Στούμπος
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 2: Μεταβλητές και Τύποι Δεδομένων. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 10: Αφηρημένες τάξεις. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές) Ένα μεγάλο παράδειγμα.
Δομές Δεδομένων 8η Διάλεξη: Ταξινόμηση Ε. Μαρκάκης.
1 Προγραμματισμός Διαδικτύου Ενότητα 3 : Κατηγορίες και κληρονομικότητα Ιωάννης Τσούλος Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου.
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού - Μέθοδοι ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014:
Εισαγωγή στον Προγ/μό Η/Υ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού
Πίνακες και αλφαριθμητικά
5ο Μάθημα Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Κλάσεις 1/4 Η κλάση είναι μια λογική οντότητα οργάνωσης δεδομένων και λειτουργιών στην ίδια δομή. Η δήλωσή της γίνεται με τη λέξη κλειδί class, του οποίου.
Wrapper Classes, Abstract Classes and Interfaces
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού
Δομές διακλάδωσης, επαναλήψεις, μέθοδοι
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Τεχνολογία και Προγραμματισμός Υπολογιστών
Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Αναδρομικές Εξισώσεις και Αφηρημένοι Τύποι Δεδομένων
Προγραμματισμός κινητών συσκευών
Εισαγωγή στη Java (Μέρος Α’)
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Διάλεξη #10: Εκτέλεση Java χωρίς το BlueJ
Wrapper Classes, Abstract Classes and Interfaces
Υπο-τύποι και πολυμορφισμός
Unit Circle.
Διάλεξη #3: Υλοποίηση μεθόδων.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού - Κλάσεις ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014: Κώστας Στάμος)

Δομημένος Προγραμματισμός Ο θεμ έ λιος λ ί θος του δομημ έ νου προγραμματισμο ύ ε ί ναι ο τεμαχισμ ό ς μεγ ά λων προγραμμ ά των σε επιμ έ ρους κομμ ά τια (λογισμικ έ ς μον ά δες), ό που το καθ έ να έ χει συγκεκριμ έ νη αποστολ ή, αλλ ά συνδ έ εται και επικοινωνε ί με τα ά λλα για να δημιουργ ή σουν έ να ολοκληρωμ έ νο πρ ό γραμμα.

Μειονεκτ ή ματα Δομημ έ νου Προγραμματισμο ύ Η πολυπλοκ ό τητα Η τοπικ ό τητα των μεταβλητ ώ ν Αυξημ έ νη πιθαν ό τητα λ ά θους Αυξημ έ νη πολυπλοκ ό τητα και στη διαχε ί ριση των δεδομ έ νων Η δημιουργ ί α ν έ ων τ ύ πων δεδομ έ νων ε ί ναι δ ύ σκολη.

Αντικειμενοστραφ ή ς Προγραμματισμ ό ς Στον Αντικειμενοστραφ ή προγραμματισμ ό, δ ί νεται έ μφαση στη δημιουργ ί α μον ά δων λογισμικού οι οπο ί ες θα περιλαμβ ά νουν τα δεδομ έ να αλλ ά και τις εντολ έ ς που τα διαχειρ ί ζονται.

Αρχές Αντικειμενοστραφούς Προγραμματισμού Ο ΑΠ αφορά μια φιλοσοφία προγραμματισμού που αφορά αντικείμενα Ένα αντικείμενο αφορά μια οντότητα του πραγματικού κόσμου που προσδιορίζεται διακριτά Πχ., ένας συγκεκριμένος φοιτητής, γραφείο, πλήκτρο, κύκλος ή ακόμα και ένα δάνειο μπορούν να θεωρηθούν αντικείμενα. Ένα αντικείμενο έχει μοναδική ταυτότητα, κατάσταση και συμπεριφορές: - Η κατάσταση(state) ενός αντικειμένου αποτελειται από ένα σύνολο ιδιοτήτων(properties) με τις τρέχουσες τιμές τους. - Η συμπεριφορά ενός αντικειμένου ορίζεται από ένα σύνολο μεθόδων

ΑΝΤΙΚΕΙΜΕΝΑ Όνομα κλάσης: Circle Ιδιότητες: radius is _______ Μέθοδοι: Το πρότυπο μιάς κλάσης 1 ο Αντικείμενο τύπου Circle Ιδιότητες: radius is 10.5 Μέθοδοι: 2 ο Αντικείμενο τύπου Circle Ιδιότητες: radius is 15.3 Μέθοδοι: 1 ο Αντικείμενο τύπου Circle Ιδιότητες: radius is 3.0 Μέθοδοι: Ένα αντικείμενο έχει κατάσταση(state) και συμπεριφορά (behavior). Η κατάσταση(ιδιότητες) καθορίζει το αντικείμενο και η συμπεριφορά(methods) το τί κάνει το αντικείμενο.

ΚΛΑΣΕΙΣ (CLASSES) Οι Κλάσεις είναι αφηρημένες δομές που ορίζουν αντικείμενα του ιδίου τύπου. Είναι ένα αρχέτυπο για αντικείμενα του ιδίου τύπου. Μία κλάση της java χρησιμοποιεί μεταβλητές για να ορίσει τις ιδίοτητες και μεθόδους για την συμπεριφορά. Οι κλάσεις περιέχουν ειδικούς τύπους μεθόδων που λέγονται κατασκευαστές, που χρησιμοποιούνται για να κατασκευάζουν αντικείμενα (στιγμιότυπα) μιας κλάσης.

Πλεονεκτήματα Αντικειμενοστραφούς Προγραμματισμού Απλότητα: τα αντικείμενα μοντελοποιούν οντότητες πραγματικού κόσμου, έτσι η πολυπλοκότητα μειώνεται και δομή των προγραμμάτων αρκετά ξεκάθαρη. Τμηματοποίηση: κάθε αντικείμενο σχηματίζει μια ξεχωριστή οντότητα της οποίας οι εσωτερικές λεπτομέρειες και λειτουργίες διαχωρίζονται από τα υπόλοιπα τμήματα του συστήματος Εύκολη Τροποποίηση : Είναι εύκολο να κάνουμε αλλαγές στον κώδικα μιάς κλάσης χωρίς συνέπειες στα υπόλοιπα μέρη του συστήματος αφού η μόνη διασύνδεση του υπόλοιπου συστήματος με τις κλάσεις είνια μόνο μέσω των μεθόδων. Συντηρισιμότητα : Η αυτονομία των κλάσεων διευκολύνει τον εντοπισμό και διόρθωση των λαθών. Επαναχρησιμοποίηση: Η αυτονομία των κλάσεων διευκολύνει την επαναχρησιμοποιησή τους σε διαφορετικά συστήματα.

Παράδειγμα class Circle{ /*Η ακτίνα(radius) του κύκλου.Ιδιότητα της κλασης κύκλος. Προσδιορίζει μοναδικά κάθε στιγμιότυπο (αντικείμενο) τύπυ κύκλου*/ float radius; static float p=3.14 /* Κατασκευαστής της κλάσης Circle.Δημιουργεί ένα αντικείμενο της κλάσης Circle*/ public Circle(float r){//class constructor radius=r; } /*Μέθοδος area.Επιστρέφει το εμβαδόν του κύκλου*/ public float area(){//class method return p*radius*radius; }

Κατασκευαστές Οι κατασκευαστές έχουν απαραιτήτως ακριβώς το ίδιο όνομα με την κλάση. Κάθε κλάση μπορεί να έχει πολλούς κατασκευαστές. Σε αντίθεσή με όλες τις υπόλοιπες μεθόδους μιας κλάσης, οι κατασκευαστές δεν έχουν έναν τύπο επιστροφής (return type), ούτε καν void. Υπονοείται ωστόσο ότι το τύπος επιστροφής συμπίπτει με την κλάση στην οποία βρίσκεται ο κατασκευαστής Οι κατασκευαστές καλούνται με χρήση του τελεστή new για να δημιουργηθεί ένα νέο αντικείμενο. Πρακτικά, οι κατασκευαστές παίζουν το ρόλο αρχικοποίησης ‐ των ιδιοτήτων ‐ των αντικειμένων.

Προκαθορισμένος (default) κατασκευαστής Μια κλάση μπορεί να δηλωθεί χωρίς κατασκευαστές.Σε αυτή την περίπτωση, ένας no ‐ arg κατασκευαστήςμε κενό σώμα (δηλ. χωρίς να εκτελεί κάποια εντολή) δηλώνεται έμμεσα στην κλάση. Αυτός ο κατασκευαστής λέγεται default constructor, και παρέχεται μόνο στην περίπτωση που δεν δηλωθούν άλλοι κατασκευαστές στην κλάση.

Παράδειγμα class TestCircle{ public static void main(String[] args){ Circle c1=new Circle(3.5); Circle c2=new Circle(4.5); System.out.println(c1.radious); System.out.println(c2.area()); }

Παράδειγμα(Συνέχεια) Circle c1: Ορισμός του τύπου ενός αντικειμένου -ορίζεται το αντικέμείμενο c1 τύπου Circle new Circle(3.5): Δημιουργία αντικειμένου τύπου Circle με ακτίνα 3.5 c1.radius :Προσπέλαση των δεδομένων (ιδιοτήτων ) ενός αντικειμένου c2.area() :Κλήση μεθόδων ενός αντικειμένου

Διαφορές μεταξύ πρωτογενών τύπων δεδομένων και τύπων αντικειμένων Πρωτογενής τύπος int i= Τύπος αντικειμένου Circle c 1 αναφορά Δημιουργήθηκε με new Circle() c: Circle radius=1

Διαφορές πρωτογενών τύπων και τύπων αντικειμένων Πρωτογενείς Τύποι int i=5; int j=2; i=j; Πρίν:Μετά: i j Τύποι Αντικειμένων Circle c1=new Circle(3.5) Circle c2=new Circle(4) C1=c2; Πρίν: Μετά: c1 c2 c1: Circle radius=3.5 c2: Circle radius=4 c1 c2 c1: Circle radius=3.5 c2: Circle radius=4

Συλλογή σκουπιδιών (Garbage Collection) Στο προηγούμενο παράδειγμα, μετά τη δήλωση c1 = c2, το c1 «δείχνει» στο ίδιο αντικείμενο στο οποίο αναφέρεται (δείχνει) και το c2. Το αντικείμενο που προηγούμενα αναφέρονταν από το c1, δεν αναφέρεται πλέον. Αυτό το αντικείμενο ονομάζεται σκουπίδι (garbage). Τα σκουπίδια συλλέγονται (δηλαδή η μνήμη καθαρίζεται) αυτόματα στη Java. Σε αντίθεση π.χ. με τη C++ όπου μια περιοχή της μνήμης πρέπει ρητά να καθαριστεί από κάποια γραμμή κώδικα Η αυτόματη συλλογή σκουπιδιών είναι από τα πολύ μεγάλα πλεονεκτήματα της Java

Μεταβλητές και μέθοδοι στιγμιοτύπων Οι μεταβλητές στιγμιοτύπων (instance variables) ανήκουν ‐ και μπορούν να έχουν διαφορετική τιμή σε κάθε στιγμιότυπο ενός αντικειμένου. Οι μέθοδοι στιγμιοτύπων (instance methods)μπορούν να καλούνται από ένα στιγμιότυπο μιας κλάσης.

Στατικές μεταβλητές, σταθερές και μέθοδοι Οι στατικές μεταβλητές (static variables) μοιράζονται μεταξύ όλων των στιγμιοτύπων μιας κλάσης. Οι στατικές μέθοδοι (static methods) δεν συσχετίζονται με ένα συγκεκριμένο αντικείμενο. Οι στατικές σταθερές (static constants) είναι μεταβλητές με τελική τιμή (δηλαδή δεν μπορεί να μεταβληθεί η τιμή της) που μοιράζονται μεταξύ όλων των στιγμιοτύπων μιας κλάσης

Παράδειγμα: static vs instance class TestCircle{ public static void main(String[] args){ Circle c1=new Circle(3.5); Circle c2=new Circle(4.5); System.out.println(“c1.p=“+c1.p); System.out.println(“c2.p=“+c2.p); c1.p=3,1415; System.out.println(“c1.p=“+c1.p); System.out.println(“c2.p=“+c2.p); }} ΕΞΟΔΟΣ: c1.p=3.14 c2.p=3.14 c1.p= c2.p=3.1415

Άσκηση Να δημιουργηθεί κλάση με το όνομα Point που να αναπαριστά ένα σημείο(x,y) με τα εξής χαρακτηριστικά: 1.Δύο μεταβλητές τύπου double x,y. 2.Έναν κατασκευαστή που να αρχικοποιεί τις παραπάνω μεταβλητές και να δημιουργεί ένα στιγμιότυπο της κλάσης Point. 3.Να υλοποιήσετε την μέθοδο toString() η οποία να επιστρέφει την αλφαριθμητική αναπαράσταση του Point στην μορφή (x,y). Να δημιουργηθεί κλάση με το όνομα Rectangular που να αναπαριστά ένα παραλληλόγραμμο με τα εξής χαρακτηριστικά: 1.Μία μεταβλητή τύπου Point, leftDownCorner, μία μεταβλητή height τύπου double και μια μεταβλητή width τύπου double που αναπαριστούν το ύψος και το πλάτος του παραλληλογράμμου αντίστοιχα.Θεωρούμε ότι οι πλευρές του παραλληλογράμμου είναι πάντα παράλληλες στους άξονες x,y. 2.Έναν κατασκευαστή που να αρχικοποιεί τις παραπάνω μεταβλητές και να δημιουργεί ένα στιγμιότυπο της κλάσης Rectangular. 3.Mία μέθοδο contains που να εξετάζει εάν ένα συγκεκριμένο Point βρίσκεται μέσα στα όρια του παραλληλογράμμου. Να γραφεί πρόγραμμα (TestPoint.java) που να δημιουργεί ένα παραλληλόγραμμο με τα εξής δεδομένα Point(3,4),height 4,width 5.Στην συνέχεια εξετάζει εάν ένα ανεξάρτητο σημείο Point περιέχεται στα όρια του παραλληλογράμμου. Οι συντεταγμένες του συγκεκριμένου σημείου να δίνονται σαν ορίσματα εισόδου. Να τυπώνεται επεξηγηματικό μήνυμα.