Γλώσσες Προγραµµατισµού II. (Aντικειµενοστρεφής Προγραµµατισµός)

Σχετικά έγγραφα
E π A π π ª π. Â È ÛÌfi ÔÁÈÛÌÈÎÔ. TfiÌÔ ' ÏÒÛÛÂ ÚÔÁÚ ÌÌ ÙÈÛÌÔ II. KÏÂ ÓıË Ú ÌappleÔ Ï Ë. (AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ ÚÔÁÚ ÌÌ ÙÈÛÌfi )

EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ

Tεχνολογία Λογισµικού II

EÈÛ ÁˆÁ ÛÙËÓ ÏËÚÔÊÔÚÈÎ

HelloApplet. Παύλος Εφραιμίδης Java Applets 1

E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË - EÊ ÚÌÔÁ. TfiÌÔ ' ÂÓÂÙÈÎÔ AÏÁfiÚÈıÌÔÈ Î È EÊ ÚÌÔÁ. ÎÔı Ó ÛË

TËÏÂÌ ÙÈÎ, È ÎÙ Î È KÔÈÓˆÓ

(Logic Gate Simulator)

ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË

OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ

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

E π A π π ª π. Ú ÌÌÈÎfi ÚÔÁÚ ÌÌ ÙÈÛÌfi. MÔÓÙÂÏÔappleÔ ËÛË. TfiÌÔ A' M ÓÔ PÔ ÌÂÏÈÒÙË Î È ÚÔÛÔÌÔ ˆÛË

Θεωρία Πληροφορίας και Kωδικοποίησης

E π A π π ª π. È ÎÚÈÙ M ıëì ÙÈÎ. Î È M ıëì ÙÈÎ ÔÁÈÎ. TfiÌÔ A' È ÎÚÈÙ M ıëì ÙÈÎ ÂÒÚÁÈÔ BÔ ÚÔ

ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ

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

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες:

E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ. TfiÌÔ ' MÈ Ï ÓÔ ËÌ. XÚÈÛÙÔ Ô Ï ÎË B ÛÂÈ Â ÔÌ ÓˆÓ

EÈ ÈÎ Ì Ù ÁÈ ÙËÓ ÔÈfiÙËÙ

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

Εργαλεία του JDK. Β.1 Εργαλεία του JDK. Β.2 Μεταγλωττιστής javac. Τα πιο βασικά εργαλεία του JDK είναι τα παρακάτω.

ÚÔÁÚ ÌÌ ÙÈÛÌfi ÁÈ ÙËÓ ÔÈfiÙËÙ

B ÛÈÎ EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ

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

E π A π π ª π TÂ ÓËÙ NÔËÌÔÛ ÓË EÊ ÚÌÔÁ. TfiÌÔ B' NÂ ÚˆÓÈÎ ÎÙ Î È ÓÔ AÚÁ Ú ÎË EÊ ÚÌÔÁ

ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ

ÚÔÛÙ Û Î È AÛÊ ÏÂÈ ÛÙËÌ ÙˆÓ YappleÔÏÔÁÈÛÙÒÓ

ÏËÚÔÊÔÚÈÎ Î È EÎapple  ÛË

E π A π π ª π. ÚÔÁÚ ÌÌ ÙÈÛÌfi. ÁÈ ÙËÓ ÔÈfiÙËÙ. TfiÌÔ A' Â È ÛÌfi. ÁÈ ÙËÓ ÔÈfiÙËÙ. AÁÁÂÏfiappleÔ ÏÔ

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

12.6. Άσκηση 6 - [αξιοποίηση γραφικής διεπαφής (GUI)] (έκδοση 2006)

Εισαγωγή στην αντικειµενοστρεφή τεχνολογία

K ÓÔ.ÛÂÏÈ.(168ÛÂÏ.) :13 ÂÏ 1 (M ÚÔ ÙÛ ÁÎÔ) Eπιστήµη Eπιφανειών

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

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

E π A π π ª π AÚ TÂ ÓÔÏÔÁ ÔÁÈÛÌÈÎÔ. TfiÌÔ B' ÂÈÙÔ ÚÁÈÎ ÛÙ Ì Ù I

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

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

Ψηφιακή επεξεργασία εικόνων και σηµάτων

Υποστηρικτικό υλικό Σημειώσεις

12.6. Άσκηση 6 - [αξιοποίηση γραφικής διεπαφής (GUI)] (έκδοση 2004)

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

E π A π π ª π º ÛÈÎÔ ËÌÂ. TfiÌÔ ' Ù ÙÈÛÙÈÎ ÂÚÌÔ Ó ÌÈÎ BÏ ÛË M Ú ÓÙ

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

Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος.

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Σχεδιασμός και Eκτίμηση Έργων

ιαχείριση και Ποιότητα Λογισµικού

Aρχές Διοίκησης Επιχειρήσεων

Aισθητήρες και Mικροαισθητήρες

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

ÚÔËÁÌ Ó EÚÁ ÏÂ Î È M ıô ÔÈ ÁÈ ÙÔÓ ŒÏÂÁ Ô ÙË ÔÈfiÙËÙ

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH. Θεµατική Ενότητα ΣYΓXPONA IKTYA KAI YΠHPEΣIEΣ

1. Ξεκινώντας. 1.1 Τι είναι η Java. PDF created with FinePrint pdffactory Pro trial version

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Σχολή Θετικών Επιστηµών και Τεχνολογίας. Πρόγραµµα Σπουδών ΠΛΗΡΟΦΟΡΙΚΗ. Θεµατική Eνότητα BΑΣΙΚΑ ΖΗΤΗΜΑΤΑ ΙΚΤΥΩΝ Η/Υ

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

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

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

Εισαγωγή στο περιβάλλον Code::Blocks

Eισαγωγή στην Πυρηνική Φυσική

E π A π π ª π KÏ ÛÈÎ º ÛÈÎ I. TfiÌÔ ' HÏÂÎÙÚÔÌ ÁÓËÙÈÛÌfi. NÈÎfiÏ Ô. K Ï ÊË

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

E π A π π ª π OÚÁ ÓÈÎ XËÌÂ. TfiÌÔ ' º ÛÌ ÙÔÛÎÔapple OÚÁ ÓÈÎÒÓ EÓÒÛˆÓ. I.. ÂÚÔı Ó ÛË

OÈÎÔÓÔÌÈÎ T ÓÈÎÒÓ ŒÚÁˆÓ

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

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

Ανάπτυξη Plugins για το AgentSheets

Μοντελοποίηση δεδομένων με UML Χρήση σε πολυμεσικές εφαρμογές

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

6. Εισαγωγή στον προγραµµατισµό

Eιδικά Θέµατα υναµικής των Kατασκευών και Σεισµικής Mηχανικής

Θεµέλια Γραµµικού Προγραµµατισµού

È Â ÚÈÛË YÁÚÒÓ AappleÔ Ï ÙˆÓ

Κεφάλαιο 10 ο Υποπρογράµµατα

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

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

KO MA E I O OIH H 30/5/ :32 ÂÏ 1. Eπιστήµη Πολυµερών

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

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

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

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

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Προγραµµατισµός Ι Εισαγωγή Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι Νικόλαος Δ. Τσελίκας

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

«Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr»

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

Εγχειρίδιο Χρήστη - Μαθητή

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Περιεχόμενο του μαθήματος

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

Transcript:

Γλώσσες Προγραµµατισµού II (Aντικειµενοστρεφής Προγραµµατισµός)

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛ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

B ÛÈÎ ŒÓÓÔÈ ÙË AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊÔ appleúôû ÁÁÈÛË ÎÔapplefi Σκοπός του κεφαλαίου είναι να παρουσιάσει τις σηµαντικότερες έννοιες της αντικειµενοστρεφούς προσέγγισης µέσα από παραδείγµατα της καθηµερινής ζωής, δίνοντας έµφαση κυρίως στις έννοιες αυτές καθ εαυτές, παρά στον ακριβή ορισµό τους. 1 º π ÚÔÛ ÔÎÒÌÂÓ appleôùâï ÛÌ Ù Όταν θα έχετε µελετήσει το κεφάλαιο αυτό θα µπορείτε να: περιγράψετε τη διαφορά µεταξύ κλάσης και στιγµιότυπου, δώσετε 5 τουλάχιστον παραδείγµατα κλάσεων, αναφέρετε αντικείµενα του πραγµατικού κόσµου που περιγράφονται από τις παραπάνω κλάσεις, εντοπίζετε σχέσεις γενίκευσης εξειδίκευσης µεταξύ κλάσεων, εντοπίζετε σχέσεις συνάθροισης µεταξύ κλάσεων, δώσετε από 3 τουλάχιστο σχέσεις γενίκευσης εξειδίκευσης και συνάθροισης, περιγράψετε 2 τουλάχιστο συστήµατα του πραγµατικού κόσµου σαν συνάθροιση συνεργαζόµενων αντικειµένων, εξηγήσετε γιατί είναι σηµαντική η έννοια της απόκρυψης πληροφορίας, αναφέρετε 5 τοµείς στους οποίους η αντικειµενοστρεφής προσέγγιση βελτιώνει την ποιότητα του λογισµικού, περιγράψετε τί είναι ένα αντικειµενοστρεφές περιβάλλον ανάπτυξης, δώσετε ένα ορισµό για τον όρο αντικείµενο. ŒÓÓÔÈ ÎÏÂÈ È αντικείµενο (object) κλάση (class) στιγµιότυπο (instance) σχέση κλάσεων γενίκευση/ εξειδίκευση συνάθροιση (aggregation) απόκρυψη πληροφορίας (information hiding)

12 º π 1: B π π A π πª ƒ º À ƒ π πέρασµα µηνύµατος (message passing) δηµιουργία καταστροφή αντικειµένου διεπαφή αντικειµένου (object interface) διάγραµµα κλάσεων (class diagram) υλοποίηση αντικειµένου (object implementation) ÈÛ ÁˆÁÈÎ Ú ÙËÚ ÛÂÈ Η παραδοσιακή προσέγγιση στην ανάπτυξη συστηµάτων, την οποία ήδη γνωρίσατε στη Θεµατική Ενότητα «Εισαγωγή στην Πληροφορική», θεωρεί τη διεργασία σαν βασικό δοµικό στοιχείο του συστήµατος, το οποίο αποτελείται από διεργασίες και από δεδοµένα πάνω στα οποία αυτές επιδρούν. Η προσέγγιση αυτή αποδεικνύεται ανεπαρκής για την ανάπτυξη των σύγχρονων πολύπλοκων σηµερινών συστηµάτων του καθιερωµένου πια γραφικού περιβάλλοντος των υπολογιστών. Για την αντιµετώπιση της πολυπλοκότητας (complexity) των συστηµάτων που αναπτύσσουµε, πολλά έχουµε να διδαχθούµε από τον τρόπο µε τον οποίο είναι οργανωµένο το σύµπαν αλλά και ο φυσικός κόσµος που µας περιβάλει. Ένα αστέρι που πέφτει, ένα παιδί που µαθαίνει να γράφει, ένα αεροπλάνο που απογειώνεται, αποτελούν µερικά απλά παραδείγµατα αντικειµένων που απαρτίζουν τον φυσικό κόσµο. Αντικείµενα που αλληλεπιδρούν µεταξύ τους αλλά και που µπορούν να θεωρηθούν αποτελούµενα από άλλα επί µέρους αλληλεπιδρόντα αντικείµενα. Ο άνθρωπος, εξοικειωµένος µε την θεώρηση αυτή, µπορεί εύκολα να αντιµετωπίσει µε τον ίδιο τρόπο και τα συστήµατα λογισµικού που αναπτύσσει. Η προσέγγιση που βασίζεται στην θεώρηση αυτή είναι γνωστή µε το όνοµα Αντικειµενοστρεφής Προσέγγιση (ΑΠ) και υπόσχεται να δώσει λύση στα πολλά προβλήµατα της διαδικασίας ανάπτυξης συστηµάτων λογισµικού. Τα µοντέλα ανάλυσης και σχεδιασµού που αναπτύσσονται σύµφωνα µε την ΑΠ είναι εύκολα στη κατανόηση καθώς σχετίζονται άµεσα µε την πραγµατικότητα. Η ΑΠ έχει καταφέρει να µειώσει το σηµασιολογικό κενό (semantic gap) µεταξύ ιδεατού µοντέλου και µοντέλου ανάλυσης του συστήµατος, αλλά και µεταξύ µοντέλου ανάλυσης και σχεδιασµού, διευκολύνοντας την αντιστοίχηση των εννοιών από το ένα µοντέλο στο επόµενο (forward traceability) ή στο προηγούµενο (backward traceability) [Jacobson 92].

A π πª K π ªπ À 13 Το κεφάλαιο αυτό παρουσιάζει παραδείγµατα από την καθηµερινή ζωή για να εισάγει τις βασικές έννοιες και να αποδείξει πως η ΑΠ δεν είναι τίποτε παραπάνω από µεταφορά των εννοιών αυτών στη διαδικασία ανάπτυξης συστήµατος. Για σας που θέλετε µια σε βάθος ανάλυση του θέµατος της πολυπλοκότητας των συστηµάτων λογισµικού αλλά και του τρόπου που αυτή µπορεί να αντι- µετωπισθεί σύµφωνα µε την ΑΠ µπορείτε να ανατρέξετε στο πρώτο κεφάλαιο του [Booch 94] µε τίτλο «Complexity» όπου θα βρείτε µια πολύ καλή αλλά δύσκολη προσέγγιση του θέµατος. 1.1 AÓÙÈÎÂ ÌÂÓÔ KÏ ÛË ÙÈÁÌÈfiÙ appleô Τι είναι αντικείµενο; Αν παρατηρήσουµε το περιβάλλον γύρω µας, θα διακρίνουµε ένα σύνολο από οντότητες µε τις οποίες αλληλεπιδρούµε συνεχώς. Οι οντότητες αυτές που είναι είτε απλές όπως ο πιστός µας σκύλος, είτε πιο σύνθετες, όπως η δανειστική βιβλιοθήκη, η τράπεζα και η υπηρεσία ύδρευσης, µας παρέχουν ένα σύνολο από εξυπηρετήσεις αλλά και χρησιµοποιούν εξυπηρετήσεις που εµείς προσφέρουµε. Η οντότητα «Tράπεζα» παρέχει την πολύ γνωστή σε όλους σας εξυπηρέτηση της πιστωτικής κάρτας, ο ΟΤΕ παρέχει την εξυπηρέτηση παροχής τηλεφωνικής γραµµής, την εξυπηρέτηση του 131, ενώ εσείς προσφέρετε την εξυπηρέτηση παροχής τροφής στο σκύλο σας. Γενικά µπορούµε να πούµε, ότι ο κόσµος αποτελείται από αντικείµενα απλά ή σύνθετα, τα οποία αλληλεπιδρούν µεταξύ τους. Τι είναι κλάση και τι στιγµιότυπο; Ας δούµε όµως τη διαφορά που υπάρχει µεταξύ του Αζώρ [1] και του όρου «πιστός σκύλος». Ο όρος «πιστός σκύλος» αναφέρεται στην αφηρηµένη έννοια που περιγράφει τα κοινά χαρακτηριστικά ενός συνόλου πραγµατικών αντικειµένων του φυσικού κόσµου. Αντίθετα, ο Αζώρ είναι ένα από τα πραγ- µατικά αντικείµενα που η αφηρηµένη έννοια «πιστός σκύλος» περιγράφει. Όλοι σας γνωρίζετε τα χαρακτηριστικά που προσδιορίζει η αφηρηµένη έννοια «Τράπεζα» και αυτό σας διευκολύνει ώστε να ζητήσετε την έκδοση βιβλιαρίου καταθέσεων µε την πρώτη σας επίσκεψη στην τράπεζα που πρόσφατα άνοιξε στην γειτονιά σας. [1] Tου πιστού µου σκύλου

14 º π 1: B π π A π πª ƒ º À ƒ π Για κάθε αντικείµενο του φυσικού κόσµου υπάρχει ή µπορούµε να ορίσου- µε, µια αφηρηµένη έννοια που περιγράφει, αφενός τον τρόπο µε τον οποίο το αντικείµενο επικοινωνεί µε το περιβάλλον του, αφετέρου το πώς αυτό είναι οργανωµένο εσωτερικά. Η ΑΠ ονοµάζει στιγµιότυπα (instances) τα πραγµατικά αντικείµενα και κλάσεις (classes) τις αφηρηµένες έννοιες που τα περιγράφουν. O Αζώρ είναι ένα στιγµιότυπο της κλάσης «πιστός σκύλος», όπως το υποκατάστηµα 223 της Αγροτικής Τράπεζας της γειτονιάς σας είναι στιγµιότυπο της κλάσης «Αγροτική Τράπεζα». Λάθος! θα µου πείτε. Ναι µεν, ο Αζώρ είναι στιγµιότυπο της κλάσης «πιστός σκύλος», η Τράπεζα της γειτονιάς µας όµως είναι στιγµιότυπο της κλάσης «Τράπεζα», όπως διαφαίνεται από το προηγού- µενο κείµενο. Μήπως όµως και ο Αζώρ είναι στιγµιότυπο της κλάσης «σκύλος» και όχι της «πιστός σκύλος»; και γιατί όχι της κλάσης «θηλαστικό»; Όπως βλέπουµε, υπάρχουν δύο τουλάχιστον σε κάθε περίπτωση αφηρηµένες έννοιες που διεκδικούν τα εν λόγω στιγµιότυπα. Και δεν είναι βέβαια λάθος να πούµε ότι ο Αζώρ είναι στιγµιότυπο της κλάσης «θηλαστικό», ούτε πως ο Αζώρ είναι στιγµιότυπο της κλάσης «σκύλος» αλλά και της «πιστός σκύλος». Σχέσεις µεταξύ των κλάσεων Είναι φανερό ότι υπάρχει σχέση (association) µεταξύ των τριών παραπάνω κλάσεων. Η κλάση «πιστός σκύλος» είναι εξειδίκευση της κλάσης «σκύλος», της οποίας αποτελεί γενίκευση η κλάση «θηλαστικό». Η ΑΠ ονοµάζει αυτή τη µορφή σχέσης που υπάρχει µεταξύ των αφηρηµένων εννοιών (κλάσεων), σχέση γενίκευσης εξειδίκευσης. Ας θεωρήσουµε πάλι το παράδειγµα της τράπεζας. Η αφηρηµένη έννοια «Τράπεζα» ορίζει πως κάθε στιγµιότυπό της, αποτελεί συνάθροιση ενός κτίσµατος, ενός αριθµού τερµατικών, ενός διευθυντή, ενός αριθµού υπαλλήλων, κ.ο.κ. Οι όροι κτίσµα, τερµατικό, διευθυντής και υπάλληλος προσδιορίζουν µε τη σειρά τους, τις αφηρηµένες έννοιες των επί µέρους αντικειµένων από τα οποία αποτελείται η τράπεζα της γειτονιάς σας. Η σχέση που συνδέει την κλάση «Τράπεζα» µε την κλάση «Τερµατικό», όπως και µε την κλάση «Υπάλληλος», είναι σύµφωνα µε την ΑΠ µια σχέση «όλου µέρους» (whole part) ή αλλιώς σχέση συνάθροισης (aggregation). Και η µεν «Τράπεζα» είναι το σύνθετο (aggregate) αντικείµενο, το όλο, τα δε «κτίσµα», «τερµατικό», κ.ο.κ. αποτελούν τα συνθετικά του, τα µέρη από τα οποία αποτελείται.

A π πª K π ªπ À 15 ιαβάστε τώρα προσεκτικά την παρακάτω περιγραφή. Ú ÂÈÁÌ 1 «fast food ο Γιώργος» Ο Γιώργος αποφασίζει να ανοίξει ένα µαγαζί πρόχειρου φαγητού (fast food). Γνωρίζει πως χρειάζεται ένα φούρνο µικροκυµάτων, µια τοστιέρα, ένα ψυγείο, ένα πλυντήριο πιάτων, και ορισµένα άλλα αντικείµενα, τα οποία είναι απαραίτητα για να παρέχει σωστές υπηρεσίες το µαγαζί του. Ο Γιώργος αρχίζει µε την ετοιµασία του χώρου και όταν αυτός είναι έτοιµος, ειδοποιεί να του φέρουν και εγκαταστήσουν τα επί µέρους αντικείµενα συσκευές που απαρτίζουν το fast food. Μια ανακοίνωση στην είσοδο κάτω από την πινακίδα «fast food ο Γιώργος» γράφει «Ζητούνται υπάλληλοι». Μετά από µερικές µέρες το µαγαζί είναι έτοιµο, και ο Γιώργος µε τους δύο υπαλλήλους που ήδη προσέλαβε, τη Μαίρη και το Νίκο, είναι έτοιµοι να υποδεχτούν τον πρώτο τους πελάτη. Ο Χρήστος, το όνοµα του πρώτου πελάτη, µπαίνει στο µαγαζί. «Ένα τοστ µε τυρί ζαµπόν παρακαλώ, µια τυρόπιτα και µια παγωµένη ΗΒΗ». Ο Γιώργος λέει στη Μαίρη «Φτιάξε σε παρακαλώ το τοστ», και αυτός αναλαµβάνει την τυρόπιτα. ιαπιστώνει όµως πως είναι κρύα και αποφασίζει να χρησιµοποιήσει το φούρνο µικροκυµάτων. Εκείνη τη στιγµή στο µαγαζί µπαίνει ένας άλλος πελάτης, ο Κώστας, και δίνει και αυτός την παραγγελία του. Μετά από λίγο ο Χρήστος πήρε µια σακούλα και αφού πλήρωσε βγήκε από το µαγαζί. Αφού διαβάσατε προσεκτικά το κείµενο του Παραδείγµατος 1/κεφ.1, προσπαθήστε να αναγνωρίσετε και καταγράψετε κλάσεις (αφηρηµένες έννοιες) και τα αντίστοιχα στιγµιότυπά τους. Στη συνέχεια, διαβάστε προσεκτικά πάλι τα περί κλάσεων και αντικειµένων στην ενότητα 1.1 και κάντε τις απαραίτητες διορθώσεις και προσθήκες. Αφού ολοκληρώσετε, ανατρέξτε στο τέλος του βιβλίου για να επιβεβαιώσετε τα αποτελέσµατα σας. Ú ÛÙËÚÈfiÙËÙ 1.1

16 º π 1: B π π A π πª ƒ º À ƒ π Κάθε κλάση έχει έναν αναγνωριστή Ο λογαριασµός που µόλις ανοίξατε στην τράπεζα έχει αριθµό 123 45678 09. Ο αριθµός αυτός µοναδιαία διακρίνει το στιγµιότυπο της κλάσης «λογαριασµός» από τα υπόλοιπα στιγµιότυπα της ίδιας κλάσης και καλείται αναγνωριστής (identifier). Κάθε κλάση, είτε έχει από τη φύση της έναν αναγνωριστή, είτε θα πρέπει να της καθορίσουµε εµείς έναν. 1.2 o Û ÛÙËÌ ÛÙËÓ A Το σύστηµα σαν συνάθροιση αντικειµένων Στη συνέχεια θα χρησιµοποιήσουµε τον όρο σύστηµα αντί του όρου οντότητα και θα αναφερθούµε στην οργάνωση και λειτουργία του συστήµατος «fast food ο Γιώργος», το οποίο αποτελεί χαρακτηριστικό παράδειγµα του τρόπου µε τον οποίο συστήµατα του πραγµατικού κόσµου είναι οργανωµένα και λειτουργούν. Η αφηρηµένη έννοια fast food περιγράφει αντικείµενα που αποτελούνται από ένα κτίσµα, έναν ιδιοκτήτη, υπαλλήλους, ψυγείο, φούρνο µικροκυµάτων, τοστιέρα, κ.λ.π. Λέµε ότι η κλάση fast food είναι η συνάθροιση των κλάσεων κτίσµα, ιδιοκτήτης, υπάλληλος ή ότι οι κλάσεις αυτές αποτελούν τα συνθετικά της κλάσης fast food. Μόλις αναγνωρίσαµε και καταγράψαµε µια σχέση συνάθροισης µεταξύ των κλάσεων του συστή- µατός µας. Η ΑΠ θεωρεί το κάθε σύστηµα ως συνάθροιση των επί µέρους αντικειµένων από τα οποία αποτελείται. Ú ÛÙËÚÈfiÙËÙ 1.2 Θεωρήστε το κείµενο του Παραδείγµατος 1 και προσπαθήστε να αναγνωρίσετε και να καταγράψετε κλάσεις που σχετίζονται µε σχέση γενίκευσης εξειδίκευσης, καθώς και κλάσεις που σχετίζονται µε σχέση συνάθροισης. Στη συνέχεια διαβάστε προσεκτικά πάλι τα περί σχέσεων κλάσεων και κάντε τις απαραίτητες διορθώσεις και προσθήκες. Αφού ολοκληρώσετε ανατρέξτε στο τέλος του βιβλίου για να δείτε µια δική µας καταγραφή. Τα αντικείµενα επικοινωνούν µεταξύ τους µε µηνύµατα «Objects do things, and we ask them to perform what they do by sending them messages» [Booch 94]. [2] [2] «Τα αντικείµενα εκτελούν ενέργειες και εµείς τους ζητούµε να τις εκτελέσουν αποστέλλοντας τους µηνύµατα».

O À ª A 17 Το σύστηµα µας παρέχει, αλλά και χρησιµοποιεί εξυπηρετήσεις άλλων αντικειµένων (συστηµάτων) του περιβάλλοντος στο οποίο βρίσκεται. Παρέχει την εξυπηρέτηση «ζεστή τυρόπιτα» στον πελάτη και χρησιµοποιεί τις εξυπηρετήσεις του ΟΤΕ και των προµηθευτών του. Ας δούµε τώρα πιο αναλυτικά τον τρόπο µε τον οποίο το σύστηµα µας παρέχει την εξυπηρέτηση «ζεστή τυρόπιτα». Το αντικείµενο που θέλει την εξυπηρέτηση (ο Χρήστος του παραδείγµατος µας) πρέπει να το γνωστοποιήσει στο σύστηµά µας περνώντας του το µήνυµα «Παρακαλώ µια ζεστή τυρόπιτα». Το σύστηµά µας, αναγνωρίζει το µήνυµα, διακρίνει πως είναι µια από τις υπηρεσίες που παρέχει, και συµπεριφέρεται κατά τέτοιο τρόπο ώστε να προσφέρει τη ζητούµενη υπηρεσία. εν θα συνέβαινε το ίδιο για το µήνυµα «Σας παρακαλώ ένα ποδήλατο». Το σύστηµα αναγνωρίζει οτι δεν είναι υπηρεσία που µπορεί να προσφέρει και ενηµερώνει γι αυτό τον αιτούντα. Κάθε αντικείµενο είναι αποδέκτης πολλών µηνυµάτων από το εξωτερικό περιβάλλον, αλλά αναγνωρίζει ορισµένα και αποκρίνεται µόνο σε αυτά. Γενικά µπορούµε να πούµε ότι τα αντικείµενα επικοινωνούν µεταξύ τους περνώντας το ένα στο άλλο µηνύµατα. Ο τρόπος που τα µηνύµατα αυτά περνούν διαφέρει από περίπτωση σε περίπτωση (οµιλία, γραφή, νοήµατα, ταχυδροµείο, e mail, κλπ.) χωρίς αυτό να επηρεάζει την παρεχόµενη εξυπηρέτηση. Τα επιµέρους αντικείµενα του συστήµατος συνεργάζονται για την παροχή των εξυπηρετήσεών του «We view the world as a set of autonomous agents that collaborate to perform some higher level behavior» [Booch 94] [3]. Ο Γιώργος µόλις δέχτηκε το µήνυµα του Χρήστου, του πρώτου πελάτη, χρησι- µοποίησε τον προφορικό λόγο για να περάσει το µήνυµα «Φτιάξε σε παρακαλώ το τοστ» στο αντικείµενο Μαίρη, αλλά πρέπει να ρυθµίσει το πλήκτρο χρόνου του φούρνου µικροκυµάτων και στη συνέχεια να πιέσει το πλήκτρο «START», για να γνωστοποιήσει στο αντικείµενο «φούρνο» ότι θέλει να του ζεστάνει την τυρόπιτα. Η Μαίρη αντίστοιχα χρησιµοποιεί τις εξυπηρετήσεις της τοστιέρας για την παρασκευή του τοστ. Το πλυντήριο πιάτων µε τη σειρά του περνάει το µήνυµα «θέλω νερό» στο αντικείµενο βρύση, µε διαφορετικό φυσικά τρόπο απ ότι περνάει στο αντικείµενο Νίκος το µήνυµα «το πλύσιµο τελείωσε». Στη δεύτερη αυτή περίπτωση παράγει ένα συγκεκριµένο ήχο για να γνωστοποιήσει στο Νίκο ότι ολοκλήρωσε την εξυπηρέτηση που του ζητήθηκε. [3] «Bλέπουµε τον κόσµο αποτελούµενο από αυτόνοµους πράκτορες που συνεργάζονται για να προσφέρουν µια υψηλότερου επιπέδου συµπεριφορά»

18 º π 1: B π π A π πª ƒ º À ƒ π Όπως βλέπουµε, τα αντικείµενα του συστήµατός µας συνεργάζονται αρµονικά µεταξύ τους. Κάθε σύστηµα, σύµφωνα µε την ΑΠ, µπορεί να θεωρηθεί σαν µια συνάθροιση αντικειµένων, τα οποία συνεργάζονται µεταξύ τους ανταλάσσοντας µηνύµατα για να παρέχουν τις υπηρεσίες του συστήµατος. Τα εξωτερικά αντικείµενα έχουν πρόσβαση µόνο σε ορισµένα αντικείµενα του συστήµατός µας Ο πελάτης του fast food µπορεί να ζητήσει εξυπηρετήσεις από τους σερβιτόρους και τον ιδιοκτήτη, δεν µπορεί όµως να χρησιµοποιήσει την τοστιέρα, τον φούρνο, την βρύση και τα άλλα αντικείµενα από τα οποία αποτελείται το σύστηµα µας. Αυτό αποτελεί µεν έναν περιορισµό, ο οποίος όµως, αφενός διευκολύνει την επικοινωνία του πελάτη µε το fast food, αφετέρου διευκολύνει τον ιδιοκτήτη να τροποποιεί την εσωτερική σύνθεση του συστήµατος του (νέα µηχανήµατα κλπ.) χωρίς να επηρεάζει τον τρόπο µε τον οποίο οι πελάτες επικοινωνούν µε αυτό. Σε διαφορετική περίπτωση και όταν ο ιδιοκτήτης, για διάφορους λόγους, άλλαζε την τοστιέρα µε µια πιο σύνθετη, θα έπρεπε να ενηµερώσει όλους τους πελάτες του για τον τρόπο λειτουργίας της. Όλα γενικά τα αντικείµενα, απλά ή σύνθετα, είναι κατασκευασµένα µε τέτοιο τρόπο ώστε να εµφανίζουν προς τα έξω µόνο εκείνα τα στοιχεία τους, που συµµετέχουν στη διαδικασία περάσµατος των µηνυµάτων και για το λόγο αυτό πρέπει να είναι γνωστά στα άλλα αντικείµενα που χρησιµοποιούν τις εξυπηρετήσεις τους. Για να χρησιµοποιήσουµε το φούρνο µικροκυµάτων θέλουµε πρόσβαση µόνο σε ορισµένα πλήκτρα, τα οποία µας βοηθούν να περάσουµε στο φούρνο τα µηνύµατά µας. Τέτοια είναι τα πλήκτρα «start», «stop» και «open door». Τα πλήκτρα αυτά, λέµε ότι, αποτελούν την διεπαφή (interface) της κλάσης «φούρνος» µε την κλάση «πρόσωπο». O Γιώργος, για παράδειγµα, σαν χρήστης του αντικειµένου «φούρνος», δεν είναι ανάγκη να γνωρίζει την εσωτερική δοµή του. Λέµε ότι ο φούρνος αποκρύπτει (hides) το εσωτερικό του, στο οποίο όµως έχει πρόσβαση ο κατασκευαστής του και βέβαια αυτός που θα χρειαστεί να τον επισκευάσει. Μόλις καταγράψαµε µια εφαρµογή της βασικής αρχής της απόκρυψης πληροφορίας (information hiding). Σύµφωνα µε την ΑΠ, «κάθε σύστηµα αποκρύπτει αυτά που πρέπει να αποκρύψει και κάνει ορατά µόνο τα απαραίτητα». Έτσι διακρίνουµε για κάθε αντικείµενο δύο τµήµατα: το ένα αποτελεί την υλοποίηση του αντικειµένου (object implementation) και το άλλο τη διεπαφή του (object interface) διαµέσου της οποίας επικοινωνεί µε το περιβάλλον του.

ªπ Àƒ π K ƒ º π πª À 19 ÓÙÈΠÌÂÓÔ Ï ÛË ÙÈÁÌÈfiÙ appleô Θα παρατηρήσατε ίσως, ότι στο κείµενο χρησιµοποιείται ο όρος αντικεί- µενο και για την αφηρηµένη έννοια (κλάση) αλλά και για τα στιγµιότυπά της. Γενικά η ΑΠ θεωρεί όλες τις οντότητες, πραγµατικές και αφηρηµένες, αντικείµενα (οbjects). Σύµφωνα µε τη θεώρηση αυτή αντικείµενο είναι η κλάση, το στιγµιότυπο αλλά και η σχέση µεταξύ δύο κλάσεων. Επειδή έχει σχεδόν επικρατήσει στη βιβλιογραφία ο όρος αντικείµενο αντί του όρου στιγµιότυπου, θα χρησιµοποιούµε στη συνέχεια και τους δύο όρους, µε τα συµφραζόµενα να ορίζουν την πραγµατική σηµασία. 1.3 ËÌÈÔ ÚÁ K Ù ÛÙÚÔÊ ÓÙÈÎÂÈÌ ÓÔ Είναι αυτονόητο να παρατηρήσουµε, ότι η αφηρηµένη έννοια fast food δεν µπορεί να δεχτεί µηνύµατα και άρα να παρέχει οποιοδήποτε τύπο εξυπηρέτησης. Αντίθετα, ορίζει τα µηνύµατα τα οποία µπορούν να δεχτούν τα στιγ- µιότυπά της και επιπλέον προσδιορίζει τη συµπεριφορά τους σε αυτά. Εξυπηρετήσεις παρέχουν µόνο τα στιγµιότυπα σε απόκριση των µηνυµάτων που δέχονται. Αν θέλετε λοιπόν να φάτε ζεστή τυρόπιτα, φροντίστε να βρείτε ένα στιγµιότυπο τύπου fast food ή να δηµιουργήσετε ένα [4] και να του στείλετε το κατάλληλο µήνυµα. Όταν το αντικείµενο δεν χρησιµοποιείται πλέον θα πρέπει να ελευθερώσει τους πόρους που κατέχει. Έτσι το fast food ο Γιώργος θα πρέπει να ελευθερώσει το κτίσµα, τους υπαλλήλους, τον αριθµό τηλεφώνου, κ.λπ. ώστε αυτά να χρησι- µοποιηθούν από άλλο σύστηµα. Το αντικείµενο πρέπει να καταστραφεί. 1.4 AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ appleúôû ÁÁÈÛË Ó appleù ÍË Û ÛÙËÌ ÙˆÓ ÏÔÁÈÛÌÈÎÔ Η ΑΠ δεν είναι τίποτε παραπάνω από εφαρµογή των παραπάνω, κατά κύριο λόγο, γενικών αρχών στη διαδικασία ανάπτυξης συστηµάτων λογισµικού. Έτσι, σύµφωνα µε την ΑΠ, ένα αντικείµενο του πραγµατικού κόσµου αναπαρίσταται σαν αντικείµενο στις φάσεις της ανάλυσης, του σχεδιασµού αλλά και της υλοποίησης. Η αντικειµενοστρεφής µορφή προγραµµατισµού θεω- [4] Στην περίπτωση µας βέβαια δεν θα δηµιουργήσετε στιγµιότυπο, αλλά αυτό θα κάνετε πολύ συχνά στα προγράµµατα σας, όπου η δηµιουργία αντικειµένων είναι απλούστερη και δεν κοστίζει τόσο.

20 º π 1: B π π A π πª ƒ º À ƒ π ρεί το πρόγραµµα αποτελούµενο από αντικείµενα τα οποία συνεργάζονται µεταξύ τους για την παροχή των εξυπηρετήσεών του. Το σύστηµα, µε τη σειρά του, θεωρείται στο ευρύτερο περιβάλλον ένα αντικείµενο, το οποίο παρέχει αλλά και χρησιµοποιεί εξυπηρετήσεις. Ένα αντικειµενοστρεφές περιβάλλον ανάπτυξης, όπως για παράδειγµα αυτό της Java, είναι ένα περιβάλλον που υποστηρίζει την ανάπτυξη συστηµάτων της παραπάνω µορφής. ιαθέτει µηχανισµούς απόκρυψης πληροφορίας, περάσµατος µηνυµάτων, δηµιουργίας και καταστροφής στιγµιοτύπων, αναπαράστασης της γενικευµένης ιεραρχίας, αλλά και άλλους που θα δούµε στα επόµενα κεφάλαια. Οι µηχανισµοί αυτοί βελτιώνουν αναµφισβήτητα την ποιότητα του λογισµικού ως προς τα χαρακτηριστικά του: επαναχρησιµοποίηση (reusability) επεκτασιµότητα (extendibility) ορθότητα (correctness) ευρωστία (robustness) συντηρησιµότητα (maintainability) Μια πολύ καλή αναφορά στα γενικότερα πλεονεκτήµατα της τεχνολογίας αντικειµένων (Object Technology) γίνεται στο κεφάλαιο 3 του βιβλίου [Martin 92]. Ô ÓÙÈΠÌÂÓÔ Û ÌÊˆÓ Ì ÙÔÓ Booch. Παρόλο που το αντικείµενο αποτελεί το βασικό δοµικό στοιχείο της ΑΠ, δεν υπάρχει ένας κοινά αποδεκτός ορισµός γι αυτό. Από το σύνολο των ορισµών, διακρίνουµε αυτόν του Booch, ενός από τους σηµαντικότερους ερευνητές στην περιοχή της ΑΠ. «Ένα αντικείµενο έχει κατάσταση, συµπεριφορά και ταυτότητα. Η κατάσταση και η συµπεριφορά οµοειδών αντικειµένων ορίζονται από την κοινή τους κλάση. Οι όροι στιγµιότυπο και αντικείµενο χρησιµοποιούνται εναλλακτικά» [Booch 94]. ιαβάστε το παρακάτω κείµενο, για την καλύτερη κατανόηση των εννοιών κατάσταση, συµπεριφορά και ταυτότητα. (συνέχεια )

A π πª ƒ º ƒ π À À ª ø π ªπ À 21 ( συνέχεια) Στα τρία τηλέφωνα που έχετε στο σπίτι σας έχετε φροντίσει να δώσετε ένα διαφορετικό όνοµα στο καθένα ώστε να µπορείτε να αναφέρεστε σε αυτό. Έχετε δηµιουργήσει ένα αναγνωριστή ή µία ταυτότητα όπως πιο απλά θα λέγαµε. Το τηλέφωνο δέχεται από σας το µήνυµα που του περνάτε πιέζοντας το πλήκτρο 0, αλλά η συµπεριφορά του, δηλαδή η αντίδραση του στο µήνυµα αυτό εξαρτάται από την κατάσταση στην οποία το αντικείµενο βρίσκεται. Έτσι, διαφορετική είναι η συµπεριφορά του αν είναι σε κατάσταση συνδιάλεξης, αναµονής, απάντησης, ή µε το ακουστικό κατεβασµένο. Η συµπεριφορά ενός αντικειµένου άµεσα εξαρτάται από την κατάσταση στην οποία το αντικείµενο βρίσκεται. Αναφερόµενοι στο κείµενο του Παραδείγµατος 1, αναγνωρίστε και καταγράψτε τις σχέσεις των κλάσεων της αριστερής στήλης µε αυτές της δεξιάς του παρακάτω πίνακα. Χρησιµοποιήστε την UML σηµειολογία που αναφέραµε στη ραστηριότητα 1.2. ÕÛÎËÛË ÙÔ ÍÈÔÏfiÁËÛË 1.1 Κλάση Ιδιοκτήτης Σερβιτόρος Πελάτης Κλάση fast food Ηλεκτρική συσκευή Πρόσωπο Τοστιέρα Φούρνος µικροκυµάτων Για την γνωστή σας συσκευή του αυτόµατου τηλεφωνητή, δώστε ένα τουλάχιστο µήνυµα, για το οποίο η συσκευή έχει συµπεριφορά εξαρτώµενη από την κατάστασή της. Περιγράψτε τις διαφορετικές καταστάσεις, αλλά και τις αντίστοιχες συµπεριφορές της. Ú ÛÙËÚÈfiÙËÙ 1.3

22 º π 1: B π π A π πª ƒ º À ƒ π ÓÔ Ë Στο κεφάλαιο αυτό, παραθέσαµε ορισµένες από τις βασικές έννοιες πάνω στις οποίες βασίζεται η αντικειµενοστρεφής ανάπτυξη συστηµάτων. Χρησιµοποιήθηκαν παραδείγµατα από την καθηµερινή ζωή για να δοθεί έµφαση στην απλότητα των εννοιών και στο γεγονός ότι ο άνθρωπος είναι ήδη εξοικειω- µένος µε τις έννοιες αυτές. Οι έννοιες της κλάσης, του αντικειµένου, της απόκρυψης πληροφορίας, της επικοινωνίας µε πέρασµα µηνυµάτων, της γενίκευσης εξειδίκευσης κ.ο.κ. απέδειξαν, ότι είναι ικανές να ανταποκριθούν σε µεγάλο βαθµό στις αυξηµένες απαιτήσεις της διαδικασίας ανάπτυξης των πολύπλοκων σηµερινών συστηµάτων λογισµικού. Συµπερασµατικά, το αντικείµενο έρχεται να αντικαταστήσει τη διεργασία και να µας οδηγήσει από την διαδικαστική (procedural) στην αντικειµενοστρεφή µορφή προγραµµατισµού. Μια µορφή, που υπόσχεται να λύσει πολλά από τα προβλήµατα της διαδικασίας ανάπτυξης συστηµάτων λογισµικού. BÈ ÏÈÔÁÚ Ê [1] [Booch 94] Grady Booch, «Object Oriented Analysis and Design with applications» second edition, Benjamin/Cummings Publishing Company Inc, 1994. Αποτελεί ένα από τα καλύτερα βιβλία στο χώρο της αντικειµενοστρεφούς προσέγγισης. Η σηµαντική του συµβολή είναι κυρίως στη φάση του σχεδιασµού για την οποία κατά την γνώµη µου αποτελεί και το καλύτερο από τα διαθέσιµα βιβλία. Ο Booch εξ άλλου, µε τον Jacobson και τον Rumbaugh είναι οι δηµιουργοί της Unified Modeling Language (UML), της πρώτης γλώσσας που έγινε πρότυπο για αντικειµενοστρεφή ανάπτυξη συστηµάτων. [2] [Jacobson 92] Ivar Jacobson, «Object Oriented Software Engineering A use case Driven Approach», Addison Wesley, 1992. Αποτελεί ένα από τα καλύτερα βιβλία στο χώρο της αντικειµενοστρεφούς προσέγγισης. Έγινε περισσότερο γνωστό από την έννοια του «use case» (περίπτωσης χρήσης) που εισήγαγε στην διαδικασία ανάλυσης του συστήµατος και η οποία υιοθετήθηκε από το σύνολο σχεδόν των µεθοδολογιών αντικειµενοστρεφούς ανάπτυξης συστηµάτων λογισµικού. Αναφέρεται κυρίως στις φάσεις της ανάλυσης και σχεδιασµού οι οποί-

BIB IO PAºIA 23 ες αποτελούν αντικείµενο άλλης θεµατικής ενότητας. Ανήκει στα βιβλία που δεν θα πρέπει να λείπουν από την βιβλιοθήκη του επαγγελµατία στο χώρο της ανάπτυξης συστηµάτων. [3] [Martin 92] J. Martin, J. Odell, «Object Oriented Analysis & Design», Prentice Hall, 1992. Το βιβλίο αυτό δίνει απόψεις, οι οποίες σε πολλές περιπτώσεις είναι διαφορετικές από τις ευρέως θεωρούµενες στον χώρο της αντικειµενοστρεφούς προσέγγισης. Στις απόψεις αυτές αποφύγετε να ανατρέξετε στο παρόν στάδιο, γιατί µπορεί να σας δηµιουργήσουν σύγχυση. Αντίθετα, οι απόψεις αυτές µπορούν να αποτελέσουν πηγή προβληµατισµού στο στάδιο που θα έχετε κατανοήσει και χρησιµοποιήσει αρκετά την ΑΠ. Η παρατήρηση αυτή δεν ισχύει για το κεφάλαιο 3, στο οποίο γίνεται η παραποµπή. [4] [UML 97] «Unified Modeling Language: UML semantics» version 1.1, Rational Software, September 97.

EÈÛ ÁˆÁ ÛÙË Java ÎÔapplefi Σκοπός του κεφαλαίου είναι να παρουσιάσει τη διαδικασία ανάπτυξης Java προγράµµατος καθώς και τον τρόπο που ένα πρόγραµµα Java µπορεί να αποτελέσει µέρος µιας ιστοσελίδας του διαδικτύου. Το κεφάλαιο ξεκινά µε µια πολύ σύντοµη αναφορά στην ιστορία της Java και τους λόγους για τους οποίους η γλώσσα επιλέχτηκε για την παρουσίαση του αντικειµενοστρεφούς προγραµµατισµού. 2 º π ÚÔÛ ÔÎÒÌÂÓ appleôùâï ÛÌ Ù Όταν θα έχετε ολοκληρώσει το κεφάλαιο αυτό θα µπορείτε να: αναπτύξετε ένα πρόγραµµα Java, για το οποίο θα σας έχει δοθεί ο πηγαίος κώδικας, αναπτύξετε και ενσωµατώσετε σε µία ιστοσελίδα ένα Java πρόγραµµα για το οποίο σας δίνεται ο πηγαίος κώδικας, κάνετε απλές τροποποιήσεις σε δεδοµένο πρόγραµµα Java. ŒÓÓÔÈ ÎÏÂÈ È συντακτικό γλώσσας BNF ASCII κώδικας Unicode δεσµευµένη λέξη (reserved word) λέξη κλειδί (keyword) ευανάγνωστο πρόγραµµα συντακτικό λάθος (syntax error) σηµασιολογικό λάθος (semantic error) case sensitive ÈÛ ÁˆÁÈÎ Ú ÙËÚ ÛÂÈ Οι βασικές έννοιες του Αντικειµενοστρεφούς Προγραµµατισµού (ΑΠ) εισήχθησαν από την Simula, αλλά έγιναν γνωστές από την Smalltalk, τη γλώσσα που θεωρείται πρόγονος του ΑΠ. Οι σχεδιαστές της Smalltalk επηρεάστηκαν σε µεγάλο βαθµό από την Simula, όπως ακριβώς και ο Bjarne Stroustrup, ο οποίος πρόσθεσε κλάσεις στην C για να δηµιουργήσει στη συνέχεια τη C++, στην οποία οφείλεται η ευρεία εξάπλωση του ΑΠ.

26 º π 2: Eπ ø JAVA Το κεφάλαιο αυτό διακρίνεται σε δύο ενότητες. Στην πρώτη γίνεται µια πολύ σύντοµη αναφορά στην ιστορία της Java και δίνονται οι λόγοι για τους οποίους η γλώσσα επιλέχτηκε να χρησιµοποιηθεί για την παρουσίαση της αντικειµενοστρεφούς µορφής προγραµµατισµού. Στη δεύτερη ενότητα, παρουσιάζεται η διαδικασία ανάπτυξης Java προγράµµατος, αλλά και Java applet, καθώς και η διαδικασία ενσωµάτωσης Java applet σε ιστοσελίδα. 2.1 IÛÙÔÚ ÙË Java Η Java παρουσιάστηκε σαν µια γλώσσα που είχε αφαιρέσει τα «βρώµικα» στοιχεία της C++ και είχε εισάγει ένα σύνολο από καλά στοιχεία άλλων γλωσσών όπως η Smalltalk. H ιστορία της γλώσσας ξεκίνησε, όταν µια οµάδα ερευνητών στην προσπάθεια της να αναπτύξει ενσωµατωµένο λογισµικό (embedded software) για έξυπνες καταναλωτικές συσκευές στα πλαίσια του project Green, αποφάσισε να αναπτύξει µια νέα γλώσσα µετά τη διαπίστωση ότι η C και η C++ δεν ανταποκρίνονταν στις απαιτήσεις της. Έτσι, τον Αύγουστο του 1991 εµφανίστηκε µια νέα αντικειµενοστρεφής γλώσσα µε το όνοµα Oak που είναι το ακρωνύµιο του Object Application Kernel. Η γλώσσα απλά προστέθηκε στον κατάλογο των καλών γλωσσών προγραµ- µατισµού µε ουσιαστική υποστήριξη σε εφαρµογές τύπου πελάτη εξυπηρέτη (client server) και τίποτε παραπάνω. Tον Απρίλιο του 1993 έκανε την εµφάνιση του το NCSA MOSAIC 1.0, σαν πρώτο γραφικό πρόγραµµα πλοήγησης στο διαδίκτυο (Web browser) και η γλώσσα άρχισε να κάνει τα πρώτα της βήµατα στο χώρο του διαδικτύου, µε πολύ θετικά αποτελέσµατα. Το στοιχείο αυτό ώθησε την Sun, µετά από µία αποτυχηµένη προσπάθειά της να πουλήσει τη γλώσσα (Αύγουστος 93), να χρηµατοδοτήσει την ανάπτυξή της για το 1994, αν και το προηγούµενο έτος είχε διακόψει σαν µη επιτυχηµένο το αντίστοιχο project. Στα µέσα του 1994 αναπτύχθηκε το πρώτο πειραµατικό πρόγραµµα πλοήγησης µε Java κάτω από το όνοµα WebRunner [1]. Το φθινόπωρο του ίδιου έτους ο Van Hoff υλοποιεί µε Java τον πρώτο Java διερµηνευτή [2]. Μόλις τον Ιανουάριο του 1995, η γλώσσα πήρε την σηµερινή της ονοµασία και εµφανίστηκε η πρώτη επίσηµη τεκµηρίωσή της µε την µορφή ενός «white paper» [Sun 95]. Το Μάιο του ιδίου έτους, η Sun παρουσίασε επίσηµα την Java [1] Aποτελεί την πρώτη έκδοση του προγράµµατος πλοήγησης HotJava της Sun. [2] O προηγούµενος Java interpreter είχε αναπτυχθεί από τον Gosling σε C.

I ƒπ JAVA 27 και το HotJava. Ταυτόχρονα, η Netscape αγόρασε άδεια χρήσης της Java και ενσωµάτωσε τη γλώσσα στη δεύτερη έκδοση του Netscape, του γνωστού προγράµµατος πλοήγησης. Στη συνέχεια ο ένας µετά τον άλλο οι µεγάλοι κατασκευαστές λογισµικού ανακοίνωναν την απόφαση τους να χρησιµοποιήσουν την Java, µε αποκορύφωµα την απόφαση της Microsoft τον εκέµβρη του 1995. Η Java καθιερώθηκε πια σαν η γλώσσα που θα πρωτοστατήσει στην ερχόµενη δεκαετία. Μια αναλυτική αναφορά στο χρονικό της εξέλιξης της γλώσσας µπορείτε να βρείτε στο διαδίκτυο στη διεύθυνση http://ils.unc.edu/blaze/java/javahist.html. Μπορείτε επίσης να ανατρέξετε στην εισαγωγή της Υποενότητας 4, «Γλώσσες προγραµµατισµού», της 3ης Θεµατικής Ενότητας για να δείτε ένα µέρος του γενεαλογικού δένδρου των γλωσσών προγραµµατισµού. Θα διακρίνετε σε αυτό την εξέλιξη της C, αλλά και της Java, καθώς και τις γλώσσες από τις οποίες, κυρίως αυτές επηρεάστηκαν. Γιατί Java; Ορισµένοι από τους λόγους για τους οποίους επιλέξαµε τη Java για την εισαγωγή των εννοιών της αντικειµενοστρεφούς προσέγγισης είναι: η φορητότητά της, η οποία διασφαλίζει την δυνατότητα εκτέλεσης των Java προγραµµάτων ανεξάρτητα πλατφόρµας υλικού και λογισµικού, η πολύ µεγάλη βιβλιοθήκη έτοιµων κλάσεων που διαθέτει, γεγονός που διευκολύνει σε µεγάλο βαθµό τη γρήγορη ανάπτυξη εφαρµογών, η ραγδαία εξάπλωση που γνωρίζει όσον αφορά τη χρήση της σε ερευνητικά και αναπτυξιακά προγράµµατα, η δυνατότητα της να χρησιµοποιηθεί για προγραµµατισµό στο διαδίκτυο, το γεγονός ότι είναι, όσον αφορά την υποστήριξη της ΑΠ, πολύ πιο καθαρή από την C++, η οποία θα µπορούσε να θεωρηθεί σαν λογική συνέχεια της C, η υιοθέτηση µεγάλου µέρους της C. Ο τελευταίος αυτός λόγος, θα σας δώσει τη δυνατότητα να µπορέσετε πολύ σύντοµα να τροποποιήσετε ή ακόµη και να δηµιουργήσετε τα δικά σας προγράµµατα Java εκµεταλλευόµενοι την γνώση και εµπειρία σας στη C. Ενδιαφέρον παρουσιάζουν οι συγκριτικές παρουσιάσεις της γλώσσας µε άλλες επιτυχηµένες γλώσσες προγραµµατισµού. Μια τέτοια συγκριτική παρουσίαση µε τις γλώσσες Smalltlk, TCL, Perl, Shells, C και C++ δίνεται

28 º π 2: Eπ ø JAVA στο [Sun 95] [3]. Μια πιο αντικειµενική αξιολόγηση µε αντίστοιχη βαθµολόγηση των σηµαντικότερων αντικειµενοστρεφών γλωσσών προγραµµατισµού δίνεται από το άρθρο [Sutherland 95]. 2.2 È ÈÎ Û Ó appleù ÍË appleúôáú ÌÌ ÙÔ Java ÈÛ ÁˆÁÈÎ apple Ú ÙËÚ ÛÂÈ Για να µπορέσετε να µελετήσετε την ενότητα αυτή θα πρέπει πρώτα να εξασφαλίσετε πρόσβαση σε ένα περιβάλλον ανάπτυξης Java. Το περιβάλλον αυτό είναι απαραίτητο για την ανάπτυξη κάθε προγράµµατος Java. Ένα τέτοιο περιβάλλον που διατίθεται χωρίς χρέωση και χρησιµοποιείται ευρέως είναι το Java Development Toolkit ή JDK της Sun του οποίου µια έκδοση µπορείτε να κατεβάσετε από το διαδίκτυο στη διεύθυνση http://java.sun.com/ products/jdk/1.1/index.html. Στη συνέχεια, και µόνο αφού εγκαταστήσετε το περιβάλλον ανάπτυξης ακολουθώντας τις οδηγίες του κατασκευαστή, µπορείτε να προχωρήσετε στη µελέτη της ενότητας. H ενότητα περιγράφει τη διαδικασία ανάπτυξης Java προγράµµατος. Ένα Java πρόγραµµα µπορεί να έχει µια από τις παρακάτω µορφές: Aυτόνοµη εφαρµογή (stand alone program). Αποτελεί την κλασσική µορφή προγραµµάτων που γνωρίζετε. Για την εκτέλεση της απαιτείται ο Java διερµηνευτής (interpreter). Applet. Είναι ένα µικρό πρόγραµµα που συνήθως αποθηκεύεται σ έναν αποµακρυσµένο υπολογιστή, στον οποίο οι χρήστες µπορούν να συνδεθούν µε τη χρήση ενός προγράµµατος πλοήγησης για να κατεβάσουν και να εκτελέσουν το applet σαν κοµµάτι µιας ιστοσελίδας. Ένα applet µπορεί να εκτελεστεί εναλλακτικά και από ένα applet viewer [4]. Η διαδικασία ανάπτυξης ενός προγράµµατος Java εξαρτάται από τη µορφή του και περιγράφεται χωριστά για κάθε περίπτωση στη συνέχεια. [3] Θα την χαρακτηρίζαµε σαν όχι απόλυτα αντικειµενική. [4] Eίναι ένας browser µε την ελάχιστη δυνατή λειτουργικότητα που απαιτείται για την εκτέλεση ενός applet.

π π π À ƒ ƒ ªª JAVA 29 2.2.1 È ÈÎ Û Ó appleù ÍË ÙfiÓÔÌË ÂÊ ÚÌÔÁ Η διαδικασία ανάπτυξης αυτόνοµου προγράµµατος σε ένα τυπικό περιβάλλον ανάπτυξης Java εφαρµογών όπως το JDK της Sun περιλαµβάνει τα παρακάτω βήµατα: 1. συγγραφή του πηγαίου κώδικα, 2. µεταγλώττιση του πηγαίου κώδικα, 3. εκτέλεση του προγράµµατος. Συγγραφή πηγαίου κώδικα Για τη συγγραφή του πηγαίου κώδικα θα χρησιµοποιήσετε ένα editor της αρεσκείας σας. Στο Unix µπορείτε, για παράδειγµα, να χρησιµοποιήσετε τον vi ή τον emacs, ενώ στα Windows Microsoft το Notepad ή ακόµη και τον DOSEdit. Βέβαια ολοκληρωµένα περιβάλλοντα ανάπτυξης (Integrated Development Environments IDEs), όπως το Visual J++ της Microsoft ή το Visual Cafe της Symantec, έχουν τους δικούς τους εξειδικευµένους editors. Σε κάθε περίπτωση η αποθήκευση του πηγαίου κώδικα πρέπει να γίνεται σε αρχείο, του οποίου η επέκταση πρέπει να είναι.java. Προσέξτε! Aν ο editor σας, προσθέτει διαφορετική επέκταση, πρέπει να τη διορθώσετε. Μεταγλώττιση Η µεταγλώττιση γίνεται από τον µεταγλωττιστή της Java που φέρει το όνοµα javac. Ο µεταγλωττιστής µεταφράζει τον πηγαίο κώδικα Java σε bytecodes, τη γλώσσα που κατανοεί και εκτελεί ο διερµηνευτής της Java. Θα πρέπει να παρατηρήσουµε ότι ο µεταγλωττιστής δεν δηµιουργεί εκτελέσιµο κώδικα της µηχανής εκτέλεσης, αλλά µιας υποθετικής µηχανής που έχει σαν εκτελέσιµο κώδικα τον ονοµαζόµενο bytecodes. Κάθε µηχανή που διαθέτει διερ- µηνευτή Java µπορεί να θεωρηθεί ιδεατή µηχανή Java (Java virtual machine) και να εκτελέσει bytecodes. Για τη µεταγλώττιση θα πρέπει να δοθεί στη γραµµή εντολών του συστήµατός σας (DOS prompt για Windows 95 ή NT και shell prompt για UNIX) η εντολή: javac <fióôì appleúôáú ÌÌ ÙÔ >.java Αν ο µεταγλωττιστής σας εντοπίσει λάθη, τα αναφέρει. ιαφορετικά δηµιουργεί ένα αρχείο [5] µε το όνοµα του προγράµµατος και επέκταση.class, το [5] Στη συνέχεια θα δούµε πως δηµιουργεί ένα αρχείο για κάθε κλάση του προγράµµατος Java.

30 º π 2: Eπ ø JAVA οποίο περιέχει την αναπαράσταση του προγράµµατος σε bytecodes και αποτελεί το εκτελέσιµο πρόγραµµα. Εκτέλεση Η εκτέλεση του προγράµµατος είναι µια σύνθετη διεργασία, διαφορετική από αυτή των προγραµµάτων των προστακτικών γλωσσών, όπως η C, Pascal και Fortran. Γίνεται µε τη χρήση του Java διερµηνευτή, τον οποίο ενεργοποιούµε µε την παρακάτω εντολή της γραµµής διαταγών: java <fióôì appleúôáú ÌÌ ÙÔ > Προσοχή! εν απαιτείται η προσθήκη της επέκτασης.class. Με την εκτέλεση του διερµηνευτή της Java το σύστηµα µεταµορφώνεται σε µια µηχανή που κατανοεί και εκτελεί bytecodes, δηλαδή σε µια ιδεατή µηχανή Java. Ο διερµηνευτής της Java O Java διερµηνευτής αποτελείται, όπως φαίνεται και στο σχήµα 2.1, από τα παρακάτω επί µέρους τµήµατα: class loader Aναλαµβάνει να φορτώσει στη µνήµη του υπολογιστή τον κώδικα bytecode είτε από το τοπικό σύστηµα αρχείων είτε διαµέσου του δικτύου. bytecode verifier Aναλαµβάνει να ελέγξει κάθε τµήµα (κλάση, όπως θα δούµε στη συνέχεια) κώδικα bytecode που προέρχεται από το δίκτυο, για να διασφαλίσει ότι δεν παραβιάζονται οι περιορισµοί ασφαλείας που θέτει το περιβάλλον Java. Είναι προφανές ότι το περιβάλλον Java πρέπει να έχει περιορισµούς οι οποίοι εµποδίζουν τις εφαρµογές που κατεβάζετε από το δίκτυο να προκαλούν ζηµιές στο σύστηµά σας (π.χ. διαγραφή αρχείων του δίσκου σας), όταν εκτελούνται. interpreter Tο τελευταίο αυτό τµήµα, που δίνει και το όνοµά του στο όλο πρόγραµµα, διερµηνεύει τον κώδικα bytecode, εντολή προς εντολή, σε γλώσσα µηχανής η οποία εκτελείται από την CPU του µηχανήµατος. H παραπάνω διαδικασία δεν λειτουργεί συνήθως αµέσως. Μετά από κάθε φάση είναι πιθανό να εντοπιστούν λάθη. Τα λάθη αυτά αναφέρονται από το σύστηµα, διορθώνονται από τον προγραµµατιστή και η διαδικασία επαναλαµβάνεται µέχρι την επιτυχή έκβασή της.

π π π À ƒ ƒ ªª JAVA 31 Xρόνος µεταγλώττισης Java source Xρόνος εκτέλεσης Bytecode Loader Java µεταγλωττιστής Bytecodes µετακινούνται διαµέσου του δικτύου ή του συστήµατος αρχείων Bytecode Verifier ιερµηνευτής Code Generator Java Bytecode Run time Yλικό Ì 2.1. Ανάπτυξη και εκτέλεση Java εφαρµογής. Για την εξοικείωση µε την παραπάνω διαδικασία, χρησιµοποιήστε τον πηγαίο κώδικα του Παραδείγµατος 1.2 που ακολουθεί για να δηµιουργήσετε και να εκτελέσετε µια απλή αυτόνοµη εφαρµογή Java. Ú ÛÙËÚÈfiÙËÙ 2.1 Ú ÂÈÁÌ 2.1 Αναπτύξτε ένα πρόγραµµα σε Java που θα τυπώνει στην οθόνη το γνωστό σας πλέον µήνυµα «Hello World». Στη φάση αυτή δεν µας ενδιαφέρει να κατανοήσετε πλήρως τον κώδικα Java που δίνεται στο σχήµα 2.2. Αυτό θα γίνει σε επόµενα κεφάλαια. Πρέπει όµως να εκτελέσετε οπωσδήποτε τη διαδικασία στον υπολογιστή σας µέχρι την επιτυχή εκτέλεση του προγράµµατος. public class HelloWorld { static final String message = "Hello World!"; public static void main(string[] arg){ System.out.println(message); Ì 2.2 Πηγαίος κώδικας για το πρόγραµµα Hello World.

32 º π 2: Eπ ø JAVA Είναι σηµαντικό να επισηµάνουµε ότι κάθε πρόγραµµα Java πρέπει να περιλαµβάνει τον ορισµό µιας τουλάχιστο public κλάσης. Η κλάση αυτή πρέπει να περιέχει µια συνάρτηση (που καλείται µέθοδος όπως θα δούµε στο επό- µενο κεφάλαιο) µε όνοµα main, (µην ξεχνάµε πως η Java επηρεάσθηκε από την C), η οποία πρέπει να είναι public και static. Ο διερµηνευτής της Java αρχίζει την εκτέλεση του προγράµµατος από τη µέθοδο main. Η main του παραδείγµατός µας περιέχει µια µόνο πρόταση η οποία έχει σαν αποτέλεσµα την εκτύπωση στην κύρια έξοδο, του µηνύµατος «Hello World». Χρησιµοποιήστε, σαν πρώτο βήµα, έναν editor για να γράψετε τον πηγαίο κώδικα και στη συνέχεια να τον σώσετε σε ένα αρχείο µε όνοµα ίδιο µε αυτό της public κλάσης του και επέκταση.java. Πρέπει δηλαδή να δηµιουργήσετε το αρχείο HelloWorld.java. Στη συνέχεια µεταγλωττίστε τον κώδικα Java σε bytecode καλώντας τον java µεταγλωττιστή της Java: javac HelloWorld.java Ο µεταγλωττιστής, αν δεν εντοπίσει λάθη τα οποία πρέπει να διορθώσετε, παράγει στο τρέχον ευρετήριο το αρχείο HelloWorld.class Το αρχείο αυτό περιέχει το πρόγραµµα µας σε αναπαράσταση bytecode και µπορεί να εκτελεστεί σε οποιοδήποτε σύστηµα που διαθέτει διερµηνευτή της Java. Για την εκτέλεση του προγράµµατος καλέστε το διερµηνευτή Java όπως παρακάτω: java HelloWorld Το αποτέλεσµα θα είναι η εµφάνιση στην οθόνη της γραµµής HelloWorld! 2.2.2 È ÈÎ Û Ó appleù ÍË Applet Η διαδικασία ανάπτυξης applet περιλαµβάνει: 1. τη συγγραφή του πηγαίου κώδικα. Χρησιµοποιήστε ένα editor της αρεσκείας σας π.χ. Notepad. 2. τη µεταγλώττιση του πηγαίου κώδικα σε bytecodes. Χρησιµοποιήστε το µεταγλωττιστή javac. 3. τη δηµιουργία, µέσα σε µία HTML σελίδα, µιας αναφοράς προς το παρα-

π π π À ƒ ƒ ªª JAVA 33 γόµενο αρχείο.class 4. την εκτέλεση του applet. Χρησιµοποιήστε ένα πρόγραµµα πλοήγησης ή ένα applet viewer για να φορτώσετε την HTML σελίδα που περιέχει την αναφορά στο applet. Χρησιµοποιήστε τον πηγαίο κώδικα του Παραδείγµατος 2.2 για να δηµιουργήσετε ένα Java applet. Στη συνέχεια δηµιουργήστε µια HTML σελίδα, ενσωµατώστε σε αυτή το applet που δηµιουργήσατε και χρησιµοποιήστε ένα πρόγραµµα πλοήγησης για να δείτε την εκτέλεση του applet σας. Ú ÛÙËÚÈfiÙËÙ 2.2 Ú ÂÈÁÌ 2.2 Το πρόγραµµα του οποίου ο πηγαίος κώδικας δίνεται στο σχήµα 2.3, χρησι- µοποιείται για να δείξει τη διαδικασία παραγωγής και εκτέλεσης ενός applet. Προς το παρόν δεν θα ασχοληθούµε µε τη σηµασία του πηγαίου κώδικα. 1 // Ú ÂÈÁÌ 1. ÙÔ appleúòùô applet 2 import java.applet.applet; // Î ÓÂÈ import ÙËÓ ÎÏ ÛË // Applet 3 import java.awt.*; // Î ÓÂÈ import ÙÔ apple Î ÙÔ awt 4 5 public class HelloWorld extends Applet { 6 // Ì ıô Ô ÂÌÊ Ó ÂÈ ÙÔ applet. 7 // ÎÏ ÛË Graphics appleôûùëú ÂÈ ÙÈ appleâèîôó ÛÂÈ ÛÙË // Java. 8 public void paint(graphics g) { 9 g.drawstring("hello World",50, 50); 10 11 Ì 2.3 Πηγαίος κώδικας απλού Java applet.

34 º π 2: Eπ ø JAVA Ακολουθήστε προσεκτικά τα παρακάτω βήµατα: Βήµα 1: Χρησιµοποιήστε τον editor σας για να γράψετε το πρόγραµµα και να το αποθηκεύσετε στο αρχείο HelloWorld.java. Παραλείψτε την αρίθ- µηση στο αριστερό άκρο, δεν αποτελεί µέρος του προγράµµατος. Έγινε για να διευκολύνει την αναφορά στις επιµέρους προτάσεις του προγράµµατος, όταν στη συνέχεια της ενότητας θα τις σχολιάσουµε µία προς µία. Βήµα 2: Καλέστε το µεταγλωττιστή για να δηµιουργήσετε την bytecode αναπαράσταση javac HelloWorld.java Αν ο µεταγλωττιστής δεν ανιχνεύσει λάθη, παράγει το αρχείο HelloWorld.class. Αν η µεταγλώττιση αποτύχει, διορθώστε τα λάθη που σας αναφέρει ο µεταγλωττιστής και επαναλάβετε τη διαδικασία. Μια λίστα µε τα πιθανά λάθη και τις λύσεις τους, µπορείτε να βρείτε στο διαδίκτυο στη διεύθυνση http://java.sun.com/docs/books/tutorial/getstarted /problems/index.html, κάτω από τον τίτλο «Common Compiler and Interpreter Problems (and Their Solutions)». Βήµα 3: Για να ενεργοποιήσετε το applet που µόλις κατασκευάσατε, πρέπει να δηµιουργήσετε σε ένα HTML [6] αρχείο, µια αναφορά προς αυτό. Μπορείτε να δηµιουργήσετε ένα HTML αρχείο ακολουθώντας έναν από τους παρακάτω δύο τρόπους: α) Χρησιµοποιήστε ένα text editor για να δηµιουργήσετε ένα αρχείο µε όνοµα Hello.html, στο ίδιο ευρετήριο µε αυτό που βρίσκεται το αρχείο HelloWorld.class που µόλις δηµιουργήσατε. Το αρχείο θα πρέπει να περιέχει το παρακάτω κείµενο: <HTML> <HEAD> <TITLE> ŒÓ appleïfi applet </TITLE> </HEAD> <BODY> [6] H HTML (Hypertext Markup Language) χρησιµοποιείται για τη διαµόρφωση ιστοσελίδων του διαδικτύου, οι οποίες είναι κατανοητές από προγράµµατα πλοήγησης, όπως το Communicator της Netscape, το Internet Explorer της Microsoft και το HotJava της Sun.

π π π À ƒ ƒ ªª JAVA 35 ÎÔÏÔ ıâ Ë ÍÔ Ô ÙÔ appleïô Java applet: <APPLET CODE="HelloWorld.class" WIDTH=350 HEIGHT=200> </APPLET> </BODY> </HTML> β) Μπορείτε εναλλακτικά να δηµιουργήσετε µια HTML σελίδα από τον κει- µενογράφο Word της Microsoft. ιαµορφώστε το περιεχόµενο µιας σελίδας του Word µε τις πληροφορίες που θέλετε να περιέχει η σελίδα. Σώστε το κεί- µενο σας σαν «HTML document» και στη συνέχεια εισάγετε (επιλέξτε «Insert HTML tag») την παρακάτω αναφορά για την εµφάνιση του applet: <APPLET CODE="HelloWorld.class" WIDTH=350 HEIGHT=200> </APPLET> Η αναφορά αυτή ορίζει το όνοµα του applet, καθώς και τις διαστάσεις σε pixels της περιοχής του παραθύρου του προγράµµατος πλοήγησης στο οποίο θα ανατεθεί στο applet. Σώστε τη σελίδα σας σε ένα αρχείο µε το όνοµα Hello.html. Βήµα 4: Για να εκτελέσετε το applet θα πρέπει να φορτώσετε τη σελίδα σας (δηλαδή το αρχείο Hello.html) σε ένα πρόγραµµα πλοήγησης ή applet viewer [7]. Όταν ο browser ή ο applet viewer εντοπίσει στην HTML σελίδα µια αναφορά σε ένα applet, ενεργοποιεί τον Java class loader για να φορτώσει το applet. Στη συνέχεια ενεργοποιείται ο bytecode verifier, ο οποίος ελέγχει τον κώδικα του applet για να διασφαλίσει ότι δεν παραβιάζονται οι κανόνες ασφάλειας της Java. Τέλος, ο ενσωµατωµένος στο πρόγραµµα πλοήγησης διερµηνευτής εκτελεί το applet µε αποτέλεσµα την εµφάνιση στο παράθυρο του προγράµµατος πλοήγησης του παρακάτω µηνύµατος: Ακολουθεί η έξοδος του απλού Java applet: Hello World 2.2.3 H ÂÍ ÁËÛË ÂÓfi appleïô Applet Ας δούµε πώς δουλεύει το applet που µόλις δηµιουργήσατε. Και πρώτ απ όλα, θα αρχίσουµε από τα σχόλια, τα οποία είναι απαραίτητα σε πολλά σηµεία για την αύξηση της αναγνωσιµότητας του πηγαίου κώδικα. Χρησι- [7] Xρησιµοποιήστε την εντολή appletviewer Hello.html για να φορτώσετε την HTML σελίδα σας στον appletviewer.

36 º π 2: Eπ ø JAVA µοποιήστε το // για να δείξετε ότι ακολουθούν σχόλια στο υπόλοιπο τµήµα της γραµµής (γραµµή 2).Καλή προγραµµατιστική τεχνική είναι η τοποθέτηση στην αρχή του προγράµµατος σχολίων τα οποία περιγράφουν τον σκοπό του προγράµµατος (γραµµή 1). Θυµόσαστε σίγουρα οτι για την ανάπτυξη οποιασδήποτε σχεδόν εφαρµογής ήταν απαραίτητη η χρήση της βασικής βιβλιοθήκης της C. Η βιβλιοθήκη αυτή αποτελείται από ένα σύνολο από καλώς επιλεγµένες συναρτήσεις γενικού σκοπού, που µας διευκολύνουν στην διαδικασία ανάπτυξης. Κάθε συνάρτηση αποτελεί υλοποίηση µιας βασικής διεργασίας. Αντίστοιχα, στην Java, ένας µεγάλος αριθµός από κλάσεις είναι διαθέσιµος για άµεση χρήση από τον προγραµµατιστή. Οι κλάσεις είναι οργανωµένες σε κατηγορίες, µε κάθε κατηγορία να αναφέρεται σαν πακέτο (package). Το σύνολο των πακέτων είναι γνωστό σαν Java class library ή Java Applications Programming Interface (Java API). Οι κλάσεις κάθε πακέτου βρίσκονται σε ένα υποευρετήριο κάτω από το ευρετήριο Java του JDK. Για να χρησιµοποιήσετε µία κλάση θα πρέπει να ενηµερώσετε κατάλληλα το µεταγλωττιστή, εισάγοντας την κατάλληλη πρόταση import στην αρχή του προγράµµατός σας. Οι προτάσεις import ενηµερώνουν επιπλέον το µεταγλωττιστή για τη θέση των κλάσεων στο σύστηµα σας. Το αλφαριθµητικό που ακολουθεί τη λέξη κλειδί import, αποτελείται µόνο από το όνοµα του υποευρετηρίου στο οποίο είναι αποθηκευµένο το πακέτο, οπότε ο µεταγλωττιστής αναγνωρίζει ένα πακέτο (το πακέτο awt στην γραµµή 3) ή περιλαµβάνει και το όνοµα µιας κλάσης, οπότε ο µεταγλωττιστής αναγνωρίζει τη συγκεκριµένη κλάση (την κλάση applet στη γραµµή 2). Ο µεγάλος αριθµός των διαθέσιµων κλάσεων διευκολύνει τον προγραµµατιστή να αναπτύξει σύνθετα προγράµµατα, επαναχρησιµοποιώντας παρά δηµιουργώντας από το µηδέν κλάσεις. Είναι φανερό λοιπόν, ότι µόνο η γνώση της γλώσσας δεν είναι πλέον αρκετή για την ανάπτυξη εφαρµογών. Η καλή γνώση της βασικής βιβλιοθήκης κλάσεων είναι αυτό που αυξάνει την παραγωγικότητα ενός προγραµµατιστή. Βέβαια, ο προγραµµατιστής έχει επιπλέον τη δυνατότητα να αναπτύξει τις δικές του κλάσεις και να τις οργανώσει σε δικά του πακέτα. Κάθε πρόγραµµα Java αποτελείται από τη δήλωση µιας τουλάχιστον κλάσης. Την κλάση αυτή που αναπαριστά το υπό ανάπτυξη πρόγραµµα, ο προγραµµατιστής έχει την δυνατότητα να τη δηλώσει ως νέα κλάση εξ αρχής ή