Ειδικά Θέματα Προγραμματισμού Ενότητα 3: Τύποι Δεδομένων - Τελεστές Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Τύποι Δεδομένων Τελεστές
Σκοποί ενότητας Σε αυτή την παρουσίαση θα ασχοληθούμε με τους τύπους δεδομένων, τους πίνακες και με τις εξαιρέσεις, ύλη που αντιστοιχεί στα κεφάλαια 3 και 4 του βιβλίου. Λόγω του γεγονότος ότι το μάθημα απευθύνεται σε άτομα με κάποια εμπειρία στον προγραμματισμό, κάποια θέματα του βιβλίου θεωρούνται γνωστά κι έχουν παραληφθεί στην παρουσίαση. 5
Περιεχόμενα ενότητας (1/2) Τύποι δεδομένων. Πίνακες. Παράδειγμα χρήσης πίνακα σε μεθόδους. Εξαιρέσεις. Παράδειγμα δημιουργίας και έγερσης εξαίρεσης. Try-catch-finally blocks. 6
Περιεχόμενα ενότητας (2/2) Παράδειγμα χειρισμού εξαίρεσης. Εντολή finally. Μεταβίβαση εξαίρεσης στον επόμενο χειριστή. 7
Τύποι Δεδομένων Πίνακας 1. Πρωτογενείς τύποι δεδομένων: int, float, double, chars, πηγή: ο διδάσκων (2015). 8
Πίνακες (1/8) Οι πίνακες στην JAVA δηλώνονται ως εξής: <Τύπος ή κλάση> [ ] <μεταβλητή>; <Τύπος ή κλάση> <μεταβλητή>[ ]; 9
Παραδείγματα: Πίνακες (2/8) int[ ] nums; Byte buff[ ]; float matrix [ ] [ ]; //Διδιάστατος πίνακας A a[ ]; B[ ] a; 10
Πίνακες (3/8) Ο πίνακας δεν δημιουργείται κατά την δήλωσή του (δεν έχουμε προσδιορίσει το μέγεθός του). 11
Πίνακες (4/8) Για την κατασκευή του πίνακα κάνουμε τα εξής: <μεταβλητή πίνακα> = new <τύπος ή κλάση> [ <μέγεθος> ]; 12
Παραδείγματα. Πίνακες (5/8) int [ ] a; a = new int[200]; Byte buff [ ] = new byte[1024]; A a = new A[4]; 13
Πίνακες (6/8) Αρχικοποίηση δισδιάστατου πίνακα. float matrix [ ][ ]; matrix = new float[30][40]; 14
Πίνακες (7/8) Αναφορά σε στοιχείο του πίνακα: a[2] = 5; matrix[0][8] = (float) (buff[19] + buff[25]); Για έναν πίνακας είναι μεγέθους Ν, οι έγκυροι δείκτες έχουν τιμές κυμαίνονται από 0 έως Ν-1. Οι μέθοδοι επιτρέπεται να παίρνουν σαν όρισμα ένα πίνακα ή να επιστρέφουν ένα πίνακα. 15
Πίνακες (8/8) Ένας πίνακας είναι ένα αντικείμενο. Η κλάση του δημιουργείται αυτόματα από την γλώσσα και είναι υποκλάση της Array. Κάθε πίνακας περιέχει μια μεταβλητή-μέλος length που επιστρέφει το μέγεθός του πίνακα. 16
Παράδειγμα χρήσης πίνακα σε μεθόδους int[] give_ints() { int I[ ] = new int[3]; I[0] = I[1] = I[2] = 7; return I; } ή int give_ints() [ ] {...} void get_ints(int[ ] i) {i[0] = i[1]+i[2]; } ή void get_ints(int i[ ]) {... } Παράδειγμα length μεταβλητής for (int i=0; i<a.length; i++) { System.out.println(a [ i ]); } 17
Εξαιρέσεις (1/2) Όταν σε ένα πρόγραμμα συμβεί κάποιο λάθος, ο κώδικας εγείρει (throw) μία εξαίρεση. Στη Java οι εξαιρέσεις εκπροσωπούνται από αντικείμενα της κλάσης Exception ή υποκλάσεών της. Υποκλάσεις της Exception είτε προϋπάρχουν (πχ, IOException, NullPointerException) είτε ορίζονται από τον προγραμματιστή. 18
Εξαιρέσεις (2/2) Η έγερση εξαίρεσης θα έχει ως αποτέλεσμα τον τερματισμό του thread στο οποίο συνέβη το σφάλμα και θα τυπωθεί κάποιο μήνυμα. Σε προγράμματα μπορούν να ορισθούν χειριστές εξαιρέσεων (exception handlers). Εξαιρέσεις προκαλούνται από το runtime system, όπως στην περίπτωση διαίρεσης με το μηδέν. 19
Παράδειγμα δημιουργίας και έγερσης εξαίρεσης 20
Try-catch-finally blocks (1/2) Χρησιμοποιούνται για τη διαχείριση εξαιρέσεων. try blocks: περιέχουν κώδικα που μπορεί να προκαλέσει εξαιρέσεις (συναρτήσεις που έχουν δηλωθεί ότι εγείρουν εξαιρέσεις). catch blocs: εμπεριέχουν κώδικα που εκτελείται όταν εντοπιστεί η εξαίρεση που προορίζονται να εντοπίσουν. 21
Try-catch-finally blocks (2/2) Σε ένα try block μπορούν να αντιστοιχούν πολλά catch blocks αναλόγως του πλήθους των εξαιρέσεων που μπορούν να εμφανιστούν στον κώδικα του try block. Αν η εξαίρεση που διαχειρίζεται ένα catch block είναι υπερκλάση άλλων εξαιρέσεων, το block παράλληλα διαχειρίζεται και όλες τις εξαιρέσεις υποκλάσεις. finally block: Περιέχει κώδικα που θα εκτελεστεί ανεξαρτήτως του αν θα παρουσιαστεί εξαίρεση ή όχι. 22
Παράδειγμα χειρισμού εξαίρεσης try { p.a = 10;} catch (NullPointerException e) {println( Το p ήταν null );} catch (Exception e) {println( Κάποιοι μήνυμα σφάλματος );} finally {Αυτός ο κώδικας εκτελείται πάντα.} 23
Εντολή Finally Η finally εκτελείται ακόμα και όταν το try block περιέχει τις εντολές return, break, continue ή throw. Θα τυπώνει πάντα το μήνυμα finally αλλά το μήνυμα after try μόνο όταν a 10. 24
Μεταβίβαση εξαίρεσης στον επόμενο χειριστή Για να περαστεί ο χειρισμός της εξαίρεσης στον επόμενο, exception handler, χρησιμοποιούμε την throw και για αντικείμενο εξαίρεσης την εξαίρεση που πιάσαμε. Έπειτα από το throw η εκτέλεση του τρέχοντος κώδικα χειρισμού διακόπτεται οριστικά. 25
Βιβλιογραφία 1. Java προγραμματισμός, Όγδοη έκδοση, Deitel Paul J., Deitel Harvey M., Εκδόσεις Γκιούρδας Μ.. 2. Απόλυτη Java, Savitch, Εκδόσεις ΙΩΝ, 2008. 3. Πλήρες εγχειρίδιο της Java 6, Lemay Cadenhead, Εκδόσεις Γκιούρδας Μ., Αθήνα 2007. 26
Τέλος Ενότητας