Διαχείριση Δικτύων Nikolas Bompetsis nbompetsis@di.uoa.gr
Εισαγωγική Διάλεξη Java Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Τεχνολογία Java Collections & Generics Διαχείριση σφαλμάτων Ροές Δεδομένων Εργαλεία Παραδείγματα Παρουσίαση Datasets Εργασίας http://scan.di.uoa.gr Page 2 24/04/2015
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (1/6) Βασικές αρχές αντικειμενοστραφούς μοντέλου Τα βασικά στοιχεία του αντικειμενοστραφούς μοντέλου της Java: Αντικείμενα (Objects) Κλάσεις (Classes) Κληρονομικότητα(Inheritance) Διεπαφές (Interfaces) http://scan.di.uoa.gr Page 3 24/04/2015
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (2/6) Αντικείμενα (Objects) Σύμφωνα με τον αντικειμενοστραφή προγραμματισμό ένα πρόγραμμα αποτελείται από αντικείμενα τα οποία εμπεριέχουν δεδομένα (data- members) που μέσω αυτών ανταλλάσσεται πληροφορία και έτσι ολοκληρώνεται ο σκοπός του προγράμματος Τα αντικείμενα ακόμα και στον πραγματικό κόσμο έχουν δύο χαρακτηριστικά (Π.χ. Αντικείμενο: Σκύλος) Κατάσταση (Π.χ. Κατάσταση: Όνομα, χρώμα, τρίχωμα) Συμπεριφορά (Π.χ. Συμπεριφορά: Γάβγισμα, κούνημα ουράς) http://scan.di.uoa.gr Page 4 24/04/2015
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (3/6) Κλάσεις (Classes) Όπως και στον πραγματικό κόσμο μπορείτε να βρείτε αντικείμενα που ανήκουν στην ίδια κατηγορία. Π.χ. Μια εταιρία ηλεκτρονικών υπολογιστών κατασκευάζει laptops, μερικά από αυτά είναι πανομοιότυπα και άλλα όχι. Έτσι ο κώδικας που ορίζει ένα αντικείμενο λέγεται κλάση και χρησιμοποιείται στην κατασκευή αντικειμένων (instances) Το αντικείμενο είναι μια οντότητα στη μνήμη που περιέχει δεδομένα. Αντίθετα η κλάση είναι απλώς ένα πρότυπο για την δημιουργία αντικειμένων. Είναι ο τύπος δεδομένων των αντικειμένων http://scan.di.uoa.gr Page 5 24/04/2015
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (4/6) Κληρονομικότητα (Inheritance) Διαφορετικά είδη από αντικείμενα συχνά έχουν ένα ποσοστό ομοιότητας Π.χ. Mountain Bike Road Bike Και τα δυο αντικείμενα μοιράζονται κοινά χαρακτηριστικά του ποδήλατου (πετάλια, ταχύτητες, φρένα και άλλα) Αλλά έχουν επιπλέον δυνατότητες. Το ένα είναι σαφώς καλύτερο στο βουνό ενώ το άλλο απευθύνεται για δρόμο http://scan.di.uoa.gr Page 6 24/04/2015
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (5/6) Διεπαφές (Interfaces) Τα αντικείμενα προσδιορίζουν την αλληλεπίδραση τους με τον έξω κόσμο μέσω μεθόδων (συναρτήσεων) που διαθέτουν Μια διεπαφή αποτελεί μια ομάδα σχετικών μεθόδων με κενό σώμα. Έτσι η συμπεριφορά ενός αντικειμένου μπορεί να καθοριστεί από μια διεπαφή. http://scan.di.uoa.gr Page 7 24/04/2015
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (6/6) Διεπαφές (Interfaces) interface Bicycle { void changegear(int newvalue); void speedup(int increment); void applybrakes(int decrement); class BMXBicycle implements Bicycle { int cadence = 0; int speed = 0; int gear = 1; @Override void changegear(int newvalue) { gear = newvalue; @Override void speedup(int increment) { speed = speed + increment; @Override void applybrakes(int decrement) { speed = speed - decrement; http://scan.di.uoa.gr Page 8 24/04/2015
Τεχνολογία Java (1/4) Η Java αποτελεί υψηλού επιπέδου αντικειμενοστραφής γλώσσα προγραμματισμού. Διαθέτει παρόμοιο συντακτικό όπως αυτό της C++ Java Virtual Machine (JVM) JVM is an abstract computing machine, όπως ένας πραγματικός υπολογιστής που διαθέτει σύνολο εντολών και χειρίζεται περιοχές μνήμης σε πραγματικό χρόνο Τα προγράμματα στην Java δομούνται σε ξεχωριστά.java αρχεία και αυτά μεταγλωττίζονται σε.class αρχεία Το JVM αντιλαμβάνεται μόνο.class αρχεία, τα οποία περιέχουν JVM εντολές (bytecode) http://scan.di.uoa.gr Page 9 24/04/2015
Τεχνολογία Java (2/4) Java Virtual Machine (JVM) Αποτελείται από τρείς βασικές ενότητες Specification (Περιγράφει τι μπορεί να κάνει) Implementation (Η εφαρμογή των απαιτήσεων του JVM) Runtime instance (Εκτελεί τον εκτελέσιμο κώδικα σε μορφή bytecode) Ακολουθεί τις παρακάτω διαδικασίες Loads code Verifies code Executes code Provides Runtime environment Εξαρτάται από το λειτουργικό σύστημα που χρησιμοποιούμε. Επιτρέπει το ίδιο.class αρχείο να μπορεί να εκτελεστεί σε οποιοδήποτε περιβάλλον. http://scan.di.uoa.gr Page 10 24/04/2015
Τεχνολογία Java (3/4) Java Virtual Machine (JVM) Stack Όπως και στη γλώσσα προγραμματισμού C κρατά τις τοπικές μεταβλητές και επιστροφές και παραμέτρους μεθόδων Αυτό το κάνει μέσω τον frames που αποτελούν το ενδιάμεσο επίπεδο αποθήκευσης Heap Η heap είναι η run time περιοχή μνήμης που αποθηκεύονται όλα τα στιγμιότυπα κλάσεων και πινάκων Java API Τέλος, η τεχνολογία της Java μας παρέχει και ένα σύνολο βιβλιοθηκών (Java Application Programming Interface (Java API)) με έτοιμο κώδικα που παρέχει χρήσιμη λειτουργικότητα για τις εφαρμογές μας http://scan.di.uoa.gr Page 11 24/04/2015
Τεχνολογία Java (4/4) http://scan.di.uoa.gr Page 12 24/04/2015
Collections & Generics (1/5) Τι είναι ένα Collection? Είναι μια ομάδα (unit) αντικειμένων και αποτελεί μια οντότητα Το Collection περιέχουν ένα framework Παρέχει μια αρχιτεκτονική για να αποθηκεύσει και να διαχειριστεί την ομάδα των αντικειμένων Πιο αναλυτικά ένα Collection framework περιλαμβάνει Interfaces: Για να διαχειριστούμε collection που διαθέτουν διαφορετικές υλοποιήσεις Classes: Περιλαμβάνουν υλοποιημένες κλάσεις των Interfaces Algorithms: Έτοιμος κώδικας μεθόδων για χρήση όπως αλγόριθμοι αναζήτησης, ταξινόμησης κ.α. http://scan.di.uoa.gr Page 13 24/04/2015
Collections & Generics (2/5) Διαφορετικά είδη collection interfaces συνιστούν μια ιεραρχία και καθορίζουν διαφορετικούς τύπους http://scan.di.uoa.gr Page 14 24/04/2015
Collections & Generics (3/5) Ποιο συχνή χρήση Collections είναι αυτή των general- purpose implementations Set - > HashSet, TreeSet, LinkedHashSet List - > ArrayList, LinkedList Map - > HashMap, TreeMap, LinkedHashMap Κάθε μια από τις κλάσεις παρέχει υλοποίηση όλων των μεθόδων που έχουν συμφωνηθεί στο interface. Δεν είναι thread- safe Παρέχουν iterators για προσπέλαση στοιχείων Είναι Serializable και υποστηρίζουν την clone(). http://scan.di.uoa.gr Page 15 24/04/2015
Collections & Generics (4/5) Bulk operations containsall(): ελέγχουμε αν ένα collection περιέχει όλα τα στοιχεία ενός άλλου addall(): «συνενώνει» δυο collections removeall(): διώχνει τα στοιχεία από ένα collection που εμφανίζονται σε ένα άλλο (διαφορά συνόλων) retainall(): η αντίστροφη διαδικασία από το removeall Clear(): αδειάζουμε ένα collection από τα στοιχεία του toarray() Μετατροπή των στοιχείων ενός collection σε πίνακα από αντικείμενα etc, Collection<String> c; String[] a = (String[]) c.toarray(new String[c.size()]); http://scan.di.uoa.gr Page 16 24/04/2015
Collections & Generics (5/5) Generics Χαρακτηριστικό που εμφανίστηκε στην Java SE 5 H σημαντικότερη λειτουργία που μας παρέχουν είναι η 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(); http://scan.di.uoa.gr Page 17 24/04/2015
Διαχείριση Σφαλμάτων (1/5) Σφάλματα Τα σφάλματα (bugs) που κατηγοριοποιούνται σε Λογικά λάθη του προγραμματιστή Λάθη σχεδιασμού Λάθη σε εισόδους δεδομένων Λάθος υλικού Έλεγχοι και εξωγενείς παράγοντες Σε αυτές τις περιπτώσεις η Java δίνει τη δυνατότητα στον προγραμματιστή να χρησιμοποιήσει εξαιρέσεις(exceptions) Αυτές χωρίζονται σε δύο κατηγορίες Οι ελεγχόμενες εξαιρέσεις (checked) Μη ελεγχόμενες εξαιρέσεις (unchecked) http://scan.di.uoa.gr Page 18 24/04/2015
Διαχείριση Σφαλμάτων (2/5) Όλες οι εξαιρέσεις προέρχονται από την υπερκλάση java.lang.throwable Checked exceptions Ορίζουν exceptional conditions όπως ότι μια εφαρμογή θα πρέπει να κάνει recover Υπόκεινται στο Catch or Specify Requirement, μιας και το πρόγραμμα μας θα πρέπει να διαθέτει handlers για να τα κάνει catch και να δώσει προς τον χρήστη κάποιο διαγνωστικό μήνυμα. Όλα τα exceptions θεωρούνται checked, εκτός από τα unchecked Error Runtime http://scan.di.uoa.gr Page 19 24/04/2015
Διαχείριση Σφαλμάτων (3/5) Unchecked exceptions Αυτές οι εξαιρέσεις χωρίζονται σε Errors: Ορίζουν exceptional conditions που οφείλονται σε εξωτερικούς παράγοντες όπως η αστοχία στο hardware Δεν υπόκεινται στο Catch or Specify Requirement και το πιο πιθανό είναι να τυπωθεί το stack trace μέχρι το σημείο που συνέβη το exception και το πρόγραμμα μας να τερματίσει. Runtime exceptions: Ορίζουν exceptional conditions που οφείλονται σε λογικά λάθη του προγραμματιστή. Το πιο δημοφηλές exception σε αυτή την κατηγορία είναι το NullPointerException!! Δεν υπόκεινται στο Catch or Specify Requirement http://scan.di.uoa.gr Page 20 24/04/2015
Διαχείριση Σφαλμάτων (4/5) Κατά την εκτέλεση ενός προγράμματος όταν συμβεί σφάλμα δημιουργείται ένα αντικείμενο (exception object) στο runtime system Το exception αντικείμενο περιέχει πληροφορίες για το είδος του σφάλματος που συνέβη, την κατάσταση του προγράμματος μας τη στιγμή του exception κ.α To runtime system ψάχνει για κάποιο handler (try- catch). Η αναζήτηση ξεκινά ιεραρχικά από την τρέχουσα συνάρτηση και φτάνει μέχρι την main. http://scan.di.uoa.gr Page 21 24/04/2015
Διαχείριση Σφαλμάτων (5/5) Η Java μας παρέχει τρία exception handler components. Τα try, catch, και finally blocks μας επιτρέπουν να ορίσουμε τον δικό μας exception handler. try { Εδώ περιέχεται ο κώδικας που υπάρχει η πιθανότητα code να κάνει throw exception catch (ExceptionType name) { System.err.println(...);... Εδώ περιέχεται ο κώδικας που θα κληθεί να καλεστεί με το exception catch (ExceptionType name) { System.err.println(...);... finally {... Το finally block εκτελείται πάντα, είτε συμβεί exception είτε όχι. Συνήθως γράφουμε σ αυτό clean up κώδικα. http://scan.di.uoa.gr Page 22 24/04/2015
Ροές Δεδομένων (1/5) Μια ροή είναι είτε μια πηγή είτε ένας προορισμός από bytes Η πηγή και ο προορισμός των ροών περιλαμβάνει αρχεία στο δίσκο, συσκευές, άλλα προγράμματα... Δύο βασικές κατηγορίες Ροές εισόδου: μπορείτε μόνο να διαβάσετε Ροές εξόδου: μπορείτε μόνο να γράψετε Η Java υποστηρίζει ένα σύνολο από τύπους δεδομένων που περνούν σαν ροές όπως bytes, primitive τύπους δεδομένων, αντικείμενα. Η βιβλιοθήκη java.io περιλαβάνει όλες οι κλάσεις για τις ροές δεδομένων. http://scan.di.uoa.gr Page 23 24/04/2015
Ροές Δεδομένων (2/5) Ροές τύπου Bytes Εκτελούν μεταφορά δεδομένων σε 8- bit bytes. Η Java μας παρέχει τις κλάσεις InputStream και OutputStream και τις αντίστοιχες υποκλάσεις τους για να διαχειριστούμε ροές τύπου byte. Οι ροές δεδομένων για αρχεία 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) { ανήκουν στην κατηγορία των byte streams. out.write(c);; Σημείωση: ΔΕΝ χρησιμοποιούμε τα finally { if (in!= null) { byte streams κατευθείαν, διότι in.close();; παρέχουν Ι/Ο λειτουργικότητα πολύ if (out!= null) { χαμηλού επιπέδου. out.close();; Όλες οι άλλες πιο πολύπλοκες ροές βασίζονται στα byte streams. http://scan.di.uoa.gr Page 24 24/04/2015
Ροές Δεδομένων (3/5) Πέρα από τις ροές τύπου Bytes και υπάρχουν και οι ροές τύπου χαρακτήρων Η Java παρέχει δύο κλάσεις γενικού σκοπού για τη διασύνδεση των ροών τύπου byte και των ροών χαρακτήρων InputStreamReader και OutputStreamWriter χρησιμοποιούνται για να δημιουργήσουν ροές χαρακτήρων όταν δεν υπάρχουν έτοιμες ροές τύπου byte που να σας εξυπηρετούν. http://scan.di.uoa.gr Page 25 24/04/2015
Ροές Δεδομένων (4/5) Ροές Δεδομένων με ενδιάμεση μνήμη 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;; Οι κλάσεις BufferedInputStream και BufferedOutputStrea m χειρίζονται ροές 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) { bytes με ενδιάμεση inputstream.close();; μνήμη. if (outputstream!= null) { outputstream.close();; http://scan.di.uoa.gr Page 26 5/20/2014
Ροές Δεδομένων (5/5) Βασική Είσοδος: System.in Βασική Έξοδος: System.out Βασική Έξοδος Λαθών: System.err Η ροή System.in είναι μια ροή τύπου byte και δεν περιέχει τη λειτουργικότητα μιας ροής χαρακτήρων. Για να διαβάσετε από τη γραμμή εντολών εντολών θα πρέπει να χρησιμοποιήσετε την κλάση InputStreamReader InputStreamReader in = new InputStreamReader(System.in); http://scan.di.uoa.gr Page 27 24/04/2015
Εργαλεία (1/2) Για να γράψετε, να μεταγλωττίσετε και να εκτελέσετε ένα πρόγραμμα σε γλώσσα προγραμματισμού Java πρέπει αν έχετε τα: Java Development Kit (JDK): http://www.oracle.com/technetwork/java/javase/downloads/index.html Καλύτερα για την εργασία του μαθήματος να χρησιμοποιείτε JDK 1.7 Ένα κειμενογράφο ή ενα IDE Notepad++, gedit, geany NetBean, Eclipse, intellij IDEA Frameworks: Maven, Spring, etc. Μεταγλώτιση και εκτέλεση από την γραμμή εντολών javac cp path_to_libraries:path_to_classes sourcepath path_to_sources java cp path_to_libraries:path_to_classes ExcecutableName arg1 arg2 Σε περιβάλλον Linux το διαχωριστικό ανάμεσα στις βιβλιοθήκες είναι : ενώ το ; των Windows. http://scan.di.uoa.gr Page 28 24/04/2015
Εργαλεία (2/2) http://scan.di.uoa.gr Page 29 24/04/2015
Παραδείγματα (1/3) http://scan.di.uoa.gr Page 30 24/04/2015
Παραδείγματα (2/3) http://scan.di.uoa.gr Page 31 24/04/2015
Παραδείγματα (3/3) http://scan.di.uoa.gr Page 32 24/04/2015
Datasets Εργασίας (1/1) http://scan.di.uoa.gr Page 33 24/04/2015