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

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

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

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

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

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

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

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

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

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

char short int/long long long float type var

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

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 10 : Κατασκευή ΝΠΑ. Αλέξανδρος Τζάλλας

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

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 8 : Πίνακες IΙ. Αλέξανδρος Τζάλλας

Εφαρμογή Υπολογιστικών Τεχνικών στην Γεωργία

Λειτουργικά Συστήματα

Πληροφορική II. Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι. τύποι δεδομένων. Δρ. Γκόγκος Χρήστος

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

Εισαγωγή στη C Κωνσταντίνος Μαργαρίτης, Γιάννης Τσιομπίκας, Άδεια χρήσης: GNU FDL

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

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

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

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

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

Αρχιτεκτονική υπολογιστών

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

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

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

Φωνολογική Ανάπτυξη και Διαταραχές

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

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

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

Διοικητική των επιχειρήσεων

Αρχιτεκτονική υπολογιστών

Αρχιτεκτονική υπολογιστών

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

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

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

Ηλεκτρονικοί Υπολογιστές

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

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

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

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

Εφαρμογή Υπολογιστικών Τεχνικών στην Γεωργία

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

Λειτουργικά Συστήματα

Αρχιτεκτονική υπολογιστών

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

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

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

Πληροφορική ΙΙ Θεματική Ενότητα 5

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

Νοσηλευτική Σεμινάρια

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

Νοσηλευτική Σεμινάρια

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

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

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

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

Διοικητική των επιχειρήσεων

Μάρκετινγκ Αγροτικών Προϊόντων

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Μικροοικονομική. Ενότητα 12 : Μορφές Αγοράς Καραμάνης Κωνσταντίνος

Εισαγωγή στους Υπολογιστές

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εκκλησιαστικό Δίκαιο

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Μικροοικονομική. Ενότητα 11 : Κόστος παραγωγής Καραμάνης Κωνσταντίνος

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Μικροοικονομική. Ενότητα 6 : Ελαστικότητα προσφοράς Καραμάνης Κωνσταντίνος

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 11 : Γραμματικές χωρίς συμφραζόμενα. Αλέξανδρος Τζάλλας

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

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

Αρχιτεκτονική υπολογιστών

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 4 : Υποπρογράμματα I. Αλέξανδρος Τζάλλας

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

Διοικητική των επιχειρήσεων

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

Εφαρμογή Υπολογιστικών Τεχνικών στην Γεωργία

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

Εκκλησιαστικό Δίκαιο

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

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

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

Εργαστήριο Χημείας Ενώσεων Συναρμογής

Λειτουργικά Συστήματα

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

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

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

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

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

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

Ευαγγελικές αφηγήσεις της Ανάστασης

Transcript:

1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Αντικειμενοστραφής Προγραμματισμός Ενότητα 6 : Προχωρημένα θέματα (1/2) Ιωάννης Τσούλος

2 Ανοιχτά Ακαδημαϊκά Μαθήματα Τμήμα Μηχανικών Πληροφορικής Τ.Ε Αντικειμενοστραφής Προγραμματισμός Ενότητα 6 : Προχωρημένα θέματα (1/2) Ιωάννης Τσούλος Επίκουρος Καθηγητής Άρτα, 2015

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 3 3

4 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Χρηματοδότηση Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Ηπείρου» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα.

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation Ας ορίσουμε μια κλάση Person η οποία θα περιέχει ορισμένες πληροφορίες για ένα άτομο, όπως π.χ. το όνομά του, την ηλικία του, το τηλέφωνό του και τη διεύθυνση email του. Μια τέτοια κλάση μπορεί να χρησιμοποιηθεί π.χ. σε ένα πρόγραμμα ατζέντας ή ακόμη και ως βάση σε πρόγραμμα πελατολογίου, ασθενών, κλπ. 5 5

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation class Person { public: // οι μεταβλητές της κλάσης string Firstname_, Lastname_; int Age_; string Telephone_; string Email_; // ο constructor Person(string fname, string lname, int age, string tel, string email) { Firstname_ = fname; Lastname_ = lname; } } Age_ = age; Telephone_ = tel; Email_ = email; Παρατήρηση: Tα ονόματα των μεταβλητών της κλάσης λήγουν σε _. Kάτι τέτοιο δεν είναι αναγκαίο, είναι όμως μια συνηθισμένη πρακτική και βοηθάει στην αναγνώριση και διαχωρισμό των απλών μεταβλητών από τις μεταβλητές μέλη μιας κλάσης. 6 6

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα 7 Encapsulation Αφού ορίσαμε την κλάση, μπορούμε να προχωρήσουμε στην δημιουργία κάποιων αντικειμένων της κλάσης: Person bilbo( Bilbo, Baggins, 111, +306970123456, bilbobaggins@theshire.net ); Με αυτόν τον τρόπο, δημιουργήσαμε το αντικείμενο bilbo που αντιστοιχεί στο άτομο Bilbo Baggins, 111 ετών με τηλ. 306970123456 και email bilbobaggins@theshire.net. Όπως είναι οι πληροφορίες που περιγράφουν το άτομο, είναι προσβάσιμες σε όλους. Αυτό σημαίνει ότι αν με κάποιον τρόπο αποκτήσουμε πρόσβαση στο αντικείμενο bilbo, θα μπορούμε να αλλάξουμε οποιαδήποτε πληροφορία θελήσουμε και με οποιονδήποτε τρόπο.

8 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation Και μάλιστα με πολύ απλό τρόπο: bilbo.firstname_ = μπίλμπο ; bilbo.lastname_ = μπαγκινσόπουλος ; bilbo.age_ = 3; bilbo.email_ = this is definitely not a valid email address ; bilbo.telephone_ = yeah, try to call this ; Πρόκειται για τρανή παραβίαση των προσωπικών δεδομένων!!! Πώς μπορούμε να αποφύγουμε τέτοιου είδους μη προβλεπόμενη μετατροπή των δεδομένων ενός αντικειμένου;

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation Η C++ έχει σχεδιαστεί γύρω από το μοντέλο του αντικειμενοστραφούς προγραμματισμού, προβλέπει τον περιορισμό της πρόσβασης των δεδομένων σε επίπεδα. Ένα από τα επίπεδα πρόσβασης είναι η πρόσβαση χωρίς περιορισμό σε όλους, που ορίζεται με τη λέξη public ορίζει μια περιοχή δηλώσεως μεθόδων ή μεταβλητών (γενικότερα μέλη της κλάσης). Κάθε μέλος που βρίσκεται στην περιοχή public θα είναι προσβάσιμο από οπουδήποτε μέσα στην ίδια κλάση ή εκτός της κλάσης. Το αντίστροφο, δηλαδή ο περιορισμός της πρόσβασης γίνεται με τη χρήση της λέξης private. Η private περιορίζει την πρόσβαση των μεταβλητών ή των μεθόδων που βρίσκονται στην αντίστοιχη περιοχή, μόνο στην συγκεκριμένη κλάση (και φυσικά σε αντικείμενα αυτής). 9

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation Η κλάση Person, με τη χρήση της private, θα μετασχηματιστεί ως εξής: class Person { private: // οι μεταβλητές της κλάσης private string Firstname_, Lastname_; private int Age_; private string Telephone_; private string Email_; public:... Αυτό όμως σημαίνει ότι δεν θα είναι πλέον δυνατή η πρόσβαση σε οποιαδήποτε πληροφορία του ατόμου ακόμη και για απλή ανάγνωση! Κάτι τέτοιο δεν είναι επιθυμητό και πρέπει να βρεθεί τρόπος να επιτραπεί έστω και ελεγχόμενη πρόσβαση στα δεδομένα. 1

1 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation Aυτό επιτυγχάνουμε με την χρήση των μεθόδων της κλάσης. Ελεγχόμενη πρόσβαση για ανάγνωση αλλά και μετατροπή των δεδομένων. Συνήθως και για τις περισσότερες περιπτώσεις κλάσεων, αρκεί ο ορισμός ενός ζεύγους μεθόδων για κάθε μεταβλητή της κλάσης, μία για ανάγνωση και μια για μετατροπή της τιμής της μεταβλητής (ένα ζεύγος getter/setter όπως λέγονται συχνά).

1 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation Για την κλάση Person παραθέτουμε πιθανές μεθόδους get/set για ορισμένες από τις μεταβλητές (Age_ και Email_) // Return the age int Person::getAge() { return Age_; } // return the Email address string Person::getEmail() { return Email_; } // method to set the age of the person bool Person::setAge(int Age) { // check if given Age is non-negative (> 0) if (Age > 0) { Age_ = Age; return true; } else return false; } // method to set the email address bool Person::setEmail(string Email) { // call a helper method to check the validity of the email // address (if it's in the form x@y.z). // Ideally, the email address should be a class on its own. if (isvalid(email) == true) { Email_ = Email; return true; } else return false; }

1 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Encapsulation Βλέπουμε πώς ελέγχεται πλέον η πρόσβαση στις μεταβλητές. Η μεταβλητή που κρατά τη διεύθυνση email του ατόμου, για παράδειγμα, αλλάζει μόνο αν έχουμε δώσει μια έγκυρη διεύθυνση email (της μορφής x@y.z). Με τον ίδιο τρόπο που περιορίζουμε την πρόσβαση σε μεταβλητές μπορούμε να περιορίσουμε την πρόσβαση και σε μεθόδους. Θα μπορούσαμε π.χ. να έχουμε μια μέθοδο που να ελέγχει αν ο αριθμός τηλεφώνου του ατόμου είναι έγκυρος, πραγματοποιώντας αναζήτηση σε κάποια βάση δεδομένων. Μια τέτοια μέθοδος δεν θα θέλαμε να είναι προσβάσιμη από οποιονδήποτε εκτός της κλάσης, παρά μόνο σε άλλες μεθόδους της ίδιας της κλάσης (π.χ. στην μέθοδο settelephone()).

1 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Inheritance Στην κληρονομικότητα μια κλάση κληρονομεί τα χαρακτηριστικά μιας υπάρχουσας κλάσης και προσθέτει καινούρια ή τροποποιεί τα ήδη υπάρχοντα. Η κλάση Person ορίζει χαρακτηριστικά που περιγράφουν ένα άτομο αλλά δεν προβλέπει επιπλέον πληροφορίες (φύλο, δουλειά, διεύθυνση εργασίας κλπ). Πρόβλημα: Δεν μπορούμε να προβλέψουμε όλες τις πιθανές πληροφορίες και να τις εισάγουμε στην κλάση Person γιατί οι περισσότερες θα έμεναν αναπάντητες και κάτι τέτοιο θα οδηγούσε σε σπατάλη χώρου (αφού θα έπρεπε να καταχωρήσουμε όλες τις πληροφορίες που θα ήταν κενές).

1 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Inheritance Χρήσιμο να έχουμε μια κοινή βάση και να κρατάμε επιπλέον πληροφορίες μόνο όταν τις χρειαζόμαστε. Έστω ότι η κοινή βάση είναι η κλάση Person και θέλουμε να μελετήσουμε τις περιπτώσεις να είναι κάποιος υπάλληλος (Clerk) ή δάσκαλος (Teacher). Και οι δύο κατηγορίες ατόμων μοιράζονται κοινά χαρακτηριστικά που θεωρούμε ότι περιέχονται στην κλάση Person. Μπορούμε δηλαδή να ορίσουμε δύο νέες κλάσεις που θα κληρονομούν την κλάση Person.

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα class Clerk : public Person { Inheritance private: string JobTitle_; string CompanyName_; string JobAddress_; string JobEmail_; string JobTel_; string JobFax_; Η δήλωση της string JobDescription_; public: κληρονομικότητας μιας Clerk(string fname, string lname, int age, string tel, string email, string jobtitle, string companyname, κλάσης γίνεται ως εξής string jobaddress, string jobemail, string jobtel, string jobfax, (ορίζουμε ταυτόχρονα και string jobdescription) { την πρόσβαση στις Firstname_ = fname; Lastname_ = lname; μεταβλητές και τον Age_ = age; Telephone_ = tel; δημιουργό της κλάσης) Email_ = email; JobTitle_ = jobtitle; CompanyName_ = companyname; JobAddress_ = jobaddress; JobEmail_ = jobemail; JobTel_ = jobtel; JobFax = jobfax; JobDescription_ = jobdescription; } // ακολουθούν οι μέθοδοι get/set για κάθε μεταβλητή με τους απαραίτητους ελέγχους... // η ακόλουθη μέθοδος δίνει συνοπτικές πληροφορίες για τον υπάλληλο. string getinfo() { return (getfirstname()+ +getlastname() + works at +CompanyName_ +, at +JobAddress_ +.\n Email: +getemail()+ \n + Tel: +JobTel_); } } 1

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Inheritance Αντίστοιχα, ορίζουμε την κλάση Teacher: class Teacher στο ΤΕΙ : Ηπείρου public Person { private: string Title_; string School_; string SchoolAddress_; string SchoolTel_; string CourseName_; string CourseDescription_; public: Teacher(string fname, string lname, int age, string tel, string email, string title, string school, string schooladdress, string schooltel, { Firstname_ = fname; Lastname_ = lname; Age_ = age; Telephone_ = tel; Email_ = email; Title_ = title; School_ = school; SchoolAddress_ = schooladdress; SchoolTel_ = jobtel; CourseName_ = coursename; CourseDescription_ = coursedescription; } // ακολουθούν οι μέθοδοι get/set για κάθε μεταβλητή με τους απαραίτητους ελέγχους...... // Η ακόλουθη μέθοδος δίνει συνοπτικές πληροφορίες για τον // καθηγητή. string getinfo() { return (getfirstname()+ +getlastname() + teaches +CourseName_+ at +School_ +, +SchoolAddress_+.\n + Email: +getemail()+ \n + Tel: +SchoolTel_); } } 1

1 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Inheritance Παρατήρηση Χρησιμοποιήσαμε τις μεθόδους get() της κλάσης Person για την πρόσβαση στις μεταβλητές της (εφόσον είναι δηλωμένες private). Xρησιμότητα Person bilbo( Bilbo, Baggins, 111, +306970123456, bilbobaggins@theshire.net ); Clerk sam( Samwise, Gamgee, 33, +30697654321, samgamgee@theshire.net, Gardener, Baggins Inc., Bag End, Hobbiton, The Shire, gardener@baggins.com, +302103456789, +302103456780, Garden Dept. Director ); Teacher pippin( Peregrin, Took, 27, +30690090090, pippin@theshire.net, Dr., King's College, Hobbiton, +30210000001, Philosophy, Deal with the important matters of life, eg. what do we eat? );

1 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Inheritance Μπορούμε να χρησιμοποιήσουμε για κάθε ένα από αυτά τα αντικείμενα, πέρα από τις μεθόδους της κλάσης στην οποία ανήκει, και τις μεθόδους της γονικής κλάσης: cout << bilbo has email address: << bilbo.getemail()) << endl; αυτή η εντολή θα τυπώσει: Ενώ η εντολή: bilbo has email address: bilbobaggins@shire.net cout << sam works as a << sam.getjobtitle() << at << sam.getcompanyνame()) << endl; θα τυπώσει: sam works as a Gardener at Baggins Inc.

2 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Inheritance Παράλληλα, η εντολή: cout << pippin teaches << pippin.getcoursename() << at << pippin.getschool()) << endl; θα τυπώσει: Τέλος, οι εντολές: pippin teaches Philosophy at King's College cout << sam's private telephone is << sam.gettel() << endl; cout << pippin is << pippin.getage() << years old << endl; θα τυπώσουν: sam's private telephone is +30697654321 pippin is 27 years old

2 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Inheritance Καλέσαμε μεθόδους της κλάσης Person και από τα τρία αντικείμενα Κληρονομικότητα κλάσεων! Επαναχρησιμοποίηση κώδικα με απλή επέκταση (code reusability). Έχοντας μερικές κλάσεις με ορισμένα μόνο τα βασικά χαρακτηριστικά, μπορούμε αναλόγως το πρόγραμμα που πρέπει να υλοποιήσουμε να προσθέσουμε ή να τροποποιήσουμε χαρακτηριστικά κατά βούληση, ώστε να επιτύχουμε το επιθυμητό αποτέλεσμα.

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Βιβλιογραφία 1. Εγχειρίδιο της C++, 2η Ελληνική έκδοση, Jesse Liberty, Γκιούρδας. 2. Μάθετε τη C++, 2η Ελληνική έκδοση, Jesse Liberty, Γκιούρδας. 3. Προγραμματισμός με τη γλώσσα C++ Μέρος Α, Αλεβίζος Θ., Έκδοση ΤΕΙ Καβάλας 4. C++ Αντικειμενοστραφής Προγραμματισμός Υπολογιστών Τομαράς Α.,, Εκδόσεις Νέων Τεχνολογιών. 5. Ανακαλύψτε τη γλώσσα C, J. Purdum, Εκδόσεις Δίαυλος. 6. Εισαγωγή στο Συστηματικό Προγραμματισμό και στη γλώσσα C++, Σ. Μπαλτζής, εκδόσεις πανεπιστημίου Ιωαννίνων. 7. C++ From the beginning, Jan Skansholm, Addison Wesley. 8. The design and analysis of computer algorithms, A.V. AHO, J.E. HOPCROFT, J.D. ULLMANN, Addison Wesley 1974. 9. Structure and Interpretation of Computer Programs, H. ABELSON, G.J. SUSSMAN, J. SUSSMAN, MIT Press, Mc Graw Hill Book Company, 1985 10. The art of computer programming, D.E. KNUTH, Addison-Wesley. 2

2 23 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Σημείωμα Αναφοράς Copyright Τεχνολογικό Ίδρυμα Ηπείρου. Ιωάννης Τσούλος. Αντικειμενοστραφής Προγραμματισμός. Έκδοση: 1.0 Άρτα, 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: http://eclass.teiep.gr/courses/comp113/

Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού-Μη Εμπορική Χρήση-Όχι Παράγωγα Έργα 4.0 Διεθνές [1] ή μεταγενέστερη. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, Διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. [1] http://creativecommons.org/licenses/by-nc-nd/4.0/deed.el 2

2 Αντικειμενοστραφής Προγραμματισμός Προχωρημένα θέματα (1/2), Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα Τέλος Ενότητας Επεξεργασία: Ευάγγελος Καρβούνης Άρτα, 2015

2 Τέλος Ενότητας Προχωρημένα θέματα (1/2)