Εισαγωγή στη JAV Α ( μέρος Α’ )
description
Transcript of Εισαγωγή στη JAV Α ( μέρος Α’ )
Εισαγωγή στη JAVΑ(μέρος Α’)
Βασίλης Παπαταξιάρχης{[email protected]}
Μάθημα: Αντικειμενοστραφής ΠρογραμματισμόςΔιδάσκουσα: Ιζαμπώ Καράλη
Τμήμα Πληροφορικής και ΤηλεπικοινωνιώνΕθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών
Βασικά Σημεία
Εισαγωγικές Πληροφορίες για τη γλώσσα Java
Τεχνολογία Java
Δομή ενός Java προγράμματος
Χαρακτηριστικά της γλώσσας Java
Επιπλέον Δυνατότητες
Διαφορές με C++
Ιστορικά Στοιχεία Η Java δημιουργήθηκε το 1991 από τον
James Gosling κ.ά. στη Sun Microsystems. Αρχικά, ονομάστηκε Oak. Αρχικός στόχος ήταν η ανάπτυξη μίας
γλώσσας που θα ήταν ανεξάρτητη πλατφόρμας, δηλ. εύκολα θα «έπαιζε» παντού.
Λόγω της ανάπτυξης του Διαδικτύου, η Java βρήκε πρόσφορο έδαφος για ανάπτυξη εφαρμογών.
Τι είναι η Java;
Με τη Java μπορείς να κάνεις ότι και με
μία τυπική διαδικαστική γλώσσα.
Βασίζεται στο αντικειμενοστραφές
μοντέλο ανάλυσης και σχεδιασμού.
Έχει πολλές ομοιότητες στο συντακτικό
της με τη C++.
Αρχιτεκτονική Java
Ιδιαιτερότητα:“Compile once, run everywhere”
Μεταφερσιμότητα
Τα αρχεία πηγαίου κώδικα Java (.java)
μεταγλωττίζονται σε αρχεία bytecode
(.class) και όχι σε κώδικα μηχανής (machine
code).
Τα bytecode αρχεία είναι ανεξάρτητα
μηχανής και μπορούν να εκτελεστούν από
μία Java Virtual Machine (JVM).
Υπάρχουν JVM σχεδόν για κάθε πλατφόρμα. Windows, Linux, Solaris, κ.ά.
Δομή Προγραμμάτων
Οι κλάσεις οργανώνονται σε .java αρχεία
Σε κάθε αρχείο πρέπει να υπάρχει το πολύ μία
public κλάση
Συνήθης πρακτική: 1 κλάση ανά αρχείο
Το όνομα του αρχείου ταυτίζεται με το
όνομα της public κλάσης που περιέχει
Java 2 Platform
H/W - OS
Java APIs
JVM
Java Program Αποτελείται από 2 μέρη: Java Virtual Machine Java APIs
Java APIs Βιβλιοθήκες που παρέχουν βασικές συναρτήσεις
έτοιμες για χρήση 3 εκδόσεις:
• Java 2 Standard Edition (J2SE): desktop και δικτυακές εφαρμογές
• Java 2 Enterprise Edition (J2EE): εταιρικές εφαρμογές• Java 2 Micro Edition (J2ME): χρήση σε κινητές συσκευές
Java Virtual Machine
«Εκτελεί» μεταγλωττισμένα Java προγράμματα που
ονομάζονται bytecode αρχεία.
Τα bytecode αρχεία είναι ανεξάρτητα πλατφόρμας και
μπορούν να εκτελεστούν από οποιονδήποτε υπολογιστή
διαθέτει μία JVM.
Η JVM φορτώνει τις κλάσεις που χρειάζονται για να
εκτελεστεί το Java πρόγραμμα (class loader).
Η JVM «επικυρώνει» (verifies) την εγκυρότητα των
bytecode αρχείων πριν τα εκτελέσει (bytecode
verifier).
JDK - JRE
Java Development Kit (JDK) Περιβάλλον ανάπτυξης εφαρμογών στη γλώσσα Java
Περιέχει JVM και Java βιβλιοθήκες
Εργαλεία, όπως jar και javadoc
Java Runtime Environment (JRE) Υποσύνολο του JDK
Ουσιαστικά περιέχει μία υλοποίηση της JVM με σκοπό
τη δυνατότητα εκτέλεσης προγραμμάτων Java.
Αρχεία Java
Αρχεία Java .java : πηγαίος κώδικας (source file) .class : bytecode αρχείο (παράγεται από compiler) .jar : σύνολα σχετικών κλάσεων
Μεταγλωττίζουμε τα .java αρχεία που περιέχουν κλάσεις.
Το μεταγλωττισμένο αρχείο .class που εκτελούμε θα πρέπει να περιέχει ακριβώς μία main συνάρτηση (από εκεί ξεκινά η εκτέλεση)
Φάσεις Εκτέλεσης
Φάση Εργαλείο Έξοδος
WRITE Text editor Αρχείο .java
COMPILE Java compilerΑρχείο .class (bytecode)
RUN Java interpreterΈξοδος
προγράμματος
Hello.java javac Hello.class java
Source codejava
compilerbytecode file interpreter (VM)
Hello World
Βήμα 1
Βήμα 2 javac HelloWorld.java
Βήμα 3 java HelloWorld
Τύποι Δεδομένων στη Java (1/2) Πρωτογενείς τύποι δεδομένων (primitive data
types): ειδικοί τύποι δεδομένων, built-ins της γλώσσας, μέγεθος ανεξάρτητο πλατφόρμας
Δεν χρησιμοποιείται η λέξη “new” για τη δημιουργία μίας μεταβλητής πρωτογενούς τύπου Π.χ. int i = 1000;
Τύποι Δεδομένων στη Java (2/2)
Αντικείμενα Στη Java τα πάντα (εκτός των primitives) είναι
αντικείμενα της κλάσης java.lang.Object και δημιουργούνται με τη λέξη “new”
Π.χ. Date d = new Date(); String s = new String(“Vassilis”);
Παραδείγματα:• String: ακολουθία χαρακτήρων (κλάση java.lang.String),
τυπικά δεν αποτελεί πρωτογενή τύπο δεδομένων, αλλά πρακτικά μπορούμε να τον σκεφτόμαστε ως τέτοιο
• Arrays, Collections, Vectors, Int, Double, MyClass κλπ.
Βασικά Στοιχεία της Java Μεταβλητές
Παρόμοια με C++
Τελεστές Παρόμοια με C++ ‘+’: συνένωση Strings “instanceof” operator Π.χ.
System.out.println(“Size of array = ” + array.size());
static - final
Static variable: ανήκει στην κλάση method: χρησιμοποιεί μόνο παραμέτρους
Final variable: απαγόρευση αλλαγής τιμής εντός
εμβέλειας method: δε μπορεί να γίνει override class: δε μπορεί να γίνει extend
Δομές Ελέγχου στη Java
Παρόμοια με C++ Δομές Επιλογής
if-else switch-case
Δομές Επανάληψης for while do while
break, continue, return, goto
Δηλώσεις import
Δίνουν εντολή στον compiler να καταστήσει ορατό ένα πακέτο (package) στο αρχείο κώδικα.
Π.χ. import java.util.Vector //μόνο την κλάση Vectorimport java.util.* //ό,τι περιέχεται στο java.util
Διαχείριση Μνήμης Γίνεται αυτόματα μέσω ενός νήματος: του
garbage collector. Ένα κομμάτι μνήμης απελευθερώνεται runtime
όταν πλέον δεν υπάρχει άλλη αναφορά προς αυτό μέσα στο πρόγραμμα.
Ο χρήστης δεν ασχολείται (και δεν μπορεί άμεσα να το κάνει) με την απελευθέρωση μνήμης
Τεκμηρίωση – Αρχεία .jar
Javadoc Αυτόματη παραγωγή τεκμηρίωσης σε μορφή
html σελίδας μέσω των αρχείων κώδικα Java
Ο κώδικας συνυπάρχει με το κείμενο τεκμηρίωσης – απευθείας προσπέλαση.
Αρχεία .jar Διευκολύνει τη διαχείριση των Java αρχείων
Ενοποίηση αρχείων σε πακέτα
Java και Διαδίκτυο
Java Applets Web-εφαρμογές και όχι τυπικά java
προγράμματα Τοποθετούνται σε ιστοσελίδες Εκτελούνται από τη JVM εντός ενός Web
browser
Υποστήριξη sockets, servlets, κ.ά.
Άλλες Διαφορές από C++ (1/3) Η Java δεν επιτρέπει πολλαπλή κληρονομικότητα
(για λόγους απλότητας) Κάθε κλάση μπορεί να κληρονομεί το πολύ από μία
άλλη κλάση («extends») Interfaces: Δομές που περιέχουν «μη υλοποιημένες»
συναρτήσεις, χωρίς μεταβλητές-μέλη και δεν είναι κλάσεις
Μία κλάση μπορεί να κάνει «implement» περισσότερα από ένα interface
Άλλες Διαφορές από C++ (2/3)
Η Java θεωρείται εν γένει απλούστερη γλώσσα από τη C++.
Όλες οι Java μέθοδοι είναι όπως οι virtual της C++.
Η Java δεν υποστηρίζει δείκτες (pointers).
Άλλες Διαφορές από C++ (3/3)
Η Java δεν υποστηρίζει defines, typedefs ή
preprocessor. Οπότε, δε χρειάζεται ούτε αρχεία
κεφαλίδας (header files).
Στη Java δεν υποστηρίζονται καθολικές
μεταβλητές. Εναλλακτικά: “static”
Στη Java δεν επιτρέπονται συναρτήσεις εκτός
κλάσεων (stand-alone functions).
Προτεινόμενες Πηγές
The Source for Java Developers,
http://java.sun.com/
The Java Tutorials,
http://java.sun.com/docs/books/tutorial/
Learning Java, Pat Niemeyer & Jonathan
Knudsen
Thinking in Java, Bruce Eckel,
http://www.mindview.net/Books/TIJ/
Την επόμενη φορά…
Λάθη και Εξαιρέσεις
Μετατροπή Αντικειμένων
Είσοδος / Έξοδος
Εργαλεία Ανάπτυξης
Επιπρόσθετα Θέματα
Ερωτήσεις ?