Περιεχόμενα. Περιεχόμενα. Πρόλογος...17



Σχετικά έγγραφα
Περιεχόµενα. Πρόλογος...15

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

Περιεχόμενα. Πρόλογος 15

Γενικά (για τις γραπτές εξετάσεις)

Κεφάλαιο 1. Βασικά Στοιχεία της Java... 13

Περιεχόμενα ΜΕΡΟΣ ΠΡΩΤΟ. Πρόλογος... 13

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

Περιεχόμενα. Πρόλογος... 17

Περιεχόμενα. Πρόλογος 15

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΚΕΦΑΛΑΙΑ attributes parameters

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

Γλώσσες Προγραμματισμού

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Περιεχόμενα. Μέρος 1: Βασικές έννοιες της πληροφορικής Πρόλογος... 11

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

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

Περιεχόμενα. Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών Μέρος 2: Χρήση υπολογιστή και διαχείριση αρχείων Πρόλογος...

Δημιουργία μιας εφαρμογής Java με το NetBeans

Περιεχόμενα. Περιεχόμενα

ΥΠΗΡΕΣΙΕΣ ΔΙΑΔΙΚΤΟΥ Explorer & Outlook 2013

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

ΕΠΛ 233: Αντικειμενοστρεφής Προγραμματισμός (Object-oriented programming)

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet.

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

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ...30


ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Μέρος ΙΙ Εφαρμογές γραφικών με το πακέτο swing - 5. Περιεχόμενα

Περιεχόμενα. Πρόλογος... 21

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου

ΚΕΦΑΛΑΙΟ 1. Εισαγωγή στην Python. 1.1 Εισαγωγή

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

Μαλούτα Θεανώ Σελίδα 1

Τίτλος Πακέτου Certified Computer Expert-ACTA

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

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

Vodafone Business Connect

Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α

Περιεχόμενα. Πρόλογος...11

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Περιεχόμενα. Πρόλογος... 17

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

3 Αλληλεπίδραση Αντικειμένων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Οδηγός των Ελληνικών Microsoft WINDOWS 7

Προγραμματισμός Διαδικτύου

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

Περιεχόμενα. Αντί προλόγου Πώς να χρησιμοποιήσετε το βιβλίο Κεφάλαιο 1: Πώς δημιουργώ το Προφίλ μου στο Facebook;...

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

2. Αλγόριθμοι, δομές δεδομένων και πολυπλοκότητα

Εισαγωγή στην επιστήμη των υπολογιστών

Copyright 2017 HP Development Company, L.P.

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

ANDROID Προγραμματισμός Εφαρμογών

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Βιωματικό εργαστήριο ηλεκτρονικών υπολογιστών. Οργάνωση εκπαιδευτικού υλικού με Η/Υ από δραστηριότητες στο Δημοτικό και στο Νηπιαγωγείο.

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

Ενότητα 1η. Εισαγωγή στην Πληροφορική

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

Σημείωση για το προϊόν

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC

Java sessions. Part 1 - Βασικά έννοιες - μέθοδοι

Γεωργάκης Αριστείδης ΠΕ20

Windows 8 2_windows8.indd 39 10/5/2014 2:10:10 μμ 10/5/2014 2:10:10

Certified Java Programmer (CJP)

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25

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

Λειτουργικά Συστήματα (Λ/Σ)

ΠΡΟΧΩΡΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Χαρίδημος Κονδυλάκης Εισαγωγή

Java 7. Οδηγός της. Εκδόσεις: Μ. Γκιούρδας. Herbert Schildt. 5 η ΕΚ ΟΣΗ. Απόδοση: Αγαμέμνων Μήλιος Μηχανικός Λογισμικού

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel...9

ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στην Python και στο IDLE

Μάθημα 4ο. Προγράμματα

Κεφάλαιο 1 Προγραμματισμός Υπολογιστή. Εφαρμογές Πληροφορικής Κεφ. 7 Καραμαούνας Πολύκαρπος 1

επιφάνεια πυριτίου Αναφορά στο Εκπαιδευτικό Υλικό : 5. Αναφορά στο Εργαστήριο :

Α. Ερωτήσεις Ανάπτυξης

Οδηγός γρήγορης εκκίνησης

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

Ο Οδηγός γρήγορης εκκίνησης

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

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

Βασίλειος Κοντογιάννης ΠΕ19

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Διαδικτυακές Εφαρμογές. Ενότητα 2: Enterprise Java Beans και Java Server Faces Μιχάλας Άγγελος Βούρκας Δημήτριος Τμήμα Μηχανικών Πληροφορικής ΤΕ

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Ερωτήσεις- Απαντήσεις Πολυμέσα Απο το Βιβλίο Εφαρμογές Η/Υ Α,Β,Γ Λυκείου

6 Εισαγωγή στο Wordpress 3.x

POWERPOINT Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων.

Transcript:

Περιεχόμενα Περιεχόμενα Περιεχόμενα κεφαλαίου Πρόλογος...17 Κεφάλαιο 1 Εισαγωγή... 19 Τι είναι η Java...19 Η ιστορία της Java...23 Εκδόσεις της Java...25 Ξεκίνημα με την Java...27 Το περιβάλλον της γλώσσας...33 Δημιουργία μιας εφαρμογής Java...35 Μεταγλώττιση και εκτέλεση με το TextPad...39 Δημιουργία μιας μικροεφαρμογής Java (applet)...45 Ερωτήσεις και Ασκήσεις...48 Κεφάλαιο 2 Δεδομένα, μεταβλητές, υπολογισμοί... 51 Δεδομένα Τύποι δεδομένων...51 Μεταβλητές και δεσμευμένες λέξεις...53 Ακέραιοι τύποι δεδομένων...56 Αριθμοί κινητής υποδιαστολής...57 Οι μοναδιαίοι τελεστές αύξησης και μείωσης...58 Οι τελεστές των αριθμητικών πράξεων...59 Περισσότερα για τις εκχωρήσεις...62 Λογικές τιμές...64 Τελεστές σύγκρισης...64 Λογικοί τελεστές...64 7

8 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Τελεστές δυαδικών ψηφίων...67 Χαρακτήρες...68 Αλφαριθμητικά...69 Αρχικές τιμές για τις μεταβλητές-μέλη...70 Μετατροπή τύπου δεδομένων...71 Μαθηματικές συναρτήσεις...74 Συμπληρωματικές ασκήσεις...76 Σταθερές...82 Μετατροπή αλφαριθμητικών σε αριθμούς...84 Εισαγωγή δεδομένων από το πληκτρολόγιο...85 Εισαγωγή δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης Scanner...86 Ερωτήσεις και Ασκήσεις...90 Κεφάλαιο 3 Δομές επιλογής δομές επανάληψης μέθοδοι... 93 Αποφάσεις...93 Η δομή if - Απλή επιλογή...94 Ο όρος else - Διπλή επιλογή...95 Ένθετα if...98 Ο όρος else if - Πολλαπλή επιλογή... 100 Ο τριαδικός τελεστής?:... 104 Η δομή πολλαπλής επιλογής switch... 105 Εντολές επανάληψης βρόχοι... 108 Ο βρόχος for... 108 O βρόχος while... 110 O βρόχος do - while... 111 Ένθετοι βρόχοι... 113 Η εντολή continue... 114 Η χρήση του break σε ένα βρόχο... 117 Μέθοδοι... 123 Ερωτήσεις και Ασκήσεις... 128 Κεφάλαιο 4 Πίνακες και αλφαριθμητικά... 131 Πίνακες με μία διάσταση... 131 Η δήλωση ενός πίνακα... 132 Η καταχώριση του πίνακα... 132 Απόδοση αρχικών τιμών στα στοιχεία του πίνακα (αρχικοποίηση)... 133 Επεξεργασία στοιχείων πίνακα... 135

Περιεχόμενα 9 Ταξινόμηση (sorting)... 138 Αναζήτηση (searching)... 144 Πίνακες πολλών διαστάσεων... 149 Επεξεργασία στοιχείων πίνακα δύο διαστάσεων... 150 Η δομή ενισχυμένου for (for each)... 152 Αλφαριθμητικά... 154 Πράξεις με αλφαριθμητικά... 156 Υποαλφαριθμητικά... 159 Προσπέλαση μεμονωμένων χαρακτήρων ενός αλφαριθμητικού και εύρεση του μήκους του... 160 Αντικατάσταση χαρακτήρων σε ένα αλφαριθμητικό... 160 Εντοπισμός χαρακτήρων μέσα σε ένα αλφαριθμητικό... 161 Μετατροπή άλλων τύπων δεδομένων σε αλφαριθμητικά η μέθοδος valueof... 165 Μετατροπή αλφαριθμητικών σε άλλους τύπους δεδομένων... 166 Η κλάση StringBuffer... 167 Αντικατάσταση χαρακτήρων σε αντικείμενο της κλάσης StringBuffer... 168 Μετατροπή αντικειμένου StringBuffer σε String... 169 Αντιστροφή αλφαριθμητικού η μέθοδος reverse()... 170 Χρήση αλφαριθμητικού για τον έλεγχο της δομής switch... 171 Ερωτήσεις και Ασκήσεις... 172 Κεφάλαιο 5 Κλάσεις και αντικείμενα... 177 Κλάσεις και αντικείμενα... 177 Πώς ορίζουμε μια κλάση... 178 Οι κατασκευαστές... 181 Πώς θα χρησιμοποιήσουμε μια κλάση που δημιουργήσαμε... 183 Υπερφόρτωση μεθόδου (Method overloading)... 187 Πολλαπλοί κατασκευαστές... 188 Η αναφορά στα αντικείμενα... 190 Συλλογή απορριμμάτων... 192 Η δεσμευμένη λέξη this...192 Τα πακέτα... 195 Τα τυπικά πακέτα της Java... 196 Πώς μπορούμε να "πακετάρουμε" τις δικές μας κλάσεις... 198 Η προσπέλαση των κλάσεων Τροποποιητές προσπέλασης... 202 Ενθυλάκωση δεδομένων (data encapsulation)... 205 Τα αντικείμενα ως ορίσματα μεθόδων... 207

10 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Πίνακες αντικειμένων... 208 Μεταβλητές και εμβέλεια... 211 Ένθετες (nested) και εσωτερικές (inner) κλάσεις... 211 Ερωτήσεις και Ασκήσεις... 214 Κεφάλαιο 6 Κληρονομικότητα, Πολυμορφισμός, Διασυνδέσεις... 217 Κληρονομικότητα (Inheritance)... 217 Υποκλάσεις και Υπερκλάσεις... 218 Κληρονομικότητα και προσπέλαση... 222 Κληρονομικότητα και κατασκευαστές... 227 Κλήση κατασκευαστή της υπερκλάσης η δεσμευμένη λέξη super... 229 Χρήση της λέξης super για κλήση μελών της υπερκλάσης... 232 Κληρονομικότητα πολλών επιπέδων (multilevel inheritance)... 233 Σύνδεση κατασκευαστών... 236 Παράκαμψη μεθόδου... 238 Σύγκριση υπερφόρτωσης και παράκαμψης μεθόδου (overloading vs overriding)... 242 Πολυμορφισμός (Polylmorphism)... 245 Μέθοδοι και κλάσεις αφηρημένου τύπου... 247 Τελικές κλάσεις και μέθοδοι... 252 Η υπερκλάση Object... 253 Η μέθοδος tostring() Παράκαμψη της μεθόδου... 254 Η μέθοδος equals() Παράκαμψη της μεθόδου... 256 Κλάσεις περιτυλίγματος (Wrapper classes)... 260 Διασυνδέσεις (Interfaces)... 261 Επέκταση διασύνδεσης... 267 Υλοποίηση πολλών διασυνδέσεων... 268 Ερωτήσεις και Ασκήσεις... 270 Κεφάλαιο 7 Εξαιρέσεις και ισχυρισμοί... 275 Τι είναι οι εξαιρέσεις... 275 Πρόκληση εξαιρέσεων... 277 Χειρισμός εξαιρέσεων... 279 Πολλαπλά τμήματα catch... 282 Το τμήμα finally... 285 Ρίψη εξαιρέσεων Η δεσμευμένη λέξη throw... 287 Δήλωση εξαιρέσεων η δεσμευμένη λέξη throws... 288

Περιεχόμενα 11 Ενσωματωμένες εξαιρέσεις της Java... 289 Δημιουργία των δικών μας εξαιρέσεων... 290 Διάδοση εξαιρέσεων... 292 Ισχυρισμοί... 294 Ερωτήσεις και Ασκήσεις... 298 Κεφάλαιο 8 Τεχνικές εισόδου/εξόδου... 301 Αρχεία και διαδρομές (file path)... 301 Κλάσεις αρχείων και καταλόγων... 302 Διαχείριση αρχείων και φακέλων με την παλαιότερη κλάση File... 309 Το ρεύμα δεδομένων... 312 Αρχεία κειμένου Εγγραφή δεδομένων... 313 Ανάγνωση αρχείου κειμένου... 318 Χρήση της κλάσης Scanner για ανάγνωση αρχείου κειμένου... 322 Ανάγνωση αρχείων από το Διαδίκτυο... 324 Οι δυαδικές κλάσεις εισόδου / εξόδου (I/O)... 327 Ρεύματα εισόδου η κλάση InputStream... 328 Ρεύματα εξόδου η κλάση OutputStream... 330 Οι κλάσεις FileInputStream / FileOutputStream... 331 Οι κλάσεις FilterInputStream / FilterOutputStream... 334 Οι κλάσεις DataInputStream / DataOutputStream... 334 Οι κλάσεις BufferedInputStream / BufferedOutputStream... 341 Είσοδος/Έξοδος αντικειμένων Σειριοποίηση... 344 Αρχεία τυχαίας προσπέλασης... 347 Ερωτήσεις και Ασκήσεις... 351 Κεφάλαιο 9 Εκφράσεις λάμδα λ και Ροές... 353 Εισαγωγή... 353 Εκφράσεις λάμδα (lambda expressions)... 354 Λειτουργικές διασυνδέσεις (functional interfaces)... 355 Εκφράσεις λάμδα σε μπλοκ... 358 Λειτουργικές διασυνδέσεις με γενικεύσεις... 359 Οι εκφράσεις λάμδα ως ορίσματα... 361 Σύλληψη μεταβλητών... 363 Αναφορές μεθόδων (method references)... 364 Αναφορές κατασκευαστών (constructor references)... 368 Προκαθορισμένες λειτουργικές διασυνδέσεις... 369

12 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Ροές - Το stream API... 371 Ερωτήσεις και Ασκήσεις... 375 Κεφάλαιο 10 Swing - Μέρος Ι... 379 Εισαγωγή AWT και Swing... 379 Το μοντέλο της ιεραρχίας περιεχομένου (containment hierarchy model)... 381 Συστατικά (components) και υποδοχείς (containers)... 384 Πλαίσια το συστατικό JFrame... 385 Η κλάση JComponent...389 Ετικέτες η κλάση JLabel... 390 Κουμπιά η κλάση JButton... 395 Διαχειριστές διάταξης... 396 Συστατικά κειμένου... 403 Πεδίο κειμένου η κλάση JTextField... 404 Το συστατικό Πάνελ (JPanel)... 405 Ο διαχειριστής GridBagLayout... 411 Μη χρήση διαχειριστή διάταξης... 414 Συμβάντα το μοντέλο αποστολής συμβάντος (Delegation Event Model)... 415 Ερωτήσεις και Ασκήσεις... 430 Κεφάλαιο 11 Swing - Μέρος ΙΙ... 433 Εισαγωγή... 433 Επικοινωνία με το χρήστη η κλάση JOptionPane... 434 Επιλογή χρωμάτων το συστατικό JColorChooser... 439 Πλαίσια ελέγχου και ραδιοπλήκτρα οι κλάσεις JCheckBox και JRadioButton... 441 Πτυσσόμενα πλαίσια και λίστες οι κλάσεις JComboBox και JList... 444 Επιλογή αρχείων η κλάση JFileChooser... 452 Ράβδος ολίσθησης με λαβή η κλάση JSlider... 454 Η χρήση μενού στα πλαίσια οι κλάσεις JMenu, JMenuBar και JMenuItem... 457 Δημιουργία περιγραμμάτων στα πλαίσια... 461 Συμβάντα του ποντικιού... 465 Συμβάντα του πληκτρολογίου... 467 Προσαρμοστές (Adapters)... 469 Ο διαχειριστής διάταξης BoxLayout... 471

Περιεχόμενα 13 Γραφικά - Εισαγωγή... 475 Το σύστημα συντεταγμένων και οι μέθοδοι γραφικών paint() και paintcomponent()... 475 Η κλάση Graphics... 477 Γραμματοσειρές και χρώμα... 477 Γραμμές... 481 Ορθογώνια... 482 Ελλείψεις, κύκλοι, και τόξα... 486 Γραφικά με την κλάση Graphics2D... 489 Εκτυπώσεις... 494 Ερωτήσεις και Ασκήσεις... 497 Κεφάλαιο 12 Η βιβλιοθήκη γραφικών JavaFX... 503 Τι είναι η JavaFX... 503 Τα στοιχεία μιας εφαρμογής JavaFX... 504 Σχήματα Χρώματα - Κείμενο... 508 Πρόσδεση ιδιοτήτων (property binding)... 517 Γραμματοσειρές εφέ κειμένου... 519 Παράθυρα διάταξης (panes)... 524 Συμβάντα (events)... 533 Συστατικά της διασύνδεσης γραφικών JavaFX... 543 JavaFX και διαδοχικά φύλλα στυλ (CSS)... 561 Εικόνες Βίντεο Ήχος... 570 Εφέ και μετασχηματισμοί... 579 Ερωτήσεις και Ασκήσεις... 589 Κεφάλαιο 13 Μικροεφαρμογές και Πολυμέσα... 593 Εισαγωγή Τι είναι η μικροεφαρμογή (applet)... 593 Οι πέντε βασικές μέθοδοι μιας μικροεφαρμογής... 595 Δημιουργία της πρώτης μικροεφαρμογής... 596 Εκτέλεση της μικροεφαρμογής... 597 Εργασία με τα συστατικά της Διασύνδεσης Χρήστη μέσω Γραφικών... 599 Μεταβίβαση παραμέτρων στη μικροεφαρμογή... 603 Μετατροπή μικροεφαρμογής σε κανονική εφαρμογή... 608 Ο κύκλος ζωής μιας μικροεφαρμογής... 610 Τύποι αρχείων εικόνας... 611 Φόρτωση αρχείων στη μικροεφαρμογή... 612 Φόρτωση και εμφάνιση εικόνας... 615

14 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Το μέγεθος της εικόνας... 617 Η κλάση ImageIcon... 619 Προσθήκη ήχων... 621 Ερωτήσεις και Ασκήσεις... 625 Κεφάλαιο 14 Νήματα... 631 Τι είναι τα νήματα... 631 Το νήμα "δαίμων"... 635 Δημιουργία νήματος με την κλάση Thread... 636 Δημιουργία νήματος με την υλοποίηση της διασύνδεσης Runnable... 640 Προτεραιότητες... 645 Συγχρονισμός... 647 Νήματα και κινούμενες εικόνες... 654 Δημιουργία κινουμένων σχεδίων... 658 Γραφικά με την τεχνική της διπλής προσωρινής αποθήκευσης και τη χρήση της κλάσης MediaTracker... 663 Ερωτήσεις και Ασκήσεις... 666 Κεφάλαιο 15 Δίκτυα και επικοινωνίες... 669 Δίκτυα... 669 Το πρωτόκολλο TCP/IP... 670 Οι διευθύνσεις στο δίκτυο... 672 Η κλάση InetAddress... 673 Προσδιορισμός των αρχείων στο δίκτυο η κλάση URL... 676 Υποδοχές (sockets)... 680 Υποδοχές αυτοδύναμων πακέτων... 685 Ερωτήσεις και Ασκήσεις... 690 Κεφάλαιο 16 Συλλογές Γενικεύσεις Δομές δεδομένων... 691 Συλλογές (collections)... 691 Η κλάση ArrayList Μέρος Ι... 693 Γενικεύσεις (Generics)... 696 Η κλάση ArrayList Μέρος ΙΙ... 697 Επαναλήπτες Η διασύνδεση Iterator... 700 Η κλάση Vector και η διασύνδεση Iterator... 701 Δομές δεδομένων (data structures)... 703 Λίστες (Lists)... 704

Περιεχόμενα 15 Η διασύνδεση ListIterator... 707 Λίστες, μέθοδοι, και διάσχιση με χρήση των διασυνδέσεων Iterator και ListIterator... 707 Η δομή στοίβας η κλάση Stack... 709 Η δομή ουράς (Queue)... 712 Απεικόνιση (Map)... 714 Δένδρα (trees)... 717 Κανονικές παραστάσεις (Regular expressions)... 723 Ερωτήσεις και Ασκήσεις... 729 Κεφάλαιο 17 Η Java και οι βάσεις δεδομένων... 731 Βάση Δεδομένων (Data Base)... 731 Το Σχεσιακό μοντέλο (Relational model)... 732 Η γλώσσα SQL (Structured Query Language)... 734 MySQL... 736 Δημιουργία Βάσης Δεδομένων με το ΣΔΒΔ MySQL... 736 Δημιουργία και αφαίρεση πίνακα... 738 Εισαγωγή δεδομένων σε πίνακα Εμφάνιση δεδομένων... 741 Ερωτήματα (Queries)...742 Το JDBC API... 743 Βασικές κλάσεις και διασυνδέσεις του JDBC... 744 Οι διασυνδέσεις ResultSet και ResultSetMetaData... 747 Η διασύνδεση Statement και η εκτέλεση εντολών SQL... 749 Το ενσωματωμένο ΣΔΒΔ Java DB... 752 Ερωτήσεις και Ασκήσεις... 753 Κεφάλαιο 18 Κλήση απομακρυσμένων μεθόδων servlets... 755 Τι είναι η Κλήση Απομακρυσμένων Μεθόδων (RMI)... 755 Η αρχιτεκτονική του RMI... 757 Εισαγωγή στα servlet... 764 Ο κύκλος ζωής ενός servlet... 764 Ανάπτυξη servlet Ο διακομιστής Tomcat... 765 Ερωτήσεις και Ασκήσεις... 773 Κεφάλαιο 19 Ειδικά Θέματα... 775 Αρχεία JAR... 775 Πακέτα (packages)... 778 Το νέο Date and Time API... 784

16 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Το εργαλείο javadoc... 791 Η διεθνοποίηση της Java (Java Internationalization)... 795 Η μηχανή Nashorn... 804 Ερωτήσεις και Ασκήσεις... 809 Κεφάλαιο 20 Ολοκληρωμένα περιβάλλοντα ανάπτυξης εφαρμογών... 811 Εισαγωγή... 811 Το περιβάλλον NetBeans... 812 Δημιουργία εφαρμογής με το NetBeans... 813 Εργασία με Java DB (παλαιότερα: Derby) μέσα από το NetBeans... 824 Το περιβάλλον Eclipse...834 Το περιβάλλον BlueJ... 842 Ερωτήσεις και Ασκήσεις... 849 Παράρτημα Απαντήσεις στις ερωτήσεις και στις ασκήσεις του βιβλίου... 851 Βιβλιογραφία... 951 Ευρετήριο... 955

Κ Πρόλογος Διαβάζοντας εδώ και χρόνια βιβλία που αναφέρονται σε γλώσσες προγραμματισμού, έβγαλα το συμπέρασμα ότι ενώ τα περισσότερα από αυτά ήταν αξιόλογα από πλευράς περιεχομένου, υστερούσαν σχετικά με τον τρόπο παρουσίασης της γλώσσας στον αρχάριο χρήστη, ή ακόμα και στον έμπειρο σε άλλες γλώσσες αλλά νεοεισερχόμενο στη συγκεκριμένη γλώσσα προγραμματισμού. Τα τεράστια παραδείγματα, που εκτείνονται σε πολλά κεφάλαια, αποθαρρύνουν κατά τη γνώμη μου τη συνέχιση της μελέτης. Η εξαντλητική επίσης ανάλυση εννοιών και η παράλειψη άλλων δημιουργεί ελλιπή εποπτεία της γλώσσας. Τέλος, η παράθεση μη ολοκληρωμένων παραδειγμάτων δημιουργεί σύγχυση. Στο βιβλίο που έγραψα για την Java, προσπάθησα να κρατήσω μια ισορροπία. Ήθελα το βιβλίο αυτό να μπορεί να διαβάζεται άνετα από έναν αρχάριο, αλλά ταυτόχρονα να μην καταντά πληκτικό για έναν έμπειρο προγραμματιστή, ο οποίος θέλει να γνωρίσει την Java. Έγινε προσπάθεια ώστε κάθε έννοια να συνοδεύεται και από ένα παράδειγμα, το οποίο να είναι ολοκληρωμένο και κατά το δυνατόν σύντομο ώστε να μην απογοητεύεται ο αναγνώστης. Όλα τα παραδείγματα είναι ελεγμένα και «τρέχουν», όπως άλλωστε φαίνεται και από τις αντίστοιχες εικόνες οθονών (screenshots). Το βιβλίο είναι σχεδιασμένο ώστε να διαβάζεται κεφάλαιο-κεφάλαιο, από την αρχή προς το τέλος, χωρίς αυτό να σημαίνει ότι κάποιος που ενδιαφέρεται να εστιάσει σε ένα συγκεκριμένο κεφάλαιο δεν μπορεί να το κάνει. Ξεκινά με θέματα που αφορούν στοιχειώδεις έννοιες του προγραμματισμού, όπως οι βασικές δομές ενός προγράμματος (ακολουθία, επιλογή, επανάληψη) καθώς και οι έννοιες του αντικειμενοστρεφούς προγραμματισμού (κλάση, κατασκευαστής, αντικείμενο, κληρονομικότητα, πολυμορφισμός, διασυνδέσεις κ.λπ.), αλλά και προχωρημένα θέματα όπως οι εκφράσεις λάμδα, η βιβλιοθήκη γραφικών JavaFx,, οι τεχνικές I/O, τα νήματα, ο χειρι- 17

18 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA σμός των εξαιρέσεων, οι αφηρημένες κλάσεις και διασυνδέσεις, τα servlet, καθώς και τα ολοκληρωμένα περιβάλλοντα ανάπτυξης εφαρμογών (IDE) για Java. Σε κάποια σημεία ο πηγαίος κώδικας περιλαμβάνει τόσο κανονικά όσο και έντονα γράμματα. Αυτό γίνεται για να εστιάσει περισσότερο την προσοχή του ο αναγνώστης στα σημεία όπου ο κώδικας είναι έντονος. Ευχαριστίες Θα ήθελα να ευχαριστήσω τον κ. Φώτη Σκουλαρίκη για τη γλωσσική επιμέλεια και τον έλεγχο των κειμένων και του κώδικα, την κ. Σόνια Τρακάδη για τη σελιδοποίηση, την κα Γιάννα Αθανασίου για το πολύ ωραίο εξώφυλλο, τον κ. Παναγιώτη Σταυρόπουλο για την οργάνωση της παραγωγής του βιβλίου, καθώς και τον κ. Γιάννη Αϊναλίδη για τη στήριξή του σε όλη τη διάρκεια της προσπάθειας.

Κεφάλαιο 1 Εισαγωγή Περιεχόμενα κεφαλαίου Τι είναι η Java Η ιστορία της Java Εκδόσεις της Java Ξεκίνημα με την Java Το περιβάλλον της γλώσσας Δημιουργία μιας εφαρμογής Java Μεταγλώττιση και εκτέλεση με το TextPad Δημιουργία μιας μικροεφαρμογής Java (applet) Τι είναι η Java Δεν υπάρχει άνθρωπος ο οποίος να ασχολείται με τους υπολογιστές και το Διαδίκτυο που να μην έχει ακούσει κάτι σχετικά με τη γλώσσα Java. Η Java είναι μια γλώσσα προγραμματισμού η οποία εμπεριέχει όλα τα χαρακτηριστικά της εξέλιξης της επιστήμης των υπολογιστών. Μιλώντας επιγραμματικά, θα μπορούσαμε να πούμε ότι η Java είναι μια αντικειμενοστρεφής γλώσσα που μπορεί να χρησιμοποιηθεί αφενός ως συνηθισμένη γλώσσα προγραμματισμού, και αφετέρου ως γλώσσα δημιουργίας ε- φαρμογών οι οποίες μπορούν να λειτουργήσουν σε κατανεμημένα συστήματα 1. Με 1 Ένα κατανεμημένο σύστημα αποτελείται από μια ομάδα γεωγραφικά ανεξάρτητων υπολογιστών, οι οποίοι επικοινωνούν μεταξύ τους μέσω δικτύου και μπορούν να λειτουργούν από κοινού για την επίτευξη ενός στόχου. Παραδείγματα κατανεμημένων συστημάτων είναι το Διαδίκτυο, τα τραπεζικά συστήματα ΑΤΜ, τα συστήματα Peer-to-Peer (P2P), κ.λπ. 19

20 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA αυτόν τον τρόπο, ένας υπολογιστής, όπου και αν βρίσκεται, είναι σε θέση να προσπελάζει και να χρησιμοποιεί μια εφαρμογή εγκατεστημένη σε κάποιο δίκτυο. Αν τη συγκρίνουμε από πλευράς φιλοσοφίας, δομής, και συντακτικού με τις άλλες γλώσσες προγραμματισμού, η Java μοιάζει αρκετά με τη C++. Είναι όμως πιο εύκολη στην εκμάθηση σε σχέση με την τελευταία, επειδή δεν περιλαμβάνει κάποιες ιδιομορφίες που απαντώνται σε αυτή καθώς και σε άλλες αντικειμενοστρεφείς γλώσσες προγραμματισμού, όπως η Smalltalk και η Ada. Ένα πλεονέκτημα που κάνει την Java να ξεχωρίζει από τις άλλες γλώσσες προγραμματισμού είναι ότι παρέχει ανεξαρτησία ως προς την πλατφόρμα (platform independence). Δίνει δηλαδή τη δυνατότητα στον προγραμματιστή να γράφει εφαρμογές οι οποίες εκτελούνται χωρίς καμία μετατροπή σε υπολογιστές με διαφορετική αρχιτεκτονική και διαφορετικά λειτουργικά συστήματα. Με αυτόν τον τρόπο μπορούν να δημιουργηθούν εφαρμογές που εκτελούνται τόσο σε έξυπνες κάρτες και κινητά τηλέφωνα, όσο και σε μεγάλα συστήματα υπολογιστών. Ας δούμε μερικά από τα βασικά χαρακτηριστικά της Java: Είναι (σχετικά) απλή. Όπως αναφέραμε προηγουμένως, οι δημιουργοί της άφησαν έξω από τη γλώσσα "δύσκολα" χαρακτηριστικά που συναντάμε σε άλλες γλώσσες, όπως π.χ. οι δείκτες (pointers) ή οι δομές και οι ενώσεις (structures και unions) της C++. Είναι αντικειμενοστρεφής (object oriented). Η Java, όπως και η C++, χρησιμοποιεί τις κλάσεις (classes) για να οργανώσει τον κώδικα σε λογικές ενότητες. Κατά το χρόνο εκτέλεσης, το πρόγραμμα δημιουργεί από τις κλάσεις αντικείμενα. Τα αντικείμενα αυτά έχουν δύο συνιστώσες: τα πεδία και τις μεθόδους. Τα πεδία περιγράφουν τι είναι το αντικείμενο. οι μέθοδοι περιγράφουν τι κάνει το αντικείμενο. Οι κλάσεις μπορούν να κληρονομήσουν ιδιότητες από άλλες κλάσεις. Εκείνο που δεν επιτρέπεται είναι η πολλαπλή κληρονομικότητα (multiple inheritance), όπου μία κλάση έχει τη δυνατότητα να κληρονομήσει πεδία και μεθόδους από περισσότερες από μία άλλες κλάσεις. Είναι μεταγλωττιζόμενη 2 (compiled) αλλά μπορεί να χαρακτηριστεί και ως διερμηνευόμενη (interpeted). Η μεταγλώττιση του πηγαίου προγράμματος έχει αποτέλεσμα την παραγωγή ενός ειδικού κώδικα, ο οποίος ονομάζεται κώδικας byte (bytecode). Ο κώδικας αυτός είναι παρόμοιος με τον κώδικα σε γλώσσα 2 Η Java είναι μια γλώσσα υψηλού επιπέδου (high level language). Αυτό σημαίνει ότι οι εντολές της είναι λέξεις (π.χ. read, println κ.λπ.), τις οποίες καταλαβαίνει μεν ο άνθρωπος, αλλά όχι και ο υπολογιστής. Ο υπολογιστής καταλαβαίνει εντολές της μορφής (00000111 34EBA0AC 00000000 00000008 4E560000 ), οι οποίες αποτελούν τη γλώσσα μηχανής. Ο μεταγλωττιστής (compiler) είναι ένα πρόγραμμα που μετατρέπει ολόκληρο τον κώδικα μιας γλώσσας υψηλού επιπέδου (π.χ. Pascal) σε κώδικα γλώσσας μηχανής πριν από την εκτέλεσή του. Αντίθετα, ο διερμηνευτής (interpreter) μεταγλωττίζει και εκτελεί μία προς μία τις εντολές της γλώσσας υψηλού επιπέδου.

Κεφάλαιο 1: Εισαγωγή 21 μηχανής και μπορεί να εκτελεστεί από οποιοδήποτε λειτουργικό σύστημα (Windows, Unix, Mac OS κ.λπ.) που διαθέτει επιπλέον το (δωρεάν) λογισμικό του διερμηνευτή της Java. Τα προγράμματα των υπολογιστών είναι κατά κύριο λόγο προσανατολισμένα στο υλικό (hardware) του υπολογιστή και στο λειτουργικό του σύστημα. Ένα πρόγραμμα γραμμένο για τα Windows δεν μπορεί να εκτελεστεί απευθείας στον Macintosh, και το αντίστροφο. Με την Java λύνεται αυτό το πρόβλημα, επειδή ο μεταγλωττιστής της δεν δημιουργεί γηγενή κώδικα (native code) προσαρμοσμένο στο συγκεκριμένο τύπο υπολογιστή (όπως κάνουν οι άλλες γλώσσες), αλλά δημιουργεί κώδικα byte. Ο κώδικας byte μοιάζει πολύ με κώδικα γλώσσας μηχανής, με τη διαφορά ότι είναι ο ίδιος σε όλες τις πλατφόρμες. Έτσι, ένα πρόγραμμα τέτοιου τύπου που δημιουργήθηκε από έναν υπολογιστή Windows μπορεί να εκτελεστεί αυτούσιο σε έναν άλλον υπολογιστή με λειτουργικό σύστημα Unix. Υποστηρίζει πολυνημάτωση (multithreading). Ένα πρόγραμμα Java μπορεί να περιλαμβάνει πολλές ξεχωριστές διεργασίες, οι οποίες να εκτελούνται συνεχώς και ανεξάρτητα η μία από την άλλη. Μπορεί π.χ. να μεταδίδεται μια εικόνα, και συγχρόνως ο χρήστης να εισάγει στοιχεία από το πληκτρολόγιο. Αυτό το ισχυρό χαρακτηριστικό είναι τόσο πολύ συνυφασμένο με τη γλώσσα, ώστε καθιστά αδύνατη τη σύνδεση της Java με περιβάλλοντα τα οποία δεν υποστηρίζουν πολυνημάτωση. Κάνει περισυλλογή "απορριμμάτων" (garbage collection). Τα προγράμματα της Java κάνουν από μόνα τους περισυλλογή "απορριμμάτων". Αυτό σημαίνει ότι ο προγραμματιστής δεν χρειάζεται να φροντίζει πλέον ο ίδιος για τη διαγραφή άχρηστων δεδομένων από τη μνήμη. Έχει τη δυνατότητα να δημιουργεί γρήγορο κώδικα. Tο σύστημα του συνδυασμού μεταγλωττιστή (για τη δημιουργία κώδικα byte ο οποίος μπορεί να εκτελείται σε όλες τις πλατφόρμες) και διερμηνευτή (για τη βήμα-βήμα εκτέλεση του κώδικα byte σε κάθε συγκεκριμένη πλατφόρμα) θεωρείται σχετικά αργό. Για το λόγο αυτόν έχουν αναπτυχθεί ειδικοί μεταγλωττιστές, οι οποίοι ονομάζονται "just in time compilers" (JIT). Οι μεταγλωττιστές αυτοί μετατρέπουν τον κώδικα byte σε κώδικα γλώσσας μηχανής για το συγκεκριμένο επεξεργαστή. Η λειτουργία τους στηρίζεται σε δύο σημεία: α) Όταν επαναλαμβάνεται η εκτέλεση κάποιων τμημάτων κώδικα byte, είναι σπατάλη χρόνου αυτά να μετατρέπονται κάθε φορά σε γλώσσα μηχανής, αλλά αρκεί να γίνει η μετατροπή μία μόνο φορά. Στη συνέχεια, όταν απαιτηθεί ξανά η εκτέλεση των ίδιων τμημάτων κώδικα byte, μπορεί να χρησιμοποιηθεί ο ήδη έτοιμος κώδικας γλώσσας μηχανής.

22 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA β) Με τη βελτιστοποίηση του κώδικα που γράφει ο χρήστης μέσω ειδικών τεχνικών μπορεί να αυξηθεί σημαντικά η ταχύτητα εκτέλεσής του και να α- παιτηθεί επίσης λιγότερη μνήμη. Παρέχει βιβλιοθήκες κώδικα για διάφορες χρήσεις, όπως δημιουργία γραφικών, χειρισμό αλφαριθμητικών, μαθηματικές πράξεις, προσπέλαση αρχείων στο Διαδίκτυο, χειρισμό σχεσιακών βάσεων δεδομένων, δημιουργία εφαρμογών πελάτη διακομιστή, κλήση απομακρυσμένων αντικειμένων κ.λπ. Προσφέρει ευκολίες για τη δημιουργία δυναμικών ιστοσελίδων (dynamic web pages). Με τη χρήση της γλώσσας, σε μια ιστοσελίδα μπορούμε: Να "παίξουμε" ήχο ή βίντεο. Να χρησιμοποιήσουμε διανυσματικά γραφικά, αντί των ψηφιογραφικών (bitmap) εικόνων. Να δημιουργήσουμε κίνηση σε πραγματικό χρόνο. Να δημιουργήσουμε φόρμες εισαγωγής στοιχείων από τους χρήστες. Να φτιάξουμε παιχνίδια και εφαρμογές πραγματικού χρόνου, στα οποία θα συμμετέχουν ταυτόχρονα πολλοί παίκτες. Παρέχει τη δυνατότητα δημιουργίας εφαρμογών οι οποίες, μέσω ενός προγράμματος περιήγησης στο Διαδίκτυο, να έχουν πρόσβαση σε υπηρεσίες του Διαδικτύου. Κάνει δυνατή τη συγγραφή εφαρμογών για διακομιστές του Διαδικτύου που αφορούν την επεξεργασία φορμών, τη δημιουργία και λειτουργία φόρουμ, διαδικτυακών ηλεκτρονικών καταστημάτων, υπηρεσιών δημοσκοπήσεων κ.ά. Εκτός από υπολογιστές, μπορούν να γραφτούν εφαρμογές και για μια σειρά άλλων συσκευών όπως τα κινητά τηλέφωνα, οι έξυπνες τηλεοράσεις, οι μικροελεγκτές, οι αισθητήρες, οι πύλες δικτύων κ.λπ. Στο σημείο αυτό πρέπει να επαναλάβουμε ότι η Java είναι μια γενική γλώσσα προγραμματισμού και χρησιμοποιείται σε ένα ευρύ φάσμα εργασιών. Μπορεί κάλλιστα να χρησιμοποιηθεί για τη δημιουργία συνηθισμένων τύπων εφαρμογών, όπως για παράδειγμα για την κατασκευή ενός προγράμματος οδήγησης (driver) για έναν ε- κτυπωτή ή για τον υπολογισμό της μισθοδοσίας του προσωπικού μιας επιχείρησης. Η εταιρεία Oracle, η οποία εξαγόρασε την Java από τη Sun Microsystems, προσφέρει την Java σε τρεις εκδόσεις, κάθε μία από τις οποίες στοχεύει σε διαφορετικό τομέα τεχνολογίας. Οι μορφές αυτές είναι: Java SE (Java Standard Edition). Η ονομασία αυτή καθιερώθηκε από την έκδοση 1.6 της Java. Είναι το τυπικό πακέτο της Java το οποίο χρησιμοποιείται τόσο για εφαρμογές του Παγκόσμιου Ιστού, όσο και για κανονικές προγραμματιστικές ε- φαρμογές. Με αυτό θα ασχοληθούμε κυρίως σε αυτό το βιβλίο.

Κεφάλαιο 1: Εισαγωγή 23 Εικ. 1.1 Οι εκδόσεις της Java. Java EE (Java Enterprise Edition). Αποτελεί την έκδοση της Java για επιχειρήσεις. Περιλαμβάνει μια σειρά από τεχνολογίες κάτω από ενιαία αρχιτεκτονική, και στοχεύει στη δημιουργία επιχειρηματικών εφαρμογών (όπως π.χ. εφαρμογών ηλεκτρονικού εμπορίου) καθώς και άλλων υπηρεσιών του Παγκόσμιου Ι- στού οι οποίες εγκαθίστανται σε διακομιστές. Java ME (Java Micro Edition). Η έκδοση αυτή αποτελεί ένα ευέλικτο περιβάλλον για εφαρμογές που μπορούν να εκτελούνται σε φορητές συσκευές όπως κινητά τηλέφωνα, έξυπνες τηλεοράσεις, ψηφιακές ταμπλέτες (tablets), συστήματα πλοήγησης αυτοκινήτων, εκτυπωτές, έξυπνες πιστωτικές κάρτες, κ.λπ. Η ιστορία της Java Όλα άρχισαν το 1990, όταν μια ομάδα ερευνητών της εταιρείας Sun Microsystems (την οποία μπορείτε να δείτε στην επόμενη φωτογραφία της εταιρείας Sun), στην οποία συμμετείχαν οι James Gosling, Patrick Naughton, και Mike Sheridan, ξεκίνησε ένα πρόγραμμα με κωδικό όνομα "Green Project". Ο σκοπός του έργου ήταν να δημιουργήσουν προγράμματα με τα οποία θα μπορούσαν να κάνουν πιο "επαναστατική" τη χρήση και τη λειτουργία των οικιακών ηλεκτρονικών συσκευών (βίντεο, τηλεοράσεων, στερεοφωνικών, φούρνων μικροκυμάτων, συστημάτων συναγερμού κ.λπ.). Η ομάδα ξεκίνησε να δημιουργεί τα προγράμματα χρησιμοποιώντας τη γλώσσα C++, λόγω της ταχύτητας και του αντικειμενοστρεφούς χαρακτήρα της. Ο Gossling, όμως, σύντομα διαπίστωσε ότι η C++ δεν ήταν η κατάλληλη γλώσσα για τα προγράμματα που σκόπευαν να δημιουργήσουν. Ορισμένα χαρακτηριστικά της C++, όπως η πολλαπλή κληρονομικότητα, θέματα που αφορούσαν τη διαχείριση μνήμης, καθώς και η πολυπλοκότητα της γλώσσας, τους δυσκόλευαν. Επιπλέον, η C++ έδινε σημασία περισσότερο στην ταχύτητα εκτέλεσης της εφαρμογής, και λιγότερο στην αξιοπιστία. Η αξιοπιστία όμως είναι βασική απαίτηση για τις ηλεκτρονικές καταναλωτικές συσκευές. Ο Gossling, λοιπόν, αποφάσισε

24 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Εικ. 1.2 Η ομάδα ανάπτυξης του Green Project. ότι έπρεπε να δημιουργηθεί μια καινούργια γλώσσα στα πρότυπα της C++, η οποία να κρατά τη βασική της σύνταξη και τα καλά χαρακτηριστικά της, να μην περιέχει κάποια άλλα χαρακτηριστικά, και επιπλέον να διαθέτει δυνατότητες που δεν υπήρχαν στην C++. Έτσι, με τη βοήθεια ενός άλλου προγραμματιστή, του Patrick Naughton, τον Αύγουστο του 1991 δημιούργησε μια καινούργια γλώσσα, την οποία ονόμασε OAK. (Λέγεται ότι στον κήπο έξω από το γραφείο του υπήρχε μία βαλανιδιά oak και πήρε την ιδέα από εκεί. Κατ' άλλους, το OAK προέρχεται από τα αρχικά της φράσης Object Architecture Kernel, όρος με τον οποίο αναφερόταν η γλώσσα στα έγγραφα της Sun εκείνη την εποχή.) Καρπός των προσπαθειών της ομάδας του "Green Project" (που εργαζόταν πια με τη γλώσσα ΟΑΚ) ήταν η δημιουργία (το φθινόπωρο του 1992) ενός υπολογιστή χειρός του "*7" (star seven) ο οποίος έμοιαζε με τηλεχειριστήριο. To "*7" δεν είχε πλήκτρα αλλά κάποιες εικόνες, τις οποίες ο χρήστης μπορούσε να ελέγχει με την αφή για να χειρίζεται τις ηλεκτρονικές συσκευές που υπήρχαν στο σπίτι (τηλεοράσεις, βίντεο, στερεοφωνικά, τηλέφωνα, κ.λπ.). Το εγχείρημα αυτό, παρότι πέτυχε κατασκευαστικά, δεν παρουσίασε εμπορική επιτυχία. Εικ. 1.3 Η συσκευή *7.

Κεφάλαιο 1: Εισαγωγή 25 Στις αρχές του 1993 η ομάδα επικέντρωσε τις προσπάθειές της στο να προωθήσει την ΟΑΚ στον τομέα Video On Demand (VOD), κάνοντας σχετική πρόταση στην εταιρεία Time Warner, η οποία ενδιαφερόταν για τέτοια έργα εκείνη την εποχή. Η πρόταση δεν υιοθετήθηκε, αφού ο τομέας αυτός (VOD) κρίθηκε ότι δεν ήταν εμπορικά αξιοποιήσιμος. O Billy Joy, ένας από τους ιθύνοντες της Sun εκείνη την περίοδο, διέβλεψε ότι η ΟΑΚ θα μπορούσε να χρησιμοποιηθεί στον Παγκόσμιο Ιστό (World Wide Web). Είναι η εποχή κατά την οποία το Internet ξεφεύγει από την κατάσταση απλού κειμένου, και αρχίζουν να χρησιμοποιούνται γραφικά μέσω του Παγκόσμιου Ιστού. Η ομάδα αντιλαμβάνεται ότι η νέα γλώσσα "ταιριάζει γάντι" με την κατάσταση που διαμορφώνεται. Για τρίτη φορά το έργο αλλάζει κατεύθυνση. Η φιλοσοφία της εταιρείας είναι να διαθέτει τη γλώσσα δωρεάν, ώστε να τυποποιηθεί. Η ΟΑΚ μετονομάζεται σε Java τον Ιανουάριο του 1995, και λίγο αργότερα παρουσιάζεται επίσημα από την εταιρεία Sun ως εργαλείο ανάπτυξης εφαρμογών για το Internet. Δημιουργείται μάλιστα (από τους Patrick Naughton και Janathan Payne) και ένα πρόγραμμα περιήγησης στο Διαδίκτυο, αποκλειστικά γραμμένο σε Java, το HotJava. Η εταιρεία Netscape Communications κυκλοφορεί την έκδοση 2.0 του προγράμματος περιήγησης Netscape Navigator με υποστήριξη Java. Το ίδιο κάνει και η εταιρεία Microsoft για το αντίστοιχο πρόγραμμα Internet Explorer 3.0. Επιτέλους, μετά από προσπάθειες πέντε χρόνων, η Java έχει βρει το χώρο της. Εκδόσεις της Java Αρχική έκδοση (έκδοση jdk 1.0 και jdk 1.1) Ιανουάριος 1996 Η Java 1.0 κυκλοφόρησε από τη Sun Microsystems τον Ιανουάριο του 1996 και έγινε δημοφιλής από το πρόγραμμα Netscape Navigator 2.0 που κυκλοφόρησε το Φεβρουάριο του ίδιου έτους και είχε τη δυνατότητα να εκτελεί μικροεφαρμογές (applets). Στις αρχές του 1997 κυκλοφόρησε η έκδοση Java 1.1 που περιείχε ουσιαστικές βελτιώσεις και αλλαγές σε σχέση με την προηγούμενη έκδοση, όπως το νέο βασισμένο σε ακροατές (listeners) μοντέλο χειρισμού συμβάντων και η υποστήριξη εσωτερικών κλάσεων. Java 2 (jdk 1.2) Δεκέμβριος 1998 Το 1998 κυκλοφόρησε η πλατφόρμα Java 2, γνωστή στους χρήστες ως jdk 1.2 (Java Development Kit 1.2) ή SDK 1.2 (Software Development Kit 1.2). Η νέα έκδοση της Java πρόσθεσε επιπλέον δυνατότητες στις ήδη υπάρχουσες. Μερικές από αυτές ήταν η βιβλιοθήκη γραφικών Swing, η τεχνολογία Java2D, και η ενισχυμένη υποστήριξη για τα αρχεία ήχου.

26 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Java 1.3 Μάιος 2000 Την άνοιξη του 2000 η Sun έδωσε στην κυκλοφορία την έκδοση 1.3 (γνωστή και ως jdk 1.3), η οποία περιείχε δευτερεύουσας σημασίας αλλαγές και βελτιώσεις σε σχέση με την προηγούμενη έκδοση. Την ίδια εποχή κυκλοφόρησε και η πλατφόρμα J2EE. Java 1.4 Φεβρουάριος 2002 Στις 6 Φεβρουαρίου του 2002 βγήκε η νέα έκδοση της πλατφόρμας Java 2, συγκεκριμένα η Java 2 platform version 1.4, με αρκετές επιπλέον ευκολίες, όπως πολλές νέες κλάσεις και διασυνδέσεις, νέες δυνατότητες για την είσοδο και έξοδο δεδομένων, και υποστήριξη κανονικών παραστάσεων (regular expressions). Οι κανονικές παραστάσεις χρησιμοποιούνται ευρέως στο χειρισμό και την επεξεργασία αλφαριθμητικών δεδομένων. Java 5 (jdk1.5) Σεπτέμβριος 2004 Το Σεπτέμβριο του 2004 κυκλοφορεί η έκδοση 5.0 της Java (JDK 1.5). Με την έκδοση αυτή εισάγονται νέα χαρακτηριστικά, όπως οι γενικεύσεις (generics) και οι τύποι απαρίθμησης (Enumeration types). Τέτοια χαρακτηριστικά αφαιρούν τη συμβατότητα προς τα πίσω, και σε μερικά παλιά προγράμματα κάποια τμήματα του κώδικα έπρεπε να ξαναγραφτούν. Java 6 (jdk1.6) Δεκέμβριος 2006 Το Δεκέμβριο του 2006 η Sun ανακοινώνει την επόμενη έκδοση της Java, η ο- ποία έχει το όνομα Java SE 6. Η νέα έκδοση ονομάζεται επίσης και JDK 6 ή JDK 1.6.0 ή Java 6.0. Νέα χαρακτηριστικά: Ολοκληρωμένες υπηρεσίες Ιστού, JDBC 4.0 API, υποστήριξη σεναρίων. Java 7 (jdk 1.7) Ιούλιος 2011 Στις 28 Ιουλίου του 2011 κυκλοφορεί η Java 7 (jdk 1.7.0) εισάγοντας νέα χαρακτηριστικά, όπως η δυνατότητα χρήσης αλφαριθμητικών στις εντολές switch, ο χειρισμός πολλαπλών εξαιρέσεων, και το πακέτο Java nio. Σημαντικό είναι ότι η νέα κυκλοφορία της Java έγινε από την εταιρεία Oracle Corporation, η οποία από τον Ιανουάριο του 2010 είχε εξαγοράσει την εταιρεία Sun. Java 8 Μάρτιος 2014 Στις 18 Μαρτίου 2014 κυκλοφόρησε η έκδοση 8 (Java 8). Η Java SE 8 είναι αποτέλεσμα ανάπτυξης από το σύνολο της «κοινότητας Java», με αναθεωρήσεις και ευρεία συνεργασία ανάμεσα στους μηχανικούς της Oracle και μέλη της ανά τον κόσμο κοινότητας των προγραμματιστών Java. Μερικά νέα χαρακτηριστικά της έκδοσης 8 είναι: Εκφράσεις λάμδα (Lambda Expressions). Διοχετεύσεις και ρεύματα (Pipelines & Streams).

Κεφάλαιο 1: Εισαγωγή 27 Καινούργια βιβλιοθήκη ημερομηνίας και ώρας (Date and Time API). H JavaScript μηχανή Nashorn. (Nashorn JavaScript Engine). Βελτιωμένη έκδοση της εικονικής μηχανής HotSpot. Ξεκίνημα με την Java Για να μπορέσουμε να γράψουμε προγράμματα σε γλώσσα Java, χρειάζεται να διαθέτουμε το ειδικό πακέτο ανάπτυξης εφαρμογών, το JDK (Java Development Kit ). To JDK είναι κάτι παραπάνω από μια γλώσσα προγραμματισμού: περιέχει μια ομάδα από εργαλεία, στα οποία συμπεριλαμβάνονται μεταγλωττιστής, διερμηνευτής, αποσφαλματωτής (debugger), αποσυμβολομεταφραστής (disassembler), κ.λπ. Μπορούμε να το μεταφορτώσουμε δωρεάν από την ειδική σελίδα της Oracle. http://www.oracle.com/technetwork/java/javase/downloads/index.html Εικ. 1.4 Η ιστοσελίδα της Oracle για τη μεταφόρτωση της Java.

28 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Στη σελίδα παρατηρούμε ότι προς τη δεξιά πλευρά υπάρχουν ενδείξεις και κουμπιά μεταφόρτωσης (download) α) για το JDK, β) για τον Server JRE, και γ) για το JRE. To JRE (Java Runtime Environment) είναι το πακέτο το οποίο πρέπει να εγκαταστήσει ο χρήστης στον υπολογιστή του προκειμένου να εκτελεί εφαρμογές Java. Το Server JRE είναι το αντίστοιχο πακέτο που πρέπει να εγκαταστήσει ο διαχειριστής σε ένα διακομιστή ώστε να μπορούν να εκτελούνται στο διακομιστή εφαρμογές Java. Εμάς μας ενδιαφέρει το κατέβασμα και η εγκατάσταση του JDK. Πατώντας στο κουμπί-σύνδεσμο DOWNLOAD κάτω από την ένδειξη JDK, οδηγούμαστε στη σελίδα μεταφόρτωσης. Εικ. 1.5 Από την ιστοσελίδα μεταφόρτωσης μπορούμε να επιλέξουμε την έκδοση του JDK για το λειτουργικό σύστημα που χρησιμοποιούμε.

Κεφάλαιο 1: Εισαγωγή 29 Στη σελίδα αυτή μπορούμε να επιλέξουμε το είδος του πακέτου που θα κατεβάσουμε, ανάλογα με το λειτουργικό σύστημα που χρησιμοποιούμε. Αφού κάνουμε την ε- πιλογή μας, οδηγούμαστε στη διαδικασία της μεταφοράς του πακέτου στον υπολογιστή μας. Το JDK είναι το μόνο απαραίτητο εργαλείο για να αρχίσει κανείς να γράφει προγράμματα, όμως δεν είναι ό,τι πιο εύκολο στη χρήση του. Για το λόγο αυτόν υπάρχουν προϊόντα τόσο από την Oracle όσο και από τρίτους κατασκευαστές, τα οποία ονομάζονται ενοποιημένα περιβάλλοντα ανάπτυξης (Integrated Development Environments, IDE) και μας βοηθούν να γράφουμε πιο εύκολα εφαρμογές Java. Μερικά από τα πιο δημοφιλή IDE για Java είναι το NetBeans, το Eclipse (http://www. eclipse.org), το IntelliJ (http://www.jetbrains.com/), το BlueJ (http://www.bluej. org/), το jedit (http://www.jedit.org/) και πολλά άλλα, από τα οποία τα περισσότερα είναι δωρεάν. Το IDE που διατίθεται από την Oracle είναι το NetBeans, και αν παρατηρήσουμε στην Εικόνα 1.4 προσφέρεται και αυτό για δωρεάν μεταφόρτωση. Περισσότερες πληροφορίες για τα ενοποιημένα περιβάλλοντα ανάπτυξης και για το πώς χρησιμοποιούμε κάποια από αυτά θα δούμε στο Κεφάλαιο 19. Αρκετοί είναι αυτοί που ξεκινούν το πρώτο τους πρόγραμμα μέσα από ένα IDE, εμείς όμως θα ξεκινήσουμε από το JDK το οποίο μόλις μεταφορτώσαμε στον υπολογιστή μας. Το αρχείο που περιέχει το JDK είναι αυτοαποσυμπιεζόμενο (self extracting), α- ποσυμπιέζεται δηλαδή και αρχίζει να εγκαθίσταται μόνο του, αρκεί να διπλοπατήσουμε με το ποντίκι στο όνομα ή στο εικονίδιό του. Εικ. 1.6 Το πακέτο του jdk που κατεβάσαμε προς εγκατάσταση.

30 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Εικ. 1.7 Η εγκατάσταση γίνεται στο φάκελο «Αρχεία Εφαρμογών» και στον υποφάκελο Java. Η εγκατάσταση θα γίνει μέσα στο φάκελο Αρχεία Εφαρμογών, στον υποφάκελο Java. Εκεί θα δημιουργηθούν από το πρόγραμμα οι κατάλληλοι υποφάκελοι, όπως μπορούμε να δούμε στην Εικόνα 1.7. Στον υποφάκελο bin υπάρχουν τα εργαλεία ανάπτυξης της γλώσσας, όπως ο μεταγλωττιστής, ο διερμηνευτής, ο αποσφαλματωτής, και πολλά άλλα. Για να μπορούμε να χρησιμοποιούμε τα εργαλεία της Java σε όποιο φάκελο και αν βρισκόμαστε, πρέπει να δηλώσουμε το φάκελο bin στη μεταβλητή περιβάλλοντος Path του λειτουργικού συστήματος που χρησιμοποιούμε. Η ρύθμιση της μεταβλητής γίνεται με παρόμοιο τρόπο για όλα τα λειτουργικά συστήματα. Στα Windows 7, για παράδειγμα, διπλοπατάμε στο εικονίδιο Υπολογιστής (ή πατάμε στο κουμπί Έναρξη Υπολογιστής) και στο παράθυρο που εμφανίζεται επιλέγουμε Ιδιότητες συστήματος.

Κεφάλαιο 1: Εισαγωγή 31 Εικ. 1.8 Από το παράθυρο «Υπολογιστής», επιλέγουμε «Ιδιότητες συστήματος». Από το παράθυρο που εμφανίζεται στη συνέχεια, επιλέγουμε στην αριστερή πλευρά Ρυθμίσεις συστήματος για προχωρημένους για να εμφανίσουμε το παράθυρο με τις ιδιότητες του συστήματος. Εικ. 1.9 Από το παράθυρο «Ιδιότητες συστήματος» επιλέγουμε «Μεταβλητές περιβάλλοντος».

32 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Εικ. 1.10 Επιλέγουμε τη μεταβλητή Path (1), πατάμε στο κουμπί Επεξεργασία (2), και συμπληρώνουμε το περιεχόμενο της Path (3). Στο παράθυρο Ιδιότητες συστήματος πατάμε στο κουμπί Μεταβλητές περιβάλλοντος 3 για να εμφανιστεί το αντίστοιχο παράθυρο. Στις μεταβλητές περιβάλλοντος, βρίσκουμε τη μεταβλητή Path και πατώντας στο κουμπί Επεξεργασία συμπληρώνουμε το περιεχόμενό της προσθέτοντας τη διαδρομή προς το φάκελο bin της εγκατάστασης που έχουμε κάνει για την Java: ;C:\Program Files\Java\jdk1.8.0_25\bin; (Εννοείται ότι εσείς θα πρέπει να γράψετε τη διαδρομή ανάλογα με την έκδοση της Java που εγκαταστήσατε στον υπολογιστή σας και το φάκελο στον οποίο την έχετε τοποθετήσει ). Μια άλλη σημαντική μεταβλητή περιβάλλοντος για την εκτέλεση των προγραμμάτων της Java είναι η μεταβλητή CLASSPATH. Στην CLASSPATH τοποθετούνται οι φάκελοι με τις κλάσεις 4 που θα συμπεριλαμβάνονται στα προγράμματά μας. Εάν δεν 3 Οι μεταβλητές περιβάλλοντος διαθέτουν πληροφορίες, τις οποίες το λειτουργικό σύστημα παρέχει σε όλα τα προγράμματα. Χρησιμοποιούνται συνήθως για να ενημερώνουν για τη θέση σημαντικών αρχείων τα οποία βρίσκονται στον υπολογιστή. 4 Είναι τα αρχεία με τον κώδικα byte τα οποία θα εκτελεστούν από την εικονική μηχανή της Java. Θα αναφερθούμε σε αυτά σε αμέσως επόμενη ενότητα.

Κεφάλαιο 1: Εισαγωγή 33 Εικ. 1.11 Η μεταβλητή CLASSPATH πρέπει να περιλαμβάνει τις θέσεις στις οποίες βρίσκονται οι κλάσεις μας. υπάρχει στο σύστημα μεταβλητή CLASSPATH, η προεπιλεγμένη τιμή της είναι ο τρέχων φάκελος. Εάν υπάρχει, πρέπει να περιλαμβάνει και τον τρέχοντα φάκελο. Ο τρέχων φάκελος παριστάνεται με μια τελεία (.). Έστω ότι θέλουμε οι κλάσεις μας να βρίσκονται στη θέση: c:\myprograms\kef1 Μεταβαίνουμε στο παράθυρο με τις μεταβλητές περιβάλλοντος και είτε δημιουργούμε (αν δεν υπάρχει), είτε τροποποιούμε τη μεταβλητή CLASSPATH έτσι ώστε να περιλαμβάνει αφενός τον τρέχοντα φάκελο, και αφετέρου τον παραπάνω φάκελο. Η τιμή δηλαδή της CLASSPATH θα είναι: ;.; c:\myprograms\kef1 Εάν υπάρχουν και άλλοι φάκελοι στους οποίους έχουμε τοποθετήσει κλάσεις προσθέτουμε στην CLASSPATH τη διαδρομή τους με ανάλογο τρόπο. Το περιβάλλον της γλώσσας Όπως αναφέραμε και στην εισαγωγή, η Java μπορεί να δημιουργήσει προγράμματα τα οποία εκτελούνται σε μια ποικιλία υπολογιστών και λειτουργικών συστημάτων. Αυτό το καταλαβαίνουμε καλύτερα αν παρατηρήσουμε τα παρακάτω σχήματα, όπου