E π A π π ª π Â È ÛÌfi ÔÁÈÛÌÈÎÔ TfiÌÔ ' KÏÂ ÓıË Ú ÌappleÔ Ï Ë ÏÒÛÛÂ ÚÔÁÚ ÌÌ ÙÈÛÌÔ II (AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ ÚÔÁÚ ÌÌ ÙÈÛÌfi )
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣΧΕ ΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος Γ' Γλώσσες Προγραµµατισµού II (Aντικειµενοστρεφής Προγραµµατισµός) KΛΕΑΝΘΗΣ ΘΡΑΜΠΟΥΛΙ ΗΣ Eπίκουρος Kαθηγητής Tµήµατος Hλεκτρολόγων Mηχανικών & Tεχνολογίας Yπολογιστών Πανεπιστηµίου Πατρών ΠATPA 2001
ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣΧΕ ΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος Γ' Γλώσσες Προγραµµατισµού II (Aντικειµενοστρεφής Προγραµµατισµός) Συγγραφή KΛΕΑΝΘΗΣ ΘΡΑΜΠΟΥΛΙ ΗΣ Eπίκουρος Kαθηγητής Tµήµατος Hλεκτρολόγων Mηχανικών & Tεχνολογίας Yπολογιστών Πανεπιστηµίου Πατρών Κριτική Ανάγνωση OMHPOΣ PAΓΓOΣ Λέκτορας Tµήµατος Mαθηµατικών Πανεπιστηµίου Πατρών Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου ΣΩKPATHΣ KATΣIKAΣ Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Aιγαίου Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση ΓEPAΣIMOΣ MΩPAΪTHΣ Γλωσσική Επιµέλεια BAΣIΛIKH HMHTPOΠOYΛOY Τεχνική Επιµέλεια ΕΣΠΙ ΕΚ ΟΤΙΚΗ Ε.Π.Ε. Καλλιτεχνική Επιµέλεια Σελιδοποίηση TYPORAMA Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων ΟΜΑ Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / 1997 2001 ISBN: 960 538 174 5 Kωδικός Έκδοσης: ΠΛH 24/3 Copyright 2000 για την Ελλάδα και όλο τον κόσµο ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Οδός Παπαφλέσσα & Υψηλάντη, 26222 Πάτρα Τηλ: (0610) 314094, 314206 Φαξ: (0610) 317244 Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη.
ÂÚÈ fiìâó K º π 1 B ÛÈÎ ŒÓÓÔÈ ÙË AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊÔ appleúôû ÁÁÈÛË Eισαγωγικές παρατηρήσεις... 11 1.1 Aντικείµενο Kλάση Στιγµιότυπο... 13 1.2 Τo σύστηµα στην AΠ... 16 1.3 ηµιουργία Kαταστροφή αντικειµένου... 19 1.4 Aντικειµενοστρεφής προσέγγιση ανάπτυξης συστηµάτων λογισµικού... 19 Σύνοψη... 22 Bιβλιογραφία... 22 K º π 2 EÈÛ ÁˆÁ ÛÙË Java Eισαγωγικές παρατηρήσεις... 25 2.1 Iστορία της Java... 26 2.2 ιαδικασία ανάπτυξης προγράµµατος Java... 28 2.2.1 ιαδικασία ανάπτυξης αυτόνοµης εφαρµογής... 29 2.2.2 ιαδικασία ανάπτυξης Applet... 32 2.2.3 H εξήγηση ενός απλού Applet... 35 Σύνοψη... 39 Bιβλιογραφία... 39 K º π 3 KÏ ÛË Î È AÓÙÈΠÌÂÓÔ Eισαγωγικές παρατηρήσεις... 41 3.1 Γιατί κλάση και στιγµιότυπο;... 43 3.2 H κλάση στην Java... 46 3.2.1 ήλωση κλάσης... 46 3.2.2 ηµιουργία στιγµιότυπου... 47 3.2.3 Πέρασµα µηνυµάτων... 48 3.2.4 Προσπέλαση στα δεδοµένα αντικειµένου... 49
6 ø ƒ ƒ ªª π ª À II 3.2.5 Ενθυλάκωση... 50 3.3 ηµιουργοί αντικειµένων... 53 3.3.1 Μηχανισµός δηµιουργίας στιγµιότυπου... 53 3.3.2 Ορισµός δηµιουργού... 53 3.3.3 Πολλαπλοί δηµιουργοί... 55 3.3.4 Υπερφόρτωση µεθόδων... 56 3.3.5 Απλοποιηµένη συγγραφή δηµιουργών... 57 3.4 Mεταβλητές και µέθοδοι κλάσης... 58 3.4.1 Μεταβλητές κλάσης... 60 3.4.2 Σταθερή Κλάσης... 62 3.4.3 Μέθοδοι κλάσης... 63 Σύνοψη... 66 Bιβλιογραφία... 68 K º π 4 H Java Û Ó Âapple ÎÙ ÛË ÙË C Eισαγωγικές παρατηρήσεις... 69 4.1 Tύποι δεδοµένων... 70 4.1.1 O τύπος Boolean... 70 4.1.2 Τύπος δείκτη... 71 4.1.3 Τύποι αναφοράς... 71 4.1.4 Τύπος πίνακα... 73 4.1.5 Αλφαριθµητικά... 74 4.2 Tελεστές... 75 4.3 Προτάσεις ελέγχου ροής προγράµµατος... 76 4.3.1 Προτάσεις if/else, while και do/while... 76 4.3.2 H πρόταση switch... 77 4.3.3 Η πρόταση for... 77 4.3.4 Οι προτάσεις break και continue... 78 4.3.5 Η πρόταση goto... 79 4.4 Λοιπές διαφορές της Java από την C... 79 Σύνοψη... 80 Bιβλιογραφία... 81
EPIEXOMENA 7 K º π 5 H KÏ ÛË Û Ó ÔÌÈÎfi ÙÔÈ Â Ô ÙÔ ÚÔÁÚ ÌÌ ÙÔ Eισαγωγικές παρατηρήσεις... 83 5.1 Oι κλάσεις δεν είναι ανεξάρτητες µεταξύ τους... 85 5.1.1 Σχέσεις αντικειµένων... 85 5.1.2 Συσχετίσεις µεταξύ κλάσεων... 87 5.2 Προσδιοριστές ορατότητας... 91 5.3 Kατηγορίες κλάσεων... 93 5.3.1 Κλάσεις δηλωµένες σε εµβέλεια πακέτου... 94 5.3.2 Ένθετες κλάσεις... 95 Σύνοψη... 97 Bιβλιογραφία... 98 K º π 6 KÏËÚÔÓÔÌÈÎfiÙËÙ Eισαγωγικές παρατηρήσεις... 99 6.1 Απλή κληρονοµικότητα... 101 6.1.1 Γενικά... 101 6.1.2 Προσθήκη νέας κλάσης... 102 6.2 Πολλαπλή κληρονοµικότητα... 104 6.3 Πολυµορφισµός... 104 6.4 H κληρονοµικότητα στη Java... 108 6.4.1 Ορισµός απόγονης κλάσης... 109 6.4.2 Αφηρηµένες κλάσεις... 110 6.4.3 Κάθε κλάση έχει µια πρόγονο κλάση... 111 6.4.4 Οι δηµιουργοί στην κληρονοµικότητα... 112 6.4.5 Επικαλυπτόµενες µεταβλητές... 114 6.4.6 Υπερκάλυψη µεθόδων... 115 6.4.7 Interfaces... 119 Σύνοψη ενότητας... 123 Σύνοψη... 124 Bιβλιογραφία... 125
8 ø ƒ ƒ ªª π ª À II K º π 7 AÓ appleù ÍË AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊÔ EÊ ÚÌÔÁ Eισαγωγικές παρατηρήσεις... 127 7.1 Αναγνώριση Αντικειµένων... 129 7.2 Ορισµός βασικών λειτουργιών... 129 7.3 ηµιουργία πρώτης έκδοσης του προγράµµατος της αριθµοµηχανής... 132 7.4 Ολοκλήρωση της κλάσης Operand... 133 7.5 Ανάπτυξη γραφικής διεπαφής (GUI) µε τον χρήστη... 135 7.6 Ανταλλαγή µηνυµάτων µεταξύ µηχανής και αντικειµένων διεπαφής... 136 Σύνοψη... 139 Bιβλιογραφία... 139 K º π 8 XÂÈÚÈÛÌfi EÍ ÈÚ ÛÂˆÓ Eισαγωγικές παρατηρήσεις... 141 8.1 H έννοια του χειρισµού εξαιρέσεων... 144 8.2 Xειρισµός εξαιρέσεων στην Java... 147 8.2.1 Βασικές έννοιες... 147 8.2.2 Η κατασκευή try/catch/finally... 149 8.2.3 Προσθέτοντας χειρισµό εξαιρέσεων... 152 8.2.4 ήλωση τύπων εξαίρεσης... 154 8.2.5 Έγερση εξαίρεσης... 155 Σύνοψη... 158 Bιβλιογραφία... 159 K º π 9 T Ùfi ÚÔÓÔ ÚÔÁÚ ÌÌ ÙÈÛÌfi Eισαγωγικές παρατηρήσεις... 161 9.1 Bασικές έννοιες ταυτόχρονου προγραµµατισµού... 164 9.2 Yποστήριξη ταυτόχρονου προγραµµατισµού από την Java... 166
EPIEXOMENA 9 9.2.1 Η κλάση Thread... 168 9.2.2 Κύκλος ζωής ενός νήµατος... 170 9.2.3 Συγχρονισµός νηµάτων... 172 9.2.4 Οι µέθοδοι wait και notify... 173 Σύνοψη ενότητας... 174 9.3 Λύση στο πρόβληµα παραγωγού καταναλωτή... 174 9.3.1 Αντιµετώπιση χωρίς συγχρονισµό... 175 9.3.2 Aντιµετώπιση µε συγχρονισµό... 176 Σύνοψη... 177 Bιβλιογραφία... 178 Aπαντήσεις ασκήσεων αυτοαξιολόγησης... 179 Eνδεικτικές απαντήσεις δραστηριοτήτων... 207 Bιβλιογραφία ελληνική / ξενόγλωσση... 234 Γλωσσάρι Όρων... 239