ιάλεξη 3 Τµήµα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισµικού Χειµερινό Εξάµηνο ιάλεξη 3

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

NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS. Διαχείριση Δικτύων. Nikolas Bompetsis

Διάλεξη 4. Νήματα (Threads) στην Java Συγχρονισμός Εξωτερικές διεργασίες Collections & Generics Διαχείριση σφαλμάτων στην Java

Αρχεία και Ρεύματα. Αρχεία

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

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

Προγραµµατισµός ΙΙ Java 2

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

Week. 6: Java Collections

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

Διαδικτυακές Εφαρμογές Ενότητα 4: Streams

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

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

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

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αρχεία

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

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

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

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

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

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

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

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

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

Week 9: Input / Output

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

Προγραµµατισµός ΙΙ Java 2

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

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

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 12 Σεπτεµβρίου 2002

Generics και ArrayLists

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

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

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

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

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

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

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

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

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

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις


Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Χωρική Βάση δεδοµένων Autocad

Εργασία Μαθήματος Αξία: 40% του τελικού σας βαθμού Ανάθεση: Παράδοση:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Βασικές Έννοιες Δοµών Δεδοµένων

scanf() scanf() stdin scanf() printf() int float double %lf float

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

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

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

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

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

Transcript:

ιάλεξη 3 Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces - Serializable, Comparable Properties & NetworkInterface Regular expressions ιάλεξη 3 1

Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces Serializable, Comparable Properties & Network Interface Regular Expressions ιάλεξη 3 2

Εξωτερικές διεργασίες Η Java σχεδιάστηκε µε σκοπό να παρέχει στις εφαρµογές ανεξαρτησία από το περιβάλλον εκτέλεσης. Όµως, υπάρχουν περιπτώσεις που θέλουµε να εκτελέσουµε µια εφαρµογή που να σχετίζεται µε το λειτουργικό σύστηµα που βρισκόµαστε. Η µεθοδολογία που ακολουθούµε είναι να δηµιουργούµε µια νέα διεργασία µέσα στην εφαρµοφή µας που θα εκτελεί platform dependent ενέργειες. Η κλάση Runtime αποτελεί µια διεπαφή µε το περιβάλλον που τρέχει η εφαρµογή µας getruntime(): µας επιστρέφει ένα αντικείµενο τύπου Runtime για την ίδια µας την εφαρµογή exec(string[] cmdandαrgs): δηµιουργεί νέα διεργασία που εκτελεί την εντολή µε παραµέτρους που της περνάµε σαν όρισµα Process p = Runtime.getRuntime().exec("/bin/ls"); Προσοχή!! Η java ανακατευθύνει τα stdin, stdout, stderr. Για να αλληλεπιδράσουµε µε την διεργασία πρέπει να χρησιµοποιήσουµε τις µεθόδους getinputstream(), getoutputstream() και geterrorstream() που µας παρέχει το αντικείµενο τύπου Process. ιάλεξη 3 3

Παράδειγµα Εκτελούµε την ls που βρίσκεται στον κατάλογο /bin Η getinputstream µας παρέχει πρόσβαση στο output stream της διεργασίας παιδιού. Τα δεδοµένα αυτά αποτελούν input stream για την main Κάνουµε buffered το input stream και διαβάζουµε γραµµή-γραµµή τα δεδοµένα Κλείνουµε πάντα τις ροές!! ιάλεξη 3 4

Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces Serializable, Comparable Properties & Network Interface Regular Expressions ιάλεξη 3 5

Collections Ως Collections ορίζονται αντικείµενα που οµαδοποιούν άλλα αντικείµενα σε µια οντότητα. Τα Collections µας παρέχουν επιπλέον ένα framework για να αποθηκεύσουµε και να διαχειριστούµε τα αντικείµενα αυτά. Ένα collection framework περιλαµβάνει: Interfaces: διεπαφή για να χειριστούµε/προσπελαύνουµε µε τον ίδιο τρόπο collections που διαθέτουν διαφορετικές λεπτοµέρειες υλοποίησης Κλάσεις: περιλαµβάνουν υλοποιηµένες κλάσεις των Interfaces. Συνιστούν βιβλιοθήκη για τις εφαρµογές µας. Αλγορίθµους: αλγόριθµοι όπως η αναζήτηση, ταξινόµηση αντικειµένων υλοποιούνται µε διαφορετικό τρόπο ως µέθοδοι των διαφόρων κλάσεων. Οι αλγόριθµοι αυτοί είναι πολυµορφικοί µιας και η ίδια µέθοδος διαφέρει ανάλογα µε το collection interface. Μερικά από τα χαρακτηριστικά και προτερήµατα από την χρήση collection framework: Έτοιµος κώδικας για χρήση από τις εφαρµογές µας Data structures εµπλουτισµένα µε αλγόριθµους για γρήγορη προσπέλαση Ενιαίο API για χρήση, ανεξάρτητο από τις λεπτοµέρειες υλοποίησης ιάλεξη 3 6

Collection interfaces ιαφορετικά είδη collection interfaces συνιστούν µια ιεραρχία και καθορίζουν διαφορετικούς τύπους αποθήκευσης και χειρισµού αντικειµένων. Collection: είναι η ρίζα στην ιεραρχία των collections και δεν υλοποιείται από κάποια κλάση. Χρησιµοποιείται συνήθως για την επικοινωνία collections µε γενικό τρόπο. Set: ορίζει µια συλογή στην οποία δεν µπορούν να υπάρχουν διπλότυπα αντικείµενα. List: συνιστά µια συλλογή από αντικείµενα που εµφανίζουν µια σειρά. Μπορούµε να προσπελάσουµε ένα αντικείµενο µε χρήση κάποιου index. Queue: collection που εµφανίζει τις ιδιότητες της ουράς. Map: collection που αντιστοιχεί κάποιο αντικείµενο µε ένα κλειδί. SortedSet: διαθέτει τις ίδιες ιδιότητες µε το Set, µόνο που χειρίζεται τα αντικείµενα µε σειρά. SortedMap: διαθέτει τις ίδιες ιδιότητες µε το Map, καθώς επίσης τα κλειδιά είναι ταξινοµηµένα. ιάλεξη 3 7

Collection implementation Η υλοποίηση των Collection interfaces µπορεί να γίνει µε διαφορετικούς τρόπους. Οι υπάρχουσες κατηγορίες συνοψίζονται παρακάτω: General-purpose implementations σε αυτή την κατηγορία βρίσκουµε τις πιο συχνά χρησιµοποιούµενες κλάσεις για collections. Special-purpose implementations κλάσεις για ειδικό σκοπό εµφανίζονται στην κατηγορία αυτή που παρουσιάζουν πολλές φορές µη αποδοτική συµπεριφορά. Concurrent implementations η υλοποίηση που παρέχεται εξασφαλίζει την ταυτόχρονη προσπέλαση των αντικειµένων αυτής της κατηγορίας από πολυνηµατικά περιβάλλοντα (java.util.concurrent package). Wrapper implementations χρησιµοποιούνται σε συνδυασµό µε general-purpose υλοποιήσεις για να παρέχουν επιπλέον λειτουργικότητα. Convenience implementations collections που είναι σχεδιασµένα µε static συµπεριφορά (πχ singleton sets). Abstract implementations παρέχουν abstract κλάσεις για custom υλοποίηση από τον χρήστη. Πιο συχνή είναι η χρήση general-purpose implementations και συγκεκριµένα Set HashSet, TreeSet, LinkedHashSet List ArrayList, LinkedList Map HashMap, TreeMap, LinkedHashMap Κάθε µια από τις κλάσεις παρέχει υλοποίηση όλων των µεθόδων που έχουν συµφωνηθεί στο interface. εν είναι thread-safe. Παρέχουν iterators για προσπέλαση στοιχείων. Είναι Serializable και υποστηρίζουν την clone(). ιάλεξη 3 8

Προσπέλαση ενός Collection Υπάρχουν δυο τρόποι για να προσπελάσει κανείς κάποιο collection αντικείµενο, και κατά συνέπεια τα στοιχεία που το αποτελούν, ανεξάρτητα από τις λεπτοµέρειες υλοποίησης: Με χρήση της δοµής ελέγχου for-each Με χρήση Iterator. Η δοµή ελέγχου for-each µας επιτρέπει να προσπελάσουµε µε συνέπεια το σύνολο των στοιχείων ενός collection (ή ενός πίνακα array). for (Object o : collection) System.out.println(o); Ο Iterator είναι ένα interface που µας δίνει µεθόδους για να προσπελάσουµε ένα collection καθώς και να διαγράψουµε στοιχεία του. Κάθε Collection υλοποιεί τη µέθοδο Iterator() µας επιστρέφει ένα αντικείµενο τύπου Iterator. public interface Iterator<E> { boolean hasnext(); E next(); void remove(); //optional static void filter(collection<?> c) { for (Iterator<?> it = c.iterator(); it.hasnext(); ) if (!cond(it.next())) it.remove(); ιάλεξη 3 9

Άλλα χρήσιµα χαρακτηριστικά... Bulk operations containsall(): ελέγχουµε αν ένα collection περιέχει όλα τα στοιχεία ενός άλλου. addall(): «συνενώνει» δυο collections. removeall(): διώχνει τα στοιχεία από ένα collection που εµφανίζονται σε ένα άλλο (διαφορά συνόλων). retainall(): η αντίστροφη διαδικασία από το removeall. Clear(): αδειάζουµε ένα collection από τα στοιχεία του. size() Μας επιστρέφει το πλήθος των στοιχείων που διατηρεί το collection toarray() Μέθοδος που µας επιτρέπει να µετατρέψουµε τα στοιχεία ενός collection σε πίνακα από αντικείµενα Collection<String> c Object[] a = c.toarray(); ή και String[] a = (String[]) c.toarray(new String[c.size()]); ιάλεξη 3 10

Generics Χαρακτηριστικό που εµφανίστηκε στην Java SE 5. Μας παρέχει type-safety at compile time και κατά συνέπεια να αποφεύγουµε τον κίνδυνο για ClassCastException κατά την εκτέλεση. Τα generics είναι άµεσα συνδεδεµένα µε την χρήση Collections. List myintlist = new LinkedList(); myintlist.add(new Integer(0)); Integer x = (Integer) myintlist.iterator().next(); List<Integer> myintlist = new LinkedList<Integer>(); myintlist.add(new Integer(0)); Integer x = myintlist.iterator().next(); Πως δουλεύει ο compiler µε την ύπαρξη generics (Type Erasure) Σβήνει τα generics για να µείνουν raw types, για παράδειγµα ArrayList<String> ArrayList. Εισάγει type casting στα κατάλληλα σηµεία µέσα στον κώδικα. Τα generics µας παρέχουν µια ευχέρεια για το συντακτικό της γλώσσας και δεν κρατούν πληροφορίες για τον τύπο αντικειµένων κατά την διάρκεια της εκτέλεσης. ιάλεξη 3 11

Η χρήση των Generics µέσα από παραδείγµατα Set setofrawtype = new HashSet<String>(); setofrawtype = new HashSet<Integer>(); Set<Object> setofanytype = new HashSet<Object>(); setofanytype.add("abc"); setofanytype.add(new Float(3.0f)); Set<?> setofunknowntype = new LinkedHashSet<String>(); setofunknowntype = new LinkedHashSet<Integer>(); Set<String> setofstring = new HashSet<String>(); setofstring = new LinkedHashSet<String>(); Set<Object> SetOfObject = new HashSet<String>(); //compiler error ιάλεξη 3 12

Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces Serializable, Comparable Properties & Network Interface Regular Expressions ιάλεξη 3 13

Σφάλµατα στην Java (1/2) Τα σφάλµατα (Bugs) είναι το συνηθέστερο πρόβληµα ενός προγράµµατος Προγραµµατιστικά λάθη Λάθη σχεδιασµού Λάθος είσοδος δεδοµένων Αστοχία υλικού Μη ελεγχόµενοι, εξωγενείς παράγοντες Κάθε προγραµµατιστής πρέπει να διαχειρίζεται τις καταστάσεις: Στην C: Κάθε συνάρτηση γυρνά κάποια τιµή ενώ παράλληλα η perror τυπώνει το σφάλµα που συνέβη. Στην Java: Χρήση εξαιρέσεων (exceptions). Υπάρχουν δύο είδη, οι ελεγχόµενες εξαιρέσεις (checked) και µη ελεγχόµενες (unchecked). ιάλεξη 3 14

Σφάλµατα στην Java (2/2) Κατά την εκτέλεση ενός προγράµµατος όταν συµβεί σφάλµα σε κάποια συνάρτηση που εκτελείται, αυτή δηµιουργεί ένα αντικείµενο (exception object) και το παραδίδει στο runtime system (κάνει throw ένα exception). Ένα exception αντικείµενο περιέχει πληροφορίες για το είδος του σφάλµατος που συνέβη, την κατάσταση του προγράµµατος µας τη στιγµή του exception κ.α... To runtime system ψάχνει για κάποιο handler ορισµένο από τον προγραµµατιστή που διαχειρίζεται αυτό το σφάλµα (κάνει catch το exception). Η αναζήτηση ξεκινά ιεραρχικά από την τρέχουσα συνάρτηση που συνέβη το σφάλµα και φτάνει µέχρι την main. Throws exception method3() Forwards exception method2() Call stack trace Catch exception method1() ιάλεξη 3 main() 15

Κατηγορίες exceptions Η Java µας παρέχει τριών ειδών exceptions. Όλα έχουν ως υπερκλάση την java.lang.throwable Checked exceptions: Error: Ορίζουν exceptional conditions όπου µια εφαρµογή θα πρέπει να κάνει recover. Υπόκεινται στο Catch or Specify Requirement, αφού και το πρόγραµµα µας θα πρέπει να διαθέτει handlers για να τα κάνει catch και να δώσει προς τον χρήστη κάποιο διαγνωστικό µήνυµα. Όλα τα exceptions θεωρούνται checked, εκτός από αυτά που ανήκουν στις κλάσεις Error, RunTimeException και τις αντίστοιχες υποκλάσεις τους Ορίζουν exceptional conditions που οφείλονται σε εξωτερικούς από την εφαρµογή παράγοντες και η εφαρµογή συνήθως δεν µπορεί να προβλέψει και να κάνει recover. Συνήθως οι λόγοι είναι αστοχία στο hardware. εν υπόκεινται στο Catch or Specify Requirement και το πιο πιθανό είναι να τυπωθεί το stack trace µέχρι το σηµείο που συνέβη το exception και το πρόγραµµα µας να τερµατίσει. Runtime exceptions/unchecked exceptions: Ορίζουν exceptional conditions που οφείλονται σε λογικά λάθη του προγραµµατιστή. Το πιο δηµοφιλές exception σε αυτή την κατηγορία είναι το NullPointerException!! εν υπόκεινται στο Catch or Specify Requirement και ανήκουν στην κλάση RunTimeException ιάλεξη 3 16

Exception handler Εάν δεν θέλουµε να διαχειριστούµε κάποιο/α ExceptionType, τότε εισάγουµε στο header της εκάστοτε συνάρτησης την δήλωση throw ExceptionType Η Java µας παρέχει τρία exception handler components. Τα try, catch, και finally blocks µας επιτρέπουν να ορίσουµε τον δικό µας exception handler. try { code catch (ExceptionType name) { System.err.println(...);... catch (ExceptionType name) {... finally { System.err.println(...);... Περικλείω µέσα στο try block κοµµάτι της εφαρµογής µου που υπάρχει πιθανότητα να γίνει throw ένα exception. Κάθε catch block ορίζει έναν exception handler, για ένα δεδοµένο τύπο exception. Συνήθως τυπώνουν διαγνωστικό µήνυµα προς το χρήστη. Το finally block εκτελείται πάντα, είτε συµβεί exception είτε όχι. Συνήθως γράφουµε σ αυτό clean up κώδικα. ιάλεξη 3 17

Η ανώτερη ιεραρχικά κλάση διαχειρίζεται και τα 2 πιθανά σφάλµατα. Το σφάλµα θα το διαχειριστεί η καλούσα µέθοδος. Γιατί θα έχουµε πρόβληµα εδώ; Χρήση 2 διαδοχικών exceptions για να καλύψουµε τις περιπτώσεις απώλειας του αρχείου και σφάλµατος εγγραφής. ιάλεξη 3 18

ιαχειριζόµαστε το exception όπως το ζητά η αντίστοιχη µέθοδος. Η χρήση του stack trace που µας δίνει κάθε exception επιτρέπει την αποσφαλµάτωση του προγράµµατός µας. Η διαδικασία είναι η εξής: 1.Αναζητούµε την πρώτη δική µας κλήση που δηµιούργησε πρόβληµα (από πάνω προς τα κάτω). 2.Ανατρέχουµε στην αντίστοιχη γραµµή του κώδικά µας. Το σηµείο αυτό έχει πρόβληµα. 3.Ανάλογα µε το πρόβληµα ελέγχουµε την είσοδο ή την έξοδο της εντολής. Σφάλµα στην γραµµή 53! Μπορούσε να µην εµφανιστεί αν δεν ζητούσαµε εκτύπωση. Σφάλµα στην γραµµή 58! Προέρχεται από λάθος κλήση στην γραµµή 38. ιάλεξη 3 19

Αποσφαλµάτωση µε χρήση Exceptions - Πλεονεκτήµατα Η κλάση exceptions προσφέρει την δυνατότητα εκτύπωσης των κλήσεων που οδήγησαν στο συγκεκριµένο σφάλµα Μέθοδος printstacktrace(); Τυπώνονται οι διαδοχικές κλήσεις µεθόδων που οδήγησαν στο συγκεκριµένο σφάλµα. ΕΝ ΕΙΝΑΙ ΚΑΛΗ ΠΡΑΚΤΙΚΗ: Να χρησιµοποιείται η ανώτερη ιεραρχικά κλάση για την διαχείριση όλων των σφαλµάτων (δηλαδή η Exception). Να τοποθετείται throws στην µέθοδο main. Μερικά από τα προτερήµατα που µας παρέχει η χρήση exceptions: ιαχωρισµός του κώδικα που κάνει exception handling από τον κώδικα της εφαρµογής µας. ιαχείριση ενός exception υψηλότερα στο call stack, απλά µε την χρήση της δήλωσης throws. Κατηγοριοποίηση και χειρισµός των exceptions σε οµάδες λόγω της ύπαρξης ιεραρχίας κλάσεων (πχ τα exceptions FileNotFoundException και InterruptedIOException µπορούν να αντικατασταθούν από το IOException) ιάλεξη 3 20

Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces Serializable, Comparable Properties & Network Interface Regular Expressions ιάλεξη 4 21

Ροές - Γενικά Μια ροή είναι είτε µια πηγή είτε ένας προορισµός από bytes. Η πηγή και ο προορισµός των ροών περιλαµβάνει αρχεία στο δίσκο, συσκευές, άλλα προγράµµατα... ύο βασικές κατηγορίες Ροές εισόδου: µπορείτε µόνο να διαβάσετε Ροές εξόδου: µπορείτε µόνο να γράψετε Η Java υποστηρίζει ένα σύνολο από τύπους δεδοµένων που περνούν σαν ροές όπως bytes, primitive τύπους δεδοµένων, αντικείµενα. Μερικές ροές απλά περνούν δεδοµένα από την πηγή στον προορισµό. Άλλες τα µετασχηµατίζουν κατάλληλα και τα χρησιµοποιούν. Η βιβλιοθήκη java.io περιλαβάνει όλες οι κλάσεις για τις ροές δεδοµένων. Ροές εισόδου MyProg Ροές εξόδου ιάλεξη 4 22

Ροές δεδοµένων τύπου byte Είναι σηµαντικό να κλείνουµε τις ροές δεδοµένων όταν δεν τις χρειαζόµαστε άλλο. Η finally µας το εγγυάται. Εκτελούν µεταφορά δεδοµένων σε 8-bit bytes. Η Java µας παρέχει τις κλάσεις InputStream και OutputStream και τις αντίστοιχες υποκλάσεις τους για να διαχειριστούµε ροές τύπου byte. Οι ροές δεδοµένων για αρχεία ανήκουν στην κατηγορία των byte streams. Σηµείωση: ΕΝ χρησιµοποιούµε τα byte streams κατευθείαν, διότι παρέχουν Ι/Ο λειτουργικότητα πολύ χαµηλού επιπέδου. Όλες οι άλλες πιο πολύπλοκες ροές βασίζονται στα byte streams. import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; public class ExampleBytes { public static void main(string[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("test.txt"); out = new FileOutputStream( output.txt"); int c; while ((c = in.read())!= -1) { out.write(c); finally { if (in!= null) { in.close(); if (out!= null) { out.close(); ιάλεξη 4 23

Ροές χαρακτήρων Η Java χρησιµοποιεί Unicode για την αναπαράσταση συµβολοσειρών και χαρακτήρων. Οι ρόες χαρακτήρων είναι 16-bit εκδόσεις των byte streams που επιτρέπουν την αντίστοιχη αντιµετώπιση στους χαρακτήρες. Ένα πρόγραµµα που χρησιµοποιεί ροές χαρακτήρων αντί για ροές bytes µετατρέπει αυτόµατα τα δεδοµένα εισόδου/εξόδου στην τοπική αναπαράσταση. Οι ρόες χαρακτήρων κληρονοµούν τις κλάσεις Reader και Writer. Για χειρισµό αρχείων, οι ροές χαρακτήρων που χρησιµοποιούνται είναι οι FileReader και FileWriter. import java.io.filereader; import java.io.filewriter; import java.io.ioexception; public class ExampleCharacters { public static void main(string[] args) throws IOException { FileReader inputstream = null; FileWriter outputstream = null; try { inputstream = new FileReader( test.txt"); outputstream = new FileWriter( output.txt"); int c; while ((c = inputstream.read())!= -1) { outputstream.write(c); finally { if (inputstream!= null) { inputstream.close(); if (outputstream!= null) { outputstream.close(); ιάλεξη 4 24

ιασύνδεση ροών τύπου byte και ροών χαρακτήρων Οι ροές χαρακτήρων µπορούν να χαρακτηριστούν και σαν wrappers για ροές τύπου byte. H FileReader χρησιµοποιεί την FileInputStream και η FileWriter την FileOutputStream αντίστοιχα. Η Java παρέχει δύο κλάσεις γενικού σκοπού για τη διασύνδεση των ροών τύπου byte και των ροών χαρακτήρων, όπου δεν υπάρχει. InputStreamReader και OutputStreamWriter χρησιµοποιούνται για να δηµιουργήσουν ροές χαρακτήρων όταν δεν υπάρχουν έτοιµες ροές τύπου byte που να σας εξυπηρετούν. Παράδειγµα χρήσης των κλάσεων αυτών είναι στη διαχείριση εισόδου/εξόδου µε τη χρήση sockets! ιάλεξη 4 25

Ροές δεδοµένων µε ενδιάµεση µνήµη Οι πράξεις εισόδου/εξόδου είναι πιο αποδοτικές όταν γίνονται σε µεγάλα τµήµατα δεδοµένων, µιας και η προσπέλαση στο δίσκο γίνεται για µεγαλύτερο όγκο δεδοµένων. Οι ροές δεδοµένων µε ενδιάµεση µνήµη προσφέρουν αυτή τη δυνατότητα. Οι ροές δεδοµένων µε ενδιάµεση µνήµη χρησιµοποιούν τις ροές τύπου byte ή τις ροές χαρακτήρων. Οι κλάσεις BufferedInputStream και BufferedOutputStream χειρίζονται ροές bytes µε ενδιάµεση µνήµη. Οι κλάσεις BufferedReader και BufferedWriter χειρίζονται ροές χαρακτήρων µε ενδιάµεση µνήµη. import java.io.filereader; import java.io.filewriter; import java.io.bufferedreader; import java.io.printwriter; import java.io.ioexception; public class ExampleLines { public static void main(string[] args) throws IOException { BufferedReader inputstream = null; BufferedWriter outputstream = null; try { inputstream = new BufferedReader(new FileReader( test.txt")); outputstream = new BufferedWriter(new FileWriter( output.txt")); String l; while ((l = inputstream.readline())!= null) { outputstream.write(l); finally { if (inputstream!= null) { inputstream.close(); if (outputstream!= null) { outputstream.close(); ιάλεξη 4 Τµήµα Πληροφορικής 26 wrapping

Είδοδος/έξοδος από/προς το χρήστη Βασική είσοδος: System.in Βασική έξοδος: System.out Βασική έξοδος λαθών: System.err Σηµείωση: Οι ροές System.out και System.err έχουν οριστεί σαν αντικείµενα τύπου PrintStream, µε αποτέλεσµα να παρέχουν τη λειτουργικότητα µιας ροής χαρακτήρων. Η ροή System.in είναι µια ροή τύπου byte και δεν παρέχει τη λειτουργικότητα µιας ροής χαρακτήρων. Για να γίνει αυτό χρησιµοποιείστε στην κλάση InputStreamReader. InputStreamReader in = new InputStreamReader(System.in); ιάλεξη 4 27

Ροές δεδοµένων τύπου data Χρησιµοποιούνται για είσοδο/έξοδο των βασικών τύπων δεδοµένων της Java (boolean, char, byte, short, int, long, float, double) καθώς και String. DataInputStream, DataOutputStream Data type Output method Input method Sample value double DataOutputStream.writeDouble DataOutputStream.readDouble 55.45 int DataOutputStream.writeInt DataOutputStream.writeInt 11 String DataOutputStream.writeString DataOutputStream.writeString Hello Οι ρόες αυτές βασίζονται σε υπάρχουσες ροές τύπου byte/χαρακτήρων DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(aFile))); DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(aFile))); ιάλεξη 4 28

Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces Serializable, Comparable Properties & Network Interface Regular Expressions ιάλεξη 4 29

Serializable H Java παρέχει έναν µηχανισµό έτσι ώστε να µετατρέπει ένα αντικείµενο σε µια ακολουθία από bytes (object serialization). Από την στιγµή που ένα αντικείµενο γραφτεί σε ένα αρχείο, µπορεί να διαβαστεί και να ξαναφτιαχτεί σαν αντικείµενο στην µνήµη (deserialized). Οι κλάσεις ObjectInputStream και ObjectOutputStream παρέχουν µεθόδους κατάλληλες για το serializing and deserializing ενός αντικειµένου. ObjectOutputStream: public final void writeobject(object x) throws IOException: κάνει serialize ένα αντικείµενο και το στέλνει στο output stream. ObjectInputStream: public final Object readobject() throws IOException, ClassNotFoundException: διαβάζει το επόµενο αντικείµενο από το input stream και το µετατρέπει σε αντικείµενο. Επειδή επιστρέφει Object πρεπει να γίνει το κατάλληλο type casting Ιδιαίτερα σηµαντικό είναι το γεγονός ότι ένα αντικείµενο µπορεί να γίνει serialized σε µια πλατφόρµα και deserialized ώστε να ανακτηθεί από µια άλλη. ιάλεξη 4 30

Η ArrayList κάνει Implement το Serializable Κάνουµε serialize τη λίστα και τη στέλνουµε στο αρχείο person.txt Για να επιτύχουµε ένα αντικείµενο µιας κλάσης να γίνει serialized θα πρέπει: ιαβάζουµε το person.txt και τα περιεχόµενα του τα µετατρέπουµε σαν µια λίστα από αντικείµενα Η κλάση να κάνει implement το interface java.io.serializable. Όλα τα πεδία της κλάσης να είναι serializable. Εάν όχι, τότε πρέπει να γίνουν marked ως transient.

Comparable Τα Collections υλοποιούν την ταξινόµηση αντικειµένων µέσα από την µέθοδο Collections.sort(). Το ερώτηµα είναι πως µπορώ να συγκρίνω αντικείµενα µιας κλάσης ώστε να µπορώ να τα ταξινοµήσω? Ένα σύνολο κλάσεων όπως η String, Number (µαζί µε τις υποκλάσεις της), Date κάνουν implement το interface Comparable και υλοποιούν µε τον δικό τους τρόπο την µοναδική µέθοδο compareto() που διαθέτει. public interface Comparable<T> { public int compareto(t o); Η compareto() συγκρίνει το αντικείµενο που την καλεί µε το αντικείµενο που δεχεται σαν παράµετρο και επιστρέφει έναν αρνητικό, µηδέν ή θετικό ακέραιο ανάλογα αν η παράµετρος ήταν µικρότερη, ίση ή µεγαλύτερη από το τρέχον αντικείµενο. ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 32

Παράδειγµα Τι τυπώνει το πρόγραµµα? Θυµάστε την χρησιµότητα των µεθόδων equals() και tostring()? Υλοποιούµε την δική µας compareto() ΑΠΑΝΤΗΣH: Karl Ng, Tom Rich, Jeff Smith, John Smith Η String διαθέτει την δικής της compareto() ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 33

Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces Serializable, Comparable Properties & Network Interface Regular Expressions ιάλεξη 4 34

Properties Στην Java χρησιµοποιούµε properties file για να αποθηκεύουµε configuration data. Ένα τυπικό config.properties αρχείο µπορεί να περιέχει µέσα του dbuser=root dbpassword=root database=mysql keyname=keyvalue H Java µας παρέχει την κλάση Properties για να µπορούµε να διαβάζουµε properties αρχεία µέσα από ένα ορισµένο interface Properties prop = new Properties(); try { prop.load(new FileInputStream("config.properties")); System.out.println(prop.getProperty("database")); System.out.println(prop.getProperty("dbuser")); System.out.println(prop.getProperty("dbpassword")); catch (IOException ex) { ex.printstacktrace(); ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 35

Network interfaces Τα network interfaces είναι οι διεπαφές του υπολογιστή µας µε το δίκτυο. Οι διεπαφές αυτές µπορεί να είναι φυσικές (κάρτα δικτύου) ή και λογισµικό που προσοµοιώνει µια διεπαφή. Χαρακτηριστικό παράδειγµα αποτελεί το loopback (lo) µε IP διεύθυνση 127.0.0.1 Μια φυσική διεπαφή µπορεί να διαµορφωθεί έτσι ώστε να περιλαµβάνει µια σειρά από sub-interfaces (λογικά interfaces). Με αυτό τον τρόπο πετυχαίνω ένα φυσικό interface να ανήκει σε πολλά υποδίκτυα και να διαθέτει πολλές IP ταυτόχρονα. #add subinterface and assign ip sudo ifconfig eth0:0 192.168.1.253 netmask 255.255.255.0 #turn up the interface sudo ifconfig eth0:0 up #check!! ifconfig Για να µείνει το configuration µόνιµα, καταχωρούµε τα στοιχεία για το subinterface στο /etc/network/interfaces auto eth0:0 iface eth0:0 inet static address 192.168.1.253 netmask 255.255.255.0 ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 36

java.net.networkinterface Η Java µας παρέχει την δυνατότητα µέσα από την κλάση NetworkInterface να µπορούµε να προσπελάσουµε τόσο ένα φυσικό network interface (µαζί µε τα sub-interfaces του) όσο και το loopback. Ακόµη, µπορούµε να ορίσουµε εµείς ρητά ποιό interface θα χρησιµοποιηθεί για την αποστολή/λήψη δεδοµένων µέσω socket σε µια client-server επικοινωνία. εν περιέχει public constructors αλλά µέσα από ένα σύνολο static µεθόδων µπορώ να λάβω τα διαθέσιµα interfaces της συσκευής και να τα χειριστώ ανάλογα Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); for (NetworkInterface netif : Collections.list(nets)) { out.printf("display name: %s\n", netif.getdisplayname()); out.printf("name: %s\n", netif.getname()); Enumeration<NetworkInterface> subifs = netif.getsubinterfaces(); for (NetworkInterface subif : Collections.list(subIfs)) { out.printf("\tsub Interface Display name: %s\n", subif.getdisplayname()); οut.printf("\tsub Interface Name: %s\n", subif.getname()); ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 37

Άλλες χρήσιµες µέθοδοι... getinetaddresses(): επιστρέφει όλες τις IP διευθύνσεις που διαθέτει το interface. getinterfaceaddresses(): µια λίστα από IP address, subnet mask και broadcast address για το συγκεκριµένο interface. isup(): ελέγχει άν ένα interface είναι up. isloopback(): ελέγχει αν το δεδοµένο interface είναι loopback interface. ispointtopoint(): ελέγχει αν το δεδοµένο interface είναι point-to-point interface. isvirtual(): ελέγχει αν το δεδοµένο interface είναι virtual interface (sub-interface). ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 38

Εξωτερικές διεργασίες Collections & Generics ιαχείριση σφαλµάτων στην Java Ροές εδοµένων Χρήσιµα interfaces Serializable, Comparable Properties & Network Interface Regular Expressions ιάλεξη 4 39

Regular Expressions Είναι ένας τρόπος για να ορίσω και να αναζητήσω patterns µέσα σε κείµενο (ή String). Παραδείγµατα χρήσης regular expressions που έχουµε συναντήσει: grep, sed, awk... Στην Java η βιβλιοθήκη java.util.regex µας παρέχει 3 κλάσεις για να ορίσουµε και να χειριστούµε regular expressions: Pattern, Matcher και PatternSyntaxException. Η κλάση Pattern µας βοηθά να δηµιουργήσουµε αντικείµενα που περιέχουν µέσα τους ένα pattern ορισµένο από τον χρήστη. Μέσα από τις static µεθόδους που έχουν οριστεί, δίνουµε σαν όρισµα ένα pattern και µας επιστρέφει ένα αντικείµενο τύπου Pattern. Η κλάση Matcher µας βοηθά στο να δηµιουργήσουµε αντικείµενα που µεταφράζουν τα patterns και να τα αναζητήσουν µέσα σε ένα κείµενο (ή και string). Η κλάση PatternSyntaxException ορίζει το exception που µπορεί να υπάρξει από την χρήση regular expressions. Ανήκει στην κατηγορία των unchecked exceptions και υποδηλώνει πως κάποιο σφάλαµα υπήρξε στην σύνταξη ενός regular expression pattern. ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 40

ιαβάζουµε από το πληκτρολόγιο το Pattern που θα ορίσει ο χρήστης και δηµιουργούµε αντικείµενο τύπου Pattern ιαβάζουµε από το πληκτρολόγιο το κείµενο όπου θα κάνουµε match το pattern Όσο το αντικείµενο matcher βρίσκει patterns µέσα στο κείµενο µας Τυπώνει το string του κειµένου που ταυτίζεται µε το pattern Τυπώνει τα σηµεία που ξεκινά και τελειώνει το pattern στην συγκεκριµένη επανάληψη Enter your regex: foo Enter input string to search: foofoofoo I found the text foo starting at index 0 and ending at index 3. I found the text foo starting at index 3 and ending at index 6. I found the text foo starting at index 6 and ending at index 9.

Regular Expression Constructs (1/5) Character Classes: δεν είναι κλάση!! Αποτελεί ένα τρόπο να δηµιουργήσουµε patterns από χαρακτήρες µέσα σε []. Enter your regex: [bcr]at Enter input string to search: bat I found the text "bat" starting at index 0 and ending at index 3. Enter your regex: [bcr]at Enter input string to search: hat No match found. ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 42

Regular Expression Constructs (2/5) Predefined Character Classes: µας παρέχει την δυνατότητα εισαγωγής συντοµεύσεων στα patterns. Enter your regex: \d Enter input string to search: 1 I found the text "1" starting at index 0 and ending at index 1. Enter your regex: [bcr]at Enter your regex: \D Enter input string to search: 1 No match found. ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 43

Regular Expression Constructs (3/5) Quantifiers: µας δίνει την δυνατότητα να εισάγουµε πληθικότητα στις εµφανίσεις των συµβόλων. Enter your regex: a? Enter input string to search: aaaaa I found the text "a" starting at index 0 and ending at index 1. I found the text "a" starting at index 1 and ending at index 2. I found the text "a" starting at index 2 and ending at index 3. I found the text "a" starting at index 3 and ending at index 4. I found the text "a" starting at index 4 and ending at index 5. I found the text "" starting at index 5 and ending at index 5. Enter your regex: a* Enter input string to search: aaaaa I found the text "aaaaa" starting at index 0 and ending at index 5. I found the text "" starting at index 5 and ending at index 5. Enter your regex: a+ Enter input string to search: aaaaa I found the text "aaaaa" starting at index 0 and ending at index 5. ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 44

Regular Expression Constructs (4/5) Capturing Groups: ορίζει ένα σύνολο χαρακτήρων σαν αδιαίρετο group µέσα σε (). Εφαρµόζεται σε συνδιασµό µε τα προηγούµενα constructs που έχουµε συναντήσει. Enter your regex: (dog){3 Enter input string to search: dogdogdogdogdogdog I found the text "dogdogdog" starting at index 0 and ending at index 9. I found the text "dogdogdog" starting at index 9 and ending at index 18. Enter your regex: dog{3 Enter input string to search: dogdogdogdogdogdog No match found. Enter your regex: [abc]{3 Enter input string to search: abccabaaaccbbbc I found the text "abc" starting at index 0 and ending at index 3. I found the text "cab" starting at index 3 and ending at index 6. I found the text "aaa" starting at index 6 and ending at index 9. I found the text "ccb" starting at index 9 and ending at index 12. I found the text "bbc" starting at index 12 and ending at index 15. ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 45

Regular Expression Constructs (5/5) Boundary matchers: θέτουν χαρακτηριστικά θέσης που θα βρίσκεται το pattern µέσα στο κείµενο. Enter your regex: ^dog$ Enter input string to search: dog I found the text "dog" starting at index 0 and ending at index 3. Enter your regex: ^dog$ Enter input string to search: dog No match found. Enter your regex: \s*dog$ Enter input string to search: dog I found the text dog" starting at index 0 and ending at index 15. Enter your regex: ^dog\w* Enter input string to search: dogblahblah I found the text "dogblahblah" starting at index 0 and ending at index 11. ιάλεξη 4 Τµήµα Πληροφορικής και Τηλεπικοινωνίων 46