Upload
doandien
View
219
Download
0
Embed Size (px)
Citation preview
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Nikolas [email protected]
Διαχείριση Δικτύων
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εισαγωγική Διάλεξη Java
http://scan.di.uoa.gr | Page 2 | 24/04/2015
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Τεχνολογία Java Collections & Generics Διαχείριση σφαλμάτων Ροές Δεδομένων Εργαλεία Παραδείγματα Παρουσίαση Datasets Εργασίας
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (1/6)
http://scan.di.uoa.gr | Page 3 | 24/04/2015
Βασικές αρχές αντικειμενοστραφούς μοντέλου Τα βασικά στοιχεία του αντικειμενοστραφούς μοντέλου της Java: Αντικείμενα (Objects) Κλάσεις (Classes) Κληρονομικότητα(Inheritance) Διεπαφές (Interfaces)
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (2/6)
http://scan.di.uoa.gr | Page 4 | 24/04/2015
Αντικείμενα (Objects) Σύμφωνα με τον αντικειμενοστραφή προγραμματισμό ένα πρόγραμμα αποτελείται από αντικείμενα τα οποία εμπεριέχουν δεδομένα (data-‐members) που μέσω αυτών ανταλλάσσεται πληροφορία και έτσι ολοκληρώνεται ο σκοπός του προγράμματος
Τα αντικείμενα ακόμα και στον πραγματικό κόσμο έχουν δύο χαρακτηριστικά (Π.χ. Αντικείμενο: Σκύλος) Κατάσταση (Π.χ. Κατάσταση: Όνομα, χρώμα, τρίχωμα) Συμπεριφορά (Π.χ. Συμπεριφορά: Γάβγισμα, κούνημα ουράς)
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (3/6)
http://scan.di.uoa.gr | Page 5 | 24/04/2015
Κλάσεις (Classes) Όπως και στον πραγματικό κόσμο μπορείτε να βρείτε αντικείμενα που ανήκουν στην ίδια κατηγορία. Π.χ. Μια εταιρία ηλεκτρονικών υπολογιστών κατασκευάζει laptops, μερικά από αυτά είναι πανομοιότυπα και άλλα όχι.
Έτσι ο κώδικας που ορίζει ένα αντικείμενο λέγεται κλάση και χρησιμοποιείται στην κατασκευή αντικειμένων (instances)
Το αντικείμενο είναι μια οντότητα στη μνήμη που περιέχει δεδομένα. Αντίθετα η κλάση είναι απλώς ένα πρότυπο για την δημιουργία αντικειμένων. Είναι ο τύπος δεδομένων των αντικειμένων
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (4/6)
http://scan.di.uoa.gr | Page 6 | 24/04/2015
Κληρονομικότητα (Inheritance) Διαφορετικά είδη από αντικείμενα συχνά έχουν ένα ποσοστό ομοιότητας
Π.χ. Mountain Bike Road Bike
Και τα δυο αντικείμενα μοιράζονται κοινά χαρακτηριστικά του ποδήλατου (πετάλια, ταχύτητες, φρένα και άλλα)
Αλλά έχουν επιπλέον δυνατότητες. Το ένα είναι σαφώς καλύτερο στο βουνό ενώ το άλλο απευθύνεται για δρόμο
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (5/6)
http://scan.di.uoa.gr | Page 7 | 24/04/2015
Διεπαφές (Interfaces) Τα αντικείμενα προσδιορίζουν την αλληλεπίδραση τους με τον έξω κόσμο μέσω μεθόδων (συναρτήσεων) που διαθέτουν
Μια διεπαφή αποτελεί μια ομάδα σχετικών μεθόδων με κενό σώμα. Έτσι η συμπεριφορά ενός αντικειμένου μπορεί να καθοριστεί από μια διεπαφή.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
http://scan.di.uoa.gr | Page 8 | 24/04/2015
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;
@Overridevoid changeGear(int newValue) gear = newValue; @Overridevoid speedUp(int increment) speed = speed + increment; @Overridevoid applyBrakes(int decrement) speed = speed -‐ decrement;
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό (6/6) Διεπαφές (Interfaces)
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Τεχνολογία Java (1/4)
http://scan.di.uoa.gr | Page 9 | 24/04/2015
Η Java αποτελεί υψηλού επιπέδου αντικειμενοστραφής γλώσσα προγραμματισμού. Διαθέτει παρόμοιο συντακτικό όπως αυτό της C++
Java Virtual Machine (JVM) JVM is an abstract computing machine, όπως ένας πραγματικός υπολογιστής που διαθέτει σύνολο εντολών και χειρίζεται περιοχές μνήμης σε πραγματικό χρόνο
Τα προγράμματα στην Java δομούνται σε ξεχωριστά .java αρχεία και αυτά μεταγλωττίζονται σε .class αρχεία
Το JVM αντιλαμβάνεται μόνο .class αρχεία, τα οποία περιέχουν JVM εντολές (bytecode)
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Τεχνολογία Java (2/4)
http://scan.di.uoa.gr | Page 10 | 24/04/2015
Java Virtual Machine (JVM) Αποτελείται από τρείς βασικές ενότητες
Specification (Περιγράφει τι μπορεί να κάνει) Implementation (Η εφαρμογή των απαιτήσεων του JVM) Runtime instance (Εκτελεί τον εκτελέσιμο κώδικα σε μορφή bytecode)
Ακολουθεί τις παρακάτω διαδικασίες Loads code Verifies code Executes code Provides Runtime environment
Εξαρτάται από το λειτουργικό σύστημα που χρησιμοποιούμε.Επιτρέπει το ίδιο .class αρχείο να μπορεί να εκτελεστεί σε οποιοδήποτε περιβάλλον.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Τεχνολογία Java (3/4)
http://scan.di.uoa.gr | Page 11 | 24/04/2015
Java Virtual Machine (JVM) Stack
Όπως και στη γλώσσα προγραμματισμού C κρατά τις τοπικές μεταβλητές και επιστροφές και παραμέτρους μεθόδων
Αυτό το κάνει μέσω τον frames που αποτελούν το ενδιάμεσο επίπεδο αποθήκευσης
Heap Η heap είναι η run time περιοχή μνήμης που αποθηκεύονται όλα τα στιγμιότυπα κλάσεων και πινάκων
Java API Τέλος, η τεχνολογία της Java μας παρέχει και ένα σύνολο βιβλιοθηκών (Java Application Programming Interface (Java API)) με έτοιμο κώδικα που παρέχει χρήσιμη λειτουργικότητα για τις εφαρμογές μας
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Τεχνολογία Java (4/4)
http://scan.di.uoa.gr | Page 12 | 24/04/2015
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Collections & Generics (1/5)
http://scan.di.uoa.gr | Page 13 | 24/04/2015
Τι είναι ένα Collection? Είναι μια ομάδα (unit) αντικειμένων και αποτελεί μια οντότητα
Το Collection περιέχουν ένα framework Παρέχει μια αρχιτεκτονική για να αποθηκεύσει και να διαχειριστεί την ομάδα των αντικειμένων
Πιο αναλυτικά ένα Collection framework περιλαμβάνει Interfaces: Για να διαχειριστούμε collection που διαθέτουν διαφορετικές υλοποιήσεις
Classes: Περιλαμβάνουν υλοποιημένες κλάσεις των Interfaces Algorithms: Έτοιμος κώδικας μεθόδων για χρήση όπως αλγόριθμοι αναζήτησης, ταξινόμησης κ.α.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Collections & Generics (2/5)
http://scan.di.uoa.gr | Page 14 | 24/04/2015
Διαφορετικά είδη collection interfaces συνιστούν μια ιεραρχία και καθορίζουν διαφορετικούς τύπους
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Collections & Generics (3/5)
http://scan.di.uoa.gr | Page 15 | 24/04/2015
Ποιο συχνή χρήση Collections είναι αυτή των general-‐purpose implementations Set -‐> HashSet, TreeSet, LinkedHashSet List -‐> ArrayList, LinkedList Map -‐> HashMap, TreeMap, LinkedHashMap
Κάθε μια από τις κλάσεις παρέχει υλοποίηση όλων των μεθόδων που έχουν συμφωνηθεί στο interface. Δεν είναι thread-‐safe Παρέχουν iterators για προσπέλαση στοιχείων Είναι Serializable και υποστηρίζουν την clone().
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Collections & Generics (4/5)
http://scan.di.uoa.gr | Page 16 | 24/04/2015
Bulk operations containsAll(): ελέγχουμε αν ένα collection περιέχει όλα τα στοιχεία ενός άλλου
addAll(): «συνενώνει» δυο collections removeAll(): διώχνει τα στοιχεία από ένα collection που εμφανίζονται σε ένα άλλο (διαφορά συνόλων)
retainAll(): η αντίστροφη διαδικασία από το removeAll Clear(): αδειάζουμε ένα collection από τα στοιχεία του
toArray() Μετατροπή των στοιχείων ενός collection σε πίνακα από αντικείμενα
Collection<String> c;String[] a = (String[]) c.toArray(new String[c.size()]);
etc,
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Collections & Generics (5/5)
http://scan.di.uoa.gr | Page 17 | 24/04/2015
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();
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Διαχείριση Σφαλμάτων (1/5)
http://scan.di.uoa.gr | Page 18 | 24/04/2015
Σφάλματα Τα σφάλματα (bugs) που κατηγοριοποιούνται σε
Λογικά λάθη του προγραμματιστή Λάθη σχεδιασμού Λάθη σε εισόδους δεδομένων Λάθος υλικού Έλεγχοι και εξωγενείς παράγοντες
Σε αυτές τις περιπτώσεις η Java δίνει τη δυνατότητα στον προγραμματιστή να χρησιμοποιήσει εξαιρέσεις(exceptions)
Αυτές χωρίζονται σε δύο κατηγορίες Οι ελεγχόμενες εξαιρέσεις (checked) Μη ελεγχόμενες εξαιρέσεις (unchecked)
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Διαχείριση Σφαλμάτων (2/5)
http://scan.di.uoa.gr | Page 19 | 24/04/2015
Όλες οι εξαιρέσεις προέρχονται από την υπερκλάσηjava.lang.Throwable
Checked exceptions Ορίζουν exceptional conditions όπως ότι μια εφαρμογή θα πρέπει να κάνει recover
Υπόκεινται στο “Catch or Specify Requirement”, μιας και το πρόγραμμα μας θα πρέπει να διαθέτει handlers για να τα κάνει catch και να δώσει προς τον χρήστη κάποιο διαγνωστικό μήνυμα.
Όλα τα exceptions θεωρούνται checked, εκτός από τα unchecked Error Runtime
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Διαχείριση Σφαλμάτων (3/5)
http://scan.di.uoa.gr | Page 20 | 24/04/2015
Unchecked exceptions Αυτές οι εξαιρέσεις χωρίζονται σε
Errors: Ορίζουν exceptional conditions που οφείλονται σε εξωτερικούς παράγοντες όπως η αστοχία στο hardware
Δεν υπόκεινται στο “Catch or Specify Requirement” και το πιο πιθανό είναι να τυπωθεί το stack trace μέχρι το σημείο που συνέβη το exception και το πρόγραμμα μας να τερματίσει.
Runtime exceptions: Ορίζουν exceptional conditions που οφείλονται σε λογικά λάθη του προγραμματιστή.
Το πιο δημοφηλές exception σε αυτή την κατηγορία είναι το NullPointerException!!
Δεν υπόκεινται στο “Catch or Specify Requirement”
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Διαχείριση Σφαλμάτων (4/5)
http://scan.di.uoa.gr | Page 21 | 24/04/2015
Κατά την εκτέλεση ενός προγράμματος όταν συμβεί σφάλμα δημιουργείται ένα αντικείμενο (exception object) στο runtime system
Το exception αντικείμενο περιέχει πληροφορίες για το είδος του σφάλματος που συνέβη, την κατάσταση του προγράμματος μας τη στιγμή του exception κ.α…
To runtime system ψάχνει για κάποιο handler (try-‐catch). Η αναζήτηση ξεκινά ιεραρχικά από την τρέχουσα συνάρτηση και φτάνει μέχρι την main.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Διαχείριση Σφαλμάτων (5/5)
http://scan.di.uoa.gr | Page 22 | 24/04/2015
Η Java μας παρέχει τρία exception handler components. Τα try, catch, και finally blocks μας επιτρέπουν να ορίσουμε τον δικό μας exception handler.try
code catch (ExceptionType name)
System.err.println(.....);....
catch (ExceptionType name)
System.err.println(.....);....
finally .....
Εδώ περιέχεται ο κώδικας που υπάρχει η πιθανότητα να κάνει throw exception
Εδώ περιέχεται ο κώδικας που θα κληθεί να καλεστεί
με το exception
Το finally block εκτελείται πάντα, είτε συμβεί exception είτε όχι. Συνήθως γράφουμε σ’ αυτό clean up κώδικα.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Ροές Δεδομένων (1/5)
http://scan.di.uoa.gr | Page 23 | 24/04/2015
Μια ροή είναι είτε μια πηγή είτε ένας προορισμός από bytes
Η πηγή και ο προορισμός των ροών περιλαμβάνει αρχεία στο δίσκο, συσκευές, άλλα προγράμματα...
Δύο βασικές κατηγορίες Ροές εισόδου: μπορείτε μόνο να διαβάσετε Ροές εξόδου: μπορείτε μόνο να γράψετε
Η Java υποστηρίζει ένα σύνολο από τύπους δεδομένων που περνούν σαν ροές όπως bytes, primitive τύπους δεδομένων, αντικείμενα.
Η βιβλιοθήκη java.io περιλαβάνει όλες οι κλάσεις για τις ροές δεδομένων.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Ροές Δεδομένων (2/5)
http://scan.di.uoa.gr | Page 24 | 24/04/2015
Ροές τύπου Bytes Εκτελούν μεταφορά δεδομένων σε 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();;
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Ροές Δεδομένων (3/5)
http://scan.di.uoa.gr | Page 25 | 24/04/2015
Πέρα από τις ροές τύπου Bytes και υπάρχουν και οι ροές τύπου χαρακτήρων
Η Java παρέχει δύο κλάσεις γενικού σκοπού για τη διασύνδεση των ροών τύπου byte και των ροών χαρακτήρων
InputStreamReader και OutputStreamWriter χρησιμοποιούνται για να δημιουργήσουν ροές χαρακτήρων όταν δεν υπάρχουν έτοιμες ροές τύπου byte που να σας εξυπηρετούν.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Ροές Δεδομένων (4/5)
http://scan.di.uoa.gr | Page 26 | 5/20/2014
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();;
Ροές Δεδομένων με ενδιάμεση μνήμη
Οι κλάσεις BufferedInputStreamκαι BufferedOutputStream χειρίζονται ροές bytes με ενδιάμεση μνήμη.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Ροές Δεδομένων (5/5)
http://scan.di.uoa.gr | Page 27 | 24/04/2015
Βασική Είσοδος: System.in Βασική Έξοδος: System.out Βασική Έξοδος Λαθών: System.err
Η ροή System.in είναι μια ροή τύπου byte και δεν περιέχει τη λειτουργικότητα μιας ροής χαρακτήρων. Για να διαβάσετε από τη γραμμή εντολών εντολών θα πρέπει να χρησιμοποιήσετε την κλάση InputStreamReader InputStreamReader in = new InputStreamReader(System.in);
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εργαλεία (1/2)
http://scan.di.uoa.gr | Page 28 | 24/04/2015
Για να γράψετε, να μεταγλωττίσετε και να εκτελέσετε ένα πρόγραμμα σε γλώσσα προγραμματισμού 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.
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Εργαλεία (2/2)
http://scan.di.uoa.gr | Page 29 | 24/04/2015
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Παραδείγματα (1/3)
http://scan.di.uoa.gr | Page 30 | 24/04/2015
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Παραδείγματα (2/3)
http://scan.di.uoa.gr | Page 31 | 24/04/2015
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Παραδείγματα (3/3)
http://scan.di.uoa.gr | Page 32 | 24/04/2015
NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS
Datasets Εργασίας (1/1)
http://scan.di.uoa.gr | Page 33 | 24/04/2015