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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ιστορία της μετάφρασης

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

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

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

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

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

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

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

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

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

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

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

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

Οργάνωση και Διοίκηση Πωλήσεων Ενότητα 1: Ο ΡΟΛΟΣ ΤΩΝ ΠΩΛΗΣΕΩΝ ΣΤΟ ΠΛΑΙΣΙΟ ΤΗΣ ΣΤΡΑΤΗΓΙΚΗΣ ΜΑΡΚΕΤΙΝΓΚ

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

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

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

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

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

Transcript:

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

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

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

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

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

Περιεχόμενα ενότητας Απομόνωση μιας κλάσης στο δικό της αρχείο επικεφαλίδων. Παράδειγμα - Αρχείο Complex.h. Παράδειγμα - Αρχείο main.cpp. Σχολιασμός παραδείγματος. Βιβλιογραφία. 6

Απομόνωση μίας κλάσης στο δικό της ζεύγος αρχείων επικεφαλίδων και κώδικα Ακολουθεί ένα παράδειγμα βιβλιοθήκης μιγαδικών αριθμών. Υπάρχει μία κλάση με όνομα Complex. Η δήλωση αυτής της κλάσης βρίσκεται στο αρχείο Complex.h και η υλοποίησή της στο αρχείο Complex.cpp. Το κυρίως αρχείο (main.cpp) είναι δοκιμαστικό της κλάσης Complex. Παραθέτουμε τα τρία παραπάνω αρχεία, ξεκινώντας από το αρχείο δήλωσης της κλάσης. 7

Παράδειγμα - Αρχείο Complex.h (1/4) #ifndef COMPLEX_H #define COMPLEX_H class Complex { private: double Re, Im; public: // Constructors and destructor. Complex(); Complex(const double r, const double i); Complex(const Complex &c); ~Complex(); 8

Παράδειγμα - Αρχείο Complex.h (2/4) // Set/Get methods. void SetRe(const double r); void SetIm(const double i); double GetRe() const; double GetIm() const; 9

Παράδειγμα - Αρχείο Complex.h (3/4) // Operators. void operator=(const Complex &c); Complex operator+(const Complex &c) const; void operator+=(const Complex &c); Complex operator-(const Complex &c) const; void operator-=(const Complex &c); Complex operator*(const Complex &c) const; void operator*=(const Complex &c); Complex operator/(const Complex &c) const; void operator/=(const Complex &c); 10

Παράδειγμα - Αρχείο Complex.h (4/4) // Helper methods. Complex Conjugate() const; double Magnitude() const; void Write() const; }; #endif 11

Παράδειγμα - Αρχείο Complex.cpp (1/10) #include <iostream> using namespace std; #include "Complex.h" /* -------------------------------------------------- */ /* Constructors and destructor. */ /* ------------------------------------------------- */ Complex::Complex() : Re(0.0), Im(0.0) {} // Default constructor 12

Παράδειγμα - Αρχείο Complex.cpp (2/10) Complex::Complex(const double r, const double i) : Re(r), Im(i) {} // Constructor Complex::Complex(const Complex &c) { if ( this!= &c ) { Re = c.re; Im = c.im; } // if } // Copy constructor 13

Παράδειγμα - Αρχείο Complex.cpp (3/10) Complex::~Complex() { Re = Im = 0.0; } // Destructor /* -------------------------------------------- */ /* Set/Get methods. */ /* -------------------------------------------- */ void Complex::SetRe(const double r) { Re = r; } void Complex::SetIm(const double i) { Im = i; } double Complex::GetRe() const { return ( Re ); } double Complex::GetIm() const { return ( Im ); } 14

Παράδειγμα - Αρχείο Complex.cpp (4/10) /* ------------------------------------------ */ /* Operators. */ /* ------------------------------------------ */ void Complex::operator=(const Complex &c) { if ( this!= &c ) { Re = c.re; Im = c.im; } // if } // operator= 15

Παράδειγμα - Αρχείο Complex.cpp (5/10) Complex Complex::operator+(const Complex &c) const { return ( Complex(Re + c.re, Im + c.im) ); } // operator+ void Complex::operator+=(const Complex &c) { Re += c.re; Im += c.im; } // operator+= 16

Παράδειγμα - Αρχείο Complex.cpp (6/10) Complex Complex::operator-(const Complex &c) const { return ( Complex(Re - c.re, Im - c.im) ); } // operatorvoid Complex::operator-=(const Complex &c) { Re -= c.re; Im -= c.im; } // operator-= 17

Παράδειγμα - Αρχείο Complex.cpp (7/10) Complex Complex::operator*(const Complex &c) const { return ( Complex(Re * c.re - Im * c.im, Im * c.re + Re * c.im) ); } // operator* void Complex::operator*=(const Complex &c) { Re = Re * c.re - Im * c.im; Im = Im * c.re + Re * c.im; } // operator*= 18

Παράδειγμα - Αρχείο Complex.cpp (8/10) Complex Complex::operator/(const Complex &c) const { return ( Complex(( Re * c.re + Im * c.im ) / ( c.re * c.re + c.im * c.im ), ( Im * c.re - Re * c.im ) / ( c.re * c.re + c.im * c.im )) ); } // operator/ void Complex::operator/=(const Complex &c) { Re = ( Re * c.re + Im * c.im ) / ( c.re * c.re + c.im * c.im ); Im = ( Im * c.re - Re * c.im ) / ( c.re * c.re + c.im * c.im ); } // operator/= 19

Παράδειγμα - Αρχείο Complex.cpp (9/10) /* ----------------------------------------------------- */ /* Helper methods. */ /* ------------------------------------------------------*/ Complex Complex::Conjugate() const { return ( Complex(Re, -Im) ); } // Conjugate double Complex::Magnitude() const { return ( sqrt(re * Re + Im * Im) ); } // Magnitude 20

Παράδειγμα - Αρχείο Complex.cpp (10/10) void Complex::Write() const { cout << "(" << Re << ", " << Im << ")" << endl; } // Write 21

Παράδειγμα - Αρχείο main.cpp (1/2) /* ------------------------------------------------------- */ /* Library example. */ /* ------------------------------------------------------- */ #include <iostream> using namespace std; #include "Complex.h" void main() { Complex z1; Complex z2(1.0, 2.0); Complex z3(z2); 22

z1.write(); z2.write(); z3.write(); z3 += z2; z3.write(); Παράδειγμα - Αρχείο main.cpp (2/2) z1 = z3 / z2; z1.write(); z1 += Complex(1.0, 1.0); cout << "Magnitude = " << z1.magnitude() << endl; cout << "Conjugate = "; z1.conjugate().write(); } // main 23

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

Σχολιασμός παραδείγματος (2/10) Παρατηρούμε ότι το αρχείο επικεφαλίδων δε συμπεριλαμβάνει άλλες βιβλιοθήκες, ενώ το αρχείο του κώδικα συμπεριλαμβάνει δύο βιβλιοθήκες:. Η μία είναι βιβλιοθήκη του συστήματος (iostream). Η δεύτερη είναι η δήλωση της κλάσης (το αρχείο Complex.h). 25

Σχολιασμός παραδείγματος (3/10) Η πρώτη βιβλιοθήκη επιτρέπει τη χρήση της cout για την εμφάνιση στην οθόνη των μελών ενός στιγμιοτύπου της κλάσης. Ο λόγος που η συμπερίληψη της iostream περιορίζεται στο αρχείο του κώδικα είναι ότι δε χρειαζόμαστε τίποτε από αυτήν τη βιβλιοθήκη στη δήλωση της κλάσης, ενώ τη χρειαζόμαστε αποκλειστικά στο αρχείο υλοποίησης της βιβλιοθήκης. 26

Σχολιασμός παραδείγματος (4/10) Η δεύτερη βιβλιοθήκη συμπεριλαμβάνεται ώστε στο αρχείο υλοποίησης να γνωρίζουμε τη δήλωση της κλάσης. Σημειώνουμε ότι πριν από το όνομα κάθε μίας μεθόδου γράφουμε το όνομα της κλάσης και το συνοδευτικό τελεστή (::). Στο αρχείο main.cpp συμπεριλαμβάνουμε τη βιβλιοθήκη iostream και το αρχείο επικεφαλίδων της κλάσης μας. 27

Σχολιασμός παραδείγματος (5/10) Βλέπουμε ότι το κυρίως αρχείο είναι πολύ μικρό και βασίζεται στη βιβλιοθήκη Complex. Εδώ υπάρχουν κάποια ζητήματα που κρίνεται σκόπιμο να συζητηθούν. Το πλεονέκτημα αυτής της προσέγγισης είναι ότι η δήλωση και ο κώδικας είναι διαχωρισμένοι, καθιστώντας την εν λόγω κλάση πιο ευανάγνωστη. 28

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

Σχολιασμός παραδείγματος (7/10) Ένα άλλο σημαντικό πλεονέκτημα είναι ότι οποιαδήποτε μεταβολή του κώδικα (όχι της δήλωσης) δεν επηρεάζει δυσμενώς το χρόνο μεταγλώττισης του προγράμματος. Αν η μεταβολή περιορίζεται σε μία ή περισσότερες μεθόδους, τότε μεταγλωττίζεται μόνο το αρχείο του κώδικα, προκύπτει ο αντικειμενικός κώδικας (object code), και αυτός με τη σειρά του συνενώνεται με τον υπόλοιπο αντικειμενικό κώδικα προς κατασκευή του τελικού εκτελέσιμου προγράμματος. 30

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

Σχολιασμός παραδείγματος (9/10) 1. Μπορούμε να προσθέσουμε τη λέξη inline πριν από το όνομα μιας μεθόδου της οποίας η υλοποίηση βρίσκεται στο αρχείο του κώδικα. Αυτή η λέξη προτρέπει (δεν υποχρεώνει) το μεταγλωττιστή να παράγει τον κώδικα της μεθόδου εμβόλιμο, δηλαδή να μην καλέσει τη μέθοδο αλλά να χρησιμοποιήσει επί τόπου τον κώδικά της. Αυτό δυνητικά παράγει γρηγορότερο κώδικα, με την προϋπόθεση, όμως, ότι ο δυνητικά εμβόλιμος κώδικας εμπίπτει στους περιορισμούς του μεταγλωττιστή (ειδάλλως δεν μπαίνει εμβόλιμος). 32

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

Βιβλιογραφία (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). 34

Βιβλιογραφία (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). 35

Βιβλιογραφία (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. 36

Βιβλιογραφία (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). 37

Βιβλιογραφία (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). 38

Βιβλιογραφία (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). 39

Βιβλιογραφία (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). 40

Βιβλιογραφία (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). 41

Βιβλιογραφία (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). 42

Βιβλιογραφία (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). 43

Τέλος Ενότητας

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

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

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