Πανεπιστήµιο Πειραιά Τµήµα Εκπαιδευτικής Τεχνολογίας και Ψηφιακών Συστηµάτων Εισαγωγή στη γλώσσα προγραµµατισµού Java Βασίλειος Βεσκούκης ιδάκτωρ Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών v.vescoukis@unipi.gr v.vescoukis@cs.ntua.gr ιαλέξεις και εργαστήριο! ιαλέξεις " Πέµπτη 8.15 12.00, παλαιό κτίριο, αίθουσα 202! Εργαστήριο " ιατίθεται το εργαστήριο του τµήµατος σε όλες τις ώρες " έσµευση του εργαστηρίου για κάποιες ηµέρες που θα ανακοινωθούν για παρουσίαση ασκήσεων 1
Εισαγωγή στη Java! Χαρακτηριστικά του σύγχρονου computing " Τεχνικά " Επιχειρηµατικά! Απαιτήσεις που πρέπει να ικανοποιηθούν! Η γέννηση της Java! Εκτέλεση προγραµµάτων! Είδη προγραµµάτων! Παρουσίαση της γλώσσας! Συγγραφή προγραµµάτων! Βιβλιοθήκες Το σύγχρονο computing! Τεχνικά χαρακτηριστικά " Τα πάντα τρέχουν πάνω από δίκτυο " Τα συστήµατα είναι ανοµοιογενή και δεν είναι πάντα υπολογιστές " Οι πληροφορίες είναι κατανεµηµένες " Νέου τύπου εφαρµογές (ηλεκτρονικό εµπόριο κ.ά.) " Ανοιχτές αρχιτεκτονικές! Μη τεχνικά χαρακτηριστικά " Εντονος ανταγωνισµός για την επικράτηση: NT vs UNIX, Microsoft vs All " Κτήση και εκµετάλλευση τεχνολογίας " Καθορισµός αγοράς και «παικτών» που µπορεί να συµµετέχουν 2
Απαιτήσεις που πρέπει να ικανοποιηθούν! Ανοιχτή πλατφόρµα λειτουργίαςεφαρµογών! Υποστήριξη αντικειµενοστρεφούς τεχνολογίας! υνατότητα εύκολης µετάβασης και εκµάθησης! Κοινάαποδεκτάπρότυπα! ηµιουργία κοινοτήτων «ανοιχτού κώδικα»! Πλήρης ανεξαρτησία από το υλικό! Λειτουργία πάνω σε δίκτυο! Ασφάλεια Η γέννηση της Java! Από την εταιρία SUN, χωρίς να αποτελέσει αντικείµενο εµπορικής πατέντας! Η Java είναι " Απλή " Αντικειµενοστρεφής " Κατανεµηµένη " Ερµηνευόµενη (interpreted) " Συµπαγής: ισχυρό σύστηµα τύπων, πλήρης διαχείριση µνήµης " Ασφαλής " Ανεξάρτητη από αρχιτεκτονική # Μεταφέρσιµη 3
Η γέννηση της Java! Η Java είναι " Multi-threaded " Υποστηρίζει πολυµέσα " Υποστηρίζει κατανεµηµένες βιβλιοθήκες " υνατόν να ενσωµατωθεί σε web browser " Υψηλής απόδοσης...! Η Java σχετίζεται αλλά δεν ταυτίζεται µε την ανάπτυξη σελίδων Internet " Η δυνατότητα απόδοσης συµπεριφοράς σε σελίδες web... "...δεν σηµαίνει κατ ανάγκην «εφαρµογές πάνω από Internet» Μοντέλο εκτέλεσης προγραµµάτων Java 4
Μοντέλο εκτέλεσης προγραµµάτων Java Μοντέλο εκτέλεσης προγραµµάτων Java 5
Είδη προγραµµάτων Java! Αυτόνοµες εφαρµογές " Προγράµµατα που µπορούν να εκτελεστούν από τη γραµµή εντολών σε οποιοδήποτε περιβάλλον διαθέτει ένα Java Virtual Machine (JVM) " Ορισµός µιας κλάσης η οποία περιέχει µια µέθοδο µε το όνοµα main. Η εκτέλεση θα αρχίσει από αυτή την µέθοδο.! Applets " Εφαρµογές που εκτελούνται µέσα από έναν web browser τοπικά. " Αποτελούν εξειδίκευση της κλάσης Applet " Τα Applets περιέχουν µεθόδους που καθορίζουν τη συµπεριφορά τους σε συγκεκριµένα γεγονότα (events)! Servlets " Κλάσεις που εκτελούνται στο σηµείο όπου διατίθενται Hello World! Σε µορφή αυτόνοµης εφαρµογής public class HelloWorld { public static void main (String [] args) { System.out.println("Hello world!"); } }! Βήµα 2: > javac HelloWorld.java! Βήµα 3: > java HelloWorld 6
Hello World >type HelloWorld.java public class HelloWorld { public static void main (String [] args) { System.out.println("Hello world!"); } } >javac HelloWorld.java >java HelloWorld Hello world! >java helloworld Exception in thread "main" java.lang.noclassdeffounderror: helloworld (wrong nam e: HelloWorld) at java.lang.classloader.defineclass0(native Method) at java.lang.classloader.defineclass(unknown Source) at java.security.secureclassloader.defineclass(unknown Source) at java.net.urlclassloader.defineclass(unknown Source) at java.net.urlclassloader.access$100(unknown Source) at java.net.urlclassloader$1.run(unknown Source) at java.security.accesscontroller.doprivileged(native Method) at java.net.urlclassloader.findclass(unknown Source) at java.lang.classloader.loadclass(unknown Source) at sun.misc.launcher$appclassloader.loadclass(unknown Source) at java.lang.classloader.loadclass(unknown Source) at java.lang.classloader.loadclassinternal(unknown Source) Η γλώσσα Java! Σχόλια " Μεταξύ /* και */ σε πολλές γραµµές " Μετά από // σε µία γραµµή! Βασικοί τύποι Τύπος Περιγραφή Αρχική τιµή boolean Λογικές τιµές: trueή false false Char Χαρακτήρες, 16-bit Unicode '\0' Byte Ακέραιος αριθµός 8-bit 0 Short Ακέραιος αριθµός 16-bit 0 Int Ακέραιος αριθµός 32-bit 0 long Ακέραιος αριθµός 64-bit 0 float Αριθµός κινητής υποδιαστολής 32-bit 0.0 double Αριθµός κινητής υποδιαστολής 64-bit 0.0 7
Η γλώσσα Java! ηλώσεις όπως στη γλώσσα C " int x; double d1, d2; " int x = 1; double d1 = 3.14, d2 = -8.0;! Ειδικές σταθερές \n, \r, \b, \t, \, \, \f, \\! Οτύποςstring "Java" "Hello world!\n" "So long \"Java\" world...\n" Η γλώσσα Java Προτεραιότητα Τελεστής Περιγραφή 13 ++ -- Αύξηση / µείωση κατά 1 + - Πρόσηµο συν/ πλήν ~ Συµπλήρωµα bit προς bit! Λογική άρνηση ( type ) Μετατροπή τύπου 12 * / % Πολλαπλασιασµός, διαίρεση, υπόλοιπο 11 + - Πρόσθεση, αφαίρεση + Παράθεση συµβολοσειρών 10 << Αριστερή ολίσθηση 9 < > =< >= >> εξιά ολίσθηση µε επέκταση προσήµου >>> εξιά ολίσθηση χωρίς επέκταση προσήµου instanceof Αριθµητική σύγκριση Σύκριση τύπου 8
Η γλώσσα Java Προτεραιότητα Τελεστής Περιγραφή 8 ==!= Ισότητα, ανισότητα 7 & Σύζευξη, λογική ή bit προς bit 6 ^ Αποκλειστική διάζευξη, λογική ή bit προς bit 5 ιάζευξη, λογική ή bit προς bit 4 && Λογική σύζευξη υπό συνθήκη 3 Λογική διάζευξη υπό συνθήκη 2?: Εναλλακτική αποτίµηση υπό συνθήκη 1 = Εκχώρηση *= /* %= += -= <<= >>= >>>= &= ^= = Εκχώρηση µεπράξη Παράδειγµα! Μαθηµατικές εκφράσεις και αντίστοιχες εκφράσεις Java 9
Η γλώσσα Java! Εκφράσεις µε strings string a = "Αντικειµενοστρεφής σχεδιασµός και προγραµµατισµός"; string b = "Αντικειµενοστρεφής " + "σχεδιασµός"; int Year1=2000; int Year2=2001; string c = b + "(" + Year1+"-"+Year2+")"; string d = b + "\n\r" + "Ακαδ. έτος " + Year1+"-"+Year2 " c: Αντικειµενοστρεφής σχεδιασµός (2000-2001) " d: Αντικειµενοστρεφής σχεδιασµός Ακαδ. έτος 2000-2001 Η γλώσσα Java! Τελεστές bit short a = 10; a: 0000000000001010 " ~ = συµπλήρωµα " & = σύζευξη, = διάζευξη, ^ = αποκλειστική διάζευξη " >>, << = ολίσθηση! Λογικοί τελεστές "! = ΝΟΤ, & = AND, =OR " &&, 10
Η γλώσσα Java! Αποτίµηση λογικών εκφράσεων int a=5, b=10, c=0; (a > b) & (b < 100) (a < b) & (b > 0) (a < b) (a * b > 100) (a < b) ((b / c) > 100) (a < b) ((b / c) > 100) (a > b) && ((b / c) > 100) (a > b) ((b / c) > 100) Η γλώσσα Java! Ο τελεστής (λογική έκφραση)?[έκφραση 1] : [έκφραση 2] int a=5, b=10, c=0, d; d = (a > b)? 1 : 0 d = (c!= 0)? b / c : 0 d = (a < b)? a * b : b / c 11
Η γλώσσα Java! Εντολές, blockεντολών { int x = 1; double d = 3.14159; } if (x <= 5) { System.out.println(x); return d + 2.5; } else return 8.1 - d;! Εκφράσεις x = 1; a = flag? 5 + a : 8 + x; system.out.println("hello world!"); Η γλώσσα Java! Επιλογή 1 " if (συνθήκη) εντολή1; else εντολή2;! Επιλογή 2 " Switch (έκφραση) { case val1: εντολές 1; break; case val2: εντολές 2; break; default: εντολές; } //τέλος του switch 12
Η γλώσσα Java! Επανάληψη while " while (συνθήκη) εντολή;! Επανάληψη for " for (εντολή αρχικοποίησης; συνθήκη; εντολή1) εντολή2;! Επανάληψη do-while " do εντολή; while (συνθήκη); Η γλώσσα Java! οµή προγράµµατος ProgramName.java " ηλώσεις import " Ορισµός κλάσεων " Ορισµός ενεργού κλάσης public class ProgramName public static void main (String[ ] args) { // --- έναρξη εκτέλεσης --- } } // --- τέλος ορισµού κλάσης ProgramName --- 13
Η γλώσσα Java! Πακέτα (packages) " Οργάνωση των κλάσεων " Ευέλικτη κατάτµηση σε τµήµατα κώδικα (modularity)! Αναφορά σε πακέτα όνοµα πακέτου.όνοµα κλάσης java.io.file, java.io.*! Κάθε πακέτο ορίζει: " Interfaces " Κλάσεις " Exceptions " Errors Η γλώσσα Java! Ορισµός πακέτων package my_classes; public class window { }! Πότε ορίζουµε πακέτα; " Μετά από την αρχική συγγραφή του κώδικα ενός προγράµµατος " Προκειµένου να ελέγχουµε την ορατότητα και την επίλυση αναφορών " Τα πακέτα από τα οποία αποτελείται µια εφαρµογή λογισµικού, προκύπτουν κατά την αντικειµενοστρεφή ανάλυση και σχεδίαση 14
Η γλώσσα Java! Το πακέτο simpleio (work_path)\simpleio\simplegui.java Η γλώσσα Java! Μετατροπείς ορατότητας Μετατροπέας Οταν αφορά κλάση Οταν αφορά πεδίο ή µέθοδο private - ορατότητα µόνο µέσα από την κλάση που δηλώνεται package (default) Επιτρέπει την ορατότητα µόνο µέσα στοίδιοπακέτο ορατότητα µόνο µέσα από κλάσεις του ίδιου πακέτου protected - Ορατότητα σε κλάσεις του ίδιου πακέτου και σε κλάσεις-παιδιά public Ορατότητα παντού Ορατότητα από παντού (πρέπει και η κλάση να δηλώνεται public) 15
Η γλώσσα Java! Χαρακτηρισµός πεδίων και µεθόδων ως static και final Χαρακτηρισµός Οταν αφορά κλάση Οταν αφορά πεδίο Οταν αφορά µέθοδο - Μπορεί να περιέχει ως µέλη κλάσεις και αντικείµενα Αποθηκεύεται σε κάθε αντικείµενο Αποθηκεύεται σε κάθε αντικείµενο static - Χαρακτηρίζει την κλάση και είναι το ίδιο για όλα τα αντικείµενα Επιδρά µόνο σε πεδία της κλάσης final εν µπορεί να κληρονοµηθεί Σταθερά που αντιγράφεται σε όλα τα αντικείµενα και δεν µπορεί να αλλάξει τιµή Μέθοδος που δεν µπορεί να παρακαµφθεί από ορισµό σεκλάσηπαιδί static final - Σταθερά που αποθηκεύεται στο ίδιο σηµείο για όλα τα αντικείµενα Μέθοδος της κλάσης που δεν µπορεί να παρακαµφθεί Η γλώσσα Java! Κληρονοµικότητα και αναφορά σε constructors " this: αναφέρεται σε µέλος του ενεργού αντικειµένου " this(), this(arg1, arg2, ): καλεί έναν άλλο constructor της κλάσης " super(), super(arg1, arg2): καλεί έναν constructor στην κλάση-πατέρα 16
Η γλώσσα Java! Αναζήτηση τεκµηρίωσης της γλώσσας " Το SDK (έκδοση 1.3) για την Java 2 " Ητεκµηρίωση του SDK και του API της Java (π.χ.) C:\j2sdk1_3_0-doc \api\index.htm! Πολλάπακέταδιατίθενταιέτοιµα στοinternet! ενείναιδυνατόννακαλυφθούνπλήρως ούτεκανταπακέταπουέρχονταιµαζί µε τηγλώσσα! Πρέπει να µάθουµε πώς να µαθαίνουµε Ητεκµηρίωση του API 17
Εργαλεία συγγραφής κώδικα! edit, notepad: λειτουργούν, αλλά δεν συνιστώνται! Συντάκτης προγραµµάτων: TextPad " Υποστηρίζει πολλές γλώσσες προγραµµατισµού " Με ευκολίες για τον προγραµµατιστή " ιατίθεται στο εργαστήριο! Βιβλιοθήκη εισόδου - εξόδου: " Απλοποιεί την είσοδο και έξοδο simpleio " Πρέπει να βρίσκεται στο φάκελο εργασίας " ιατίθεται στο εργαστήριο Ο χώρος εργασίας! Εγκατεστηµένο το JDK ( j2sdk1_3_0-win.exe )! Το.\bin πρέπει να ανήκει στο path του συστήµατος! Εγκατεστηµένο το TextPad! ηµιουργία φακέλου εργασίας (π.χ. C:\TE031)! Αντιγραφή του φακέλου simpleio κάτω από τον χώρο εργασίας (C:\TE031\simpleIO)! Συσχέτιση των αρχείων.java µε το TextPad 18
Ο χώρος εργασίας Ο χώρος εργασίας 19
Η βιβλιοθήκη simpleio Η βιβλιοθήκη simpleio 20
Applets - Εισαγωγή στην HTML! HyperText Markup Language! Αναπτύχθηκε από το CERN µαζί µε το πρωτόκολλο HTTP (HyperText Transfer Protocol)! Αρχικά ήταν πολύ απλή, στη συνέχεια αναπτύχθηκε και εµπλουτίστηκε! Η ανάπτυξή της συνδέεται µε την ανάπτυξη του Internet και κυρίως του World Wide Web, καθώς και των συναφών τεχνολογιών και πρωτοκόλλων (DNS, TCP, IP, κ.ά.)! Ενεργά στοιχεία της HTML: " Εικόνες, media γενικότερα " Scripts " Applets " ActiveX / COM / DCOM κ.ά. Objects Applets - Εισαγωγή στην HTML 21
Applets - Εισαγωγή στην HTML Applets - Εισαγωγή στην HTML 22
Applets - Εισαγωγή στην HTML! AWT: Abstract Windowing Toolkit! Σχετικά packages: " java.applet, java.awt, java.awt.color, java.awt.datatransfer, java.awt.dnd, java.awt.event, java.awt.font, java.awt.geom, java.awt.im, java.awt.im.spi, java.awt.image, java.awt.image.renderable, java.awt.print Applets - χαρακτηριστικές µέθοδοι! Κάθε κλάση που κληρονοµεί το Applet, περιέχει τις µεθόδους: init(), start(), stop(), destroy() O browser φορτώνει τη σελίδα init() start() Ξεκινά η εκτέλεση του applet Ο χρήστης εγκαταλείπει τη σελίδα stop() Οχρήστηςεπιστρέφει στη σελίδα Οχρήστηςκλείνει τον browser destroy() 23