Περιεχόµενα. Βασικές αρχές αντικειµενοστρεφούς. Κεφάλαιο 1 Αντικείµενα και κλάσεις Κεφάλαιο 2 Κατανόηση των ορισµών κλάσεων...

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

Σχεδίαση Κλάσεων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

4 Συλλογές Αντικειμένων

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

Περιεχόμενα. Πρόλογος 19 Εισαγωγή 21 Κατάλογος των έργων που εξετάζονται αναλυτικά στο βιβλίο 35 Ευχαριστίες 39

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

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

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Προγράμματα με δομή Κληρονομικότητας

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

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

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

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

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

Προγράμματα με δομή Κληρονομικότητας

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

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

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

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

Διαγράμματα Κλάσεων στη Σχεδίαση

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

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

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

Περιεχόµενα. 1 Tο βιβλίο "µε µια µατιά" Εισαγωγή στη Microsoft Access Γνωριµία µε τις βάσεις δεδοµένων της Access...

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού

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

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Επανάληψη για τις Τελικές εξετάσεις

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

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

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

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

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

Ευχαριστίες...xi Εισαγωγή...xiii. ΚΕΦΑΛΑΙΟ 1 Άνοιγµα και εκτέλεση ενός προγράµµατος Visual Basic.NET

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

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

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

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

Περιεχόµενα. Μέρος I Βασικά στοιχεία των Microsoft Windows XP Professional. Ευχαριστίες Εισαγωγή... 19

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

Προσομοίωση παρακολούθησης πληθυσμών αλεπούδων και κουνελιών

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

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

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


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

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

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

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

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

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

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

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

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

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

Βασικές Έννοιες Δοµών Δεδοµένων

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

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

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΣΧΕ ΙΑΣΗ ΑΝΤΙΚΕΙΜΕΝΩΝ ΜΕ ΑΡΜΟ ΙΟΤΗΤΕΣ. Ορισµός σχεδιαστικών προτύπων Εφαρµογή των 9 GRASP προτύπων

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

Πρόλογος... xiii ΜΕΡΟΣ 1 1 Εισαγωγή στο Excel Βασικές λειτουργίες του Excel... 21

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

6. Εξαιρέσεις στη γλώσσα Java

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

Week. 6: Java Collections

ΕΠΕΞΕΡΓΑΣΙΑ ΚΕΙΜΕΝΟΥ

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

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

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

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

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

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

Generics και ArrayLists

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

BloodShed Dev C++ Οδηγίες Χρήσης (Συγγραφέας: Πάρις Πολύζος)

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

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Περιεχόμενα ΜΕΡΟΣ 1. Πρόλογος... xiii. 1 Εισαγωγή στο Excel Βασικές λειτουργίες του Excel... 23

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

Εισαγωγή στην πληροφορική

Transcript:

Περιεχόµενα Πρόλογος... 19 Πρόλογος για τον διδάσκοντα... 21 Καθοδηγούµενη ξενάγηση... 32 Κατάλογος των έργων που εξετάζονται αναλυτικά στο βιβλίο... 35 Ευχαριστίες... 39 Μέρος 1 Βασικές αρχές αντικειµενοστρεφούς προγραµµατισµού Κεφάλαιο 1 Αντικείµενα και κλάσεις...45 1.1 Αντικείµενα και κλάσεις... 45 1.2 ηµιουργία αντικειµένων... 46 1.3 Κλήση µεθόδων... 48 1.4 Παράµετροι... 49 1.5 Τύποι δεδοµένων... 50 1.6 Πολλά στιγµιότυπα... 51 1.7 Κατάσταση... 52 1.8 Τι είναι ένα αντικείµενο;... 53 1.9 Αλληλεπίδραση αντικειµένων... 55 1.10 Πηγαίος κώδικας... 56 1.11 Ένα άλλο παράδειγµα... 58 1.12 Επιστρεφόµενες τιµές... 58 1.13 Αντικείµενα ως παράµετροι... 59 1.14 Σύνοψη... 61 Κεφάλαιο 2 Κατανόηση των ορισµών κλάσεων... 65 2.1 Μηχανές εισιτηρίων... 66 2.1.1 Εξέταση της συµπεριφοράς µιας απλοϊκής µηχανής εισιτηρίων... 66 2.2 Εξέταση του ορισµού µιας κλάσης... 67

8 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA 2.3 Πεδία, µέθοδοι, και κατασκευαστές... 70 2.3.1 Πεδία... 72 2.3.2 Κατασκευαστές... 75 2.4 Μεταβίβαση δεδοµένων µέσω παραµέτρων... 77 2.5 Ανάθεση... 79 2.6 Μέθοδοι πρόσβασης... 80 2.7 Μέθοδοι µετάλλαξης... 83 2.8 Εκτύπωση από µεθόδους... 85 2.9 Σύνοψη της απλοϊκής µηχανής εισιτηρίων... 87 2.10 Σκέψεις για τη σχεδίαση της µηχανής εισιτηρίων... 88 2.11 Πώς γίνονται επιλογές: η εντολή συνθήκης... 89 2.12 Ένα επιπλέον παράδειγµα εντολής συνθήκης... 93 2.13 Τοπικές µεταβλητές... 95 2.14 Πεδία, παράµετροι, και τοπικές µεταβλητές... 96 2.15 Σύνοψη της βελτιωµένης µηχανής εισιτηρίων... 98 2.16 Επαναληπτικές ασκήσεις... 98 2.17 Εξέταση ενός γνωστού παραδείγµατος...100 2.18 Σύνοψη...104 Κεφάλαιο 3 Αλληλεπίδραση αντικειµένων... 109 3.1 Το παράδειγµα του ρολογιού...109 3.2 Αφαίρεση και δοµοστοιχειοποίηση...110 3.3 Αφαίρεση στις εφαρµογές...112 3.4 οµοστοιχειοποίηση στο παράδειγµα του ρολογιού...113 3.5 Υλοποίηση της απεικόνισης του ρολογιού...113 3.6 Σύγκριση διαγραµµάτων κλάσεων και διαγραµµάτων αντικειµένων...115 3.7 Θεµελιώδεις τύποι και τύποι αντικειµένων...118 3.8 Ο πηγαίος κώδικας της ClockDisplay...119 3.8.1 Η κλάση NumberDisplay...119 3.8.2 Συνένωση αλφαριθµητικών...121 3.8.3 Ο τελεστής modulo...123 3.8.4 Η κλάση ClockDisplay...124 3.9 ηµιουργία αντικειµένων από αντικείµενα...127 3.10 Ύπαρξη πολλών κατασκευαστών...129 3.11 Κλήσεις µεθόδων...130 3.11.1 Εσωτερικές κλήσεις µεθόδων...130 3.11.2 Εξωτερικές κλήσεις µεθόδων...131 3.11.3 Σύνοψη της απεικόνισης του ρολογιού...133

Περιεχόµενα 9 3.12 Ένα επιπλέον παράδειγµα αλληλεπίδρασης αντικειµένων...133 3.12.1 Το παράδειγµα του συστήµατος αλληλογραφίας...135 3.12.2 Η λέξη-κλειδί this...136 3.13 Χρήση αποσφαλµατωτή...138 3.13.1 Καθορισµός σηµείων διακοπής...139 3.13.2 Βηµατική εκτέλεση...141 3.13.3 Βηµατική εκτέλεση µεθόδων εκ των έσω...142 3.14 Επανεξέταση της κλήσης µεθόδων...143 3.15 Σύνοψη...144 Κεφάλαιο 4 Οµαδοποίηση αντικειµένων... 147 4.1 Οµαδοποίηση αντικειµένων σε συλλογές ευέλικτου µεγέθους...147 4.2 Ένα προσωπικό σηµειωµατάριο...148 4.3 Μια πρώτη µατιά σε κλάσεις βιβλιοθήκης...149 4.3.1 Παράδειγµα χρήσης µιας βιβλιοθήκης...149 4.4 οµές αντικειµένων µε συλλογές...152 4.5 Γενικές κλάσεις...154 4.6 Αρίθµηση µέσα σε συλλογές...155 4.7 Αφαίρεση στοιχείου από συλλογή...156 4.8 Επεξεργασία ολόκληρων συλλογών...158 4.8.1 Ο βρόχος for-each...159 4.8.2 Ο βρόχος while...161 4.8.3 Εκτέλεση επαναλήψεων σε µια συλλογή...165 4.8.4 Σύγκριση προσπέλασης µε δείκτη και χρήση επαναλήπτη...167 4.9 Σύνοψη του παραδείγµατος µε το σηµειωµατάριο...167 4.10 Ένα άλλο παράδειγµα: Ένα σύστηµα δηµοπρασιών...169 4.10.1 Η κλάση Lot...169 4.10.2 Η κλάση Auction...171 4.10.3 Ανώνυµα αντικείµενα...174 4.10.4 Χρήση συλλογών...175 4.11 Σύνοψη συλλογών ευέλικτου µεγέθους...177 4.12 Συλλογές σταθερού µεγέθους...178 4.12.1 Αναλυτής αρχείων καταγραφής...178 4.12.2 ήλωση µεταβλητών πίνακα...181 4.12.3 ηµιουργία αντικειµένων πίνακα...182 4.12.4 Χρήση αντικειµένων πίνακα...184 4.12.5 Ανάλυση του αρχείου καταγραφής...184 4.12.6 Ο βρόχος for...186 4.13 Σύνοψη...191

10 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA Κεφάλαιο 5 Πιο εξελιγµένη συµπεριφορά... 193 5.1 Τεκµηρίωση για κλάσεις βιβλιοθήκης...194 5.2 Το σύστηµα TechSupport...195 5.2.1 Εξέταση του συστήµατος TechSupport...196 5.2.2 Ανάγνωση του κώδικα...197 5.3 Ανάγνωση της τεκµηρίωσης κλάσεων...202 5.3.1 Σύγκριση διασυνδέσεων και υλοποίησης...204 5.3.2 Χρήση µεθόδων µιας κλάσης βιβλιοθήκης...205 5.3.3 Έλεγχος ισότητας αλφαριθµητικών...207 5.4 Προσθήκη τυχαίας συµπεριφοράς...208 5.4.1 Η κλάση Random...208 5.4.2 Τυχαίοι αριθµοί σε ένα περιορισµένο εύρος...209 5.4.3 Παραγωγή τυχαίων απαντήσεων...210 5.4.4 Ανάγνωση τεκµηρίωσης για παραµετροποιηµένες κλάσεις...213 5.5 Πακέτα και εισαγωγή (συµπερίληψη)...214 5.6 Χρήση χαρτών για συσχετίσεις...216 5.6.1 Η έννοια του χάρτη...216 5.6.2 Χρήση HashMap...217 5.6.3 Χρήση χάρτη για το σύστηµα TechSupport...218 5.7 Χρήση συνόλων...221 5.8 ιαίρεση αλφαριθµητικών...222 5.9 Ολοκλήρωση του συστήµατος TechSupport...224 5.10 Γραφή τεκµηρίωσης κλάσεων...226 5.10.1 Χρήση του javadoc στο BlueJ...227 5.10.2 Στοιχεία της τεκµηρίωσης κλάσεων...227 5.11 Σύγκριση των λέξεων-κλειδιών public και private...229 5.11.1 Απόκρυψη πληροφοριών...230 5.11.2 Ιδιωτικές µέθοδοι και δηµόσια πεδία...231 5.12 Εύρεση πληροφοριών για τις κλάσεις από τις διασυνδέσεις τους...232 5.13 Μεταβλητές και σταθερές κλάσεων...235 5.13.1 Η λέξη-κλειδί static...236 5.13.2 Σταθερές...237 5.14 Σύνοψη...238 Κεφάλαιο 6 Αντικείµενα µε καλή συµπεριφορά... 241 6.1 Εισαγωγή...241 6.2 Έλεγχος και αποσφαλµάτωση...243 6.3 Έλεγχος µονάδων στο BlueJ...243 6.3.1 Χρήση παραθύρων επιθεώρησης...248 6.3.2 Σύγκριση θετικού και αρνητικού ελέγχου...250

Περιεχόµενα 11 6.4 Αυτοµατοποίηση ελέγχων...251 6.4.1 Έλεγχος παλινδρόµησης...251 6.4.2 Αυτοµατοποιηµένη εξέταση αποτελεσµάτων ελέγχου...254 6.4.3 Καταγραφή ενός ελέγχου...257 6.4.4 Σύνολα προκαθορισµένων αντικειµένων ελέγχου...260 6.5 οµοστοιχειοποίηση και διασυνδέσεις...262 6.6 Ένα σενάριο αποσφαλµάτωσης...264 6.7 Χρήση σχολίων και στυλ κώδικα...265 6.8 Μη αυτόµατες περιηγήσεις...266 6.8.1 Μια µη αυτόµατη περιήγηση υψηλού επιπέδου...267 6.8.2 Έλεγχος κατάστασης µε µια περιήγηση...269 6.8.3 Προφορικές περιηγήσεις...272 6.9 Εντολές εκτύπωσης...273 6.9.1 Ενεργοποίηση ή απενεργοποίηση των πληροφοριών αποσφαλµάτωσης...275 6.10 Επιλογή µιας στρατηγικής ελέγχου...277 6.11 Αποσφαλµατωτές...278 6.12 Εφαρµογή των τεχνικών...279 6.13 Σύνοψη...279 Κεφάλαιο 7 Σχεδίαση κλάσεων... 281 7.1 Εισαγωγή...282 7.2 Το παράδειγµα του παιχνιδιού world-of-zuul...284 7.3 Εισαγωγή στις έννοιες της σύζευξης και της συνοχής...286 7.4 Ύπαρξη πανοµοιότυπων τµηµάτων κώδικα...287 7.5 Επεκτάσεις...292 7.5.1 Η εργασία...292 7.5.2 Εύρεση του σχετικού πηγαίου κώδικα...292 7.6 Σύζευξη...294 7.6.1 Χρήση ενθυλάκωσης για χαλάρωση της σύζευξης...295 7.7 Σχεδίαση καθοδηγούµενη από αρµοδιότητες...300 7.7.1 Αρµοδιότητες και σύζευξη...301 7.8 Τοπικότητα των αλλαγών...304 7.9 Έµµεση σύζευξη...304 7.10 Πρόβλεψη πιθανών αλλαγών...308 7.11 Συνοχή...309 7.11.1 Συνοχή µεθόδων...310 7.11.2 Συνοχή κλάσεων...311 7.11.3 Συνοχή µε σκοπό την αναγνωσιµότητα...312 7.11.4 Συνοχή µε σκοπό την επαναχρησιµοποίηση...312

12 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA 7.12 Αναπαραγοντοθέτηση...314 7.12.1 Αναπαραγοντοθέτηση και έλεγχοι...314 7.12.2 Ένα παράδειγµα αναπαραγοντοθέτησης...315 7.13 Αναπαραγοντοθέτηση µε σκοπό την ανεξαρτησία από τη γλώσσα...319 7.13.1 Απαριθµητοί τύποι...320 7.13.2 Περαιτέρω χαλάρωση της σύζευξης στη διασύνδεση διαταγών...322 7.14 Οδηγίες σχεδίασης...324 7.15 Εκτέλεση χωρίς το BlueJ...326 7.15.1 Μέθοδοι κλάσεων...326 7.15.2 Η µέθοδος main...327 7.15.3 Περιορισµοί των µεθόδων κλάσεων...327 7.16 Σύνοψη...328 Μέρος 2 οµές εφαρµογών Κεφάλαιο 8 Βελτίωση δοµής µε κληρονοµικότητα... 333 8.1 Το παράδειγµα/έργο DOME...334 8.1.1 Κλάσεις και αντικείµενα της εφαρµογής DoME...335 8.1.2 Ο πηγαίος κώδικας της εφαρµογής DoME...338 8.1.3 Ανάλυση της εφαρµογής DoME...344 8.2 Χρήση της κληρονοµικότητας...345 8.3 Ιεραρχίες κληρονοµικότητας...348 8.4 Η κληρονοµικότητα στην Java...349 8.4.1 Κληρονοµικότητα και δικαιώµατα πρόσβασης...350 8.4.2 Κληρονοµικότητα και αρχικοποίηση...350 8.5 DoME: προσθήκη άλλων τύπων µέσων ψυχαγωγίας...353 8.6 Πλεονεκτήµατα της κληρονοµικότητας (µέχρι τώρα)...356 8.7 Ορισµός υποτύπων...356 8.7.1 Υποκλάσεις και υποτύποι...358 8.7.2 Υποτύποι και εντολές ανάθεσης...359 8.7.3 Υποτύποι και µεταβίβαση παραµέτρων...361 8.7.4 Πολυµορφικές µεταβλητές...361 8.7.5 Προσαρµογή τύπου...362 8.8 Η κλάση Object...364 8.9 Αυτόµατη πλαισίωση και κλάσεις περιτύλιξης...365 8.10 Ιεραρχία συλλογών...366 8.11 Σύνοψη...367

Περιεχόµενα 13 Κεφάλαιο 9 Περισσότερα για την κληρονοµικότητα... 371 9.1 Το πρόβληµα: η µέθοδος print της εφαρµογής DοME...371 9.2 Στατικός και δυναµικός τύπος...373 9.2.1 Κλήση της µεθόδου print από την κλάση Database...374 9.3 Υποσκέλιση...377 9.4 υναµική αναζήτηση µεθόδων...379 9.5 Κλήση της super σε µεθόδους...382 9.6 Πολυµορφισµός µεθόδων...384 9.7 Μέθοδοι της κλάσης Object: tostring...384 9.8 Προστατευµένη πρόσβαση...388 9.9 Ένα επιπλέον παράδειγµα κληρονοµικότητας µε υποσκέλιση...390 9.10 Σύνοψη...394 Κεφάλαιο 10 Άλλες τεχνικές αφαίρεσης... 397 10.1 Προσοµοιώσεις...398 10.2 Η προσοµοίωση παρακολούθησης πληθυσµών αλεπούδων και κουνελιών..399 10.2.1 Το έργο foxes-and-rabbits...400 10.2.2 Η κλάση Rabbit...402 10.2.3 Η κλάση Fox...406 10.2.4 Η κλάση Simulator: διευθέτηση...409 10.2.5 Η κλάση Simulator: ένα βήµα της προσοµοίωσης...413 10.2.6 Ενέργειες για τη βελτίωση της προσοµοίωσης...414 10.3 Αφηρηµένες κλάσεις...415 10.3.1 Η υπερκλάση Animal...415 10.3.2 Αφηρηµένες µέθοδοι...416 10.3.3 Αφηρηµένες κλάσεις...420 10.4 Περισσότερες αφηρηµένες µέθοδοι...423 10.5 Πολλαπλή κληρονοµικότητα...425 10.5.1 H κλάση Actor...425 10.5.2 Ευελιξία µέσω της αφαίρεσης...426 10.5.3 Επιλεκτική σχεδίαση...427 10.5.4 Ορατοί συµµετέχοντες: πολλαπλή κληρονοµικότητα...428 10.6 ιασυνδέσεις...428 10.6.1 Η διασύνδεση Actor...429 10.6.2 Πολλαπλή κληρονοµικότητα διασυνδέσεων...431 10.6.3 ιασυνδέσεις ως τύποι...432 10.6.4 ιασυνδέσεις ως προδιαγραφές...432 10.6.5 Ένα επιπλέον παράδειγµα διασυνδέσεων...434 10.6.6 Αφηρηµένη κλάση ή διασύνδεση;...435 10.7 Σύνοψη της κληρονοµικότητας...436 10.8 Σύνοψη...436

14 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA Κεφάλαιο 11 ηµιουργία διασυνδέσεων χρήστη µε γραφικά... 439 11.1 Εισαγωγή...439 11.2 Συστατικά στοιχεία µιας διασύνδεσης, διάταξη, και χειρισµός συµβάντων...440 11.3 Οι βιβλιοθήκες AWT και Swing...441 11.4 Το παράδειγµα ImageViewer...442 11.4.1 Τα πρώτα πειράµατα: δηµιουργία πλαισίου...443 11.4.2 Προσθήκη απλών στοιχείων...446 11.4.3 Προσθήκη µενού...447 11.4.4 Χειρισµός συµβάντων...448 11.4.5 Κεντρική λήψη συµβάντων...449 11.4.6 Εσωτερικές κλάσεις...452 11.4.7 Ανώνυµες εσωτερικές κλάσεις...454 11.5 ImageViewer 1.0: η πρώτη πλήρης έκδοση...457 11.5.1 Κλάσεις επεξεργασίας εικόνων...457 11.5.2 Προσθήκη της εικόνας...458 11.5.3 ιάταξη...460 11.5.4 Ένθετοι αποδέκτες...464 11.5.5 Φίλτρα εικόνων...467 11.5.6 Πλαίσια διαλόγου...470 11.6 ImageViewer 2.0: βελτίωση της δοµής του προγράµµατος...473 11.7 ImageViewer 3.0: περισσότερα στοιχεία διασύνδεσης...479 11.7.1 Κουµπιά...479 11.7.2 Περιγράµµατα...483 11.8 Περισσότερες επεκτάσεις...484 11.9 Ένα ακόµα παράδειγµα: SoundPlayer...486 11.10 Σύνοψη...490 Κεφάλαιο 12 Χειρισµός σφαλµάτων... 493 12.1 Το έργο address-book...494 12.2 Αµυντικός προγραµµατισµός...499 12.2.1 Αλληλεπίδραση πελάτη-διακοµιστή...499 12.2.2 Έλεγχος ορισµάτων...501 12.3 Αναφορά σφαλµάτων διακοµιστή...502 12.3.1 Ειδοποίηση του χρήστη...503 12.3.2 Ειδοποίηση του αντικειµένου-πελάτη...503 12.4 Αρχές παραγωγής εξαιρέσεων...507 12.4.1 Παραγωγή µιας εξαίρεσης...507 12.4.2 Κλάσεις εξαιρέσεων...508 12.4.3 Το αποτέλεσµα µιας εξαίρεσης...510 12.4.4 Ανέλεγκτες εξαιρέσεις...511 12.4.5 Αποτροπή δηµιουργίας αντικειµένων...513

Περιεχόµενα 15 12.5 Χειρισµός εξαιρέσεων...514 12.5.1 Ελεγµένες εξαιρέσεις: ο όρος throws...515 12.5.2 Σύλληψη εξαιρέσεων: η εντολή try...515 12.5.3 Παραγωγή και σύλληψη πολλών εξαιρέσεων...518 12.5.4 ιάδοση εξαίρεσης...519 12.5.5 Το τµήµα finally...520 12.6 Ορισµός νέων κλάσεων εξαιρέσεων...521 12.7 Χρήση ισχυρισµών...523 12.7.1 Έλεγχοι εσωτερικής συνέπειας...523 12.7.2 Η εντολή assert...524 12.7.3 Οδηγίες για τη χρήση των ισχυρισµών...526 12.7.4 Ισχυρισµοί και το πλαίσιο ελέγχου µονάδων του BlueJ...527 12.8 Ανάκαµψη από σφάλµατα και αποφυγή σφαλµάτων...527 12.8.1 Ανάκαµψη από σφάλµατα...528 12.8.2 Αποφυγή σφαλµάτων...529 12.9 Περιπτωσιολογική µελέτη: είσοδος/έξοδος κειµένου...531 12.9.1 Αναγνώστες, γραφείς και ρεύµατα...532 12.9.2 Το έργο address-book-io...533 12.9.3 Έξοδος κειµένου µε την κλάση FileWriter...535 12.9.4 Είσοδος κειµένου µε την κλάση FileReader...537 12.9.5 Scanner: ανάγνωση εισόδου από το τερµατικό...538 12.9.6 Σειριοποίηση αντικειµένων...540 12.10 Σύνοψη...541 Κεφάλαιο 13 Σχεδίαση εφαρµογών... 543 13.1 Ανάλυση και σχεδίαση...544 13.1.1 Η µέθοδος ρήµατος/ουσιαστικού...544 13.1.2 Το παράδειγµα του συστήµατος κρατήσεων θέσεων κινηµατογράφου...544 13.1.3 Εντοπισµός κλάσεων...545 13.1.4 Χρήση καρτών CRC...547 13.1.5 Σενάρια...547 13.2 Σχεδίαση κλάσεων...552 13.2.1 Σχεδίαση διασυνδέσεων κλάσεων...553 13.2.2 Σχεδίαση διασύνδεσης χρήστη...554 13.3 Τεκµηρίωση...554 13.4 Συνεργασία...555 13.5 Κατασκευή πρωτοτύπου...556 13.6 Εξέλιξη του λογισµικού...557 13.6.1 Μοντέλο καταρράκτη...557 13.6.2 Επαναληπτική ανάπτυξη...558

16 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA 13.7 Χρήση προτύπων σχεδίασης...559 13.7.1 οµή ενός προτύπου...561 13.7.2 Πρότυπο Decorator...561 13.7.3 Πρότυπο Singleton...562 13.7.4 Μέθοδος Factory...563 13.7.5 Πρότυπο Observer...564 13.7.6 Σύνοψη των προτύπων...566 13.8 Σύνοψη...567 Κεφάλαιο 14 Μια περιπτωσιολογική µελέτη... 569 14.1 Η περιπτωσιολογική µελέτη...569 14.1.1 Η περιγραφή του προβλήµατος...570 14.2 Ανάλυση και σχεδίαση...571 14.2.1 Εντοπισµός κλάσεων...571 14.2.2 Χρήση καρτών CRC...572 14.2.3 Σενάρια...573 14.3 Σχεδίαση κλάσεων...575 14.3.1 Σχεδίαση διασυνδέσεων κλάσεων...575 14.3.2 Συνεργάτες...576 14.3.3 Υλοποίηση διάρθρωσης...577 14.3.4 Έλεγχος...582 14.3.5 Ορισµένες εκκρεµότητες...582 14.4 Αναδροµική ανάπτυξη...582 14.4.1 Βήµατα ανάπτυξης...582 14.4.2 Ένα πρώτο στάδιο...584 14.4.3 Έλεγχος του πρώτου σταδίου...588 14.4.4 Ένα επόµενο στάδιο ανάπτυξης...589 14.4.5 Άλλες ιδέες για ανάπτυξη...591 14.4.6 Επαναχρησιµοποίηση...592 14.5 Ένα ακόµα παράδειγµα...593 14.6 Ένα βήµα πιο πέρα...593 Παραρτήµατα... 595 Α Χρήση έργων του BlueJ...595 Β Τύποι δεδοµένων της Java...598 Γ οµές ελέγχου της Java...601 Τελεστές...607 Ε Εκτέλεση της Java χωρίς το BlueJ...610 ΣΤ ιευθέτηση του BlueJ...614 Ζ Χρήση του αποσφαλµατωτή...616 Η Εργαλεία JUnit για έλεγχο µονάδων...621

Περιεχόµενα 17 Θ Javadoc...623 Ι Οδηγός στυλ προγραµµατισµού...627 Κ Σηµαντικές κλάσεις βιβλιοθήκης...631 Ευρετήριο... 636

ΚΕΦΑΛΑΙΟ Οµαδοποίηση αντικειµένων Βασικές έννοιες κεφαλαίου: συλλογές (collections) βρόχοι (loops) επαναλήπτες (iterators) πίνακες (arrays) οµές της Java που παρουσιάζονται στο κεφάλαιο: ArrayList, Iterator, βρόχος while, null, προσαρµογή τύπου, ανώνυµα αντικείµενα, πίνακας, βρόχος for, βρόχος for-each, τελεστής ++ ArrayList 4.1 Οµαδοποίηση αντικειµένων σε συλλογές µεταβλητού µεγέθους

148 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA 4.2 Ένα προσωπικό σηµειωµατάριο

Κεφάλαιο 4 Οµαδοποίηση αντικειµένων 149 Άσκηση 4.1 Ανοίξτε το έργο notebook1 στο περιβάλλον του BlueJ και δηµιουργήστε ένα αντικεί- µενο Notebook. Αποθηκεύστε µερικές σηµειώσεις σε αυτό είναι απλά αλφαριθµητικά και έπειτα ελέγξτε αν ο αριθµός των σηµειώσεων που επιστρέφεται από τη µέθοδο numberofnotes συµφωνεί µε τον αριθµό των σηµειώσεων που πραγµατικά αποθηκεύσατε. Όταν χρησιµοποιήσετε τη µέθοδο shownote, θα χρειαστεί να χρησιµοποιήσετε ως τιµή παραµέτρου το 0 (µηδέν) για να τυπωθεί η πρώτη σηµείωση, το 1 (ένα) για να τυπωθεί η δεύτερη σηµείωση, κ.ο.κ. Θα εξηγήσουµε τον λόγο γι αυτή την αρίθµηση στη συνέχεια. Έννοια: Οι συλλογές είναι αντικείµενα που µπορούν να αποθηκεύουν οποιονδήποτε αριθµό άλλων αντικειµένων. 4.3 Μια πρώτη µατιά σε κλάσεις βιβλιοθήκης new Notebook ArrayList java.util ArrayList 4.3.1 Παράδειγµα χρήσης µιας βιβλιοθήκης Notebook ArrayList

150 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA Κώδικας 4.1 Η κλάση Notebook import java.util.arraylist; /** * Κλάση διατήρηση λίστα για οποιονδήποτε αριθµό σηµειώσεων. * Οι σηµειώσει αριθµούνται για εξωτερική αναφορά από το χρήστη. * Σε αυτή την έκδοση, οι αριθµοί των σηµειώσεων ξεκινάνε από το 0. * * @author David J. Barnes and Michael Kölling. * @version 2006.03.30 */ public class Notebook { // Αποθηκευτικό χώρο για οποιονδήποτε αριθµό σηµειώσεων. private ArrayList<String> notes; /** * Εκτέλεση οποιασδήποτε ενέργεια αρχικοποίηση απαιτείται για το * σηµειωµατάριο. */ public Notebook() { notes = new ArrayList<String>(); } /** * Αποθήκευση µια νέα σηµείωση στο σηµειωµατάριο. * @param note Η σηµείωση που πρόκειται να αποθηκευτεί. */ public void storenote(string note) { notes.add(note); } /** * @return Ο τρέχων αριθµό σηµειώσεων στο σηµειωµατάριο. */ public int numberofnotes() { return notes.size(); } /** * Εµφάνιση σηµείωση. * @param notenumber Ο αριθµό τη σηµείωση που θα εµφανιστεί. */

Κεφάλαιο 4 Οµαδοποίηση αντικειµένων 151 } public void shownote(int notenumber) { if(notenumber < 0) { // Αυτό δεν είναι έγκυρο αριθµό σηµείωση, // οπότε να µη γίνει καµία ενέργεια. } else if(notenumber < numberofnotes()) { // Αυτό είναι έγκυρο αριθµό σηµείωση, // οπότε µπορεί να τυπωθεί. System.out.println(notes.get(noteNumber)); } else { // Αυτό δεν είναι έγκυρο αριθµό σηµείωση, // οπότε να µη γίνει καµία ενέργεια. } } import java.util.arraylist; ArrayList java.util ArrayList Notebook notes private ArrayList<String> notes; String <String> ArrayList String ArrayList<String> notes Array- List<String> notes

152 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA notes = new ArrayList<String>(); ArrayList ArrayList add size get storenote numberofnotes add ArrayList size 4.4 οµές αντικειµένων µε συλλογές ArrayList Notebook Εικόνα 4.1 Ένα αντικείµενο Notebook που περιέχει δύο σηµειώσεις

Κεφάλαιο 4 Οµαδοποίηση αντικειµένων 153 ArrayList size Εικόνα 4.2 Ένα αντικείµενο Notebook που περιέχει τρεις σηµειώσεις Notebook ArrayList<String> ArrayList ArrayList

154 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ JAVA ArrayList Notebook numberofnotes ArrayList notes 4.5 Γενικές κλάσεις notes ArrayList<String> ArrayList ArrayList ArrayList ArrayList private ArrayList<Person> members; private ArrayList<TicketMachine> mymachines;

Κεφάλαιο 4 Οµαδοποίηση αντικειµένων 155 members ArrayList Person mymachines ArrayList TicketMachine ArrayList- <Person> ArrayList<TicketMachine> Άσκηση 4.2 Γράψτε την εντολή δήλωσης ενός ιδιωτικού (private) πεδίου µε όνοµα library που µπορεί να αποθηκεύσει µια ArrayList. Τα στοιχεία της ArrayList είναι τύπου Book. ArrayList 4.6 Αρίθµηση µέσα σε συλλογές ArrayList shownote ArrayList get shownote [0 (size-1)] get get Παγίδα Αν δεν είστε προσεκτικοί, µπορεί να προσπαθήσετε να προσπελάσετε ένα στοιχείο συλλογής που είναι εκτός των επιτρεπτών ορίων της ArrayList. Όταν γίνει αυτό, θα εµφανιστεί ένα µήνυµα λάθους. Ένα τέτοιο σφάλµα ονοµάζεται index-out-of-bounds (δείκτης εκτός ορίων). Στην Java θα δείτε ένα µήνυµα IndexOutOfBoundsException (εξαίρεση δείκτη εκτός ορίων).