Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 4: Εισαγωγή στις κλάσεις Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Εισαγωγή στις Κλάσεις (ή Τάξεις ή Κατηγορίες) Διάλεξη 4 Βαγγέλης Οικονόμου
Εισαγωγή στις Κλάσεις Αντικειμενοστραφής Προγραμματισμός Τι είναι μια κλάση Τι είναι αντικείμενο μιας κλάσης Ιδιωτικά και δημόσια δεδομένα Συναρτήσεις πρόσβασης και Βοηθητικές Συναρτήσεις Συναρτήσεις Δημιουργίας και Καταστροφής
Αντικειμενοστραφής Προγραμματισμός Τι είναι ο αντικειμενοστραφής προγραμματισμός (Α.Π.); Είδος προγραμματισμού όπως ο δομημένος προγραμματισμός (Δ.Π.) Βασικό συστατικό Δ.Π.: Συναρτήσεις Βασικό συστατικό Α.Π.: Αντικείμενα Παράδειγμα: αντικείμενο για ένα υπάλληλο, για ένα αρχείο κτλ. Κάθε αντικείμενο περιέχει σχετικά μεταξύ τους δεδομένα (μεταβλητές), ωστόσο περιέχει και ένα σύνολο πράξεων (συναρτήσεις)
Κλάσεις (ή Τάξεις ή Κατηγορίες) Κλάση: το βασικό εργαλείο του Α.Π. Αντικείμενο: στιγμιότυπο μιας κλάσης Παράδειγμα: Το αρχιτεκτονικό σχέδιο ενός σπιτιού αποτελεί την κλάση Η υλοποίηση (το κτίσιμο) ενός σπιτιού αποτελεί το αντικείμενο
Κλάσεις (ή Τάξεις) Ένα αντικέιμενο αποτελεί μια υλοποίηση ενός αντικειμένου του πραγματικού κόσμου Οταν δημιουργούμε ένα πρόγραμμα χρησιμοποιούμε μεταβλητές για να αποθηκεύσουμε πληροφορίες που αφορούν αντικείμενα του πραγματικού κόσμου (ένα πρόγραμμα αποτελεί μια προσομοίωση ενός συστήματος του πραγματικού κόσμου) Στον Α.Π. η προσοχή μας στρέφεται στα αντικείμενα που αποτελούν το σύστημα και στις πράξεις (ή ενέργειες) που πρέπει να εκτελέσουμε πάνω στα αντικείμενα Παράδειγμα: Αντικείμενο: αρχείο Πράξεις: εκτύπωση, εμφάνιση, διαγραφή, τροποποίηση
Κλάσεις (ή Τάξεις) Μια κλάση, και κατά συνέπεια και ένα αντικείμενο, αποτελείται από μεταβλητές και συναρτήσεις Οι συναρτήσεις αναφέρονται ως μέθοδοι και οι μεταβλητές ως δεδομένα class class_name{ int data_member; void show_data(int); }; //όνομα κλάσης //μέλος δεδομένων //Συνάρτηση μέλος //(ή μέθοδος)
Κλάσεις (ή Τάξεις) class employee{ public: char name[50]; int empl_id; float salary; void show_employee() { cout<< Name: <<name<<endl; cout<< ID: <<empl_id<<endl; cout<< Salary: <<salary<<endl; } };
Κλάσεις (ή Τάξεις) Μετά τον ορισμό της κλάσης μας σε ένα πρόγραμμα μπορούμε να δηλώσουμε αντικέιμενα αυτής της τάξης ως εξής: employee worker, boss;
Κλάσεις (ή Τάξεις) int main() { employee worker,boss; strcpy(worker.name, Vangelis ); worker.empl_id = 1; worker.salary = 1000; strcpy(boss.name, Thanasis ); boss.empl_id = 2; boss.salary = 2000; worker.show_employee(); boss.show_employee(); return 0; }
Δήλωση μεθόδων εκτός της κλάσης Στο προηγούμενο παράδειγμα η μέθοδος ορίστηκε μέσα στην κλάση για αυτό καλείται και inline μέθοδος (ή συνάρτηση) Καθώς οι μέθοδοι «μεγαλώνουν» ο ορισμός της μεθόδου μέσα στην κλάση γίνεται προβληματικός void employee::show_employee() { cout<< Name: <<name<<endl; cout<< ID: <<empl_id<<endl; cout<< Salary: <<salary<<endl; }
Ιδιωτικά και Δημόσια Μέλη Στο προηγούμενο παράδειγμα είδαμε την ετικέτα public (δημόσιο). public: Δημόσιο μέλος, έχουν πρόσβαση όλοι private: Ιδιωτικό μέλος, έχουν προσβαση μόνο τα μέλη της τάξης Σε μια κλάση μπορεί να έχουμε μέλη που χρησιμοποιούνται εσωτερικά στην κλάση για να γίνει κάποια επεξεργασία αλλά το ίδιο το προγραμμα δε χρειάζεται να τις προσπελάσει
Ιδιωτικά και Δημόσια Μέλη class some_class{ public: int some_variable; void init_private(int a, float b); void show_data(); private: int key_value; float key_number; }; 1. Πως γίνεται η απόδοση τιμής στο μέλος δεδομένων some_variable; 2. Πως γίνεται η απόδοση τιμής στο μέλος δεδομένων key_value; 3. Γιατί χρησιμοποιούμε την συνάρτηση init_private; 4. ΤΕΛΕΣΤΗΣ ΤΕΛΕΙΑΣ
Ιδιωτικά και Δημόσια Μέλη Κατά κανόνα, πρέπει να προστατεύουμε τα μέλη δεδομένων μιας κλάσης από την άμεση προσπέλαση τους από το πρόγραμμα, κάνοντας τα ιδιωτικά. Έτσι, το πρόγραμμα θα πρέπει να καλεί μια μέθοδο της κλάσης για να αποδώσει τιμές Εμποδίζοντας το πρόγραμμα να αποδίδει τιμές απευθείας στα μέλη δεδομένων μιας κλάσης εξασφαλίζουμε ότι στα μέλη αυτά δίνονται επιτρεπτές τιμές
Ιδιωτικά και Δημόσια Μέλη class employee{ public: char name[60]; void assign_salary(float b); void assign_id(int g); private: float salary; int emp_id; }; 1. Τι τιμές πρέπει να έχει το μέλος salary; 2. Τι τιμές πρέπει να έχει το μέλος emp_id;
Απόκρυψη Πληροφορίας Όπως είδαμε μια κλάση περιέχει δεδομένα και μεθόδους Για να την χρησιμοποιήσουμε το πρόγραμμα μας αρκεί να ξέρει τις πληροφορίες που αποθηκεύονται στην κλάση. Το πρόγραμμα μας αρκεί να ξέρει το όνομα της μεθόδου, δε χρειάζεται να ξέρει πως λειτουργεί η μέθοδος Απόκρυψη πληροφοριών είναι η διαδικασία με την οποία κάνουμε διαθέσιμες στο πρόγραμμα μας μόνο τις ελάχιστες πληροφορίες μια κλάσης, τις οποίες χρειάζεται το πρόγραμμα για να λειτουργήσει.
Μέθοδοι Πρόσβασης Όπως είδαμε για να αποκτήσουμε πρόσβαση σε ένα ιδιωτικό μέλος μια κλάσης πρέπει να χρησιμοποιήσουμε μια μέθοδο που ανήκει στην κλάση Οι μέθοδοι μια κλασης μπορούν να χωριστούν σε κατηγορίες ανάλογα με τις λειτουργίες που εκτελούν μέσα στην κλάση Μια σημαντική κατηγορία μεθόδων είναι οι μέθοδοι πρόσβασης Μας δίνουν την δυνατότητα να αποδώσουμε μια τιμή σε ένα ιδιωτικό μέλος, αλλά και να λάβουμε την τιμή του για επιπλέον επεξεργασία
Μέθοδοι Πρόσβασης class mycounter{ public: int get_count(); void set_count(int a); private: int count; } int mycounter::get_count() { return count; } void mycounter::set_count(int a) { count = a; } int main() { mycounter c1; c1.set_count(0); cout<<c1.get_count()<<endl; return 0; }
Συναρτήσεις Δημιουργία και Καταστροφής Όταν δηλώνουμε μια μεταβλητή αρκετές φορές της αποδίδουμε και αρχική τιμή (int x=5;) Θα επιθυμούσαμε η ίδια λειτουργία να συμβαίνει και κατά την δημιουργία ενός αντικειμένου Κατά την δημιουργία ενός αντικειμένου να αρχικοποιούμε τα μέλη δεδομένων Συναρτήσεις Δημιουργίας και Καταστροφής
Μέθοδοι Δημιουργία και Καταστροφής Συναρτήση Δημιουργίας: έχει το ίδιο όνομα με την κλάση και καλείται μόνο μια φορά όταν δημιουργείται το αντικέιμενο Συνάρτηση Καταστροφής: έχει το ίδιο όνομα με την κλάση όπου στην αρχή του τοποθετούμε το σύμβολο ~. Καλείται όταν καταστρέφεται το αντικέιμενο.
Μέθοδοι Δημιουργία και Καταστροφής class mycounter{ public: int get_count(); void set_count(int a); mycounter(); ~mycounter(); private: int count; }; mycounter::mycounter() { count = 0; } mycounter::~mycounter() { cout<< Sinartisi Katastrofis ; } int main() { mycounter c1; cout<<c1.get_count()<<endl; c1.set_count(10); cout<<c1.get_count()<<endl; return 0; }
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό. Οι όροι χρήσης των έργων τρίτων επεξηγούνται στη διαφάνεια «Επεξήγηση όρων χρήσης έργων τρίτων». Τα έργα για τα οποία έχει ζητηθεί άδεια αναφέρονται στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/από-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.
Επεξήγηση όρων χρήσης έργων τρίτων διαθέσιμο με άδεια CC-BY διαθέσιμο με άδεια CC-BY-SA διαθέσιμο με άδεια CC-BY-ND διαθέσιμο με άδεια CC-BY-NC διαθέσιμο με άδεια CC-BY-NC-SA διαθέσιμο με άδεια CC-BY-NC-ND διαθέσιμο με άδεια CC0 Public Domain διαθέσιμο ως κοινό κτήμα χωρίς σήμανση Δεν επιτρέπεται η επαναχρησιμοποίηση του έργου, παρά μόνο εάν ζητηθεί εκ νέου άδεια από το δημιουργό. Επιτρέπεται η επαναχρησιμοποίηση του έργου και η δημιουργία παραγώγων αυτού με απλή αναφορά του δημιουργού. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού, και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η δημιουργία παραγώγων του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Δεν επιτρέπεται η εμπορική χρήση του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου και η δημιουργία παραγώγων του. Επιτρέπεται η επαναχρησιμοποίηση του έργου, η δημιουργία παραγώγων αυτού και η εμπορική του χρήση, χωρίς αναφορά του δημιουργού. Επιτρέπεται η επαναχρησιμοποίηση του έργου, η δημιουργία παραγώγων αυτού και η εμπορική του χρήση, χωρίς αναφορά του δημιουργού. Συνήθως δεν επιτρέπεται η επαναχρησιμοποίηση του έργου.
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.