Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Κληρονομικότητα. Εισαγωγή  Κληρονομικότητα (Inheritance) καλείται ο μηχανισμός με τον οποίο μία νέα κλάση που ονομάζεται παράγωγη (derived class) δημιουργείται.
Advertisements

Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
-Στοίβα-Ουρά - Πλεονεκτήματα πινάκων -Δομές δεδομένων δευτερεύουσας μνήμης -Πληροφορική και δεδομένα -Παραδείγματα-Προβλήματα ψευδοκώδικα.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
TEMPLATES STANDARD TEMPLATE LIBRARY ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ C Evangelos Theodoridis.
 2003 Prentice Hall, Inc. All rights reserved. 1 Συναρτήσεις στη C++ ΠΕΡΙΕΧΟΜΕΝΑ Εισαγωγή Συστατικά προγράμματος στη C++ Μαθηματικές Συναρτήσεις ( Math.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
1 Ολυμπιάδα Πληροφορικής Μάθημα 7. 2 Στόχοι μαθήματος Δημιουργία συναρτήσεων από το χρήστη Δομή προγράμματος με συναρτήσεις Συναρτήσεις και παράμετροι.
Ολυμπιάδα Πληροφορικής
ΣΥΝΑΡΤΗΣΕΙΣ.
ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Και ομοιότητες και διαφορές με την C.
Αντικειμενοστρεφής Προγραμματισμός ΚΛΑΣΕΙΣ ΙΙ. Υπερφόρτωση (Overloading) Όταν το ίδιο όνομα συνάρτησης (μεθόδου) χρησιμοποιείται για περισσότερες από.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γενικευμένες κλάσεις Συλλογές.
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Ποιότητα Λογισμικού Ενότητα 2: Παραμετρικοί έλεγχοι στο JUnit. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Τμ.
ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Κεφάλαιο 10 – Υποπρογράμματα
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πολυμορφισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Υπερφόρτωση Τελεστών (Συνέχεια) Αντικειμενοστραφής Προγραμματισμός.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Παράδειγμα Κληρονομικότητας Γενικευμένες κλάσεις.
Δομές Δεδομένων 7η Διάλεξη Αφηρημένοι Τύποι Δεδομένων Ε. Μαρκάκης.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Templates συναρτήσεων 1/4
Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Εισαγωγή στον Προγ/μό Υπολογιστών
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Αναδρομικές Εξισώσεις και Αφηρημένοι Τύποι Δεδομένων
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Μεταγράφημα παρουσίασης:

Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής

Templates Τα πρότυπα (templates) είναι μία από τις πλέον ισχυρές δυνατότητες της C++ (Bjarne Stroustrup, 1988) Τα templates μας επιτρέπουν να καθορίσουμε, μέσα σε ένα μοναδικό τμήμα κώδικα, ένα σύνολο συσχετιζόμενων συναρτήσεων (template functions) Μπορούμε για παράδειγμα να γράψουμε ένα μοναδικό πρότυπο συνάρτησης για μία συνάρτηση ταξινόμησης ενός πίνακα και στη συνέχεια να αφήσουμε στη C++ να παράγει ξεχωριστές συναρτήσεις για την ταξινόμηση ενός πίνακα ακεραίων, πίνακα αριθμών κινητής υποδιαστολής, πίνακα αλφαριθμητικών κλπ Επιπλέον μπορούμε να ορίσουμε πρότυπα κλάσεων (class templates) Ορολογία:function templates  (παράγουν) template functions class templates  (παράγουν) template classes

Templates Έστω μία συνάρτηση printArray(int T[], int size) Αν θέλουμε να εκτυπώσουμε έναν πίνακα με στοιχεία που είναι αριθμοί κινητής υποδιαστολής, πρέπει να "υπερφορτώσουμε" το όνομα printArray printArray(double T[], int size) Υπερφορτωμένες συναρτήσεις χρησιμοποιούνται για την εκτέλεση παρόμοιων λειτουργιών σε διαφορετικούς τύπους δεδομένων Αν οι λειτουργίες είναι πανομοιότυπες για κάθε τύπο, είναι καταλληλότερη η χρήση προτύπων συναρτήσεων Ο προγραμματιστής γράφει ένα μοναδικό πρότυπο συνάρτησης Βάσει του τύπου των ορισμάτων, ο μεταγλωττιστής παράγει ξεχωριστές συναρτήσεις αντικείμενου κώδικα για το χειρισμό κάθε κλήσης

Function Templates Όλα τα πρότυπα συναρτήσεων ξεκινούν με τη δεσμευμένη λέξη template ακολουθούμενη από μία λίστα παραμέτρων μέσα σε Σε κάθε παράμετρο πρέπει να προηγείται είτε η δεσμευμένη λέξη class είτε η typename π.χ. template template T maximum( T value1, T value2, T value3) { T max = value1; T max = value1; if(value2 > max) if(value2 > max) max = value2; max = value2; if(value3 > max) if(value3 > max) max = value3; max = value3; return max; return max;}

Class Templates Στοίβα (stack): Δομή δεδομένων όπου τα δεδομένα εισάγονται πάντοτε κατά την ίδια σειρά και ανακτούνται με σειρά LIFO Η υλοποίηση μιας στοίβας εξαρτάται από τον τύπο των δεδομένων Επαναχρησιμοποίηση: Ορισμός της γενικής έννοιας μιας στοίβας με πρότυπα κλάσεων

Class Templates template template class Stack { public: Stack(int s); Stack(int s); bool push(T); bool push(T); T pop(); T pop();private: int size; int size; int top; int top; T* stackPtr; T* stackPtr; bool isEmpty() {return top == -1; } bool isEmpty() {return top == -1; } bool isFull() {return top == size-1; } bool isFull() {return top == size-1; }};

Class Templates template template Stack ::Stack(int s) { size = s > 0 ? s : 10; top = -1; stackPtr = new T[size]; } template template bool Stack ::push(T pushValue) { if(!isFull()) { stackPtr[++top] = pushValue; return true; }else return false; }

Class Templates template template T Stack ::pop() {if(!isEmpty()) return stackPtr[top--]; else cout << "Nothing to retrieve" << endl; }

STL Η C++ περιλαμβάνει την πρότυπη βιβλιοθήκη STL με κύριο σκοπό να διευκολύνει την επαναχρησιμοποίηση κώδικα Alexander Stepanov, Meng Lee (Hewlett Packard – generic programming – ανεξαρτησία δομών ελέγχου από υποκείμενα data) Μέρος του προτύπου C++ Κύρια συστατικά: υποδοχείς (containers) επαναλήπτες (iterators) αλγόριθμοι (algorithms) Η βιβλιοθήκη STL είναι πολύ μεγάλη !! Κίνητρο η δημιουργία πρότυπων δομών δεδομένων που θα λειτουργούν εύκολα με άλλα προγράμματα

STL Στην C/C++ η πρόσβαση στα στοιχεία μιας δομής (π.χ. πίνακα) γίνεται με τη χρήση pointers Στην STL η πρόσβαση στους υποδοχείς γίνεται μέσω επαναληπτών ίδια "αίσθηση" με τους δείκτες "εξυπνότερη" συμπεριφορά Ενώ οι υποδοχείς ενσωματώνουν στοιχειώδεις λειτουργίες, πιο εξεζητημένοι αλγόριθμοι υλοποιούνται ξεχωριστά H STL αποφεύγει τη χρήση των new και delete αλλά χρησιμοποιεί κατανεμητές (allocators) μνήμης

Containers Παραδείγματα: vector- ταχεία προσθήκη και διαγραφή στο τέλος - άμεση πρόβαση σε κάθε στοιχείο list- διπλά συνδεδεμένη λίστα, ταχεία προσθήκη και διαγραφή οπουδήποτε set- ταχεία εύρεση, δεν επιτρέπονται διπλές καταχωρήσεις multiset- ταχεία εύρεση, επιτρέπονται διπλές καταχωρήσεις stack- last-in-first-out (LIFO) queue- first-in-first-out (FIFO)

Containers Υπάρχουν πολλές λειτουργίες που εφαρμόζονται σε πολλούς υποδοχείς empty- επιστρέφει true αν δεν υπάρχουν στοιχεία size- επιστρέφει τον τρέχοντα αριθμό των στοιχείων swap- εναλλαγή της θέσης δύο στοιχείων begin- επιστρέφει επαναλήπτη προς το πρώτο στοιχείο erase- διαγραφή ενός ή περισσοτέρων στοιχείων operator =- Ανάθεση ενός υποδοχέα σε έναν άλλο operator <=- Επιστρέφει true αν ένας υποδοχέας είναι μικρότερος από έναν άλλο

Iterators Παρόλο που οι επαναλήπτες είναι υλοποιημένοι ανάλογα με τη δομή προς την οποία "δείχνουν", μοιράζονται ορισμένες κοινές λειτουργίες *- τελεστής έμμεσης αναφοράς ++- μετακίνηση του επαναλήπτη στο επόμενο στοιχείο Χρησιμοποιούμε ένα αντικείμενο iterator για να αναφερθούμε σε στοιχεία τα οποία μπορούν να τροποποιηθούν. Χρησιμοποιούμε ένα αντικείμενο const_iterator για να αναφερθούμε σε στοιχεία τα οποία δεν μπορούν να τροποποιηθούν

Vectors Μία δομή vector είναι ένας "εξυπνότερος" πίνακας (συνεχείς θέσεις μνήμης) το μέγεθος μπορεί να αλλάζει δυναμικά ένα vector μπορεί να ανατεθεί σε ένα άλλο Η προσθήκη στοιχείου στο τέλος είναι αποδοτική Η προσθήκη στοιχείου στο μέσο είναι υπολογιστικά δαπανηρή Τα στοιχεία μπορούν να προσπελαστούν μέσω του υπερφορτωμένου τελεστή [ ]

Algorithms Χωρίς την STL οι βιβλιοθήκες κλάσεων μεταξύ διαφόρων κατασκευαστών ήταν ασύμβατες Πολλές χρησιμοποιούσαν κληρονομικότητα και πολυμορφισμό με το σχετικό κόστος ταχύτητας των virtual συναρτήσεων Οι αλγόριθμοι ήταν ενσωματωμένοι στις δομές Στην STL υποδοχείς και αλγόριθμοι διαχωρίζονται Παράδειγμα: Χρήση βασικών αλγορίθμων ταξινόμησης

Χειρισμός Εξαιρέσεων Έστω ότι ένας προγραμματιστής κάνει κάποιο σφάλμα, όπως το να ζητήσει ένα στοιχείο μετά το τέλος ενός διανύσματος σε μία κλάση Ο συγγραφέας της κλάσης έχει τις εξής δυνατότητες: Να μην ελέγξει τη συνθήκη του σφάλματος και να εκτελέσει τον κώδικα (πιθανόν με σοβαρές συνέπειες) Να ελέγξει τη συνθήκη του σφάλματος και να μην κάνει τίποτα αν συμβεί Να ελέγξει τη συνθήκη του σφάλματος και να ενημερώσει το καλών πρόγραμμα (μέθοδο) αν συμβεί double future_val(double amount, double p, int n) { return amount * pow(1 + p / 100, n) } Αν κληθεί ως future_val(1000, -100, -1) ??

Χειρισμός Εξαιρέσεων Είναι δυνατόν να υλοποιηθεί κώδικας ελέγχου double future_val(double amount, double p, int n) { if (p < 0 || n < 0) return 0; return amount * pow(1 + p / 100, n) } Το καλών πρόγραμμα δεν ενημερώνεται ρητά για το λάθος. Αν εκλάβει το 0 ως κανονική τιμή και συνεχίσει μπορεί να προκληθούν περαιτέρω προβλήματα

Χειρισμός Εξαιρέσεων Η C++ διαθέτει ένα μηχανισμό ειδοποίησης, που καλείται χειρισμός εξαιρέσεων (exception handling) Όταν μία συνάρτηση εντοπίζει ένα σφάλμα, προκαλεί μία εξαίρεση (throws an exception) double future_val(double amount, double p, int n) { if (p < 0 || n < 0) { logic_error description("illegal parameter"); throw description; } return amount * pow(1 + p / 100, n) }

Χειρισμός Εξαιρέσεων Η δεσμευμένη λέξη throw υποδηλώνει την έξοδο από τη συνάρτηση Ωστόσο, η συνάρτηση δεν επιστρέφει υποχρεωτικά στην καλούσα Ελέγχει την καλούσα συνάρτηση, αυτή που την κάλεσε κ.ο.κ. μέχρις ότου βρεθεί ένας κατάλληλος χειριστής (handler)

Χειρισμός Εξαιρέσεων Παρέχετε έναν χειριστή εξαιρέσεων με τον ακόλουθο κώδικα: try { code } catch (logic_error& e) { handler }