Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


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

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

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

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

4 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;}

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

6 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; }};

7 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; }

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

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

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

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

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

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

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

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

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

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

18 Χειρισμός Εξαιρέσεων Η 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) }

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

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


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

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google