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



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

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

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

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

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

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

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

(Διαφάνειες Νίκου Βιδάκη)

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

Κλάσεις και Αντικείµενα

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

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

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

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

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

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #17

Ειδικά Θέματα Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Graphical User Interfaces (GUI) SWING

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Ειδικά Θέματα Προγραμματισμού

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

ημιουργία Γραφικού Περιβάλλοντος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Βασικά της γλώσσας JAVA

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

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

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #18

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

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

Certified Java Programmer (CJP)

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Σύνθεση και Κληρονομικότητα

Week 10: Graphical User Interfaces

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

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

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

Σύνθεση και Κληρονομικότητα

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

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

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

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

ΚΕΦΑΛΑΙΑ attributes parameters

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 5: Κατασκευαστές (Constructors)

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

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

Transcript:

Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1 Εισαγωγή... 19 Τι είναι η Java... 19 Η ιστορία της Java... 23 Εκδόσεις της Java... 25 Ξεκίνημα με την Java... 27 Το περιβάλλον της γλώσσας... 31 Δημιουργία μιας εφαρμογής Java... 33 Δημιουργία ενός Java applet... 37 Ερωτήσεις και Ασκήσεις... 41 Κεφάλαιο 2 Δεδομένα, μεταβλητές, υπολογισμοί... 45 Μεταβλητές και δεδομένα... 45 Ακέραιοι τύποι δεδομένων... 49 Αριθμοί κινητής υποδιαστολής... 50 Οι μοναδιαίοι τελεστές αύξησης και μείωσης... 51 Οι τελεστές των αριθμητικών πράξεων... 52 Περισσότερα για τις εκχωρήσεις... 55 Λογικές τιμές... 57 Τελεστές σύγκρισης... 57 Λογικοί τελεστές... 57 Τελεστές δυαδικών ψηφίων... 59 Χαρακτήρες... 61 7

8 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Αλφαριθμητικά... 63 Αρχικές τιμές για τις μεταβλητές-μέλη... 63 Μετατροπή τύπου δεδομένων... 64 Μαθηματικές συναρτήσεις... 66 Συμπληρωματικές ασκήσεις... 69 Μετατροπή αλφαριθμητικών σε αριθμούς... 74 Εισαγωγή δεδομένων από το πληκτρολόγιο... 75 Εισαγωγή δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης Scanner... 76 Ερωτήσεις και Ασκήσεις... 81 Κεφάλαιο 3 Δομές διακλάδωσης επαναλήψεις μέθοδοι... 85 Αποφάσεις... 85 Η δομή if... 86 Ο όρος else... 87 Ένθετα if... 90 Οι τελεστές & και... 94 Ο τριαδικός τελεστής?:... 95 Η δομή πολλαπλής διακλάδωσης switch... 96 Εντολές επανάληψης βρόχοι... 98 Ο βρόχος for... 99 O βρόχος while...101 O βρόχος do - while...102 Ένθετοι βρόχοι...104 Η εντολή continue...106 Η χρήση του break σε ένα βρόχο...108 Μέθοδοι...114 Ερωτήσεις και Ασκήσεις...118 Κεφάλαιο 4 Πίνακες και αλφαριθμητικά... 121 Πίνακες με μία διάσταση...121 Η δήλωση ενός πίνακα...122 Η καταχώριση του πίνακα...122 Απόδοση αρχικών τιμών στον πίνακα...123 Πίνακες πολλών διαστάσεων...125 Ταξινόμηση...127

Περιεχόμενα 9 Αλφαριθμητικά...130 Πράξεις με αλφαριθμητικά...132 Υποαλφαριθμητικά...135 Προσπέλαση μεμονωμένων χαρακτήρων ενός αλφαριθμητικού και εύρεση του μήκους του...136 Αντικατάσταση χαρακτήρων σε ένα αλφαριθμητικό...136 Εντοπισμός χαρακτήρων μέσα σε ένα αλφαριθμητικό...137 Μετατροπή άλλων τύπων δεδομένων σε αλφαριθμητικά η μέθοδος valueof...140 Μετατροπή αλφαριθμητικών σε άλλους τύπους δεδομένων...141 Η κλάση StringBuffer...142 Αντικατάσταση χαρακτήρων σε αντικείμενο της κλάσης StringBuffer...143 Μετατροπή αντικειμένου StringBuffer σε αλφαριθμητικό...144 Αντιστροφή αλφαριθμητικού η μέθοδος reverse()...145 Ερωτήσεις και Ασκήσεις...146 Κεφάλαιο 5 Κλάσεις και αντικείμενα... 151 Κλάσεις και αντικείμενα...151 Πώς ορίζουμε μια κλάση...152 Η μεταβλητή this...155 Οι κατασκευαστές...155 Πώς θα χρησιμοποιήσουμε μια κλάση που δημιουργήσαμε...157 Πολλαπλοί κατασκευαστές...159 Η αναφορά στα αντικείμενα...160 Τι είναι τα πακέτα...162 Τα τυπικά πακέτα της Java...163 Πώς μπορούμε να "πακετάρουμε" τις δικές μας κλάσεις...164 Αντικειμενοστρεφής προγραμματισμός...169 Ενθυλάκωση οι προσδιοριστές public, private και protected...170 Πολυμορφισμός...171 Η κληρονομικότητα των κλάσεων...173 Τελικές κλάσεις και μέθοδοι...180 Μέθοδοι και κλάσεις αφηρημένου τύπου...180 Οι διασυνδέσεις...181 Ερωτήσεις και Ασκήσεις...184

10 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Κεφάλαιο 6 Δημιουργία του πρώτου applet... 187 Εισαγωγή...187 Κατασκευή του πρώτου μας applet...188 Πώς δουλεύει το applet HelloWorld.java και το αρχείο HelloWorld.html...191 Μεταβίβαση παραμέτρων στο applet...193 Περισσότερα για τα applet...198 Οι μέθοδοι που χρησιμοποιούνται σε ένα applet...199 Το πρόσθετο Java (Java plug in) και η ετικέτα <OBJECT>...201 Ερωτήσεις και Ασκήσεις...203 Κεφάλαιο 7 Γραφικά... 207 Εισαγωγή η βιβλιοθήκη AWT (Abstract Window Toolkit)...207 Το σύστημα συντεταγμένων της Java...208 Οι γραμματοσειρές...209 Εμφάνιση κειμένου με διάφορες γραμματοσειρές...211 Πληροφορίες για τις γραμματοσειρές...214 Η ρύθμιση του χρώματος...217 Αλλαγή του σχήματος του δρομέα...219 Γραμμές...220 Ορθογώνια...220 Ελλείψεις, κύκλοι, και τόξα...224 Πολύγωνα...227 Αντιγραφή τμήματος της οθόνης...230 Εφαρμογές...231 Ερωτήσεις και Ασκήσεις...237 Κεφάλαιο 8 Γραφικό περιβάλλον διασύνδεσης Μέρος Ι: Τα βασικά συστατικά... 241 Γραφικό περιβάλλον διασύνδεσης GUI...241 Συστατικά και υποδοχείς στην Java...243 Κουμπί διαταγής...244 Ετικέτα...247 Λίστες...249 Πλαίσια ελέγχου και κουμπιά επιλογής...252 Μενού επιλογής...254 Πεδίο κειμένου και περιοχή κειμένου...256 Ερωτήσεις και Ασκήσεις...259

Περιεχόμενα 11 Κεφάλαιο 9 Γεγονότα... 261 Γεγονότα το μοντέλο αποστολής γεγονότος...261 Η κλάση ActionEvent...268 Γεγονότα ρύθμισης οι ράβδοι κύλισης...269 Η κλάση ItemEvent...272 Διασυνδέσεις ακροατών για συμβάντα χαμηλού επιπέδου...273 Γεγονότα του ποντικιού...275 Γεγονότα του πληκτρολογίου...280 Προσαρμοστές...281 Ερωτήσεις και Ασκήσεις...285 Κεφάλαιο 10 Διαχειριστές διάταξης... 287 Εισαγωγή...287 Ο διαχειριστής FlowLayout...288 Ο διαχειριστής BorderLayout...290 Ο διαχειριστής GridLayout...293 Ο διαχειριστής GridBagLayout...296 Πάνελ...305 Ο διαχειριστής CardLayout...307 Ερωτήσεις και Ασκήσεις...311 Κεφάλαιο 11 Γραφικό περιβάλλον διασύνδεσης Κεφάλαιο 11 Μέρος ΙI: Περισσότερα συστατικά του AWT... 313 Το συστατικό καμβάς...313 Πλαίσια...316 Μενού...320 Πλαίσια διαλόγου...328 Αναδυόμενα μενού...335 Ερωτήσεις και Ασκήσεις...337 Κεφάλαιο 12 Swing και Java2D... 341 Τι είναι το Swing...341 Το μοντέλο του υποδοχέα ριζικού πλαισίου...345 Πλαίσια το συστατικό JFrame...347 Η κλάση JComponent...350 Ετικέτες και κουμπιά διαταγών...351

12 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Ετικέτες η κλάση JLabel...351 Κουμπιά η κλάση JButton...355 Συστατικά κειμένου...360 Πεδίο και περιοχή κειμένου οι κλάσεις JTextField και JTextArea...360 Ο χειρισμός των γεγονότων στο Swing...361 Επικοινωνία με το χρήστη η κλάση JOptionPane...371 Ο επιλογέας χρωμάτων το συστατικό JColorChooser...374 Πλαίσια η κλάση JPanel...377 Πλαίσια ελέγχου και ραδιοπλήκτρα οι κλάσεις JCheckBox και JRadioButton...382 Πτυσσόμενα πλαίσια και λίστες οι κλάσεις JComboBox και JList...386 Επιλογή αρχείων η κλάση JFileChooser...394 Ράβδος ολίσθησης με λαβή η κλάση JSlider...397 Η χρήση μενού στα πλαίσια οι κλάσεις JMenu, JMenuBar και JMenuItem...400 Δημιουργία περιγραμμάτων στα πλαίσια...404 Τα applet του Swing η κλάση JApplet...409 Ο διαχειριστής διάταξης BoxLayout...411 Εμφάνιση και αίσθηση...416 Γραφικά με το πακέτο Java 2D...421 Εκτυπώσεις στην Java2...427 Ερωτήσεις και Ασκήσεις...430 Κεφάλαιο 13 Εξαιρέσεις και ισχυρισμοί... 435 Τι είναι οι εξαιρέσεις...435 Τύποι εξαιρέσεων...437 Χειρισμός εξαιρέσεων...439 Δημιουργία των δικών μας εξαιρέσεων...440 Το τμήμα finally...445 Ισχυρισμοί (assertions)...446 Ερωτήσεις και Ασκήσεις...451 Κεφάλαιο 14 Νήματα... 453 Τι είναι τα νήματα...453 Το νήμα "δαίμων"...455 Δημιουργία νήματος με την κλάση Thread...456 Δημιουργία νήματος με την εφαρμογή της διασύνδεσης Runnable...458

Περιεχόμενα 13 Συγχρονισμός...467 Προτεραιότητες...472 Νήματα και κινούμενες εικόνες...474 Ερωτήσεις και Ασκήσεις...478 Κεφάλαιο 15 Εικόνες, ήχος, κίνηση... 481 Οι τύποι των εικόνων...481 Η θέση της εικόνας οι μέθοδοι getdocumentbase(), getcodebase()...482 Η φόρτωση της εικόνας...483 Η εμφάνιση της εικόνας...484 Το μέγεθος της εικόνας...486 Χάρτες γραφικών...487 Ήχοι...489 Το Java Media Player...492 Δημιουργία κίνησης με τη χρήση εικόνων...496 Γραφικά με την τεχνική της διπλής προσωρινής αποθήκευσης και τη χρήση της κλάσης MediaTracker...501 Ερωτήσεις και Ασκήσεις...505 Κεφάλαιο 16 Τεχνικές εισόδου/εξόδου... 509 Το ρεύμα δεδομένων...509 Τα αντικείμενα αρχείων...511 Ρεύματα εξόδου...514 Η κλάση FileOutputStream...515 Η κλάση FilterOutputStream...517 Τα ρεύματα εισόδου...520 Οι υποκλάσεις της InputStream...521 Η υποκλάση FilterInputStream...522 Ρεύματα με αποθήκευση...524 Πλαίσια διαλόγου αρχείων...525 Το νέο I/O API η κλάση FileChannel...528 Ερωτήσεις και Ασκήσεις...530 Κεφάλαιο 17 Επικοινωνίες και δίκτυα... 533 Δίκτυα...533 Το πρωτόκολλο TCP/IP...534 Οι διευθύνσεις στο δίκτυο...536

14 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Η κλάση InetAddress...537 Προσδιορισμός των αρχείων στο δίκτυο η κλάση URL...541 Υποδοχές...544 Υποδοχές αυτοδύναμων πακέτων...550 Ερωτήσεις και ασκήσεις...556 Κεφάλαιο 18 Δομές δεδομένων το πακέτο java.util.*... 559 Οι κλάσεις-περιτυλίγματα...559 Οι συλλογές (Collection)...561 Γενικοί τύποι (Generics)...562 Επαναλήπτες (Iterator)...563 Η κλάση ArrayList...563 Η κλάση Vector και η διασύνδεση Iterator...567 Λίστες...570 Η δομή στοίβας η κλάση Stack...575 Η δομή ουράς...577 Απεικόνιση (Map)...579 Δένδρα...583 Κανονικές εκφράσεις...590 Ερωτήσεις και Ασκήσεις...596 Κεφάλαιο 19 Το εργαλείο Javadoc διεθνοποίηση... 597 Εισαγωγή...597 Σχόλια doc...598 Ετικέτες javadoc...601 Η διεθνοποίηση της Java...603 Τοποθεσία...603 Δέσμες πόρων...608 Ερωτήσεις και Ασκήσεις...613 Κεφάλαιο 20 Η Java και οι βάσεις δεδομένων... 615 Εισαγωγή...615 Βάσεις δεδομένων σχεσιακές βάσεις δεδομένων...616 Η γλώσσα SQL (Structured Query Language)...619 Το JDBC API...621 Οι κυριότερες κλάσεις και διασυνδέσεις του JDBC...622

Περιεχόμενα 15 Οι διασυνδέσεις ResultSet και ResultSetMetaData...629 Η διασύνδεση Statement και η εκτέλεση εντολών SQL...631 Εργασία με το ΣΔΒΔ Derby...635 Ερωτήσεις και Ασκήσεις...636 Κεφάλαιο 21 Επίκληση απομακρυσμένων μεθόδων servlets... 637 Τι είναι η Επίκληση Απομακρυσμένων Μεθόδων (RMI)...637 Η αρχιτεκτονική του RMI...639 Εισαγωγή στα servlet...646 Ερωτήσεις και Ασκήσεις...653 Κεφάλαιο 22 JavaΒeans... 655 Επισκόπηση της τεχνολογίας JavaBeans...655 Ο κόκκος...657 Το BDK (Beans Development Kit)...658 Η δημιουργία ενός κόκκου...665 Περισσότερα για τα αρχεία JAR και για το βοηθητικό πρόγραμμα jar...668 Γεγονότα και ακροατές...670 Απλές ιδιότητες ενός κόκκου...677 Συνδεδεμένες ιδιότητες...678 Περιοριστικές ιδιότητες...680 Η σειριοποίηση των αντικειμένων...682 Ρεύματα σειριοποίησης...683 Προσαρμοσμένη σειριοποίηση...686 Αντανάκλαση...690 Ενδοσκόπηση...690 Ερωτήσεις και Ασκήσεις...695 Κεφάλαιο 23 Ολοκληρωμένα περιβάλλοντα ανάπτυξης εφαρμογών... 697 Το περιβάλλον NetBeans...698 Εργασία με την Β.Δ. Derby μέσα από το NetBeans...709 Το πρόγραμμα JCreator...717 Το περιβάλλον Eclipse...723 Ο JBuilder 2007...731 BlueJ...739 Microsoft Visual J++, J#, C#...745

16 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Κεφάλαιο 24 Java και XML... 753 Εισαγωγή στην XML...753 Τα τρία XML API...763 Εργασία με το StAX...764 Ερωτήσεις και Ασκήσεις...770 Παράρτημα... 771 Ευρετήριο... 773

Κεφάλαιο 5: Κλάσεις και αντικείμενα 169 // εκτύπωση του εμβαδού κάθε κύκλου System.out.println (" Area of troxos="+troxos.area()); System.out.println (" Area of roda="+roda.area()); Μετά την εκτέλεση του προγράμματος εμφανίζονται τα ακόλουθα αποτελέσματα: Αντικειμενοστρεφής προγραμματισμός Η Java είναι μια αντικειμενοστρεφής γλώσσα προγραμματισμού. Σε αυτό το είδος προγραμματισμού (Object Oriented Programming, OOP) μπορούμε να θεωρήσουμε τα στοιχεία του προγράμματος ως αντικείμενα. Σύμφωνα με αυτή τη θεώρηση μια κλάση παρουσιάζει μια συγκεκριμένη εικόνα της "προς τα έξω". Αυτή η εικόνα εμφανίζει τις λειτουργίες (μεθόδους) που επιτελεί η κλάση, καθώς και τα δεδομένα που χρησιμοποιεί. Οτιδήποτε άλλο συμβαίνει μέσα στην κλάση, όπως π.χ. οι λεπτομερείς ενέργειες που γίνονται μέσα στις μεθόδους, παραμένει κρυφό. Η όλη ιδέα μοιάζει με την ιδέα του αυτοκινήτου: Για να οδηγήσει κάποιος ένα αυτοκίνητο, δεν χρειάζεται να ξέρει τη δομή και τη λειτουργία του κινητήρα ή το τι συμβαίνει μέσα στο κιβώτιο ταχυτήτων. Κάνει μερικές λειτουργικές ενέργειες, τις οποίες του παρέχουν τα εξαρτήματα του αυτοκινήτου (τιμόνι, γκάζι, φρένο, ταχύτητες κ.λπ.) και δεν χρειάζεται να ξέρει πώς λειτουργούν τα εξαρτήματα αυτά. Τη βασική ιδέα του αντικειμενοστρεφούς προγραμματισμού υλοποιούν τρεις αρχές: Η ενθυλάκωση (encapsulation), η κληρονομικότητα (inheritance) και ο πολυμορφισμός (polymorphism).

170 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Ενθυλάκωση οι προσδιοριστές public, private και protected Η ενθυλάκωση παρουσιάζει την εξωτερική όψη ενός αντικειμένου και αποκρύπτει την πολύπλοκη λογική που υπάρχει μέσα του. Αυτό επιτρέπει στον προγραμματιστή να τροποποιεί ή να βελτιώνει τους αλγόριθμους οι οποίοι υπάρχουν σε μία κλάση, χωρίς να ανησυχεί μήπως προκαλέσει απρόβλεπτα αποτελέσματα. Με άλλα λόγια, τη στιγμή που σε μια κλάση τα δεδομένα και οι χρησιμοποιούμενες μέθοδοι δεν αλλάζουν, κάθε αλλαγή στον τρόπο υλοποίησής τους παραμένει διαφανής για το χρήστη. Τα δεδομένα και οι μέθοδοι μιας κλάσης μπορεί να δηλωθούν ως public, ως private, ως protected, ή χωρίς κανέναν από τους προηγούμενους τρεις προσδιοριστές προσπέλασης (access modifiers). Οι μεταβλητές, οι μέθοδοι, και οι κλάσεις που δηλώνονται ως public, μπορούν να προσπελαστούν από οποιαδήποτε άλλη κλάση, όπου κι αν βρίσκεται αυτή. Όσες μεταβλητές και μέθοδοι χαρακτηρίζονται ως private, μπορούν να προσπελαστούν και να χρησιμοποιηθούν μόνο από το ίδιο το αντικείμενο. Δεν μπορούν να προσπελαστούν από πουθενά έξω από αυτό. Τέλος, οι μεταβλητές και οι μέθοδοι που έχουν δηλωθεί ως protected σε μια κλάση μπορούν να προσπελαστούν από όλες τις κλάσεις που βρίσκονται στο ίδιο πακέτο ή από τις υποκλάσεις (subclasses) αυτής της κλάσης για τις οποίες θα μιλήσουμε στη συνέχεια. Εάν δεν χρησιμοποιηθεί κανένας από τους παραπάνω προσδιοριστές για μια μεταβλητή, μέθοδο, ή κλάση, τότε αυτή μπορεί να χρησιμοποιηθεί μόνο από τις κλάσεις που βρίσκονται στο ίδιο πακέτο. Παράδειγμα Στο παρακάτω σχήμα δηλώνονται οι ακέραιοι x, y, z, n ως public, private, protected, και χωρίς προσδιοριστή αντίστοιχα, και φαίνεται η δυνατότητα προσπέλασής τους από αλλού. Στο επάνω μέρος του σχήματος οι κλάσεις βρίσκονται στο ίδιο πακέτο, ενώ στο κάτω σε διαφορετικά πακέτα.

Κεφάλαιο 5: Κλάσεις και αντικείμενα 171 Στον πίνακα που ακολουθεί φαίνεται η δυνατότητα προσπέλασης για τους τύπους των προσδιοριστών: Δυνατότητα προσπέλασης public protected Χωρίς προσδιοριστή private Από την ίδια κλάση Ναι Ναι Ναι Ναι Από τις κλάσεις του ίδιου πακέτου Ναι Ναι Ναι Όχι Από οποιαδήποτε κλάση εκτός του πακέτου στο οποίο ανήκει η κλάση Από μια υποκλάση του ίδιου πακέτου Από μια υποκλάση έξω από το πακέτο στο οποίο ανήκει η κλάση Ναι Όχι Όχι Όχι Ναι Ναι Ναι Όχι Ναι Ναι Όχι Όχι Πολυμορφισμός Ένα άλλο χαρακτηριστικό του αντικειμενοστρεφούς προγραμματισμού είναι ο πολυμορφισμός. Πολυμορφισμό έχουμε στην περίπτωση που η ίδια μέθοδος ή ο ίδιος τελεστής χρησιμοποιείται με διαφορετικούς τύπους δεδομένων. Για να πάρουμε μια ιδέα για την έννοια του πολυμορφισμού, ας εξετάσουμε ένα ανάλογο παράδειγμα από την καθημερινή ζωή. Έστω ότι βρισκόμαστε σε ένα σχολείο.

172 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Κάθε μαθητής γνωρίζει τη σημασία που έχει το κουδούνι. Όταν αυτό κτυπά, κάποιοι μαθητές φεύγουν από το σχολείο γιατί σχόλασαν, άλλοι πηγαίνουν στην αίθουσά τους για το επόμενο μάθημα, και άλλοι αφήνουν την αίθουσα των μαθημάτων και πηγαίνουν στο σχολικό εργαστήριο γιατί πρόκειται να παρακολουθήσουν ένα πείραμα. Συμπέρασμα: στο χτύπημα του κουδουνιού ανταποκρίνονται όλοι οι μαθητές, αλλά ο τρόπος με τον οποίον ανταποκρίνεται ο καθένας είναι διαφορετικός. Ένα άλλο παράδειγμα πολυμορφισμού είναι ο τελεστής της πρόσθεσης (+). Μπορεί να χρησιμοποιηθεί τόσο για την πρόσθεση δύο αριθμών όσο και για τη συνένωση δύο αλφαριθμητικών. Ο πολυμορφισμός μπορεί να χρησιμοποιηθεί και στις κλάσεις που δημιουργεί ο χρήστης. Ήδη στο κεφάλαιο αυτό, χρησιμοποιήθηκαν δύο τύποι κατασκευαστών της κλάσης Circle, εκ των οποίων ο ένας είχε τρία ορίσματα και ο άλλος ένα. class Circle static double Pi=3.14; static int count=0; double radius; double x; double y; Circle (double r1, double x1, double y1) radius=r1; x = x1; y = y1; ++count; Circle (double r2) x=0.0; y=0.0; radius=r2; ++count; Η κατάσταση στην οποία μπορούμε να έχουμε περισσότερους από έναν κατασκευαστές με το ίδιο όνομα, αλλά τον καθένα με τα δικά του ιδιαίτερα ορίσματα, ονομάζεται υπερφόρτωση κατασκευαστή (constructor overloading). Το όνομα του κάθε κατασκευαστή σε συνδυασμό με τον αριθμό, τον τύπο, και τη σειρά των ορισμάτων του αποτελούν την υπογραφή του (signature).

Κεφάλαιο 5: Κλάσεις και αντικείμενα 173 Το φαινόμενο της υπερφόρτωσης ισχύει και στις μεθόδους (method overloading). Μπορούμε δηλαδή να δημιουργήσουμε μεθόδους με το ίδιο όνομα, αλλά με διαφορετικό ορισμό και άλλα ορίσματα, άρα με διαφορετική υπογραφή. Η Java έχει τη δυνατότητα να τις ξεχωρίζει και κάθε φορά να εκτελεί τη μέθοδο που πρέπει από τον α- ριθμό και τον τύπο των ορισμάτων τους. Η κληρονομικότητα των κλάσεων Η κληρονομικότητα είναι μια από τις βασικές ιδέες του αντικειμενοστρεφούς προγραμματισμού. Με την κληρονομικότητα επιτυγχάνεται η επαναχρησιμοποίηση κώδικα ο οποίος έχει ήδη γραφεί και είναι ένα από τα σημαντικά πλεονεκτήματα των γλωσσών ΟΟP σε σχέση με τις συμβατικές γλώσσες. Σύμφωνα με την ιδέα αυτή, ένα αντικείμενο μπορεί να κληρονομεί τα δεδομένα και τις μεθόδους ενός άλλου αντικειμένου. Μπορεί επίσης να τους επιφέρει τροποποιήσεις. Στην Java, όλες οι κλάσεις (οι διαθέσιμες, καθώς και αυτές που γράφουμε), ακολουθούν μια ιεραρχία. Κάθε κλάση έχει μια υπερκλάση (superclass), η οποία βρίσκεται ιεραρχικά πάνω από αυτή. Μπορεί επίσης να έχει μία ή περισσότερες υποκλάσεις (subclasses), οι οποίες βρίσκονται σε κατώτερο επίπεδο ιεραρχίας, όπως φαίνεται στο πιο κάτω σχήμα: Η Class 1 είναι υπερκλάση της Class 2. H Class 2 είναι υποκλάση της Class 1 και υπερκλάση των Class 3, Class 4, Class 5 και Class 6. Οι κλάσεις Class 3, Class 4, Class 5 και Class 6 είναι υποκλάσεις της Class 2. Οι υποκλάσεις κληρονομούν αυτόματα όλες τις μεταβλητές και τις μεθόδους από τις υπερκλάσεις τους. Στην κορυφή όλων των κλάσεων της Java βρίσκεται η κλάση Object. Όλες οι κλάσεις κληρονομούν από αυτή την υπερκλάση. Έτσι, όταν ορίζουμε μια κλάση για την οποία δεν υπάρχει ορισμός υπερκλάσης, η Java θεωρεί αυτόματα ότι η οριζόμενη κλάση είναι υποκλάση της Object.

174 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Για να καταλάβουμε την κληρονομικότητα, ας πάρουμε ένα θεωρητικό αλλά διδακτικό παράδειγμα, το παράδειγμα του αυτοκινήτου: Για να φτιάξουμε μια κλάση που περιγράφει το αυτοκίνητο, θα πρέπει να φροντίσουμε να συμπεριληφθούν μερικές χαρακτηριστικές ιδιότητες, όπως η εταιρεία κατασκευής του, το μοντέλο του, η τιμή του, η μέγιστη ταχύτητα που μπορεί να αναπτύξει, ο αριθμός των θυρών του, οι τροχοί του κ.λπ. Η κλάση αυτή μπορεί να οριστεί στην Java ως εξής: Class Car String manufacturer; String model; int maximumspeed; int price; int numdoors; int numwheels=4; Έστω τώρα ότι θέλουμε να φτιάξουμε μια αντίστοιχη κλάση για μοτοσικλέτες. Η κλάση αυτή θα περιέχει ανάλογα χαρακτηριστικά με την κλάση του αυτοκινήτου, εκτός από τις θύρες και τον αριθμό των τροχών. Θα μπορούσαμε λοιπόν να γράψουμε: class motorcycle String manufacturer; String model; int maximumspeed; int price; int numwheels=2; Αφού λοιπόν οι δύο κλάσεις έχουν τόσα πολλά παρόμοια χαρακτηριστικά, θα ήταν καλύτερα να κάνουμε κάτι διαφορετικό: να φτιάξουμε μια κλάση την οποία να ονομάσουμε "όχημα με ρόδες και μηχανή (motorvehicle)". Η κλάση motorvehicle θα ο- ριστεί έτσι ώστε να περιέχει όλα τα κοινά χαρακτηριστικά αυτοκινήτων και μοτοσικλετών. Έπειτα θα ορίσουμε δύο υποκλάσεις, την "Car" και τη "motorcycle", κάθε μία από τις οποίες θα έχει τα γενικά χαρακτηριστικά της υπερκλάσης "motorvehicle". Με βάση αυτά που είπαμε, η κλάση motorvehicle θα οριστεί ως εξής: class motorvehicle String manufacturer; String model;

Κεφάλαιο 5: Κλάσεις και αντικείμενα 175 int maximumspeed; int price; int numwheels; Για να δηλώσουμε ότι οι κλάσεις "Car" και "motorcycle" είναι υποκλάσεις, χρησιμοποιούμε τη λέξη extends. class Car extends motorvehicle int numwheels=4; int numdoors; και class motorcycle extends motorvehicle int numwheels=2; Οι κλάσεις "Car" και "motorcycle", εκτός από τις ιδιότητες που ορίζονται στο εσωτερικό τους, κληρονομούν (άρα μπορούν να χρησιμοποιήσουν) και τις ιδιότητες manufacturer, model, maxspeed, και price από την υπερκλάση motorvehicle. Η κληρονομικότητα μπορεί να εκτείνεται και σε περισσότερα από ένα επίπεδα (multilevel inheritance). Μπορεί λ.χ. να ορίσουμε τα αγροτικά αυτοκίνητα ως υποκλάση της κλάσης Car, η οποία να έχει ως χαρακτηριστικό την "καρότσα" (carrier) και βέβαια τις δύο θύρες. class wain extends Car int carrier; int numdoors=2; Πρέπει να σημειώσουμε ότι η έννοια της κληρονομικότητας πολλών επιπέδων είναι κάτι διαφορετικό από την έννοια της πολλαπλής κληρονομικότητας (multiple inheritance) που υπάρχει σε άλλες γλώσσες (όπως η C) και αναφέρεται στη δυνατότητα μιας κλάσης να κληρονομεί από διαφορετικές και μη σχετιζόμενες υπερκλάσεις. Στην κληρονομικότητα εμφανίζεται το φαινόμενο της "παράκαμψης μεθόδου" (method overriding) 2 : Συμβαίνει αρκετές φορές σε μια υποκλάση να ορίζεται ξανά 2 Η παράκαμψη μεθόδου στα ελληνικά αποδίδεται πολλές φορές και ως ακύρωση μεθόδου.

176 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA μια μέθοδος, η οποία είχε οριστεί και σε μια κλάση ανώτερου επιπέδου επειδή ο αρχικός ορισμός της δεν κάνει ακριβώς αυτό που θέλουμε. Η μέθοδος στην υποκλάση έχει την ίδια υπογραφή με αυτήν της υπερκλάσης (όνομα, αριθμό, και τύπο ορισμάτων). Κατά κάποιον τρόπο δηλαδή, η νέα μέθοδος "καταργεί" τη δράση της αρχικής. Παράδειγμα Δημιουργούμε την κλάση "σημείο" (Point.java) ως εξής: public class Point protected double x; protected double y; //ο πρώτος κατασκευαστής public Point(double xcor, double ycor) x=xcor; y=ycor; // ο δεύτερος κατασκευαστής public Point () x=0.0; y=0.0; // ο τρίτος κατασκευαστής public Point(Point point) x=point.x; y=point.y; //μέθοδος για να πάρουμε τη συνιστώσα x public double getx() return x;

Κεφάλαιο 5: Κλάσεις και αντικείμενα 177 //μέθοδος για να πάρουμε τη συνιστώσα y public double gety() return y; /*μέθοδος για να μετατρέψουμε τις συντεταγμένες του σημείου σε αλφαριθμητικό */ public String tostring() return "(" + x+", " + y + ")"; Αποθηκεύουμε το πρόγραμμα (Point.java) και το μεταγλωττίζουμε (javac Point.java). Στη συνέχεια δημιουργούμε μία κλάση, την κλάση Cycle.java (προσοχή, όχι τη Circle.java που δημιουργήσαμε σε προηγούμενα παραδείγματα) ως υποκλάση της Point.java. Η κλάση Cycle.java καλεί την υπερκλάση Point.java για να δημιουργήσει ένα σημείο ως το κέντρο ενός κύκλου, και στη συνέχεια "γράφει" την ακτίνα του. public class Cycle extends Point protected double radius; static double Pi=3.14; //πρώτος κατασκευαστής public Cycle( double x1, double y1, double r1) super (x1, y1); radius= (r1>=0?r1:0.0); //δεύτερος κατασκευαστής public Cycle () radius=0.0;

178 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA public double area() return Pi*radius*radius; public String tostring() return "x= "+x+","+" y= "+ y+","+" r="+radius; Η δεσμευμένη λέξη super χρησιμεύει για την κλήση μελών της υπερκλάσης μιας κλάσης. Όταν χρησιμοποιείται με τη μορφή super(), καλεί τον κατασκευαστή της υπερκλάσης. Όταν χρησιμοποιείται με τη μορφή super.f(), καλεί τη συνάρτηση f(), η οποία έχει οριστεί στην υπερκλάση. Στον προηγούμενο κώδικα, με την εντολή super (x1, y1) καλέσαμε τον κατασκευαστή Point της υπερκλάσης της Cycle και "περάσαμε" σ αυτόν τα ορίσματα x1 και y1 για να δώσουμε αρχικές τιμές στις μεταβλητές του x και y. Δημιουργούμε τώρα μία ακόμη κλάση, την κλάση ColorCycle.java, στην οποία προσθέτουμε μια ιδιότητα, το "χρώμα". public class ColorCycle extends Cycle protected String color; public ColorCycle (double x2, double y2, double r2, String c) super (x2, y2, r2); color=c; public String getcolor() return color; public String tostring() return "x= "+x+","+" y= "+ y+","+" r="+radius+","+ "color="+color; Αποθηκεύουμε και μεταγλωττίζουμε το πρόγραμμα ColorCycle.java.

Κεφάλαιο 5: Κλάσεις και αντικείμενα 179 Για να τα δοκιμάσουμε όλα αυτά, φτιάχνουμε το πρόγραμμα showinheritance.java. public class showinheritance public static void main (String[] args) Point p1; Cycle c1; ColorCycle colorc1; p1 = new Point (50.5,70.5); c1= new Cycle (40.0, 50.0, 70.5); colorc1 = new ColorCycle (30.0, 40.0, 20.0, "Red"); //Οι συντεταγμένες του σημείου σε μορφή string System.out.println("The point:"+p1.tostring()); /*Οι συντεταγμένες του κύκλου c1 και η ακτίνα του παράκαμψη της μεθόδου tostring() */ System.out.println("The cycle:"+c1.tostring()); //το εμβαδόν του κύκλου με τη χρήση της μεθόδου area() System.out.println("The cycle area:"+c1.area()); //παράκαμψη μεθόδου tostring() -- τα στοιχεία του colorc1 System.out.println("The colorcycle:"+colorc1.tostring()); /*εμβαδόν του colorc1 -- χρηση της μεθόδου area() από την υπερκλάση */ System.out.println("The colorcycle.area="+colorc1.area()); /*εμφάνιση του "χρωματος" του κύκλου με τη μεθοδο getcolor*/ System.out.println ("The colorcycle' color= "+colorc1.getcolor()); Η εκτέλεση του προγράμματος δίνει το αποτέλεσμα που φαίνεται στην επόμενη εικόνα. Στο αποτέλεσμα: The colorcycle:x= 30.0, y= 40.0, r=20.0,color=red, παρατηρούμε ότι η μέθοδος tostring(), η οποία ορίζεται στην κλάση ColorCycle, παρακάμπτει τη μέθοδο tostring, που ορίζεται στην κλάση Cycle καθώς και στην κλάση Point.

180 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Τελικές κλάσεις και μέθοδοι Σε περιπτώσεις κατά τις οποίες θέλουμε μια κλάση να μην δημιουργεί υποκλάσεις, δηλώνουμε την κλάση αυτή ως τελική (final). Μια κλάση που έχει δηλωθεί ως τελική δεν μπορεί να είναι υπερκλάση. Εάν π.χ. δηλώσουμε public final class MyClass αυτή η δήλωση κάνει το μεταγλωττιστή να μην επιτρέπει τη δημιουργία υποκλάσεων της κλάσης MyClass. Μπορούμε επίσης να δηλώσουμε και μια μέθοδο ως τελική. Αυτό γίνεται για να μην είναι δυνατό η μέθοδος αυτή να ακυρωθεί. public final double area() Η δήλωση final μπορεί να χαρακτηρίσει και μια μεταβλητή καθιστώντας την με αυτόν τον τρόπο σταθερά. Αν δηλαδή δηλώσουμε public final double Pi=3.14; οποιαδήποτε προσπάθεια να τροποποιηθεί η τιμή της Pi θα δημιουργήσει ένα σφάλμα χρόνου μεταγλώττισης (compile time error). Μέθοδοι και κλάσεις αφηρημένου τύπου Στην Java υπάρχει η δυνατότητα να δηλώσουμε μια κλάση ή μια μέθοδο ως αφηρημένη (abstract). Μια μέθοδος αφηρημένου τύπου σε μια κλάση απλώς ορίζεται χωρίς να υλοποιείται. Το κυρίως μέρος της μεθόδου αυτής υλοποιείται σε μια υποκλάση

Κεφάλαιο 5: Κλάσεις και αντικείμενα 181 της αρχικής κλάσης (ως αρχική εννοούμε την κλάση στην οποία η μέθοδος ορίσθηκε ως αφηρημένη). Η δήλωση της μεθόδου τελειώνει με ένα ";", όπως παρακάτω: public abstract getname(); (getname() είναι το όνομα που διαλέξαμε για τη μέθοδο). Για να δηλωθεί μια κλάση ως αφηρημένη, χρησιμοποιείται και πάλι η λέξη abstract. Ακολούθως, ορίζουμε μια αφηρημένη κλάση, την κλάση myclass, η οποία περιέχει μια αφηρημένη μέθοδο, τη μέθοδο getname(). public abstract class myclass private String astring; public void show() System.out.println("This is a" + astring); public abstract getname(); Οι διασυνδέσεις Η έννοια της διασύνδεσης (interface) είναι κατά κάποιον τρόπο η απάντηση της Java στην αρχή της πολλαπλής κληρονομικότητας, την οποία συναντάμε σε γλώσσες όπως η C. Μια διασύνδεση παρουσιάζει πολλές ομοιότητες με μια συνηθισμένη κλάση, με τη σημαντική διαφορά ότι καμία από τις μεθόδους που ορίζονται μέσα στη διασύνδεση δεν υλοποιείται. Αντί για αυτό, κάθε τέτοια μέθοδος πρέπει να υλοποιείται μέσα σε μια άλλη κλάση η οποία καλεί τη διασύνδεση. Η κλήση γίνεται με τη λέξη implements μαζί με το όνομα της διασύνδεσης. Η διασύνδεση είναι επίσης μια κατάλληλη περιοχή για να δηλώνουμε σταθερές. Συνοψίζοντας, μπορούμε να πούμε ότι η διασύνδεση είναι ο χώρος όπου μπορούμε να τοποθετήσουμε μια συλλογή από σταθερές καθώς και αφηρημένες μεθόδους, τις οποίες μπορούμε να χρησιμοποιήσουμε σε μια άλλη κλάση, γράφοντας εκεί τον κώδικα για κάθε μέθοδο. Για να ορίσουμε μια διασύνδεση, εργαζόμαστε όπως και στις κλάσεις, αλλά αντί για τη λέξη class χρησιμοποιούμε τη λέξη interface. Στο παράδειγμα που ακολουθεί, δημιουργούμε τη διασύνδεση LengthConversion για τη μετατροπή μονάδων μήκους, στην οποία ορίζουμε κάποιες σταθερές και μεθόδους χωρίς να βάλουμε κώδικα σ' αυτές.

182 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA public interface LengthConversion double INCH_TO_CM=2.54; double FT_TO_CM=30.5; double YD_TO_M=0.914; double inchtocm(double inches); double fttocm(double feet); double ydtom (double meters); Κατόπιν φτιάχνουμε την κλάση LengthMethods η οποία καλεί τη διασύνδεση LengthConversion χρησιμοποιώντας τη λέξη implements και δημιουργεί κώδικα για τις μεθόδους της. public class LengthMethods implements LengthConversion public double inchtocm(double inches) return inches*inch_to_cm; public double fttocm(double feet) return feet*ft_to_cm; public double ydtom (double yards) return yards*yd_to_m; Τέλος, με την κλάση showlengthconversion, κάνουμε μια συγκεκριμένη μετατροπή μήκους χρησιμοποιώντας τις μεθόδους της κλάσης LengthMethods. class showlengthconversion public static void main(string[] args) double vinch=10.0; double vcm=0.0; LengthMethods tl=new LengthMethods(); vcm=tl.inchtocm(vinch); System.out.println (vinch+" inches = "+ vcm+" cm");

Κεφάλαιο 5: Κλάσεις και αντικείμενα 183 Σε μια κλάση που υλοποιεί τις μεθόδους μιας διασύνδεσης μπορούμε να παραλείψουμε μία ή περισσότερες από τις μεθόδους αυτές, αλλά τότε πρέπει να δηλώσουμε την κλάση ως αφηρημένη. public abstract class LengthClasses implements LengthConversion public double inchtocm(double inches) return inches*inch_to_cm; // δεν συμπεριλάβαμε τις άλλες μεθόδους του interface

184 ΕΙΣΑΓΩΓΗ ΣΤΗΝ JAVA Ερωτήσεις και Ασκήσεις 1. Ποια είναι τα πλεονεκτήματα του αντικειμενοστρεφούς προγραμματισμού; 2. Μπορείτε να αναφέρετε μερικές διαφορές ανάμεσα στο δομημένο προγραμματισμό (structured programming) και στον αντικειμενοστρεφή προγραμματισμό (object oriented programming); 3. Τι είναι η κλάση στην Java και σε τι διαφέρει από το αντικείμενο; 4. Με ποια (τρία) μέρη δημιουργούμε μια απλή άδεια κλάση; 5. Με ποιον από τους παρακάτω τρόπους δημιουργούμε ένα αντικείμενο της κλάσης Papadopoulos; α. Papadopoulos pap = new Papadopoulos; β. Papadopoulos pap = (new) * Papadopoulos; γ. Papadopoulos pap = new Papadopoulos (); δ. Papadopoulos pap = new (Papadopoulos); 6. Με ποιον τρόπο μπορούμε να χρησιμοποιήσουμε μέσα από ένα αρχείο κώδικα μια κλάση η οποία έχει οριστεί σε ένα διαφορετικό αρχείο; 7. Τι είναι η υποκλάση (subclass) και τι η υπερκλάση (superclass); Με ποιον τρόπο δημιουργούμε μια υποκλάση; 8. Πώς γίνεται η παράκαμψη μιας μεθόδου, η οποία κληρονομείται από μια υπερκλάση; 9. Για να επιστραφεί μια τιμή ως αποτέλεσμα της δράσης μιας μεθόδου, χρησιμοποιείται η λέξη: α) break β) this γ) return δ) pass 10. Οι κατασκευαστές μιας κλάσης ονομάζονται: α) Main β) Constructor γ) Object δ) με το όνομα της κλάσης 11. Τι διαφορά έχει ο κατασκευαστής από τη μέθοδο; 12. Ποια είναι η διαφορά μεταξύ μιας μεταβλητής η οποία έχει δηλωθεί ως public από μία η οποία έχει δηλωθεί ως private; 13. Σε τι χρησιμεύει η δεσμευμένη λέξη super και σε τι η μέθοδος super(); 14. Πόσους κατασκευαστές μπορεί να έχει μία κλάση; 15. Δημιουργήστε μια κλάση με το όνομα MyDataclass. Προσθέστε στην κλάση ένα πεδίο String με το όνομα data1 ως private.

Κεφάλαιο 5: Κλάσεις και αντικείμενα 185 Προσθέστε στην κλάση έναν κατασκευαστή, ο οποίος να παίρνει ως μοναδικό όρισμα μια τιμή για την αρχικοποίηση του πεδίου data1. Μέσα στον κατασκευαστή προσθέστε μία public μέθοδο με όνομα PutData(), η οποία να θέτει τιμή στο data1. Μέσα στον κατασκευαστή προσθέστε μία public μέθοδο με όνομα TakeData(), η οποία να λαμβάνει την τιμή του data1. Αφού τελειώσετε, μεταγλωττίστε τον κώδικα που φτιάξατε. 16. Δημιουργήστε μια υποκλάση της MyDataclass με όνομα MyDataclass1. Μέσα σε αυτή: Προσθέστε ένα πεδίο private τύπου int με όνομα data2. Προσθέστε μια public μέθοδο με όνομα CreateString(). Η μέθοδος αυτή θα επιστρέφει ένα δεδομένο τύπου String που θα συντίθεται από τις τιμές των πεδίων data1 και data2. Προσθέστε μια public μέθοδο PutData2(), η οποία να θέτει τιμή στη μεταβλητή data2. Προσθέστε μια public μέθοδο TakeData2(), η οποία να παίρνει την τιμή της data2. Προσθέστε έναν κατασκευαστή με ορίσματα για τις αρχικές τιμές των data1 και data2. 17. Φτιάξτε μια κλάση, έστω την testmydataclass1, με την οποία να δοκιμάσετε τη λειτουργία της MyDataclass1.