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

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

Εισαγωγή στη JAVΑ (μέρος Β’) Βασίλης Παπαταξιάρχης Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής.

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


Παρουσίαση με θέμα: "Εισαγωγή στη JAVΑ (μέρος Β’) Βασίλης Παπαταξιάρχης Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής."— Μεταγράφημα παρουσίασης:

1 Εισαγωγή στη JAVΑ (μέρος Β’) Βασίλης Παπαταξιάρχης {vpap@di.uoa.gr} Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής και Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών

2 Περισσότερα θέματα στη Java Λάθη και Εξαιρέσεις Μετατροπή Αντικειμένων Είσοδος / Έξοδος Γενικά Σχόλια Εργαλεία Ανάπτυξης

3 Κατά την εκτέλεση μίας μεθόδου μπορεί να προκληθούν συνθήκες απρόβλεπτες. Σε αυτές τις περιπτώσεις εμφανίζονται λάθη (errors) και εξαιρέσεις (exceptions) Η Java επιτρέπει αυτόματο χειρισμό τέτοιων λαθών (automated exception handling) Ένα αντικείμενο της κλάσης Error δημιουργείται λόγω «σημαντικών» λαθών που δεν δύναται να αντιμετωπιστούν στα πλαίσια ενός προγράμματος Λάθη και Εξαιρέσεις πακέτο java.lang Π.χ. NoClassDefFoundError (για παράδειγμα στην περίπτωση που έχουν οριστεί λάθος κατάλογοι στη μεταβλητή περιβάλλοντος CLASSPATH)

4 Μία εξαίρεση είναι οποιοδήποτε γεγονός διαταράσσει την ομαλή εκτέλεση ενός προγράμματος Η μέθοδος στην οποία προκαλείται το σφάλμα δημιουργεί ένα exception object, το οποίο περιέχει πληροφορίες για το σφάλμα που προκλήθηκε και καλούμαστε να το διαχειριστούμε runtime. Το σύστημα ελέγχει τη στοίβα κλήσης συναρτήσεων με σκοπό να βρει κώδικα που να κάνει handle το exception που προέκυψε. Εξαιρέσεις (1/2)

5 Εξαιρέσεις (2/2) Η αναζήτηση ξεκινά από τη συνάρτηση στην οποία προκλήθηκε το σφάλμα και καταλήγει στη main (αν πριν δεν βρεθεί handler) Ένας handler είναι κατάλληλος να κάνει handle ένα exception αν ο τύπος του exception object ταιριάζει με τον τύπο εξαίρεσης που ο handler μπορεί να διαχειριστεί. Αν βρεθεί κατάλληλος handler, τότε εκτελείται ο κώδικάς του, διαφορετικά το πρόγραμμα τερματίζεται.

6 try – catch Η κλήση της μεθόδου η εκτέλεση της οποίας ενδέχεται να προκαλέσει μία εξαίρεση τοποθετείται εντός του μπλοκ εντολών try. Χειρισμός Εξαιρέσεων try { //κώδικας που μπορεί να //προκαλέσει εξαίρεση } catch(MyException1 mye1) { // … // … } catch(MyException2 mye2) { // … // … } finally { // … // …} try { //κώδικας που μπορεί να //προκαλέσει εξαίρεση } catch(MyException1 mye1) { // … // … } catch(MyException2 mye2) { // … // … } finally { // … // …} Το μπλοκ catch περιέχει εντολές που θα διαχειριστούν την εξαίρεση που προκλήθηκε. finally: μπλοκ εντολών που ακολουθεί των catch μπλοκ και περιέχει κώδικα που εκτελείται είτε συμβεί εξαίρεση είτε όχι

7 Συνήθεις Εξαιρέσεις NullPointerException : Προσπέλαση αντικειμένου null IllegalArgumentException : Λάθος τύπου ορίσματα ArrayIndexOutOfBoundsException : Εκτός ορίων πίνακα ArithmeticException : Διαίρεση με το 0 FileNotFoundException : Το αρχείο δεν βρέθηκε στο δίσκο

8 Πλεονεκτήματα Χειρισμού Εξαιρέσεων Διαχωρισμός κώδικα για αναγνώριση λαθών από τον «κανονικό» κώδικα Ικανότητα διαχείρισης της εξαίρεσης ακολουθώντας τη στοίβα κλήσης μεθόδων Δυνατότητα χειρισμού μίας εξαίρεσης με διαφορετικούς τρόπους Πολλά catch μπλοκ μπορούν να αναφέρονται στο ίδιο try μπλοκ Υψηλότερα οι ειδικότερες εξαιρέσεις στον κώδικα Δυνατότητα δημιουργίας νέων κλάσεων εξαιρέσεων

9 Μετατροπή Αντικειμένων Η μετατροπή αντικειμένων (type casting) είναι χρήσιμη όταν θέλουμε να διαχειριστούμε ένα αντικείμενο ως διαφορετικού του ενός τύπου Μετατροπές προς τα πάνω (upcasting) Πάντα επιτρεπτές Γίνονται με απλή ανάθεση Μετατροπές προς τα κάτω (downcasting) Δεν είναι πάντα επιτρεπτές Γίνονται με χρήση cast τελεστή Μπορεί να γίνει κανονικά η μεταγλώττιση (αφού το cast ίσως επιτρέπεται), αλλά να παραχθεί runtime error

10 Παράδειγμα

11 Είσοδος / Έξοδος (I/O) Η Java χρησιμοποιεί ροές (streams) για να αναπαραστήσει πηγές εισόδου ή προορισμούς εξόδου (π.χ. αρχεία στο δίσκο, άλλα προγράμματα). Ροή: ακολουθία από δεδομένα (απλά bytes μέχρι σύνθετα αντικείμενα). Είσοδος / Έξοδος σε αρχεία δίσκου

12 Ροές Εισόδου / Εξόδου Ροές Εισόδου (Input Streams) Διαβάζουν ένα «τεμάχιο» πληροφορίας τη φορά Ροές Εξόδου (Output Streams) Γράφουν ένα «τεμάχιο» πληροφορίας τη φορά

13 Τύποι Ροών (1/2) Byte Streams: Ι/Ο αυθαίρετου τύπου δεδομένων Character Streams: I/O χαρακτήρων Buffered Streams : χρήση δομής buffer για αποδοτικότερη αλληλεπίδραση Scanning and Formatting: για formatted κείμενο

14 Τύποι Ροών (2/2) I/O from the command line Standard Stream Input: πληκτρολόγιο Output: οθόνη Console Data Streams: για primitive data types και String δυαδικής μορφής Object Streams: για οποιουδήποτε τύπου αντικείμενα

15 Byte Streams Ροές που διαχειρίζονται χαμηλού επιπέδου δεδομένα Συνήθεις ροές byte FileInputStream/ FileOutputStream Όλοι οι υπόλοιποι τύποι ροών βασίζονται στις ροές byte.

16 Ι/Ο από αρχεία δίσκου Οι ροές δεν υποστηρίζουν όλες τις επιθυμητές αλληλεπιδράσεις με τα αρχεία που βρίσκονται στο δίσκο File: χειρισμός αρχείων ανεξαρτήτου πλατφόρμας και OS Random Access File: υποστηρίζει μη- ακολουθιακή προσπέλαση στα αρχεία

17 Χρόνος Εκτέλεσης Γενικά, ο χρόνος εκτέλεσης ενός java προγράμματος αναμένεται μεγαλύτερος ενός ισοδύναμου σε κάποια άλλη γλώσσα προγραμματισμού (όχι όμως και ο χρόνος ανάπτυξης ) Αιτία: Ο μεταγλωττισμένος για μία μηχανή κώδικας είναι εν γένει ταχύτερος από τον κώδικα που εκτελείται από έναν interpreter. Βελτίωση: Just-In-Time μεταγλώττιση

18 Κάποια Τελευταία Σχόλια… Πώς προέκυψε ο όρος “bytecode”; Επειδή ουσιαστικά αποτελεί μία binary αναπαράσταση του προγράμματος προορισμένη να εκτελεστεί από τη JVM (software) και όχι από το hardware. Σε τι γλώσσα είναι γραμμένη η Java; Οι περισσότεροι compilers (π.χ. της Sun) για Java είναι πλέον γραμμένοι σε Java, αν και αρχικά ως βάση χρησιμοποιήθηκαν οι γλώσσες C/C++. Σε ότι αφορά τις JVM ακόμα και σήμερα χρησιμοποιούν C++ (όχι όμως αποκλειστικά), κυρίως για λόγους απόδοσης. Ακόμα και JVMs της Sun!

19 C++ vs. Java C++JAVA Cout<<“Answer:”<<answer;System.out.println("Answer: “ + answer); cin>>ch;ch=System.in.read(); void main()public static void main(String[] args) int main(int argc,char** argv)public static void main(String[] args) const int MAX=10;final int MAX=10; char* str;String str; int* scores=new int[5];int[] scores=new int[5]; delete scores; ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ

20 Εργαλεία Ανάπτυξης Eclipse (open source) NetBeans (open source) JDeveloper (Oracle) Visual J++ (Microsoft) …

21 Προτεινόμενες Πηγές Exceptions, http://java.sun.com/docs/books/tutorial/essential/excepti ons/index.html http://java.sun.com/docs/books/tutorial/essential/excepti ons/index.html Input/Output, http://java.sun.com/docs/books/tutorial/essential/io/ http://java.sun.com/docs/books/tutorial/essential/io/ Type casting, http://www.janeg.ca/scjp/oper/cast.html http://www.janeg.ca/scjp/oper/cast.html

22 Ερωτήσεις ?


Κατέβασμα ppt "Εισαγωγή στη JAVΑ (μέρος Β’) Βασίλης Παπαταξιάρχης Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής."

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


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