Προγραμματισμός ΙΙ. Ενότητα 6: Βιβλιοθήκες - Μέρος 1. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Σχετικά έγγραφα
Προγραμματισμός ΙΙ Ενότητα 5:

Προγραμματισμός ΙΙ. Ενότητα 7: Βιβλιοθήκες - Μέρος 2. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 2: Διαχείριση μνήμης. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 8: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 1: Προαπαιτούμενα. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 9: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 2 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 4:

Προγραμματισμός ΙΙ. Ενότητα 7: Βιβλιοθήκες - Μέρος 1. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 4: Διαχείριση μνήμης. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 1: Βασικοί τύποι δεδομένων. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 3:

Προγραμματισμός ΙΙ. Ενότητα 9: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 5:

Προγραμματισμός ΙΙ. Ενότητα 8: Βιβλιοθήκες - Μέρος 2. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 2: Επανάληψη στον Προγραμματισμό Ι. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 3: Βασικοί τύποι δεδομένων. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Προγραμματισμός ΙΙ. Ενότητα 10: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 2 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 5: Κληρονομικότητα. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Δομές Δεδομένων Ενότητα 1

Εισαγωγή στους Αλγορίθμους

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

Διοικητική Λογιστική

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

Βάσεις Δεδομένων. Ενότητα 1: Εισαγωγή στις Βάσεις δεδομένων. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Δομές Δεδομένων. Ενότητα 2: Περισσότερα για τους δείκτες. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός H/Y Ενότητα 3: Πίνακες αριθμών και χαρακτήρων. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στους Αλγορίθμους

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 6: Φιλικές συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 9: Ειδικά θέματα γλώσσας C/C++. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός ΙΙ Ενότητα 6:

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Προγραμματισμός H/Y Ενότητα 2: Εντολές ελέγχου ροής. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

Διοικητική Λογιστική

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 8: Αρχεία. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

ΑΝΤΙΡΡΥΠΑΝΤΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΑΙΩΡΟΥΜΕΝΩΝ ΣΩΜΑΤΙΔΙΩΝ Ενότητα 2: Αιωρούμενα σωματίδια & Απόδοση συλλογής Αν. Καθ. Δρ Μαρία Α. Γούλα Τμήμα Μηχανικών

Τεχνολογία Πολυμέσων. Ενότητα 8: Pool Table. Νικολάου Σπύρος Τμήμα Μηχανικών Πληροφορικής ΤΕ

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Προγραμματισμός H/Y Ενότητα 7: Αρχεία. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Εισαγωγή ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Βάσεις Περιβαλλοντικών Δεδομένων

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Συστήματα Αναμονής. Ενότητα 3: Στοχαστικές Ανελίξεις. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

Μηχανολογικό Σχέδιο Ι

Προγραμματισμός Διαδικτύου

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Οικονομετρία Ι. Ενότητα 10: Διαγνωστικοί Έλεγχοι. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

Λογιστική Κόστους Ενότητα 10: Ασκήσεις Προτύπου Κόστους Αποκλίσεων.

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών

Διδακτική Πληροφορικής

Συστήματα Πολυμέσων Ενότητα 4: Συμπίεση. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Ηλεκτρικές Μηχανές ΙI. Ενότητα 6: Εισαγωγή στους ασύγχρονους κινητήρες Τσιαμήτρος Δημήτριος Τμήμα Ηλεκτρολόγων Μηχανικών Τ.Ε

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

ΑΝΑΛΥΣΗ ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΩΝ ΚΑΤΑΣΤΑΣΕΩΝ

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Συστήματα Αναμονής. Ενότητα 9: Ανέλιξη Γέννησης - Θανάτου. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Διδακτική Πληροφορικής

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

Βάσεις Δεδομένων. Ενότητα 5: ΚΑΝΟΝΙΚΟΠΟΙΗΣΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Τεχνικό Σχέδιο - CAD

ΑΝΤΙΡΡΥΠΑΝΤΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΑΙΩΡΟΥΜΕΝΩΝ ΣΩΜΑΤΙΔΙΩΝ Ενότητα 6: Ηλεκτροστατικά Φίλτρα

Διοίκηση Έργου. Ενότητα 4: Μέθοδοι Χρονικού Προγραμματισμού Έργων. Σαμαρά Ελπίδα Τμήμα Διοίκησης Επιχειρήσεων (Κοζάνη)

Συστήματα Αναμονής. Ενότητα 5: Ανέλιξη Poisson. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

ΟΙΚΟΝΟΜΕΤΡΙΑ. Ενότητα 1: Εκτιμητές και Ιδιότητες. Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Transcript:

Προγραμματισμός ΙΙ Ενότητα 6: Βιβλιοθήκες - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Βιβλιοθήκες - Μέρος 1

Σκοποί ενότητας Η ενότητα αυτή, ασχολείται με το ζήτημα των βιβλιοθηκών. 5

Περιεχόμενα ενότητας Εισαγωγή στις βιβλιοθήκες. Παρατηρήσεις. Απομόνωση μιας κλάσης στο δικό της αρχείο επικεφαλίδων. Βιβλιογραφία. 6

Εισαγωγή στις βιβλιοθήκες (1/14) Μέχρι τώρα τα προγράμματά μας ήταν υλοποιημένα εξ' ολοκλήρου στο αρχείο main.cpp. Εκεί βρίσκονταν οι κλάσεις και το κυρίως πρόγραμμα. Είναι προφανές ότι αυτή η τακτική μέχρι τώρα ήταν δόκιμη για μικρά προγράμματα της μίας ή των δύο σελίδων, αποκλειστικά για εκπαιδευτικούς σκοπούς. 7

Εισαγωγή στις βιβλιοθήκες (2/14) Στην πραγματικότητα κάτι τέτοιο καθιστά εντελώς ανέφικτη την ανάπτυξη ακόμη και μικρής κλίμακας λογισμικού. Εδώ θα δούμε πώς δημιουργούμε τις δικές μας βιβλιοθήκες, με τη βοήθεια τριών τεχνικών. Στο τέλος της παρούσας ενότητας θα δείξουμε ένα αντιπροσωπευτικό παράδειγμα δημιουργίας και χρήσης μιας βιβλιοθήκης. 8

Εισαγωγή στις βιβλιοθήκες (3/14) Βασική στρατηγική είναι η απομόνωση των κλάσεων σε δικά τους, ξεχωριστά αρχεία. Συνηθίζεται κάθε μία κλάση να βρίσκεται στη δική της βιβλιοθήκη. Αυτό βέβαια δεν αποκλείει την ύπαρξη περισσότερων της μίας κλάσης στην ίδια βιβλιοθήκη. Έτσι μπορείτε να συμπεριλάβετε βιβλιοθήκες σε άλλες δικές σας βιβλιοθήκες ή στο κυρίως πρόγραμμά σας, δημιουργώντας ένα δέντρο εξαρτήσεων. 9

Εισαγωγή στις βιβλιοθήκες (4/14) Οι αλλαγές σε μια βιβλιοθήκη επηρεάζουν όλες τις βιβλιοθήκες και τα αρχεία που εξαρτώνται από αυτή. Μια βιβλιοθήκη αποτελείται από ένα αρχείο δήλωσης των επικεφαλίδων (header ή.h), και ίσως από ένα συνοδευτικό αρχείο με ίδιο όνομα, που περιέχει την υλοποίηση της κλάσης, δηλαδή το αρχείο.cpp. 10

Εισαγωγή στις βιβλιοθήκες (5/14) Οι τρεις τεχνικές που θα περιγράψουμε είναι οι ακόλουθες: 1. Απομόνωση μιας κλάσης στο δικό της αρχείο με κατάληξη.h. 2. Απομόνωση μιας κλάσης στο δικό της ζεύγος αρχείων.h/.cpp, με διαχωρισμό της δήλωσης από την υλοποίηση της κλάσης. 3. Ειδική αντιμετώπιση πρότυπων κλάσεων που βρίσκονται σε βιβλιοθήκες. 11

Εισαγωγή στις βιβλιοθήκες (6/14) Πριν προχωρήσουμε στην περιγραφή κάθε μίας τεχνικής, θα αναφερθούμε σε κάποιους γενικούς κανόνες. Στην πρώτη περίπτωση η βιβλιοθήκη αποτελείται μόνο από ένα αρχείο.h, στο οποίο βρίσκεται ολόκληρος ο κώδικας της κλάσης. Στη δεύτερη περίπτωση η δήλωση της κλάσης και πιθανών σταθερών βρίσκεται στο αρχείο.h, ενώ η υλοποίησή της στο αρχείο.cpp. 12

Εισαγωγή στις βιβλιοθήκες (7/14) Ας υποθέσουμε τη δημιουργία μιας βιβλιοθήκης με όνομα MyClass. Αυτή η βιβλιοθήκη θα περιέχει την κλάση MyClass. Σημειώνουμε ότι δεν είναι υποχρεωτικό το όνομα της βιβλιοθήκης και το όνομα της κλάσης να είναι ίδια. Θα μπορούσαμε να έχουμε μια βιβλιοθήκη με όνομα MyLibrary που να περιέχει διάφορες κλάσεις που κάνουν κάτι σχετικό μεταξύ τους. 13

Εισαγωγή στις βιβλιοθήκες (8/14) Το αρχείο επικεφαλίδων MyClass.h θα περιέχει τις ακόλουθες γραμμές (τις δύο πρώτες στην αρχή του και την τελευταία στο τέλος του): #ifndef MYCLASS_H #define MYCLASS_H /*... Εδώ μπαίνουν τα περιεχόμενα της βιβλιοθήκης... */ #endif 14

Εισαγωγή στις βιβλιοθήκες (9/14) Παρατηρήστε ότι όλος ο κώδικας της βιβλιοθήκης (δήλωση και υλοποίηση κλάσης, δήλωση σταθερών, κλπ) βρίσκεται ανάμεσα σε κάποιες οδηγίες προς το μεταγλωττιστή. Οι οδηγίες προς το μεταγλωττιστή ξεκινούν με δίεση. Η οδηγία #ifndef (συντομογραφία του if not defined) λέει στο μεταγλωττιστή: «Αν δεν έχει οριστεί το σύμβολο που ακολουθεί» (εδώ το MYCLASS_H), να προχωρήσει παρακάτω, στην επόμενη οδηγία που είναι η #define. 15

Εισαγωγή στις βιβλιοθήκες (10/14) Εδώ ίσως διαπιστώσετε ότι στην πραγματικότητα είναι σαν να έχουμε μια εντολή της μορφής if, που αυτήν τη φορά απευθύνεται στο μεταγλωττιστή. Η επόμενη οδηγία, η #define, λέει στο μεταγλωττιστή να ορίσει ένα σύμβολο με όνομα MYCLASS_H. Δηλαδή, αν το σύμβολο MYCLASS_H δεν υπάρχει, να οριστεί ένα. 16

Εισαγωγή στις βιβλιοθήκες (11/14) Μετά ακολουθεί ο κώδικας της βιβλιοθήκης, και συνεπώς ο κώδικας της κλάσης ή των κλάσεων, όπως έχουμε δει μέχρι τώρα. Το αρχείο κλείνει με την οδηγία #endif, που στην ουσία κλείνει την #ifndef που άνοιξε στην αρχή του αρχείου. Είναι απολύτως φυσιολογικό μια βιβλιοθήκη να συμπεριλαμβάνεται σε περισσότερα από ένα αρχεία. 17

Εισαγωγή στις βιβλιοθήκες (12/14) Την πρώτη φορά που ο μεταγλωττιστής θα συναντήσει την #ifndef θα ελέγξει και θα διαπιστώσει ότι το σύμβολο που έπεται δεν υπάρχει στον πίνακα συμβόλων που διατηρεί. Έτσι θα προχωρήσει στην παρακάτω εντολή, ορίζοντας το σύμβολο (δηλαδή προσθέτοντάς το στον πίνακα συμβόλων), την κλάση ή τις κλάσεις που ακολουθούν, και ό,τι άλλο έχετε προσθέσει. 18

Εισαγωγή στις βιβλιοθήκες (13/14) Στο τέλος θα συναντήσει το #endif, που κλείνει την οδηγία. Τη δεύτερη φορά που θα συναντήσει την οδηγία #ifndef (δηλαδή έχουμε συμπεριλάβει κι άλλη φορά τη συγκεκριμένη βιβλιοθήκη σε άλλο αρχείο του ίδιου προγράμματος): Ο μεταγλωττιστής θα διαπιστώσει ότι το σύμβολο MYCLASS_H ήδη υπάρχει, παραλείποντας το υπόλοιπο αρχείο, μέχρι να φτάσει στην #endif. 19

Εισαγωγή στις βιβλιοθήκες Με αυτόν τον τρόπο: (14/14) a. Αποτρέπεται η ύπαρξη διπλότυπων συμβόλων, και συνεπώς ό,τι άλλο δηλώσετε περισσότερες από μία φορές b. Επιταχύνεται η μεταγλώττιση, αφού αν το σύμβολο MYCLASS_H υπάρχει στον πίνακα συμβόλων, έχουμε ήδη μεταγλωττίσει μία φορά τον κώδικα που ακολουθεί. 20

Παρατηρήσεις (1/6) Όταν σε ένα αρχείο συμπεριλαμβάνουμε (#include) μια βιβλιοθήκη που δεν είναι δική μας αλλά παρέχεται από το σύστημα, αυτό γίνεται, όπως ήδη γνωρίζετε, με μια εντολή #include <a_library.h>, όπως για παράδειγμα #include <math.h>. Στην περίπτωση που η βιβλιοθήκη είναι δική μας, τότε στη θέση των < και > χρησιμοποιούμε "...". Για παράδειγμα, στην περίπτωση της παραπάνω βιβλιοθήκης θα γράφαμε #include "MyClass.h". 21

Παρατηρήσεις (2/6) Εδώ πρέπει να προσέξετε με τη χρήση των πεζών και κεφαλαίων γραμμάτων, αφού σε κάποια λειτουργικά συστήματα θεωρούνται ίδια ενώ σε κάποια άλλα όχι. Το σύμβολο στην οδηγία #ifndef μπορεί να είναι οποιοδήποτε. Είναι ουσιώδους σημασίας, όμως, να δίνετε ένα όνομα που ταιριάζει με το όνομα του αρχείου της βιβλιοθήκης. 22

Παρατηρήσεις (3/6) Ο λόγος σχετίζεται με τη χρήση των βιβλιοθηκών σε μεγάλα έργα. Αν ψάχνετε ένα σύμβολο ή μια βιβλιοθήκη γνωρίζοντας τη βιβλιοθήκη ή το σύμβολο, αντίστοιχα, ένα παραπλήσιο όνομα θα σας βοηθήσει. Μπορείτε να καθιερώσετε την τακτική της χρήσης του ονόματος της βιβλιοθήκης συνοδευόμενο από _H, όπως στην περίπτωση του MYCLASS_H. 23

Παρατηρήσεις (4/6) Δεν είναι υποχρεωτικό να δώσουμε στη βιβλιοθήκη το ίδιο όνομα με την κλάση που ενδεχομένως περιέχει. Ένα αντιπροσωπευτικό όνομα, όμως, είθισται. Στην περίπτωση ενός μεγάλου έργου μπορείτε να οργανώσετε τα αρχεία του κώδικά σας σε υποφακέλους. 24

Παρατηρήσεις (5/6) Για παράδειγμα, ένας υποφάκελος μπορεί να περιέχει τις βιβλιοθήκες για τις δικές σας δομές δεδομένων, ένας άλλος μπορεί να περιέχει τις βιβλιοθήκες για τη διαχείριση των διαφόρων μορφοποιήσεων αρχείων, κλπ. Σε αυτήν την περίπτωση μπορείτε στην οδηγία συμπερίληψης να εισάγεται και το όνομα του φακέλου. Για παράδειγμα, θα μπορούσατε να γράψετε: #include "MyDataStructures/MyLinkedList.h". 25

Παρατηρήσεις (6/6) Όταν κάπου σε ένα έργο θέλετε να χρησιμοποιήσετε μια βιβλιοθήκη, πρέπει να προσθέσετε τα αντίστοιχα αρχεία επικεφαλίδας ή/και κώδικα στις ρυθμίσεις του έργου. Στην περίπτωση του CodeGear αυτό γίνεται στον Project Manager, ενώ στην περίπτωση των διαφόρων εκδόσεων του Visual Studio (2010 ή 2013) αυτό γίνεται στον Solution Explorer. Μετά από αυτό μπορείτε να δώσετε τις κατάλληλες εντολές #include όπου θέλετε στο έργο σας. 26

Απομόνωση μιας κλάσης στο δικό της αρχείο επικεφαλίδων (1/4) Η πρώτη τεχνική είναι να έχουμε τη δήλωση και την υλοποίηση του κώδικα στο ίδιο αρχείο επικεφαλίδων (.h). Σε αυτήν την περίπτωση συμπεριλαμβάνουμε τον κώδικα κάθε μίας μεθόδου ακριβώς μετά τη δήλωσή της. Με αυτόν τον τρόπο η δήλωση και η υλοποίηση περιορίζονται στο ίδιο αρχείο και δε διαχωρίζονται. 27

Απομόνωση μιας κλάσης στο δικό της αρχείο επικεφαλίδων (2/4) Αυτό δυνητικά μπορεί να καταστήσει τον κώδικα των απλών και μικρών μεθόδων εμβόλιμο (δείτε και το σχόλιο της επόμενης υποενότητας), αλλά έχει ένα σημαντικό μειονέκτημα. Αν αλλάξετε τον κώδικας μιας μεθόδου έστω και στο ελάχιστο, τότε οποιοδήποτε άλλο αρχείο βασίζεται σε αυτήν τη βιβλιοθήκη θα πρέπει να μεταγλωττιστεί εκ νέου. 28

Απομόνωση μιας κλάσης στο δικό της αρχείο επικεφαλίδων (3/4) Αυτό μπορεί να προκαλέσει επάλληλες εκ νέου μεταγλωττίσεις άλλων αρχείων. Ένα ακόμη μειονέκτημα είναι ότι η βιβλιοθήκη είναι δυσανάγνωστη, αφού η δήλωση (το τι κάνει) και η υλοποίηση (το πώς το κάνει) βρίσκονται μαζί. 29

Απομόνωση μιας κλάσης στο δικό της αρχείο επικεφαλίδων (4/4) Ακολουθεί ένα παράδειγμα κλάσης μιγαδικών αριθμών, όπου η δήλωση και η υλοποίηση της κλάσης βρίσκονται μαζί. Το κυρίως αρχείο (main.cpp) είναι δοκιμαστικό της κλάσης Complex. Στην αντίστοιχη εργαστηριακή ενότητα θα δούμε το ίδιο ακριβώς παράδειγμα, όπου η βιβλιοθήκη απαρτίζεται από δύο αρχεία. 30

Βιβλιογραφία (1/10) 1. Alexandrescu A. (2001) Modern C++ design: generic programming and design patterns applied. USA, Addison-Wesley Publishing Company. 323 pp. ISBN-13 978-0-201-70431-0. ( 22.85, 27,42). 2. Bennett S, McRobb S and R Farmer. (2002) Object-oriented systems analysis and design using UML. 2nd Edition. McGraw- Hill Education. ISBN 0-07-709864-1. 3. Booch G, Maksimchuk RA, Engle MW, Young BJ, Conallen J and Houston KA. (2007) Object-oriented analysis and design with applications. 3rd ed. USA, Addison-Wesley. 691 pp. ISBN10 0-201-89551-X. ISBN13 978-0-201-89551-3. ( 43.44, 52.56). 31

Βιβλιογραφία (2/10) 4. Carrano FM and Henry T. (2013) Data abstraction and problem solving with C++: walls and mirrors. 6th ed. UK, Pearson Education Limited. 833 pp. ISBN10 0-273-76841-7, ISBN13 978-0-76841-8. 5. Deitel HM and Deitel PJ. (2010) C++ προγραμματισμός. 6η Έκδοση. Ελλάδα, Εκδόσεις Μ. Γκιούρδα. 1448 σελ. ISBN13 978-960-512-591-2. 6. Fowler M. (1999) Refactoring: improving the design of existing code. USA, Addison Wesley Longman, Inc. 431 pp. ISBN13 978-0-201-48567-7. ( 38.62, 49.05). 32

Βιβλιογραφία (3/10) 7. Fowler M. (2004) UML distilled: a brief guide to the standard object modeling language. 3rd ed. USA, Pearson Education, Inc. 175 pp. ISBN13 978-0-321-19368-1. ( 30.10, 38.23). 8. Kruse RL and Ryba AJ. (1999) Data structures and program design in C++. USA, Prentice Hall. 717 pp. ISBN 0-13- 082640-5. ( 40.74). 9. Lafore R. (2006) Αντικειμενοστρεφής προγραμματισμός με τη C++. Ελλάδα, Εκδόσεις Κλειδάριθμος. 1040 σελ. ISBN10 960-209-904-6. 33

Βιβλιογραφία (4/10) 10. Lafore, R. (2002) Object-oriented programming in C++. 4th ed. USA, Sams Publishing. 1012 pp. ISBN-10 0-672-32308-7. ISBN-13 978-0-672-32308-9. ( 29.60, 33.35). 11. Lakos, J. (1996) Large-Scale Software Design in C++. USA, Addison-Wesley. 852 pp. ISBN-10 0-201-63362-0. ISBN-13 978-0-201-63362-7. ( 26.26, 30.20). 12. MacLennan BJ. (1987) Principles of programming languages: design, evaluation, and implementation. 2nd ed. USA, CBS College Publishing. 568 pp. ISBN 0-03-021999-X. ( 8.00). 34

Βιβλιογραφία (5/10) 13. Martin RC. (2012) Agile software development: principles, patterns, and practices. USA, Pearson Education, Inc. 529 pp. ISBN10 0-13-276068-4. ISBN13 978-0-13-276058-4. ( 54.21, 65.59). 14. McConnell S. (1993) Code complete: a practical handbook of software construction. USA, Microsoft Press. 857 pp. ( 25.99). 15. McConnell S. (1996) Rapid development: taming wild software schedules. USA, Microsoft Press. 647 pp. ISBN 1-55615-900-5. ( 25.99). 35

Βιβλιογραφία (6/10) 16. McConnell S. (2004) Professional software development: shorter schedules, higher quality products, more successful projects, enhanced careers. USA, Addison-Wesley. 243 pp. ISBN 0-321-19367-9. ( 19.79, 29.08). 17. McDermid J, ed. (1991) Software engineer s reference book. Great Britain, Butterworth-Heinemann Ltd. 1140 pp. ISBN 0-7506-0813-7. ( 40.00). 18. Meyers S. (1996) More effective C++: 35 new ways to improve your programs and designs. USA, Addison-Wesley. 318 pp. ISBN 0-201-63371-X. ( 25.29, 36.90). 36

Βιβλιογραφία (7/10) 19. Meyers S. (2005) Effective C++: 55 specific ways to improve your programs and designs. 3rd ed. USA, Pearson Education, Inc. 297 pp. ISBN 0-321-33487-6. ( 18.52, 27.01). 20. Pressman RS. (2005) Software engineering: a practitioner s approach. 6th int. ed. Singapore, McGraw-Hill. 912 pp. ISBN 007-123840-9. ( 45.06, 65.83). 21. Reddy M. (2011) API design for C++. USA, Morgan Kaufmann Publishers. 441 pp. ISBN13 978-0-12-385003-4. ( 28.01, 32.21). 22. Sahni S. (2004) Δομές δεδομένων, αλγόριθμοι, και εφαρμογές στη C++. Ελλάδα/ΗΠΑ, Εκδόσεις Τζιόλα/McGraw-Hill. 852 σελ. ISBN10 960-418-030-4. ( 66.56). 37

Βιβλιογραφία (8/10) 23. Savitch W and Mock K. (2013) Πλήρης C++. 4η Έκδοση. Ελλάδα, Εκδόσεις Τζιόλα. 1024 σελ. ISBN13 978-960-418-358-6. ( 76.14). 24. Savitch W. (2015) Java: and introduction to problem solving and programming. 7th ed. USA, Pearson Education, Inc. 989 pp (+204 pp web chapters). ISBN10 0-13-376626-8. ISBN13 978-0- 376626-4. ( 83.99, 97.85 104.75, $122.68). 25. Schildt H. (2000) Ο οδηγός της C++. 3η Έκδοση, Εκδόσεις Μ. Γκιούρδα. 748 σελ. ISBN10 960-512-229-4. ( 29.00). 26. Schildt H. (2004) Μάθετε τη C++ από το μηδέν. 3η Έκδοση. Ελλάδα, Εκδόσεις Κλειδάριθμος. 660 σελ. ISBN10 960-209-731-0. ( 46.90). 38

Βιβλιογραφία (9/10) 27. Sommerville I. (2004) Software Engineering. 7th ed. USA, Addison-Wesley. 759 pp. ISBN 0-321-21026-3. ( 40.95, 60.17). 28. Stroustrup B. (2000) The C++ programming language. Special Edition. USA, Addison-Wesley Longman, Inc. 1020 pp. ISBN 0-201-70073-5. ( 37.20, 54.26). 29. Sutter H and Alexandrescu A. (2005) C++ coding standards: 101 rules, guidelines, and best practices. USA, Pearson Education, Inc. 220 pp. ISBN10 0-321-11358-6. ISBN13 978-0-321-11358-0. ( 19.71, 22.67). 39

Βιβλιογραφία (10/10) 30. Sutter H. (2000) Exceptional C++: 47 engineering puzzles, programming problems, and solutions. USA, Addison- Wesley Longman, Inc. 215 pp. ISBN10 0-201-61562-2. ISBN13 978-0-201-61562-3. ( 24.32, 27.97). 31. Sutter H. (2002) More exceptional C++: 40 new engineering puzzles, programming problems, and solutions. USA, Pearson Education, Inc. 279 pp. ISBN10 0-201-70434-X. ISBN13 978-0-201-70434-1. ( 28.05, 32.26). 32. Χατζηγιαννάκης ΝΜ. (2014) Η γλώσσα C++ σε βάθος. 2η αναθεωρημένη έκδοση. Ελλάδα, Εκδόσεις Κλειδάριθμος. 974 σελ. ISBN13 978-960-461-620-6. ( 89.00). 40

Σημείωμα Αναφοράς Copyright ΤΕΙ Δυτικής Μακεδονίας, Σίσιας Γεώργιος. «Προγραμματισμός ΙΙ». Έκδοση: 1.0. Κοζάνη 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: 41

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 42

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 43