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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Οικονομετρία Ι. Ενότητα 3: Θεώρημα των Gauss Markov. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

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

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

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

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

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

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

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

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

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

Οικονομετρία Ι. Ενότητα 5: Ανάλυση της Διακύμανσης. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

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

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

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

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

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

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

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

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

Συστήματα Αναμονής. Ενότητα 7: Ουρά Μ/Μ/1. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Δομημένος Προγραμματισμός

Οικονομετρία Ι. Ενότητα 6: Πολλαπλό Γραμμικό Υπόδειγμα Παλινδρόμησης. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

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

Δομημένος Προγραμματισμός

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

Κβαντική Επεξεργασία Πληροφορίας

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

Transcript:

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

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

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

Εισαγωγή στις κλάσεις, στα μέλη δεδομένων και στις μεθόδους - Μέρος 2

Σκοποί ενότητας Σκοπός της ενότητας είναι η εισαγωγή στις κλάσεις, στα μέλη δεδομένων και στις μεθόδους. 5

Περιεχόμενα ενότητας Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης. Κατηγοριοποίηση των μεθόδων μίας κλάσης. Κατασκευαστές. Κατηγορίες κατασκευαστών. Καταστροφέας. Βιβλιογραφία. 6

Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης (1/3) Οι κλάσεις περιγράφουν έννοιες που χαρακτηρίζονται από τις ιδιότητες και τη συμπεριφορά τους. Αυτό σημαίνει ότι υπάρχουν μέλη δεδομένων (ένας άλλος όρος είναι και οι μεταβλητές στιγμιοτύπου) και μέθοδοι, μαζί σε μία δομή. Οι ιδιότητες μιας κλάσης μπορεί να αποτελούνται από θεμελιώδους τύπους δεδομένων (π.χ. int, char, double, κλπ) ή από σύνθετους (δομές ή ακόμη και άλλες κλάσεις). 7

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

Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης (3/3) Υπάρχουν κανόνες που διέπουν την πρόσβαση στα μέλη και στις μεθόδους, με τη βοήθεια προσδιοριστικών. Το τελευταίο θα το δούμε διεξοδικά αργότερα. 9

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

Κατηγοριοποίηση των μεθόδων μίας κλάσης (2/3) Μέθοδοι πρόσβασης, δηλαδή μέθοδοι που επιτρέπουν την πρόσβαση σε ιδιωτικά μέλη μιας κλάσης. Μέθοδοι τροποποίησης, δηλαδή μέθοδοι που επιτρέπουν την αλλαγή ιδιωτικών μελών μιας κλάσης. 11

Κατηγοριοποίηση των μεθόδων μίας κλάσης (3/3) Τελεστές (π.χ. +, +=, -, -=, κλπ) που έχουν τροποποιηθεί (υπερφορτωθεί) ώστε να επιτρέπουν την αντίστοιχη πράξη μεταξύ στιγμιοτύπων μίας ή περισσότερων κλάσεων. Βοηθητικές μέθοδοι, δηλαδή μέθοδοι που δεν ανήκουν σε κάποια από τις παραπάνω κατηγορίες και εκτελούν κάποιες επιπλέον λειτουργίες. 12

Κατασκευαστές (1/7) Όταν δηλώνουμε μια μεταβλητή θεμελιώδους ή σύνθετου τύπου, αυτή η μεταβλητή δεν παίρνει αρχικές τιμές. Έτσι, μια μεμονωμένη τιμή, όπως μια ακέραια μεταβλητή, παραμένει χωρίς αρχικοποίηση, δηλαδή δεν της έχει δοθεί επίσημα μια τιμή που εμείς θέλουμε. Το ίδιο ακριβώς συμβαίνει όταν δηλώνουμε μια μεταβλητή ενός σύνθετου τύπου. 13

Κατασκευαστές (2/7) Αν υποθέσουμε ότι έχουμε μια δομή που περιέχει τρία πεδία, τότε η δήλωση μιας μεταβλητής αυτής της δομής δεν αρχικοποιεί τα επιμέρους πεδία. Η αρχικοποίηση μιας απλής ή σύνθετης μεταβλητής είναι ευθύνη του προγραμματιστή. Συνηθίζεται να λέγεται ότι μια μεταβλητή που δεν έχει αρχικοποιηθεί περιέχει «σκουπίδια» ή «τυχαίες τιμές». Στην πραγματικότητα κανένα από αυτά δεν περιγράφει πλήρως την αλήθεια. 14

Κατασκευαστές (3/7) Η μνήμη του υπολογιστή χρησιμοποιείται διαρκώς. Όταν δηλώνουμε μια μεταβλητή, χρησιμοποιείται μια θέση μνήμης που έχει χώρο όσο χρειάζεται για την αποθήκευση της συγκεκριμένης μεταβλητής (ή και λίγο παραπάνω για λόγους ευθυγράμμισης με συγκεκριμένα πολλαπλάσια διευθύνσεων). Επειδή η μνήμη δεν είναι άπειρη, χρησιμοποιείται όταν χρειάζεται, και όταν το πρόγραμμα που τη δήλωσε τερματίσει, η μνήμη που χρησιμοποιείται καθίσταται διαθέσιμη για χρήση από άλλα προγράμματα. 15

Κατασκευαστές (4/7) Συνεπώς, όταν δηλώνουμε μια μεταβλητή, αυτή χαρτογραφείται σε μια θέση μνήμης που στο παρελθόν μπορεί να είχε χρησιμοποιηθεί από κάποιο άλλο ή και από το ίδιο πρόγραμμα. Έτσι στην ουσία «αποκαλύπτονται» τα δεδομένα που υπήρχαν στη συγκεκριμένη θέση μνήμης που τώρα πια χρησιμοποιείται άλλη μία φορά. 16

Κατασκευαστές (5/7) Επειδή η τιμή που παίρνει μια μεταβλητή δεν έχει νόημα στα πλαίσια του προγράμματος που χρησιμοποιεί την αντίστοιχη θέση μνήμης, λέγεται ότι «δεν έχει αρχικοποιηθεί», ή ότι «περιέχει τυχαίες τιμές», ή ότι «περιέχει σκουπίδια». Στην πραγματικότητα δεν ισχύει κανένα από αυτά. Απλά φαίνονται οι τιμές που παρέμειναν στη συγκεκριμένη θέση μνήμης από προηγούμενη χρήση της. 17

Κατασκευαστές (6/7) Το παραπάνω αποτελεί πρόβλημα που αντιμετωπίζουν πιο συχνά οι αρχάριοι προγραμματιστές. Αυτό δε σημαίνει ότι δεν μπορεί να συμβεί και σε κάποιον έμπειρο που απλά ξέχασε να αρχικοποιήσει τις μεταβλητές του, απλές ή σύνθετες, προκαλώντας έτσι προβλήματα στον κώδικα. Το συγκεκριμένο πρόβλημα λύνεται στη C++ με τη βοήθεια κάποιων μεθόδων που, λόγω της αρμοδιότητάς τους, ονομάζονται κατασκευαστές (constructors). Άλλοι όροι που χρησιμοποιούνται είναι «δομητές» ή «μέθοδοι δόμησης». 18

Κατασκευαστές (7/7) Οι κατασκευαστές είναι ειδικές μέθοδοι που έχουν πάντοτε το ίδιο όνομα με την κλάση στην οποία ανήκουν, κι έχουν την ευθύνη της αρχικοποίησης των ιδιοτήτων της κλάσης, κατά τη δημιουργία στιγμιοτύπων (instances)/αντικειμένων (objects) της (δηλαδή μεταβλητών του τύπου της κλάσης). Άρα, σε αντίθεση με τη δήλωση μεταβλητών ενός τύπου που δεν αρχικοποιεί τη μεταβλητή ή τα πεδία της, η δήλωση στιγμιοτύπου ή αντικειμένου μιας κλάσης συνοδεύεται και από την αρχικοποίηση των μελών της (αν υπάρχει κατασκευαστής). Μια κλάση μπορεί να έχει από 0 ως απροσδιόριστο πλήθος κατασκευαστών. 19

Κατηγορίες κατασκευαστών (1/3) a. Προεπιλεγμένος κατασκευαστής (default constructor). Μπορεί να υπάρχει ή να μην υπάρχει (δηλ. 0 ή 1 προεπιλεγμένος κατασκευαστής). Ο κατασκευαστής αυτός δε δέχεται ορίσματα, και συνεπώς δίνει κάποιες αρχικές τιμές στις ιδιότητες των στιγμιοτύπων μιας κλάσης, που δεν είναι κατ' ανάγκη αυτές που επιθυμούμε ή θα χρησιμοποιήσουμε αργότερα. 20

Κατηγορίες κατασκευαστών (2/3) b. Γενικοί κατασκευαστές (constructors). Παίρνουν κατάλληλα ορίσματα και αρχικοποιούν τις ιδιότητες των στιγμιοτύπων των κλάσεων με συγκεκριμένες τιμές. Από αυτήν την κατηγορία μπορούν να υπάρχουν από 0 ως Ν κατασκευαστές. 21

Κατηγορίες κατασκευαστών (3/3) c. Κατασκευαστής αντιγράφου (copy constructor). Αυτός ο τύπος κατασκευαστή μπορεί να υπάρχει ή να μην υπάρχει (0 ή 1). Καθήκον του είναι να δημιουργήσει ένα ακριβές αντίγραφο ενός άλλου στιγμιοτύπου/αντικειμένου μιας κλάσης. 22

Καταστροφέας (1/3) Η επόμενη μέθοδος που θα χρησιμοποιήσουμε είναι ο καταστροφέας (destructor). Μια κλάση μπορεί να έχει ή να μην έχει καταστροφέα. Η επικεφαλίδα του καταστροφέα είναι σχεδόν πανομοιότυπη με τον προεπιλεγμένο κατασκευαστή, αλλά έχει το σύμβολο tilde (~) πριν από το όνομά του. Σκοπός του καταστροφέα είναι να τακτοποιήσει εκκρεμότητες της κλάσης. 23

Καταστροφέας (2/3) Αν κάποιος κατασκευαστής δεσμεύει μνήμη, ανοίγει κάποιο αρχείο, δεσμεύει κάποιον άλλο πόρο του λειτουργικού συστήματος, ή κάτι άλλο, ευθύνη του καταστροφέα είναι να αναιρέσει στη συγκεκριμένη ενέργεια. Ας υποθέσουμε ότι μια κλάση αναπαριστά την έννοια ενός αρχείου εικόνων, και κάποιος κατασκευαστής είναι επιφορτισμένος με το άνοιγμα του αρχείου και τη δέσμευση επαρκούς μνήμης για να φορτωθεί η εικόνα. Κάποιες μέθοδοι ίσως επιτρέπουν την επεξεργασία της εικόνας. 24

Καταστροφέας (3/3) Ο καταστροφέας ίσως επιφορτιστεί με την αποθήκευση της τροποποιημένης εικόνας, το κλείσιμο του αρχείου, και την αποδέσμευση της μνήμης που χρησιμοποιήθηκε κατά την επεξεργασία του. 25

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

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

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

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

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

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

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

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

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

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

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

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

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