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

Σχετικά έγγραφα
Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

java.lang Class Throwable

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

11β Δομικά πρότυπα σχεδίασης

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

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

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

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

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

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

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

Περιγραφή της εργασίας

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Βασικά της γλώσσας JAVA

Διάλεξη 14: Εξαιρέσεις (Exceptions) Διδάσκων: Παναγιώτης Ανδρέου

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java

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

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

Βασικά Στοιχεία της Java

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Προγραμματισμός Υπολογιστών με C++

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

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

Διδάσκων: Παναγιώτης Ανδρέου

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

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Είσοδος Έξοδος (Input Output) Εξαιρέσεις (Exceptions)

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

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

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

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

9 ΕΞΑΙΡΕΕΙ - EXCEPTIONS

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

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

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019

Βασικά Στοιχεία της Java

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

Λογισµικό (Software SW) Γλώσσες

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Εισαγωγή στις Σελίδες Εξυπηρετητή Java Java Server Pages (JSP)

ηµιουργία ιαλογικών Προγραµµάτων για το Web

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

Εισαγωγή στον Προγ/μό Η/Υ

ΗΥ 252 Αντικειμενοστρεφ ής Προγραμματισμός Διδάσκων: Γιάννης Τζίτζικας

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

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

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

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Οδηγίες Συγγραφής και Αξιολόγησης Εργασιών του μαθήματος

Από τη UML στον Κώδικα. Μέρος Β

Transcript:

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ EXCEPTIONS & EXCEPTION HANDLING Εξαιρέσεις (Exceptions) Γνωμικό της Μηχανικής Λογισμικού: το 80% της δουλειάς των μηχανικών κατά την υλοποίηση μιας εφαρμογής, καταλαμβάνει μόλις το 20% του χρόνου εκτέλεσης. Ο εντοπισμός και η αντιμετώπιση σφαλμάτων αποτελούν από τα πιο βασικά συστατικά μιας καλογραμμένης εφαρμογής. Η Java εφοδιάζει τους προγραμματιστές με έναν «κομψό» μεν, αποτελεσματικό δε μηχανισμό αντιμετώπισης σφαλμάτων, ο οποίος παράλληλα βοηθάει στην καλύτερη δόμηση και οργάνωση του κώδικα. Ο μηχανισμός αυτός είναι γνωστός ως μηχανισμός χειρισμού εξαιρέσεων (exception handling). 1

Τι είναι οι εξαιρέσεις?? (1/2) Με τον όρο ΕΞΑΙΡΕΣΗ αναφερόμαστε στη σπάνια αλλά πιθανή να συμβεί περίπτωση, όπου ο κώδικάς μας δε λειτουργεί κανονικά λόγω μιας απρόοπτης κατάστασης. Μία εξαίρεση δεν είναι ένα σφάλμα στον κώδικα αλλά μία ανεπιθύμητη κατάσταση που μπορεί να προκύψει από άλλον λόγο, όπως για παράδειγμα στα εξής σενάρια: Κάποιο αρχείο που θέλουμε να ανοίξουμε δεν βρέθηκε Κάποια βάση δεδομένων στην οποία θέλουμε να συνδεθούμε είναι offline Μία δικτυακή σύνδεση απέτυχε Στα παραπάνω σενάρια, έχουμε ως δεδομένο πως ο κώδικας που εκτελεί τη συγκεκριμένη διεργασία είναι σωστός και η αποτυχία ολοκλήρωσής της οφείλεται σε κάποιον εξωγενή παράγοντα. Τι είναι οι εξαιρέσεις?? (2/2) Παραδείγματα: στην πρώτη περίπτωση ο χρήστης έγραψε λάθος το όνομα του αρχείου και γι αυτό δε βρέθηκε, στη δεύτερη μπορεί ο administrator να έχει «ρίξει» τον server offline, στην Τρίτη περίπτωση μπορεί κάποιο καλώδιο να είναι προβηματικό. Κάθε φορά που συμβαίνει ένα αντίστοιχο γεγονός κατά την εκτέλεση ενός προγράμματος Java, γίνεται thrown («πετάγεται») μία εξαίρεση. Αυτός είναι και ο λόγος που η συγκεκριμένη κατηγορία σφαλμάτων ονομάζονται εξαιρέσεις, μιας και πρόκειται για περιπτώσεις όπου η σωστή λειτουργία του κώδικα αποτελεί τον κανόνα, ενώ η περίπτωση σφάλματος αποτελεί την εξαίρεση. 2

Χειρισμός Εξαιρέσεων Για σενάρια σαν αυτά που προαναφέρθηκαν στα οποία προκύπτει εξαίρεση, το πρόγραμμα διακόπτεται συνήθως λόγω έλλειψης απαραίτητων δεδομένων. Ο μη κατάλληλος χειρισμός τέτοιου είδους σφαλμάτων έχει συνήθως ως αποτέλεσμα τον βίαιο και μη ελεγχόμενο τερματισμό του προγράμματος. Στη Java, ο χειρισμός εξαιρέσεων είναι ο μηχανισμός που μας επιτρέπει να χειριστούμε σφάλματα κατά την εκτέλεση του προγράμματός μας τα οποία συνήθως οφείλονται σε εξωγενείς παράγοντες. Βασικά χαρακτηριστικά χειρισμού εξαιρέσεων Ένα από τα βασικά χαρακτηριστικά του μηχανισμού χειρισμού εξαιρέσεων είναι πως δίνει στον προγραμματιστή τη δυνατότητα να εντοπίσει την ακριβή αιτία που προκάλεσε το πρόβλημα, καθώς και το σημείο του κώδικα όπου προκλήθηκε. Εξίσου σημαντικό είναι όμως το γεγονός πως αποφεύγεται η βίαιη διακοπή της εφαρμογής. Ο πιο συνηθισμένος χειρισμός είναι να προβληθεί κάποιο μήνυμα στον χρήστη και το πρόγραμμα να τερματίσει ελεγχόμενα και με ομαλό τρόπο. Έτσι, με τη βοήθεια του μηχανισμού χειρισμού εξαιρέσεων οι προγραμματιστές είναι σε θέση να γράφουν ανθεκτικές (fault tolerant) σε σφάλματα εφαρμογές 3

Μηχανισμός χειρισμού εξαιρέσεων (1/4) Η βασική αρχή του είναι η μεταφορά της ροής σε κάποιον κατάλληλο χειριστή, στην περίπτωση που προκύψει εξαίρεση. Αυτό γίνεται με τη βοήθεια ενός συνδυασμού μπλοκ εντολών, του try και του catch, όπως για παράδειγμα φαίνεται στον κώδικα που ακολουθεί. try { // κώδικας που μπορεί να προκαλέσει exception catch(myexception) { // κώδικας που χειρίζεται το exception Ένα try-catch μπλοκ είναι ο πιο τυπικός τρόπος χειρισμού εξαιρέσεων και λειτουργεί ως εξής: Ο κώδικας ο οποίος μπορεί να προκαλέσει (raise) μία ή περισσότερες εξαιρέσεις τοποθετείται στο try μπλοκ. («επικίνδυνος» κώδικας) Μηχανισμός χειρισμού εξαιρέσεων (2/4) Ακολουθούν ένα ή περισσότερα catch μπλοκς, κάθε ένα από τα οποία χειρίζεται ένα είδος εξαίρεσης. Για τον λόγο αυτόν, τα catch μπλοκς ονομάζονται και χειριστές (handlers). Ένα σωστά δομημένο κομμάτι κώδικα που χειρίζεται έναν αριθμό εξαιρέσεων, θα πρέπει να γραφτεί βάσει κανόνων: Ξεκινάμε από το try μπλοκ όπου τοποθετούμε τον κώδικα ο οποίος μπορεί να προκαλέσει μία ή περισσότερες εξαιρέσεις. Στη συνέχεια θα δούμε με ποιον τρόπο γνωρίζουμε ποιες ακριβώς γραμμές μπορεί να προκαλέσουν exception. Ο compiler απαιτεί αμέσως μετά από ένα try μπλοκ να βρει είτε ένα catch μπλοκ είτε ένα finally μπλοκ (θα το εξετάσουμε στη συνέχεια). Μάλιστα, δε θα πρέπει να παρεμβάλλεται άλλος κώδικας, δηλαδή τα catch /finally μπλοκς θα πρέπει να είναι γραμμένα αμέσως μετά το τέλος του try. Αντίστοιχα, αν έχουμε περισσότερα του ενός catch μπλοκ πρέπει να είναι γραμμένα το ένα μετά το άλλο χωρίς να παρεμβάλλονται άλλες εντολές. 4

Μηχανισμός χειρισμού εξαιρέσεων (3/4) Μηχανισμός χειρισμού εξαιρέσεων (4/4) Ο σωστός τρόπος γραφής handlers είναι ακολουθώντας τη σειρά με την οποία μπορούν να προκύψουν εξαιρέσεις, σύμφωνα με τον κώδικα του try μπλοκ. Τοποθετούμε στην αρχή ειδικότερους χειριστές, δηλαδή αυτούς που στοχεύουν σε συγκεκριμένες εξαιρέσεις, ενώ προχωρώντας προς τα κάτω τοποθετούμε τους γενικότερους, καταλήγοντας στον γενικό χειριστή τον οποίο γράφουμε πάντοτε τελευταίο. Το γενικό catch μπλοκ (catch-all) μπορεί να «πιάσει» όλες τις εξαιρέσεις που κληρονομούν από την κλάση Exception και είναι γνωστές και ως checked exceptions. Η σύνταξη του είναι η: catch (Exception e) {... 5

Το finally-block (1/3) Το συγκεκριμένο μπλοκ εντάχθηκε στο μηχανισμό για την αντιμετώπιση ανεπιθύμητων καταστάσεων που ο κώδικάς μας έχει δεσμεύσει κάποιους πόρους και κατά την εκτέλεσή του προκύπτει ένα σοβαρό σφάλμα με συνέπεια το πρόγραμμα να τερματίσει χωρίς προηγουμένως να τους αποδεσμεύσει. Το σενάριο αυτό μπορεί να αποφευχθεί με τη χρήση ενός finally μπλοκ. Πρόκειται για ένα κομμάτι κώδικα που εκτελείται πάντα είτε δηλαδή προκύψει εξαίρεση είτε όχι. Αυτό το κάνει ιδανικό σημείο για την τοποθέτηση κώδικα αποδέσμευσης πόρων. Το finally-block (2/3) Παράδειγμα της βασικής δομής ενός trycatch-finally μπλοκ που θα χρησιμοποιούσαμε σε κώδικα που συνδέεται με μία βάση δεδομένων. try { // κώδικας που πραγματοποιεί //σύνδεση με μια βάση δεδομένων catch (SQLException e) { // κώδικας χειρισμού finally { // κώδικας αποσύνδεσης από τη βάση 6

Το finally-block (3/3) Τύποι Εξαιρέσεων (1/3 ) Η ιεραρχία κλάσεων της Java που αναπαριστούν τους διάφορους τύπους σφαλμάτων που μπορούν να προκύψουν κατά την εκτέλεση ενός προγράμματος 7

Τύποι Εξαιρέσεων (2/3 ) Υποκλάσεις της RuntimeException: ArithmeticException ArrayIndexOutOfBoundsException ClassCastException IllegalArgumentException & NumberFormatException IllegalStateException NullPointerException Τύποι Εξαιρέσεων (3/3 ) Υποκλάσεις της Error: AssertionError ExceptionInInitializerError IOError NoClassDefFoundError NoClassDefFoundError Συμπεριφορά του catch catch (IOException e) { e.printstacktrace(); System.err.println(e.getMessage()); 8

Δημιουργία user defined Εξαιρέσεων (1/3 ) import exception.*; public class Employee { private String fullname; private String insurancebody; public Employee(){ public Employee(String f, String ib) throws InvalidInsuranceBodyException { if (!ib.equals("ικα") &&!ib.equals("τσμεδε")) else { throw new InvalidInsuranceBodyException(); fullname = f; insurancebody = ib; Δημιουργία user defined Εξαιρέσεων (2/3 ) public String getfullname() { return fullname; public void setfullname(string f) { fullname = f; public String getinsurancebody() { return insurancebody; public void setinsurancebody(string ib) throws InvalidInsuranceBodyException { if (!ib.equals("ικα") &&!ib.equals("τσμεδε")) throw new InvalidInsuranceBodyException(); else insurancebody = ib; 9

Δημιουργία user defined Εξαιρέσεων (3/3 ) package exception.*; public class InvalidInsuranceBodyException extends Exception { private static final long serialversionuid = 1L; // methods public InvalidInsuranceBodyException(){ super("μη αποδεκτός ασφαλιστικός φορέας"); public InvalidInsuranceBodyException(String message){ super(message); 10