Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Σχετικά έγγραφα
Αντικειμενοστρεφής Προγραμματισμός

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Εξαιρέσεις στην Java EXCEPTIONS IN JAVA

Χειρισμός Εξαιρέσεων EXCEPTIONS IN JAVA

Εξαιρέσεις. try, catch, finally, throw, throws

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

Ειδικά Θέματα Προγραμματισμού

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιαχείριση Εξαιρέσεων. Εισαγωγή στη ιαχείριση Εξαιρέσεων

6. Εξαιρέσεις στη γλώσσα Java

Οντοκεντρικός Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 10: Exceptions handling (Χειρισμός εξαιρέσεων)

Κλάσεις και Αντικείµενα

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Εξαιρέσεις (στη Java)

ΣΕΜΙΝΑΡΙΟ JAVA. 5 η ιάλεξη

Συντακτικά λάθη, λάθη εκτέλεσης, Λογικά λάθη

Διάλεξη Εισαγωγή στη Java, Μέρος B

Εξαιρέσεις στη Java. Περιεχόμενα. Κάποιες προκαθορισμένες ρ εξαιρέσεις. Κωστής Σαγώνας

Οντοκεντρικός Προγραμματισμός

Γενικά (για τις γραπτές εξετάσεις)

2.1 Αντικειµενοστρεφής προγραµµατισµός

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language)

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Εξαιρέσεις (στη Java)

10.1 Γενικά για τα streams

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

Αντικειµενοστρεφής Προγραµµατισµός

Κεφάλαιο 10 ο Υποπρογράµµατα

Remote Method Invocation (RMI)

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Αντικειμενοστρεφής Προγραμματισμός

Εξαιρέσεις (στη Java)

Κεφάλαιο 5ο: Εντολές Επανάληψης

Εξαιρέσεις (στη Java)

Εξαιρέσεις (στη Java) Vincent van Gogh, Irises, 1889

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Α. Ερωτήσεις Ανάπτυξης

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΕΠΛ233 ΕΞΑΙΡΕΣΕΙΣ στη JAVA

Εξαιρέσεις (στη Java)

Κωστής Σαγώνας Πιάσιμο εξαιρέσεων (catching exceptions) Ρίψη εξαιρέσεων (throwing exceptions) Η πρόταση finally

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Java Μέρος Ι Αντικειμενοστρεφής Προγραμματισμός - 7

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

java.lang Class Throwable

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Δομημένος Προγραμματισμός

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εργαλεία του JDK. Β.1 Εργαλεία του JDK. Β.2 Μεταγλωττιστής javac. Τα πιο βασικά εργαλεία του JDK είναι τα παρακάτω.

ΚΕΦΑΛΑΙΑ XIII, XIV. Εκσφαλμάτωση προγράμματος - Κύκλος Ζωής Λογισμικού

3 Αλληλεπίδραση Αντικειμένων

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Διαγράμματα UML στην Ανάλυση. Μέρος Γ Διαγράμματα Επικοινωνίας Διαγράμματα Ακολουθίας Διαγράμματα Μηχανής Καταστάσεων

Ειδικά Θέματα Προγραμματισμού

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

8. Λεξιλόγιο μιας γλώσσας είναι όλες οι ακολουθίες που δημιουργούνται από τα στοιχεία του αλφαβήτου της γλώσσας, τις λέξεις.

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Οι δείκτες στη γλώσσα C

Λειτουργικά Συστήματα (Λ/Σ)

ALERTS ή EDA (Event Driven Actions)

Γνωριµία µε τη Microsoft Access

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

Επανάληψη για τις Τελικές εξετάσεις

Εισαγωγή στην πληροφορική

4.3. Γραµµικοί ταξινοµητές

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στην πληροφορική

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Εισαγωγή στην πληροφορική

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

ΠΕΡΙΕΧΟΜΕΝΑ. Κατηγορίες λαθών Εκσφαλμάτωση Εργαλεία εκσφαλμάτωσης Χειρισμός λαθών κατά το χρόνο εκτέλεσης

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

Ελεγχος, Αξιοπιστία και Διασφάλιση Ποιότητας Λογισµικού Πολυπλοκότητα

Αναδρομή Ανάλυση Αλγορίθμων

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

S, (5, -3, 34, -23, 7) ( *, _

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Transcript:

Χειρισµός Σφαλµάτων Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Έκδοση: 2010.12.06

Σφάλµατα, Σφάλµατα, Σφάλµατα 2 εν υπάρχουν προγράµµατα χωρίς λογικά λάθη Υλοποίηση που δεν συµφωνεί µε τις προδιαγραφές Π.χ. υπολογισµός της µέση τιµής αντί για τη διάµεσο Εσφαλµένη κλήση της µεθόδου ενός αντικειµένου Π.χ. παράµετρος εκτός έγκυρου εύρους Ασυνεπής ή ακατάλληλη κατάσταση αντικειµένου Π.χ. µπορεί να προκύψει µέσω κληρονοµικότητας Σφάλµατα εκτός του ελέγχου του προγραµµατιστή Λάθος διεύθυνση URL σε έναν browser ικτυακό σφάλµα σύνδεσης Λάθος όνοµα αρχείου, λάθος δικαιώµατα πρόσβασης

Τι Κάνουµε για τα Σφάλµατα; 3 Αµυντικός προγραµµατισµός Πρόβλεψη των σφαλµάτων που µπορεί να προκληθούν και αποφυγή τους Αναφορά σφαλµάτων όταν προκύπτουν Χειρισµός και παραγωγή εξαιρέσεων

Αµυντικός Προγραµµατισµός 4 Αλληλεπίδραση αντικειµένων Ένα αντικείµενο πελάτης (client) δηµιουργεί και καλεί µεθόδους ενός αντικειµένου διακοµιστή (server) Πιθανές υποθέσεις προγραµµατιστών διακοµιστή Τα αντικείµενα πελάτες θα συµπεριφέρονται σωστά Τα αντικείµενα πελάτες θα είναι εχθρικά Αµυντικός προγραµµατισµός Έλεγχος των παραµέτρων που στέλνει ο πελάτης κατά την δηµιουργία αντικειµένων και την κλήση µεθόδων µε σκοπό την αποφυγή σφαλµάτων exceptions.students1, exceptions.students2

Αναφορά των Σφαλµάτων 5 Ειδοποίηση του χρήστη Πολλές εφαρµογές εκτελούνται χωρίς επίβλεψη από κάποιο χρήστη Ακόµα και αν υπάρχει χρήστης, αυτός συνήθως δεν µπορεί να κάνει κάτι για το σφάλµα Ειδοποίηση του αντικειµένου πελάτη Επιστροφή τιµής από την κλήση της µεθόδου Παραγωγή µιας εξαίρεσης

Επιστροφή Τιµής 6 Τιµή που επιστρέφεται Αν η µέθοδος ήταν void Επιστροφή λογικής τιµής που φανερώνει αν πήγαν όλα καλά Αν επιστρέφει αντικείµενο Επιστροφή τιµής null για να επισηµάνουµε πρόβληµα Αν επιστρέφει αριθµό Όµως Επιστροφή αριθµού εκτός αναµενόµενων ορίων exceptions.students3 εν µπορεί κανείς να αναγκάσει τον προγραµµατιστή να ελέγξει την επιστρεφόµενη τιµή Μια µόνο τιµή δεν φτάνει για διαφορετικά λάθη που απαιτούν διαφορετική αντιµετώπιση Κωδικός σφάλµατος, κλήση µε αναφορά για επιστροφή τιµών

Εξαιρέσεις και Ρίψη Εξαιρέσεων 7 Εξαίρεση (exception) Σφάλµα που συµβαίνει κατά την εκτέλεση ενός προγράµµατος και διακόπτει τη φυσιολογική ροή των εντολών του Ρίψη εξαίρεσης (throwing an exception) throw αντικείµενοεξαίρεσης Όταν συµβεί ένα σφάλµα µέσα σε µία µέθοδο, τότε αυτή δηµιουργεί ένα αντικείµενο εξαίρεσης µε πληροφορίες (είδος σφάλµατος, κατάσταση του προγράµµατος, κ.α.) για αυτό το σφάλµα, και στη συνέχεια το παραδίδει στο σύστηµα χρόνου εκτέλεσης (runtime system) exceptions.students4

Αναζήτηση Χειριστή 8 Το σύστηµα χρόνου εκτέλεσης αναζητεί στη στοίβα κλήσεων (call stack) να βρει αν ο κώδικας που οδήγησε στην εξαίρεση βρίσκεται µέσα σε ένα block κώδικα που παρακολουθείται για εξαιρέσεις και αν αυτό συνοδεύεται από κατάλληλο χειριστή (exception handler) για τη συγκεκριµένη εξαίρεση

Παρακολούθηση και Χειρισµός 9 Παρακολούθηση και χειρισµός εξαιρέσεων Η διαχείριση εξαιρέσεων απαιτεί ένα τµήµα κώδικα που παρακολουθείται για εξαιρέσεις (try) και ένα (ή παραπάνω) που µπορεί να χειριστεί εξαιρέσεις (catch) Τα δύο αυτά τµήµατα πάντα υπάρχουν ως ζεύγος Τµήµατα try/catch try { // κώδικας που παρακολουθείται // για εµφάνιση σφαλµάτων catch (ExceptionType exception) { // χειριστής για εξαίρεση ExceptionType

Καταλληλότητα Χειριστή 10 Κατάλληλος χειριστής εξαίρεσης Ένας χειριστής είναι κατάλληλος για µια εξαίρεση αν ο τύπος του αντικειµένου της ταιριάζει (είναι ίδιος ή υποκλάση) µε τον τύπο που αυτός µπορεί να χειριστεί Αν βρεθεί κατάλληλος χειριστής Τότε λέµε ότι συλλαµβάνει (catches) την εξαίρεση Εκτελείται ο κώδικας του και η ροή της εκτέλεσης συνεχίζει µετά το πέρας του try/catch Αν δε βρεθεί (κατάλληλος) χειριστής, Τότε η εξαίρεση θα συλληφθεί από την JVM, µε συνέπεια να σταµατήσει µόνιµα η εκτέλεση του προγράµµατος και να εµφανιστεί το ίχνος της στοίβας κλήσεων και ένα µήνυµα µε πληροφορίες για το σφάλµα

Ορισµένα Πρώτα Παραδείγµατα 11 Μη εύρεση χειριστή exceptions.example1a Εύρεση ακατάλληλου χειριστή exceptions.example1b Εύρεση κατάλληλου χειριστή Εκεί που προκλήθηκε η εξαίρεση Σε προηγούµενη κλήση (προώθηση εξαίρεσης) exceptions.example1c, exceptions.example1d, exceptions.students5, exceptions.aircond

Είδη Εξαιρέσεων (1/3) 12 Η κλάση Throwable Ένα αντικείµενο εξαίρεσης (πρέπει να) ανήκει σε κλάση που κληρονοµεί την κλάση Throwable Έχει δύο παιδιά, τις κλάσεις Error και Exception Εξαιρέσεις της κλάσης Error εν οφείλονται στην εφαρµογή που εκτελείται Συνήθως είναι µη αναµενόµενες και χωρίς δυνατότητα ανάκαµψης (διόρθωσης του σφάλµατος) Π.χ. αδυναµία ανάγνωσης ενός αρχείου που υπάρχει στο σύστηµα λόγω προβλήµατος στο υλικό Ωστόσο αν προσδιορίσουµε χειριστή, αποφεύγουµε το κρέµασµα της εφαρµογής εν µπορούµε να ορίσουµε τέτοιες δικές µας εξαιρέσεις

Είδη Εξαιρέσεων (2/3) 13 Εξαιρέσεις της κλάσης Exception Οφείλονται στην εφαρµογή που εκτελείται ιακρίνονται σε α) µη αναµενόµενα λογικά σφάλµατα, και β) σε σφάλµατα που ενδέχεται να προκύψουν Μη αναµενόµενα λογικά σφάλµατα Θα πρέπει να διορθώνονται ώστε να µην εµφανίζονται Συνήθως δεν υπάρχει δυνατότητα ανάκαµψης (διόρθωσης του σφάλµατος), όµως αν προσδιορίσουµε χειριστή, αποφεύγουµε το κρέµασµα της εφαρµογής Η υποκλάση RuntimeException της κλάσης Exception Περιέχει έναν αριθµό από έτοιµες τέτοιες εξαιρέσεις, όπως υπέρβαση ορίων πίνακα, ακέραια διαίρεση µε το 0 Ορίζουµε δικές µας εξαιρέσεις επεκτείνοντας την κλάση αυτή

Είδη Εξαιρέσεων (3/3) 14 Σφάλµατα που ενδέχεται να προκύψουν Π.χ. ο χρήστης δίνει ένα όνοµα αρχείου για άνοιγµα, το οποίο δεν υπάρχει στο σύστηµα Υπάρχει πάντα τρόπος να ανακάµψουµε από αυτά Μια καλοσχεδιασµένη εφαρµογή οφείλει να έχει χειριστές και να ανακάµπτει από τέτοια σφάλµατα Ορίζουµε δικές µας εξαιρέσεις αυτού του είδους επεκτείνοντας την κλάση Exceptions

Υποχρέωση Χειρισµού 15 Ανέλεγκτες εξαιρέσεις (unchecked) O compiler της Java δεν απαιτεί την ύπαρξη κώδικα χειρισµού για εξαιρέσεις που ανήκουν στις κλάσεις Error και RuntimeException εν θα έπρεπε να προκύψουν και δεν µπορούµε πάντα να κάνουµε κάτι για να τις διορθώσουµε Ελεγµένες εξαιρέσεις (checked) Ο compiler της Java απαιτεί την ύπαρξη χειριστή όλων των υπόλοιπων εξαιρέσεων (όσων ανήκουν στην κλάση Exception, όχι όµως και στην RuntimeException) Είναι αναµενόµενες και υπάρχει τρόπος ανάκαµψης Υποχρεώνουµε τον προγραµµατιστή να τις λάβει υπόψη

Μερικά Ακόµα Παραδείγµατα 16 Παραδείγµατα RuntimeException Χειρισµός τους ιόρθωση τους για αποφυγή εµφάνισης τους exceptions.example3 Παραδείγµατα Exception Υποχρέωση χειρισµού τους Χειρισµός τους στο σηµείο της εξαίρεσης Ο χειρισµός σε προηγούµενη κλήση απαιτεί τη χρήση της λέξης κλειδί throws (µη αυτόµατη προώθηση) πριν την έναρξη του κώδικα της µεθόδου exceptions.example4

Σύλληψη Εξαιρέσεων 17 Πολλαπλοί χειριστές Ένας χειριστής εξαιρέσεων µπορεί να αποτελείται από πολλαπλά catch, τα οποία εξετάζονται µε τη σειρά που γράφονται µέσα στο πρόγραµµα exceptions.example5 Σύλληψη µέσω υπερκλάσης Ένας χειριστής εξαιρέσεων κάποιου τύπου, µπορεί να συλλάβει οποιαδήποτε εξαίρεση είτε αυτού του τύπου είτε των υποκλάσεων του exceptions.example6

Γιατί Σύλληψη µέσω Υπερκλάσης; 18 Περίπτωση 1 Όταν είναι σηµαντικό να αποφευχθεί ο τερµατισµός εκτέλεσης της εφαρµογής, τότε προτείνεται η χρήση ενός χειριστή εξαίρεσης τύπου Throwable, ο οποίος θα πιάσει οποιαδήποτε εξαίρεση Περίπτωση 2 Όταν ο ίδιος κώδικας µπορεί να χειριστεί ένα σύνολο διαφορετικών εξαιρέσεων, τότε προτείνεται η χρήση ενός χειριστή εξαίρεσης για την υπερκλάση αυτών των εξαιρέσεων, για την αποφυγή της διπλοκαταχώρησης κώδικα

Τελικό Τµήµα Κώδικα 19 finally Ένα block κώδικα finally µπαίνει στο τέλος ενός try/catch block και εκτελείται πάντα µετά την ολοκλήρωση του try/catch Είτε προκύψει εξαίρεση, είτε όχι, είτε ζητηθεί επιστροφή από τη µέθοδο µε return Χρησιµεύει για ρύθµιση εκκρεµοτήτων Π.χ. ανοικτό αρχείο, ανοικτή διαδικτυακή σύνδεση exceptions.example8, exceptions.example9

ηµιουργία Εξαίρεσης 20 ηµιουργία εξαίρεσης Μπορείτε να δηµιουργήσετε τις δικές σας νέες εξαιρέσεις επεκτείνοντας την κατάλληλη κλάση exceptions.nonintdivexception, exceptions.example10

Πλεονεκτήµατα Εξαιρέσεων 21 ιαχωρισµός του κώδικα χειρισµού σφαλµάτων από τον φυσιολογικό κώδικα Προώθηση σφαλµάτων στη στοίβα κλήσεων Οµαδοποίηση και διαχωρισµός ειδών σφαλµάτων

ιαχωρισµός Κώδικα (1/3) 22 Έστω ο παρακάτω κώδικας για την ανάγνωση ενός αρχείου readfile { open the file; read the file into memory; close the file;

ιαχωρισµός Κώδικα (2/3) 23 errorcodetype readfile { initialize errorcode = 0; open the file; if (thefileisopen) { read the file into memory; if (readfailed) { errorcode = -1; close the file; if (thefiledidntclose && errorcode == 0) { errorcode = -4; else { errorcode = -3; else { errorcode = -5; return errorcode;

ιαχωρισµός Κώδικα (3/3) 24 readfile { try { open the file; read the file into memory; close the file; catch (fileopenfailed) { dosomething; catch (readfailed) { dosomething; catch (fileclosefailed) { dosomething;

Προώθηση Σφαλµάτων (1/4) 25 Έστω ο παρακάτω κώδικας όπου µόνο η method1 ενδιαφέρεται για σφάλµατα στη readfile method1 { call method2; method2 { call method3; method3 { call readfile;

Προώθηση Σφαλµάτων (2/4) 26 errorcodetype method3 { errorcodetype error; error = call readfile; if (error) return error; errorcodetype method2 { errorcodetype error; error = call method3; if (error) return error;

Προώθηση Σφαλµάτων (3/4) 27 method1 { errorcodetype error; error = call method2; if (error) doerrorprocessing;

Προώθηση Σφαλµάτων (4/4) 28 method1 { try { call method2; catch (exception e) { doerrorprocessing; method2 throws exception { call method3; method3 throws exception { call readfile;

Οµαδοποίηση και ιαχωρισµός (I) 29 Οι εξαιρέσεις είναι αντικείµενα, τα οποία ανήκουν σε µια ιεραρχία κλάσεων µε πρόγονο κλάση την Throwable Αυτό µας δίνει τη δυνατότητα να χειριστούµε οµαδικά κάποια σφάλµατα µε βάση την υπερκλάση τους

Οµαδοποίηση και ιαχωρισµός (ΙΙ) 30 catch (EOFException e) { // ιάβασµα πέρα από το τέλος του αρχείου catch (FileNotFoundException e) { // εν βρέθηκε το αρχείο catch (IOException e) { // Γενική διαχείριση σφαλµάτων Ι/Ο catch (Throwable e) { // Συλλαµβάνει όλα τα λάθη