Αντικειμενοστρεφής Προγραμματισμός Ενότητα 8: Αρχεία Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί Ενότητας Εισαγωγή και χρήση αρχείων στη C++ Γνώση της ύπαρξης εξαιρέσεων και αιτιολόγηση εμφάνισής τους 4
Περιεχόμενα Αρχεία ifstrem ofstream Εξαιρέσεις. 5
Αρχεία (1) Στην γλώσσα C++ η είσοδος και η έξοδος γίνεται μέσω ρευμάτων (streams). Το ρεύμα είναι μια λογική διασύνδεση του προγράμματος με συσκευές του Η/Υ. Μπορούν να θεωρηθούν σαν κανάλια για την μεταφορά δεδομένων. Ένα ρεύμα εισόδου δέχεται δεδομένα (bytes) από μια περιφερειακή συσκευή (πληκτρολόγιο, αρχείο σε δίσκο). Ένα ρεύμα εξόδου στέλνει δεδομένα (bytes) σε μια συσκευή εξόδου (οθόνη, αρχείο, εκτυπωτή). 6
Αρχεία (2) Υπάρχουν και ρεύματα εισόδου-εξόδου που στέλνουν και δέχονται δεδομένα από/σε συσκευή (αρχείο, μόντεμ). Ένα ρεύμα είναι ένα αντικείμενο μιας συγκεκριμένης κλάσης ρευμάτων. Ανάλογα με το είδος του ρεύματος που θέλουμε, δημιουργούμε αντικείμενο της αντίστοιχης κλάσης. Κάποια ρεύματα είναι ήδη συνδεδεμένα με συγκεκριμένες περιφερειακές συσκευές, χωρίς να απαιτείται ενέργεια από τον προγραμματιστή. Τα προκαθορισμένα ρεύματα αντιπροσωπεύονται από τα αντικείμενα: cin, cout, cerr, clog. 7
Αρχεία (3) Ο τελεστής << εισάγει πληροφορίες σε ένα ρεύμα εξόδου. Ο τελεστής >> εξάγει πληροφορίες από ένα ρεύμα εισόδου. Οι τελεστές >> και << μπορούν να υπερφορτωθούν για δικές μας κλάσεις. Μορφοποιημένη είσοδος - έξοδος. Η C++ επιτυγχάνει μορφοποιημένη είσοδο έξοδο με τους εξής τρόπους: σημαίες μορφοποίησης (format flags) και χειριστές (manipulators) και μεθόδους (methods), δηλαδή συναρτήσεις-μέλη κλάσεων 8
Αρχεία (4) Στη C++ υπάρχουν οι εξής κλάσεις ρευμάτων για είσοδο και έξοδο σε αρχεία: ifstream για ανάγνωση από αρχείο ofstream για εγγραφή σε αρχείο fsteram για ταυτόχρονη ανάγνωση και εγγραφή σε αρχείο Χρειαζόμαστε το αρχείο επικεφαλίδας fstream. 9
Αρχεία κειμένου (text) Σε δυαδικά αρχεία (binary) η είσοδος/έξοδος είναι μημορφοποιημένη. Με την τυχαία προσπέλαση μπορούμε να διαβάζουμε και γράφουμε ξεκινώντας από οποιοδήποτε σημείο του αρχείου. Τα αρχεία πρέπει να ανοίγουν σε δυαδική μορφή. Οι μέθοδοι seekg() και seekp() επιτρέπουν την τοποθέτηση των δεικτών ανάγνωσης και εγγραφής, αντίστοιχα, σε οποιοδήποτε σημείο (byte) του αρχείου. Οι μέθοδοι tellg() και tellp() επιστρέφουν τις τιμές των τρεχουσών θέσεων των δεικτών αυτών. 10
Εξαιρέσεις (1) Οι εξαιρέσεις είναι σφάλματα τα οποία πιθανόν να παρουσιαστούν κατά την εκτέλεση ενός προγράμματος. Η C++ διαθέτει αυτοματοποιημένο, δομημένο, ελεγχόμενο τρόπο χειρισμού των εξαιρέσεων, επιτρέποντας ένα ενιαίο σύστημα διαχείρισης σφαλμάτων στο πρόγραμμα. Κάθε φορά που παρουσιάζεται μια εξαίρεση ενεργοποιείται μια σημαία σφάλματος. Η ενεργοποίηση της σημαίας καλείται δημιουργία, έγερση ή κατάθεση (throw) εξαίρεσης. 11
Εξαιρέσεις (2) Ένα σύστημα παρακολουθεί συνέχεια εάν ενεργοποιήθηκε αυτή η σημαία, οπότε και καλεί τον κώδικα χειρισμού του σφάλματος. Το σύστημα χειρισμού εξαιρέσεων συλλαμβάνει (catch) την εξαίρεση και εκτελεί τον κώδικα που ο προγραμματιστής όρισε να διαχειριστεί το συγκεκριμένο σφάλμα. Για να μπορέσει να συλληφθεί (catch) μια εξαίρεση, πρέπει αυτή να δημιουργηθεί μέσα σε ένα τμήμα δοκιμής (try-block). 12
Βιβλιογραφία Δημήτρης Συνδουκάς 2007, Αντικειμενοστρεφής προγραμματισμός με C++ - Ασκήσεις, Εσωτερική έκδοση του ΤΕΙ Νίκος Μ. Χατζηγιαννάκης 2008, Η Γλώσσα C++ σε βάθος (1η έκδοση), ΚΛΕΙΔΑΡΙΘΜΟΣ ΕΠΕ, Αθήνα [ISBN: 978-960-461-143-0] Walter Savitch. 2011, Πλήρης C++ (1η έκδοση), Α. ΤΖΙΟΛΑ & ΥΙΟΙ Ο.Ε., Αθήνα, [ISBN: 978-960-418-358-6] Herbert Schildt 2005, C++ Βήμα προς Βήμα (2η έκδοση), Α. ΤΖΙΟΛΑ & ΥΙΟΙ Ο.Ε., Αθήνα, [ISBN: 960-512-449-1] Harvey M.Deitel, Paul J. Deitel, 2011, C++ Προγραμματισμός (6η έκδοση), Γκιούρδας Μ., Αθήνα, [ISBN: 978-960-512-5912] Jesse Liberty 2006, Πλήρες Εγχειρίδιο της C++ (Πέμπτη έκδοση), Γκιούρδας Μ., Αθήνα, [ISBN: 978-960-512-318-5] Deitel Paul J.,Deitel Harvey M., Java Προγραμματισμός, 8 η έκδοση, Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2008, ISBN: 978-960-512-592-9. Savitch Walter, Java, 4 η έκδοση, 2007, Εκδόσεις Α. Τζιόλα και Υιοί, ISBN: 978-960-418-147-6. 13
Τέλος Ενότητας
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 15
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 16