Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Advertisements

Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα.
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
Αντικειμενοστραφής Προγραμματισμός
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
ΣΥΝΑΡΤΗΣΕΙΣ.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
Δείκτες (Pointers) – Δομές (Structs)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
Ποιότητα Λογισμικού Ενότητα 2: Παραμετρικοί έλεγχοι στο JUnit. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό
ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα.
Κεφάλαιο 10 – Υποπρογράμματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Υπερφόρτωση Τελεστών (Συνέχεια) Αντικειμενοστραφής Προγραμματισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων.
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 6: Πίνακες και Παράμετροι στην main. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 2: Μεταβλητές και Τύποι Δεδομένων. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Αντικειμενοστραφής Προγραμματισμός Ι
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 10: Αφηρημένες τάξεις. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές) Ένα μεγάλο παράδειγμα.
ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Site: ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ.
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού - Κλάσεις ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014:
Δομές Επανάληψης ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Εργαστηριακό σεμινάριο Χειμερινό εξάμηνο
Κατανεμημένα Συστήματα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Wrapper Classes, Abstract Classes and Interfaces
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
Τεχνολογία και Προγραμματισμός Υπολογιστών
Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών
Εισαγωγή στον Προγ/μό Υπολογιστών
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κεφάλαιο 10 Streams.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΥΛΟΠΟΙΗΣΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό (στη γλώσσα Java)
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

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

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

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

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

Αρχές Αντικειμενοστραφούς Προγραμματισμού Ο ΑΠ αφορά μια φιλοσοφία προγραμματισμού που αφορά αντικείμενα Ένα αντικείμενο αφορά μια οντότητα του πραγματικού κόσμου που προσδιορίζεται διακριτά Πχ., ένας συγκεκριμένος φοιτητής, γραφείο, πλήκτρο, κύκλος ή ακόμα και ένα δάνειο μπορούν να θεωρηθούν αντικείμενα. Ένα αντικείμενο έχει μοναδική ταυτότητα, κατάσταση και συμπεριφορές: - Η κατάσταση(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{ float radius; static float p=3.14 Προσδιορίζει μοναδικά κάθε στιγμιότυπο (αντικείμενο) τύπυ κύκλου*/ 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 i j 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 2 5 2 2

Συλλογή σκουπιδιών (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; }} ΕΞΟΔΟΣ: c1.p=3.14 c2.p=3.14 c1.p=3.1415 c2.p=3.1415

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