Περιεχόμενα. Κεφάλαιο 1: Εισαγωγή Κεφάλαιο 2: Μια πρώτη ματιά στη C

Σχετικά έγγραφα
Περιεχόμενα. Κεφάλαιο 1: Εισαγωγή Κεφάλαιο 2: Μια πρώτη ματιά στη C

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

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

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

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

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

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Στοιχειώδης προγραμματισμός σε C++

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Βασικά Στοιχεία της Java

Ενδεικτική περιγραφή μαθήματος

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

Πρόβλημα 37 / σελίδα 207

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

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

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

Από την πρώτη στην τέταρτη έκδοση...

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Βασικά Στοιχεία της Java

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

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

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Τελικό επαναληπτικό διαγώνισμα Επιμέλεια: Δρεμούσης Παντελής

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Computing. Νοέμβριος Έκδοση 1.0

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

Ενδεικτικές σελίδες από κάθε κεφάλαιο του βιβλίου

Κλάσεις και αντικείμενα #include <iostream.h<

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

Εισαγωγή στη γλώσσα προγραμματισμού C++

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομημένος Προγραμματισμός (ΤΛ1006)

Ενδεικτική περιγραφή μαθήματος

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

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

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

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

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

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Αλγόριθμοι

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

Ψευδοκώδικας. November 7, 2011

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

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

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

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

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

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

Με τι ασχολείται ο αντικειμενοστραφής προγραμματισμός

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

App Inventor 3ο Μάθημα (Ζάρια - επέκταση)

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Συναρτήσεις και Πίνακες

Τι είναι κλάση Κλάση

Standard Template Library (STL) C++ library

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Τύποι δεδομένων, τελεστές, μεταβλητές

8 FORTRAN 77/90/95/2003

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Transcript:

Περιεχόμενα Κεφάλαιο 1: Εισαγωγή...17 O στόχος του βιβλίου και σε ποιους απευθύνεται...19 Πως να διαβάσετε αυτό το βιβλίο...20 Η γλώσσα C++ Ιστορική αναδρομή...21 Τα χαρακτηριστικά της C++...22 Βασικές έννοιες του προγραμματισμού...26 Μεταβλητές...26 Σταθερές...28 Εντολές...28 Αναγνωριστικά...29 Φιλοσοφίες και τεχνικές προγραμματισμού...29 Αντικειμενοστρεφής προγραμματισμός...32 Κλάσεις και αντικείμενα (classes and objects)...33 Ενθυλάκωση (Encapsulation)...36 Κληρονομικότητα (Inheritance)...37 Πολυμορφισμός (Polymorphism)...38 Σχεδιασμός και ανάπτυξη προγραμμάτων...40 Λογικό διάγραμμα...40 Ανικειμενοστρεφής σχεδιασμός - UML...43 Κεφάλαιο 2: Μια πρώτη ματιά στη C++...49 Το πρώτο σας πρόγραμμα στη C++...50 Η δομή ενός προγράμματος στη C++...52 Ο προ-μεταγλωττιστής της C++...68 Η οδηγία #include...69 Η οδηγία #define...69

H γλώσσα C++ σε βάθος Κεφάλαιο 3: Προετοιμασία για αργότερα...77 Η C++ και η μνήμη...78 Δύο αντικείμενα, μια συνάρτηση και μια εντολή...80 Ολίγη if παρακαλώ...87 Κεφάλαιο 4: Οι βασικοί τύποι δεδομένων της C++...95 Ο τύπος δεδομένων int...96 Σταθερές τύπου int...96 Μεταβλητές τύπου int...96 Δυαδικοί αριθμοί...101 Προτεραιότητα τελεστών...107 Ο τύπος δεδομένων float...110 Σταθερές τύπου float...110 Μεταβλητές τύπου float...110 Χρήση δεδομένων τύπου κινητής υποδιαστολής...111 Ο τύπος δεδομένων char...117 Σταθερές τύπου char...117 Μεταβλητές τύπου char...119 Πίνακας ASCII...122 Ο τύπος wchar_t...123 Ο τύπος δεδομένων bool...126 Σταθερές τύπου bool...126 Μεταβλητές τύπου bool...126 Σταθερές και αυτόματη μετατροπή τύπου...127 Απόλυτος προσδιορισμός τύπου σταθερών...127 Κεφάλαιο 5: Εντολές συνθήκης...139 Η εντολή if...140 Η εντολή switch - case...144 Ο τελεστής?...146 8

Περιεχόμενα Κεφάλαιο 6: Εντολές αλλαγής ροής και επανάληψης...155 Η "επικίνδυνη" εντολή goto...156 Ο βρόχος while...157 O βρόχος do-while...160 Ο βρόχος for...161 Ο τελεστής "κόμμα" (,)...167 Η εντολή break...168 Η εντολή continue...170 Κεφάλαιο 7: Συναρτήσεις...181 Oρισμός μιας συνάρτησης...183 Συναρτήσεις που επιστρέφουν τιμή...187 Συναρτήσεις που δεν επιστρέφουν τιμή...188 Παράμετροι συνάρτησης...191 Χρήση συναρτήσεων βιβλιοθήκης...193 Μετατροπή τύπου (type casting)...195 Υπερφόρτωση συναρτήσεων...200 Παράμετροι συνάρτησης με προκαθορισμένες τιμές...201 Υπερφόρτωση συναρτήσεων και ασάφεια...203 Κεφάλαιο 8: Εμβέλεια μεταβλητών...217 Τοπικές μεταβλητές (local variables)...218 Καθολικές μεταβλητές (global variables)...222 Δήλωση τοπικών μεταβλητών σε σύνθετη πρόταση...225 Δήλωση τοπικής μεταβλητής σε βρόχο for...225 Στατικές τοπικές μεταβλητές (static local variables)...226 Κεφάλαιο 9: Δείκτες...237 Μεταβλητές δείκτη (pointer variables)...239 Δήλωση μιας μεταβλητής δείκτη...239 Οι τελεστές & και *...241 9

H γλώσσα C++ σε βάθος Μέχρι τώρα μάθαμε ότι......243 Η αριθμητική των δεικτών...244 Δείκτες τύπου Void...247 Δείκτης NULL...247 Κεφάλαιο 10: Προχωρημένα θέματα συναρτήσεων...255 Κλήση συνάρτησης με τιμή, με δείκτες και με αναφορά...256 Συναρτήσεις που επιστρέφουν ως τιμή ένα δείκτη...260 Συναρτήσεις που επιστρέφουν ως τιμή μια αναφορά...262 Δείκτες σε συναρτήσεις!!!...264 Εμβόλιμες συναρτήσεις (inline functions)...268 Κεφάλαιο 11: Πίνακες...277 Πίνακες μιας διάστασης...278 Οι πίνακες μιας διάστασης και οι δείκτες...280 Προσοχή Προσοχή!!!...281 Μεταβίβαση ενός πίνακα ως παραμέτρου μιας συνάρτησης...282 Πίνακες χαρακτήρων...284 Συναρτήσεις και πίνακες χαρακτήρων...284 Συναρτήσεις βιβλιοθήκης που εφαρμόζονται σε συμβολοσειρές...286 Αρχική τιμή ενός πίνακα μίας διάστασης...292 Χειρισμός πινάκων μίας διάστασης...293 Πίνακες πολλών διαστάσεων...296 Πίνακες δύο διαστάσεων...296 Πίνακες δύο διαστάσεων και δείκτες...298 Πίνακες δύο διαστάσεων για αποθήκευση σειρών χαρακτήρων...300 Μέγεθος πίνακα...306 Πίνακες δεικτών σε συναρτήσεις...306 10

Περιεχόμενα Κεφάλαιο 12: Τύποι δεδομένων οριζόμενοι από το χρήστη...321 Δομές (structures)...322 Μεταβίβαση των μελών μιας δομής σε μια συνάρτηση...329 Μεταβίβαση ολόκληρης της δομής σε συνάρτηση...330 Δείκτες σε δομές...332 Δομές μέσα σε δομές...334 Μέλη εύρους ενός, ή περισσοτέρων, bit (bit fields)...336 Ενώσεις (unions)...341 Απαριθμήσεις (Enumerations)...342 Η χρήση της typedef...343 Κεφάλαιο 13: Κλάσεις και αντικείμενα...351 Τι είναι μια κλάση (class)...352 Τι είναι ένα αντικείμενο (object)...353 Ορισμός μιας κλάσης...354 Ορισμός και χρήση αντικειμένων...356 Δημόσια και ιδιωτικά μέλη μιας κλάσης...360 Συναρτήσεις δόμησης και αποδόμησης...364 Υπερφόρτωση συναρτήσεων-μελών...369 Ανάθεση τιμών σε αντικείμενα...371 Πίνακες από αντικείμενα...372 Κεφάλαιο 14: Προχωρημένα θέματα κλάσεων και αντικειμένων...385 Αντικείμενα ως παράμετροι σε συναρτήσεις...386 Συναρτήσεις που επιστρέφουν αντικείμενα...390 Φίλιες συναρτήσεις μιας κλάσης...391 Δείκτες σε αντικείμενα...394 Στατικά μέλη μιας κλάσης...398 Κεφάλαιο 15: Υπερφόρτωση τελεστών...413 Υπερφόρτωση τελεστών με τη χρήση συναρτήσεων-μελών...416 Υπερφόρτωση τελεστών με τη χρήση συναρτήσεων που δεν είναι μέλη της κλάσης...425 11

H γλώσσα C++ σε βάθος Κεφάλαιο 16: Κληρονομικότητα...433 Δημιουργία μιας παράγωγης κλάσης...435 Δημόσια (public) πρόσβαση βασικής κλάσης...437 Ιδιωτική (private) πρόσβαση βασικής κλάσης...442 Προστατευμένη (protected) πρόσβαση βασικής κλάσης...443 Συνοψίζοντας...445 Αλλαγή προσδιορισμού πρόσβασης για συγκεκριμένα μέλη...446 Πολλαπλά επίπεδα κληρονομικότητας...448 Κληρονομικότητα και συναρτήσεις δόμησης και αποδόμησης...453 Κεφάλαιο 17: Προχωρημένα θέματα κληρονομικότητας...467 Δείκτες σε παράγωγες κλάσεις...468 Εικονικές συναρτήσεις (virtual functions)...471 Γνήσιες εικονικές συναρτήσεις (pure virtual functions)...477 Κληρονομικότητα πολλών επιπέδων...480 Πολλαπλή κληρονομικότητα (multiple inheritance)...482 Κεφάλαιο 18: Ρεύματα εισόδου & εξόδου της C++...503 Προκαθορισμένα αντικείμενα ρευμάτων...507 Οι τελεστές εισαγωγής << και εξαγωγής >>...508 Μορφοποιημένη είσοδος/έξοδος (formatted Ι/Ο)...510 Σημαίες μορφοποίησης (format flags)...511 Χειριστές (manipulators)...515 Μορφοποίηση με συναρτήσεις-μέλη...520 Χειρισμός αρχείων...529 Μορφοποιημένη είσοδος/έξοδος σε αρχεία κειμένου...535 Μη μορφοποιημένη είσοδος/έξοδος σε δυαδικά αρχεία...544 Αρχεία και αντικείμενα...553 Τυχαία προσπέλαση αρχείων...558 Παράμετροι γραμμής εντολής...570 12

Περιεχόμενα Κεφάλαιο 19: Αναδρομή...587 Κεφάλαιο 20: Αναζήτηση και ταξινόμηση...595 Σειριακή αναζήτηση...597 Δυαδική αναζήτηση (binary search)...599 Ταξινόμηση φυσαλίδας (bubble sort)...602 Ταξινόμηση quick sort...605 Αντικειμενοστρεφής προσέγγιση...612 Ταξινόμηση πίνακα αντικειμένων...615 Κεφάλαιο 21: Δυναμική διαχείριση μνήμης...621 Δυναμική κατανομή μνήμης...624 Αλλαγή στο μέγεθος ενός πίνακα...627 Συναρτήσεις δόμησης και αποδόμησης στις περιπτώσεις δυναμικής κατανομής μνήμης...629 Συναρτήσεις δόμησης αντιγράφου (copy constructors)...630 Ο παλαιός μηχανισμός δυναμικής κατανομής μνήμης...636 Κεφάλαιο 22: Δυναμικές δομές δεδομένων...639 Συνδεδεμένες λίστες...641 Απλά συνδεδεμένη λίστα (simple linked list)...641 Κυκλικά συνδεδεμένη λίστα (circularly linked list)...642 Διπλά συνδεδεμένη λίστα (double linked list)...642 Κυκλικά διπλά συνδεδεμένη λίστα...643 Προσθήκη νέου κόμβου σε μια λίστα...643 Υλοποίηση συνδεδεμένης λίστας στη C++...645 Δυαδικά δένδρα...663 Χειρισμός ενός δυαδικού δένδρου...665 Προσθήκη νέου κόμβου...666 Αναζήτηση κόμβου...668 Επίσκεψη ενός δυαδικού δέντρου...669 Διαγραφή κόμβου από το δυαδικό δέντρο...672 Υλοποίηση της δομής δυαδικού δένδρου...674 13

H γλώσσα C++ σε βάθος Κεφάλαιο 23: Πρότυπα, εξαιρέσεις και χώροι ονομάτων...691 Πρότυπα συναρτήσεων και κλάσεων...692 Πρότυπα συναρτήσεων (function templates)...692 Πρότυπα κλάσεων (class templates)...702 Εξαιρέσεις...715 Γενικά...715 Ο χειρισμός εξαιρέσεων της C++...717 Συνοψίζοντας...732 Χώροι ονομάτων...734 Κεφάλαιο 24: Μια ματιά στη καθιερωμένη βιβλιοθήκη προτύπων...749 Τι είναι η καθιερωμένη βιβλιοθήκη προτύπων STL;...750 Η κλάση string...751 Διαχείριση αντικειμένων της κλάσης string...753 Strings ως ρεύματα εισόδου/εξόδου...758 Αποδέκτες, αλγόριθμοι και επαναλήπτες...759 Αποδέκτες...761 Επαναλήπτες (iterators)...767 Αλγόριθμοι...769 Αλγόριθμοι και αντικείμενα συναρτήσεων...773 Διανύσματα (vectors)...777 Λίστες (lists)...789 Χάρτες (maps)...793 Συμβατότητα αλγορίθμων, επαναληπτών και αποδεκτών...800 Για κάτι περισσότερο...803 Παράρτημα Α: Επιλεγμένες συναρτήσεις βιβλιοθήκης της C++...811 Αρχείο κεφαλίδας <cctype>...812 Αρχείο κεφαλίδας <cstdlib>...813 Αρχείο κεφαλίδας <cstring>...814 Αρχείο κεφαλίδας <cmath>...817 14

Περιεχόμενα Παράρτημα Β: Το ολοκληρωμένο περιβάλλον του DEV C++...821 Εγκατάσταση του DEV C++...822 Οι βασικές λειτουργίες του DEV C++...823 Βιβλιογραφία...827 Βιβλιογραφικές πηγές...828 Αναφορές στο διαδίκτυο...828 Ευρετήριο...831 15

H γλώσσα C++ σε βάθος Αντικειμενοστρεφής προγραμματισμός Μια από τις καθημερινές μου συνήθειες είναι να φτιάχνω τον πρωινό μου καφέ. Ας προσπαθήσουμε να αναλύσουμε λίγο αυτή τη διαδικασία. Η πρώτη ύλη που διαθέτουμε (τα δεδομένα μας) είναι ο καφές, η ζάχαρη, το νερό και το γάλα, αποθηκευμένα στα ντουλάπια και στο ψυγείο της κουζίνας μας. Εμείς παίρνουμε τα υλικά που χρειαζόμαστε με απευθείας πρόσβαση στους αποθηκευτικούς μας χώρους και κάνουμε την απαραίτητη επεξεργασία για να φτιάξουμε τον καφέ μας. Ο συγκάτοικός μας έχει και αυτός πρόσβαση στα ίδια υλικά και φτιάχνει και αυτός τον καφέ του ακολουθώντας την ίδια ή διαφορετική διαδικασία. Παρατηρούμε ότι με την παραπάνω διαδικασία... Τα υλικά μας (δεδομένα) είναι εκτεθειμένα στον οποιονδήποτε έχει πρόσβαση στους αποθηκευτικούς μας χώρους (ντουλάπια, ψυγείο). Με αυτόν τον τρόπο μπορεί να γίνει αλόγιστη χρήση των υλικών ακόμη και για διαφορετικό σκοπό (π.χ. να ξοδέψουμε ζάχαρη και γάλα για την κατασκευή ενός κέϊκ). Η επεξεργασία των υλικών για την κατασκευή του καφέ δεν είναι αυτοματοποιημένη και ο καθένας μπορεί να ακολουθεί μια εντελώς διαφορετική διαδικασία. Αν αλλάξει ο χώρος που αποθηκεύουμε τα υλικά (π.χ. τα βάλουμε σε άλλο ντουλάπι), πρέπει να αλλάξουμε και τη διαδικασία επεξεργασίας ώστε να τα παίρνουμε από το νέο αποθηκευτικό χώρο. Στην περίπτωση που θέλουμε να φτιάχνουμε διαφορετικά είδη καφέ (π.χ. καπουτσίνο, φραπέ, εσπρέσο), θα πρέπει κάθε φορά να χρησιμοποιούμε διαφορετική διαδικασία επεξεργασίας. Αν θελήσουμε να φτιάξουμε καφέ όχι στο σπίτι μας αλλά σε έναν άλλο χώρο, θα πρέπει αρχικά να μάθουμε πού είναι τα υλικά μας (τα δεδομένα μας), ενώ ίσως χρειαστεί να τροποποιήσουμε τη διαδικασία κατασκευής του καφέ ανάλογα με τις δυνατότητες του χώρου στον οποίο βρισκόμαστε. Για παράδειγμα, διαφορετική διαδικασία θα ακολουθήσουμε για να ζεστάνουμε το νερό ανάλογα με το αν ο χώρος διαθέτει υγραέριο, ηλεκτρική κουζίνα, ή φούρνο μικροκυμάτων. 32

Κεφάλαιο 1: Εισαγωγή Μετά από αρκετό καιρό υπομονής, η κατάσταση δεν πήγαινε άλλο. Πότε ανακάλυπτα την τελευταία στιγμή ότι τελείωσε ο καφές γιατί τον είχε χρησιμοποιήσει ο συγκάτοικος μου, πότε η ζάχαρη γιατί έκανε γλυκό η φίλη μου, πότε δεν έβρισκα καθόλου τα υλικά γιατί αποφάσισε η καθαρίστρια να τα βάλει σε διαφορετικό ντουλάπι. Και δε φτάνουν όλα αυτά, κάθε φορά ο καφές ήταν διαφορετικός, είτε γιατί έπεφτε λίγο περισσότερη ζάχαρη, είτε γιατί δεν υπολόγιζα σωστά το γάλα! Σκεφτόμουνα λοιπόν, μήπως υπάρχει κάποιο αντικείμενο που να φτιάχνει καφέ και να με βγάλει από όλη αυτή τη διαδικασία. Έτσι αποφάσισα να αγοράσω μια μηχανή για καφέ και αμέσως όλα μου τα προβλήματα λύθηκαν. Τα υλικά πλέον ήταν μέσα στη μηχανή. Κανείς δεν είχε πρόσβαση σε αυτά και κανείς δε διανοείτο να διαρρήξει τη μηχανή για να βγάλει λίγο καφέ ή ζάχαρη. Ποτέ πια δε χρειάστηκε να ψάχνω πού είναι ο καφές, η ζάχαρη, ή το γάλα η δε μηχανή από μόνη της με ειδοποιούσε όταν κόντευαν να τελειώσουν τα υλικά που περιέχει. Κάθε φορά απλά πατούσα το κουμπί και ο καφές γινόταν χωρίς ιδιαίτερο κόπο και, το κυριότερο, πάντα με τις ίδιες αναλογίες. Η μηχανή είχε τη δυνατότητα να φτιάχνει καφέ διαφόρων ειδών. Εγώ απλά πατούσα το σωστό κουμπί χωρίς να με απασχολεί η διαφορετική διαδικασία που ακολουθούσε η μηχανή για να φτιάξει τον καφέ που ζήτησα. Και φυσικά όταν πήγαινα σε κάποιο άλλο χώρο, απλά έπαιρνα τη μηχανή μαζί μου ή φρόντιζα να υπάρχει μια ακριβώς ίδια. Συγχαρητήρια, μόλις αντιληφθήκατε τις βασικές αρχές και τα πλεονεκτήματα του αντικειμενοστρεφούς προγραμματισμού. Κλάσεις και αντικείμενα (classes and objects) Παρατηρούμε ότι από τη στιγμή που αποφασίσαμε να κατασκευάσουμε (ή να αγοράσουμε) ένα αντικείμενο (καφετιέρα) το οποίο έκανε τη εργασία που μέχρι τώρα υλοποιούσαμε με αποσπασματικές διαδικασίες, λύθηκαν τα περισσότερα προβλήματα που είχαμε. 33

H γλώσσα C++ σε βάθος Μήπως λοιπόν η καλύτερη προσέγγιση και στην κατασκευή των προγραμμάτων βρίσκεται στη χρήση αντικειμένων; Τα προγράμματα με τις παραδοσιακές, διαδικαστικές, τεχνικές προγραμματισμού, ρίχνουν το βάρος περισσότερο στις διαδικασίες παρά στα δεδομένα. Ας επισημάνουμε επίσης ότι ο φυσικός και ο τεχνητός κόσμος στον οποίο ζούμε είναι πιο κοντά στη φιλοσοφία του αντικειμενοστρεφούς παρά του διαδικαστικού προγραμματισμού. Οι κλάσεις (classes) και τα αντικείμενα (objects) είναι έννοιες πάνω στις οποίες βασίζεται όλη η φιλοσοφία και τα χαρακτηριστικά των γλωσσών αντικειμενοστρεφούς προγραμματισμού. Η κλάση (class) είναι μια έννοια η οποία προσδιορίζει μια κατηγορία αντικειμένων και ταυτόχρονα περιγράφει τα κοινά χαρακτηριστικά τους. Π.χ. η κλάση "Καφετιέρα" περιγράφει μια κατηγορία συσκευών για την κατασκευή καφέ. Σχήμα 1.3 Παράδειγμα κλάσης - η κλάση "Καφετιέρα" 34

Κεφάλαιο 1: Εισαγωγή Όλα τα αντικείμενα αυτής της κλάσης έχουν κάποια κοινά χαρακτηριστικά και λειτουργίες. Π.χ. όλες οι καφετιέρες έχουν χώρο για νερό, καφέ, γάλα και ζάχαρη. Επίσης όλες διαθέτουν λειτουργία για να φτιάξουν καφέ σκέτο, γλυκό ή μέτριο. Ένα αντικείμενο (object) μιας κλάσης έχει όλα τα χαρακτηριστικά και τις λειτουργίες της κλάσης στην οποία ανήκει. Ένα αντικείμενο λέμε ότι αποτελεί ένα "στιγμιότυπο" (instance) μιας κλάσης. Μία κλάση δεν αναφέρεται σε κανένα συγκεκριμένο αντικείμενο, αλλά είναι μια γενική έννοια που προσδιορίζει μια κατηγορία αντικειμένων. Π.χ. η κλάση "Αυτοκίνητο" δεν αναφέρεται σε κανένα συγκεκριμένο αυτοκίνητο, αλλά αποτελεί μια έννοια που προσδιορίζει μια κατηγορία οχημάτων. Στο παρακάτω σχήμα φαίνεται πιο αναλυτικά η κλάση "Καφετιέρα" και δύο αντικείμενα που ανήκουν σε αυτή την κλάση. Σχήμα 1.4 Αντικείμενα μιας κλάσης - αντικείμενα της κλάσης "Καφετιέρα" 35

H γλώσσα C++ σε βάθος Στη συγκεκριμένη περίπτωση, η κλάση προσδιορίζει τα χαρακτηριστικά, χρώμα, μέγεθος, ποσότητες νερού, ζάχαρης, καφέ και γάλακτος που θα έχουν τα αντικείμενα χωρίς όμως να αναφέρονται συγκεκριμένες τιμές. Παρατηρούμε ότι τα δύο αντικείμενα της κλάσης έχουν όλα τα παραπάνω χαρακτηριστικά, αλλά με συγκεκριμένες τιμές το καθένα. Επίσης στην κλάση "Καφετιέρα" ο- ρίζονται και οι λειτουργίες που θα επιτελούν τα αντικείμενα αυτής της κλάσης: Φτιάξιμο καφέ τριών ειδών (σκέτος, μέτριος, γλυκός), γέμισμα της καφετιέρας με υλικά (καφέ, ζάχαρη, κ.λπ.), καθώς και έλεγχος για επάρκεια υλικών. Ενθυλάκωση (Encapsulation) Τα χαρακτηριστικά και οι λειτουργίες ενός α- ντικειμένου μπορεί να είναι εκτεθειμένα στον χρήστη ώστε να μπορεί να αλλάξει άμεσα τις τιμές τους ή να χρησιμοποιήσει τις λειτουργίες του. Μπορεί δηλαδή να αλλάξει την ποσότητα του "Νερού" και να ενεργοποιήσει την λειτουργία του "Ελέγχου". Η χρήση των κλάσεων και των αντικειμένων δίνει επίσης τη δυνατότητα να "αποκρύψουμε" μερικά από τα χαρακτηριστικά και τις λειτουργίες ενός αντικειμένου ώστε ο χρήστης να μην έχει άμεση πρόσβαση σε αυτά. Π.χ. φανταζόμαστε αυτή τη δυνατότητα σαν ένα κάλυμμα το οποίο απαγορεύει την πρόσβαση στους α- ποθηκευτικούς χώρους των υλικών και στο κουμπί της λειτουργίας "Έλεγχος". Σε αυτή την περίπτωση, η πλήρωση των υλικών μπορεί να γίνεται από τη λειτουργία "Γέμισμα" και ο έλεγχος να γίνεται αυτόματα χωρίς να χρειάζεται να τον ενεργοποιήσουμε άμεσα από το αντίστοιχο κουμπί. H Ενθυλάκωση δίνει τη δυνατότητα στις γλώσσες αντικειμενοστρεφούς προγραμματισμού να ομαδοποιούν και να αποκρύπτουν δεδομένα και διαδικασίες των αντικειμένων. 36

Κεφάλαιο 1: Εισαγωγή Κληρονομικότητα (Inheritance) Η κληρονομικότητα (inheritance) είναι ένα από τα βασικά χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού. Μια κλάση μπορεί να παράγεται από μια άλλη κλάση (τη βασική) και ταυτόχρονα να κληρονομεί τα χαρακτηριστικά και τις λειτουργίες της. Στη νέα κλάση (παράγωγη) μπορεί να οριστούν επιπλέον χαρακτηριστικά και λειτουργίες. Σχήμα 1.5 Παράδειγμα κληρονομικότητας με την κλάση "Καφετιέρα" Στο παραπάνω σχήμα, η κλάση "Μηχανή Καπουτσίνο" παράγεται από τη βασική κλάση "Καφετιέρα". Στη νέα παράγωγη κλάση ορίζεται ως επιπλέον χαρα- 37

H γλώσσα C++ σε βάθος κτηριστικό η ποσότητα της σαντιγί (απαραίτητη για την κατασκευή καπουτσίνο) και ως επιπλέον λειτουργία η δυνατότητα της μηχανής να φτιάχνει καπουτσίνο με πάτημα του ανάλογου κουμπιού. Κληρονομικότητα (inheritance) είναι η δυνατότητα παραγωγής μιας νέας κλάσης από μια υπάρχουσα κλάση (βασική). Η νέα κλάση (παράγωγη) κληρονομεί όλα τα χαρακτηριστικά και τις λειτουργίες της βασικής κλάσης, αλλά ταυτόχρονα μπορεί να ορίσει δικά της επιπλέον χαρακτηριστικά και λειτουργίες. Πολυμορφισμός (Polymorphism) Ας υποθέσουμε ότι κατασκευάζουμε μια "έξυπνη" καφετιέρα η οποία ανάλογα με το βότανο και τα άλλα υλικά που τις βάζουμε φτιάχνει το αντίστοιχο ρόφημα. Για παράδειγμα, αν της βάλουμε τσάι, θα φτιάξει τσάι αν της βάλουμε Ελληνικό καφέ, θα φτιάξει Ελληνικό καφέ αν της βάλουμε και σαντιγί, θα το καταλάβει μόνη της και θα φτιάξει καπουτσίνο. Κάθε φορά η καφετιέρα ακολουθεί διαφορετική διαδικασία για να φτιάξει το κατάλληλο ρόφημα. Αυτό δεν απασχολεί καθόλου τον χρήστη, ο οποίος το μόνο που κάνει είναι να πατάει το κουμπί (λειτουργία) ρόφημα. Έτσι η καφετιέρα μας, ανάλογα με τα υλικά που της βάζουμε, ακολουθεί διαφορετική διαδικασία, άγνωστη για τον χρήστη για να μας φτιάξει το κατάλληλο ρόφημα. Η τεχνική για να κατασκευάσουμε μια τέτοια καφετιέρα λέγεται Πολυμορφισμός. Πολυμορφισμός (polymorphism) είναι η δυνατότητα που παρέχουν οι αντικειμενοστρεφείς γλώσσες προγραμματισμού στα αντικείμενα ώστε να συμπεριφέρονται διαφορετικά, ανάλογα με τον τρόπο με τον οποίο χρησιμοποιούνται. Επίσης ο πολυμορφισμός δίνει τη δυνατότητα σε οντότητες που έχουν συγκεκριμένη λειτουργία να την διαφοροποιήσουν ανάλογα με τον τρόπο χρήσης 38

Κεφάλαιο 1: Εισαγωγή τους. Γνωρίζουμε τη χρήση του συν (+) ως τελεστή της πρόσθεσης. Μπορούμε να φανταστούμε τη χρήση του + για να προσθέσουμε αντικείμενα, π.χ. δύο καφετιέρες; Βέβαια ΟΧΙ, διότι γνωρίζουμε ότι ο τελεστής + ορίζεται και χρησιμοποιείται μόνο για την πρόσθεση αριθμητικών δεδομένων. Όμως οι αντικειμενοστρεφείς γλώσσες προγραμματισμού μας δίνουν την δυνατότητα να αλλάξουμε τη συνήθη χρήση ενός τελεστή και να τον αναγκάσουμε να επιτελέσει διαφορετική λειτουργία ανάλογα με τα αντικείμενα στα οποία εφαρμόζεται. Για παράδειγμα, μπορούμε να ορίσουμε ότι όταν ο τελεστής + εφαρμόζεται σε αντικείμενα της κλάσης "Καφετιέρα", θα προσθέτει τις ποσότητες των υλικών, τα μεγέθη των συσκευών, και θα βγάζει ένα ενδιάμεσο χρώμα (μεταξύ των χρωμάτων των δύο συσκευών). Επομένως η πράξη Philips + AEG θα έχει ως αποτέλεσμα να δημιουργηθεί ένα νέο αντικείμενο (π.χ. το ΝΕW) της ίδιας κλάσης "Καφετιέρα" με ποσότητες υ- λικών το άθροισμα των ποσοτήτων των αντίστοιχων υλικών των αντικειμένων Philips και AEG, με μέγεθος το άθροισμα των μεγεθών και με ένα ενδιάμεσο χρώμα. Σχήμα 1.6 Υπερφόρτωση του τελεστή + για την κλάση "Καφετιέρα" Η δυνατότητα που μας παρέχουν οι αντικειμενοστρεφείς γλώσσες, να αλλάζουμε τη συμπεριφορά των τελεστών ανάλογα με τα αντικείμενα στα οποία εφαρμόζονται, καλείται υπερφόρτωση τελεστών. Η υπερφόρτωση τελεστών (operator overloading) είναι ένα ακόμη χαρακτηριστικό του πολυμορφισμού. 39

H γλώσσα C++ σε βάθος Σχεδιασμός και ανάπτυξη προγραμμάτων Είναι προφανές ότι το γράψιμο ενός προγράμματος προϋποθέτει τη γνώση του αντικειμένου στο οποίο θα αναφέρεται το συγκεκριμένο πρόγραμμα. Για παράδειγμα, αν θέλουμε να φτιάξουμε ένα πρόγραμμα το οποίο θα απευθύνεται σε οδοντίατρους, θα πρέπει καταρχήν να γνωρίζουμε τον τρόπο με τον οποίο δουλεύει ένας οδοντίατρος, τι απαιτήσεις έχει, τι πληροφορίες θέλει να κρατάει για τους ασθενείς του κ.λπ. Αυτό το στάδιο, κατά το οποίο εμείς ουσιαστικά "μαθαίνουμε" τον τρόπο δουλειάς του οδοντίατρου διακρίνοντας και κατανοώντας τα επιμέρους απλούστερα τμήματα από τα οποία αποτελείται η εργασία του, λέγεται ανάλυση. Μετά το στάδιο της ανάλυσης ακολουθεί το στάδιο του σχεδιασμού. Στο στάδιο αυτό μπορούμε, αν αυτό κριθεί απαραίτητο, να προτείνουμε νέους καλύτερους τρόπους εργασίας ή ακόμη και νέες δυνατότητες. Η ανάλυση και ο σχεδιασμός δεν έχουν απαραίτητα άμεση σχέση με τον προγραμματισμό, αλλά χρησιμοποιούνται ως αναγκαία εργαλεία για τη σωστή και επαγγελματική κατάστρωση προγραμμάτων. Λογικό διάγραμμα Στα στάδια της ανάλυσης και του σχεδιασμού ο αναλυτής χρησιμοποιεί, εκτός των άλλων "εργαλείων" του, γεωμετρικά σχήματα για να δώσει μια εικόνα της λειτουργίας του υπό μελέτη συστήματος. Η σχηματική αυτή απεικόνιση ενός συστήματος καλείται λογικό διάγραμμα ή διάγραμμα ροής (flow chart). Σε αυτό το βιβλίο χρησιμοποιείται συχνά το λογικό διάγραμμα για να επεξηγηθεί η λειτουργία µιας διαδικασίας ή ενός προγράμματος. Τα γεωμετρικά σχήματα που χρησιμοποιούνται σε ένα λογικό διάγραμμα είναι καθορισμένα και κάθε ένα δείχνει μια συγκεκριμένη λειτουργία. Κάθε σχήμα αντιστοιχεί σε μια κατηγορία διαδικασίας του υπό μελέτη συστήματος. Για παράδειγμα, ο ρόμβος δείχνει έλεγχο, ενώ το ορθογώνιο παραλληλόγραμμο επεξεργασία. Στον πίνακα που ακολουθεί, αναφέρονται τα σχήματα που συνήθως χρησιμοποιούνται σε ένα λογικό διάγραμμα. 40

Κεφάλαιο 1: Εισαγωγή Γεωμετρικό σχήμα Λειτουργία Αρχή/Τέλος διαδικασίας Επεξεργασία Έλεγχος Είσοδος/Έξοδος πληροφοριών Μεταφορά ελέγχου Σχήμα 1.7 Τα σχήματα του λογικού διαγράμματος Μέσα σε κάθε γεωμετρικό σχήμα περιγράφεται με απλά λόγια η διαδικασία που εκτελείται. Στη διαδικασία του ελέγχου είναι δυνατές μόνο δύο αποφάσεις: Ναι ή Όχι. Ανάλογα με το αποτέλεσμα του ελέγχου, το διάγραμμα ροής μας οδηγεί σε διαφορετικό παρακλάδι του. Οχι Ναι 41

H γλώσσα C++ σε βάθος Το επόμενο λογικό διάγραμμα δείχνει τη διαδικασία που ακολουθείται όταν κάποιος καλεί το ασανσέρ μέχρι να πάει στον όροφο που τον ενδιαφέρει. Αναμφίβολα υπάρχουν πολλές εκδοχές για το σύστημα αυτό. Το λογικό διάγραμμα που ακολουθεί δείχνει εποπτικά τη λειτουργία της συγκεκριμένης διαδικασίας. Σχήμα 1.8 Το λογικό διάγραμμα της διαδικασίας κλήσης ενός ασανσέρ Το λογικό διάγραμμα ενός προβλήματος δεν καθορίζεται μονοσήμαντα. Μπορεί να είναι από εντελώς επιγραμματικό ως πολύ αναλυτικό, ανάλογα με τη χρήση για την οποία προορίζεται. 42

Κεφάλαιο 1: Εισαγωγή Το λογικό διάγραμμα είναι ανεξάρτητο από τον προγραμματισμό. Χρησιμοποιείται συχνά για να μπορέσουμε να απεικονίσουμε τη λογική ενός προγράμματος πριν αρχίσουμε να το αναπτύσσουμε. Το λογικό διάγραμμα βοηθάει να κατανοήσουμε τον τρόπο με τον οποίο θα προσεγγίσουμε τη λύση. Δεν είναι απαραίτητο να φτιάχνουμε λογικό διάγραμμα πριν αρχίσουμε την ανάπτυξη ενός προγράμματος. Όμως το βέβαιο είναι ότι, αν δεν είμαστε σε θέση να φτιάξουμε το λογικό διάγραμμα ενός προγράμματος, είναι αδύνατο να φτιάξουμε το πρόγραμμα και να δουλεύει σωστά. Σε ένα λογικό διάγραμμα ποτέ δεν αναφέρουμε εντολές κάποιας γλώσσας προγραμματισμού, αλλά περιγράφουμε τις διαδικασίες με απλά λόγια. Το λογικό διάγραμμα πρέπει να είναι τόσο αναλυτικό ώστε να είναι εμφανείς οι διαδικασίες που πρέπει να δείξουμε, και τόσο γενικό ώστε να μην υπεισέρχεται σε άχρηστες λεπτομέρειες. Όταν σε ένα λογικό διάγραμμα οι διαδικασίες δεν είναι συγκεκριμένου τύπου (π.χ. έλεγχος, είσοδος/έξοδος) τότε χρησιμοποιούμε μόνο το σχήμα της επεξεργασίας (ορθογώνιο) και το διάγραμμα σε αυτή την περίπτωση λέγεται διάγραμμα block. Ανικειμενοστρεφής σχεδιασμός - UML Το λογικό διάγραμμα δίνει τη δυνατότητα άριστης απεικόνισης της λύσης ενός προβλήματος, δεν είναι όμως ο ιδανικός τρόπος για την αναπαράσταση πολύπλοκων εφαρμογών καθώς και οντοτήτων που χρησιμοποιεί η αντικειμενοστρεφής σχεδίαση προγραμμάτων. Η γλώσσα UML έχει ιδιαίτερη εφαρμογή στην ανάπτυξη και μοντελοποίηση αντικειμενοστρεφών εφαρμογών. Η UML (Unified Modeling Language) είναι μια γλώσσα μοντελοποίησης, η οποία μέσω συγκεκριμένων στοιχείων και διαγραμμάτων μας δίνει τη δυνατότητα να απεικονίσουμε πολύπλοκες εφαρμογές. Η χρήση της UML βοηθάει στην επικοινωνία των ομάδων εργασίας για την ανάπτυξη ενός συστήματος, στην παραπέρα ανάπτυξή του, αλλά και στην τελική του αξιολόγηση. Δεν είναι στους στόχους του παρόντος βιβλίου η κάλυψη της UML, η οποία ούτως ή άλλως θα απαιτούσε ένα βιβλίο από μόνη της. Στη Βιβλιογραφία (σελ. 827) θα βρείτε αναφορές για τη UML τόσο σε βιβλία όσο και στο Διαδίκτυο. 43

H γλώσσα C++ σε βάθος Παραδείγματα Π1.1 Ας υποθέσουμε ότι θέλουμε να παίξουμε ένα παιχνίδι στο οποίο κάποιος βάζει έναν τυχαίο αριθμό στο μυαλό του και εμείς προσπαθούμε να τον βρούμε. Λέμε συνέχεια αριθμούς στον παίκτη και αυτός μας απαντά αν ο κρυφός α- ριθμός είναι μεγαλύτερος ή μικρότερος. Το παιχνίδι τελειώνει μόλις βρούμε τον αριθμό. Το λογικό διάγραμμα απεικονίζει τη διαδικασία του παιχνιδιού. Μια μικρή παραλλαγή του παιχνιδιού, στην ο- ποία μόλις βρεθεί ο α- ριθμός ο παίκτης μας ρωτάει αν θέλουμε να ξαναπαίξουμε, φαίνεται στο διπλανό λογικό διάγραμμα. Στην περίπτωση που α- παντήσουμε ΝΑΙ, τότε ο παίκτης βάζει έναν άλλο αριθμό στο μυαλό του και το παιχνίδι ξαναρχίζει. Στην περίπτωση που απαντήσουμε αρνητικά το παιχνίδι σταματάει. 44

Κεφάλαιο 1: Εισαγωγή Π1.2 Η διαδικασία, που φαίνεται στο διπλανό λογικό διάγραμμα, ζητάει συνέχεια αριθμούς και εμφανίζει στο τέλος το συνολικό τους άθροισμα. Η διαδικασία σταματάει όταν δοθεί ο αριθμός 0. Σκεφτείτε τις τροποποιήσεις που θα πρέπει να γίνουν ώστε η διαδικασία να σταματάει όταν δοθούν 100 αριθμοί. Ανασκόπηση Κεφαλαίου 1 Η C++ είναι μια αντικειμενοστρεφής μεταγλωττιζόμενη γλώσσα τα χαρακτηριστικά της οποίας ευνοούν τον τμηματικό προγραμματισμό. Στη C++ αρκετές λειτουργίες υλοποιούνται από τα αντικείμενα και στις συναρτήσεις βιβλιοθήκης που τη συνοδεύουν. Τα διαφορετικά είδη δεδομένων που μπορεί να χειριστεί μια γλώσσα λέγονται τύποι δεδομένων. Μια μεταβλητή είναι το όνομα μιας θέσης μνήμης, της οποίας η τιμή μπορεί να μεταβάλλεται. Ο αντικειμενοστρεφής προγραμματισμός βασίζεται στη "μοντελοποίηση" του προβλήματος χρησιμοποιώντας αντικείμενα. Κάθε αντικείμενο ανήκει σε μια κλάση η οποία προσδιορίζει τα χαρακτηριστικά και τις λειτουργίες του. Τα κύρια χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού είναι η ενθυλάκωση, η κληρονομικότητα και ο πολυμορφισμός. Το λογικό διάγραμμα είναι ένας εποπτικός τρόπος παρουσίασης μιας διαδικασίας ή ενός προγράμματος και συμβάλλει στην κατανόησή του. H UML αντίστοιχα είναι μια γλώσσα μοντελοποίησης, η οποία έχει εφαρμογή στον σχεδιασμό αντικειμενοστρεφών πολύπλοκων συστημάτων. 45