Τεχνολογίες Υλοποίησης Αλγορίθµων

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Τεχνολογίες Υλοποίησης Αλγορίθµων"

Transcript

1 Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών Εισαγωγή στην C / 40

2 Εισαγωγή στην C++ 3 Εννοιες Αντικειµενοστρεφούς Προγραµµατισµού Κλάσεις & Σχεδιασµός Βασισµένος σε Αντικείµενα (Classes & Object-Based Design) Κληρονοµικότητα & Αντικειµενοστρεφής Σχεδιασµός (Inheritance & Object-Oriented Design) Εικονικές Συναρτήσεις (Virtual Functions) Φίλες Συναρτήσεις και Κλάσεις (Friends) Γενικευµένος Σχεδιασµός χρησιµοποιώντας Αρχέτυπα (Generic Design using Templates) 2 / 40

3 Αντικειµενοστρεφής Προγραµµατισµός Αντικειµενοστρεφής vs. οµηµένος/ ιαδικασιακός Προγραµµατισµός Οµοιότητα: ανάλυση ενός σύνθετου συστήµατος (µεγάλο έργο) σε απλούστερα υποσυστήµατα (υποέργα). Θεµελιώδης διαφορά: Πώς γίνεται αυτή η ανάλυση. 3 / 40

4 Αντικειµενοστρεφής Vs ιαδικαστικός ιαδικασιακή ανάλυση: πρώτα το έργο αναλύεται σε αρθρώµατα (modules) κατόπιν ϑα αναζητηθούν οι απαιτούµενες δοµές δεδοµένων Αντικειµενοστρεφής ανάλυση: αντιµετωπίζει το λογισµικό σαν ένα σύνολο καλώς ορισµένων αντικειµένων τα οποία µοντελοποιούν τις οντότητες του έργου αυτά τα αντικείµενα αλληλεπιδρούν µεταξύ τους για να αποτελέσουν ένα σύστηµα λογισµικού η διαδικασιακή ανάλυση ϑα αντιµετωπισθεί αφού το έργο έχει αναλυθεί σε αντικείµενα 4 / 40

5 Αντικείµενο Αντικείµενο: Οντότητα η οποία έχει δοµή και τοπική κατάσταση. Ορίζει λειτουργίες που µπορούν να προσπελάσουν ή να αλλάξουν αυτή την κατάσταση. Αντικειµενοστρεφής προγραµµατισµός (ΑΠ): είναι µια µέθοδος υλοποίησης στην οποία Τα αντικείµενα είναι οι ϑεµελιώδεις δοµικές µονάδες. Κάθε αντικείµενο είναι το στιγµιότυπο ενός τύπου (ή κλάσης). Οι κλάσεις σχετίζονται µεταξύ τους µέσω σχέσεων κληρονοµικότητας. Αντικειµενοστρεφής γλώσσα: (1) Υποστηρίζει αντικείµενα. (2) Απαιτεί τα αντικείµενα να ανήκουν σε κλάσεις (άµεσα ή έµµεσα). (3) Υποστηρίζει την κληρονοµικότητα. 5 / 40

6 Ενθυλάκωση (Data Encapsulation) ή Απόκρυψη (Information hidding) απόκρυψη των λεπτοµερειών υλοποίησης ενός αντικειµένου δεδοµένων από τον έξω κόσµο. Αφαίρεση εδοµένων (Data Abstraction): διαχωρισµός µεταξύ των προδιαγραφών ενός αντικειµένου δεδοµένων και της υλοποίησής του. 6 / 40

7 Τύπος εδοµένων (Data Type) Συλλογή αντικειµένων µαζί µε ένα σύνολο λειτουργιών πάνω σε αυτά τα αντικείµενα. Αφηρηµένος Τύπος εδοµένων ΑΤ (Abstract Data Type): Τύπος εδοµένων οργανωµένος κατά τέτοιο τρόπο έτσι ώστε οι προδιαγραφές των αντικειµένων και οι προδιαγραφές των λειτουργιών των αντικειµένων να αποµονώνονται από την αναπαράσταση των αντικειµένων και την υλοποίηση των λειτουργιών. 7 / 40

8 Κληρονοµικότητα (Inheritance) Μηχανισµός που επιτρέπει την επέκταση της λειτουργικότητας ενός αντικειµένου. Επιτρέπει τη δηµιουργία νέων τύπων µε περιορισµένες ή πιο εκτενείς ιδιότητες σε σχέση µε τον αρχικό τύπο. Ο αρχικός τύπος ονοµάζεται τύπος ϐάσης (base type/object/class) ενώ ο νέος ονοµάζεται παράγωγος (derived). Πολυµορφισµός: Η δυνατότητα χειρισµού διαφορετικών οντοτήτων µε οµοιόµορφο τρόπο. Στην περίπτωση του αντικειµενοστρεφούς προγραγµµατισµού, η δυνατότητα αντικειµένων διαφορετικών κλάσεων (που έχουν πιθανά µεταξύ τους σχέσεις κληρονοµικότητας) να αντιδρούν διαφορετικά στην ίδια λειτουργία. Οταν κάποιες λειτουργίες εφαρµόζονται σε έναν πολυµορφικό τύπο, εκτελείται αυτόµατα εκείνη η λειτουργία η οποία είναι η κατάλληλη για τον συγκεκριµένο τύπο. Στόχος Α-Π που επιτυγχάνεται: επαναχρησιµοποίηση λογισµικού (software reusability). 8 / 40

9 Κλάσεις Κλάση: Μηχανισµός της C++ για τον ορισµό νέων τύπων δεδοµένων. Υποστηρίζει αφαίρεση δεδοµένων, ενθυλάκωση δεδοµένων και κληρονοµικότητα. Παράδειγµα µελέτης: υλοποίηση ενός ΑΤ για ακέραιους πίνακες σε δύο ϕάσεις: (α) Προδιαγραφές και απαιτούµενες λειτουργίες. (ϐ) Αντικειµενοστρεφής Σχεδιασµός. 9 / 40

10 Σχεδιασµός ϐασισµένος σε αντικείµενα Ενα αρχικό σύνολο υποστηριζόµενων λειτουργιών: 1 Πραγµατικό µέγεθος πίνακα. 2 Καταχώρηση (ανάθεση) ενός πίνακα σε άλλον και σύγκριση πινάκων. 3 Ερωτήσεις που αφορούν συγκεκριµένες τιµές στοιχείων: ελάχιστο, µέγιστο, εύρεση. 4 υνατότητα ταξινόµησης των στοιχείων του πίνακα. Επίσης, πρέπει να υποστηρίζονται και οι λειτουργίες του συνήθη τύπου πίνακα: 5 Αρχικός προσδιορισµός µεγέθους του πίνακα (από τον χρήστη). 6 Αρχικοποίηση του πίνακα µε ένα σύνολο τιµών. 7 Αριθµοδείκτης. 8 Ελεγχος ορθότητας του αριθµοδείκτη. 10 / 40

11 Γενική µορφή κλάσης class IntArray public: // public methods (member functions) and fields // comprises the public interface of the class // and can be accessed from any other function // of the program private: // private methods (member functions) and fields // can be accessed only by the member // functions of the class // private implementation and object state storage }; Χρήση κλάσης για ορισµό αντικειµένων: Οι τύποι/αντικείµενα που ορίζονται από τον προγραµµατιστή χρησιµοποιούνται όπως και οι ενσωµατωµένοι τύποι: // a single IntArray class object IntArray myarray; // a pointer to a single IntArray class object IntArray * pmyarray = new IntArray; 11 / 40

12 Συναρτήσεις µέλη (Methods) class IntArray public: int size() const; // member function which does // not modify the class object IntArray& operator=(const IntArray &); bool operator==(const IntArray &) const; bool operator!=(const IntArray &) const; int min() const; int max() const; int find(int) const; void sort(); private: // the private implementation }; 12 / 40

13 Κλήση συνάρτησης µέλους Τελεστής προσπέλασης. (τελεία): χρησιµοποιείται από αντικείµενα της κλάσης. IntArray myarray; int min_val = myarray.min(); Τελεστής προσπέλασης -> ( βέλος ): χρησιµοποιείται από δείκτες σε αντικείµενα της κλάσης. IntArray *pmyarray = &myarray; int max_val = pmyarray->max(); Εφαρµογή Τελεστών Γίνεται µε τον ίδιο τρόπο όπως και στους ενσωµατωµένους τύπους. IntArray myarray1, myarray2;... myarray1 = myarray2; // The compiler translates this to // myarray1.operator=(myarray2);... if (myarray1 == myarray2) // The compiler translates this to // myarray1.operator==(myarray2) /* do something */ } 13 / 40

14 Μεταβλητές µέλη (data members) κλάσης IntArray Το µέγεθος του πίνακα όπως προσδιορίζεται από τον χρήστη. Κατανοµή και αποθήκευση του πίνακα µέλος δεδοµένων τύπου δείκτη για αποθήκευση της διεύθυνσης που επιστρέφει ο τελεστής new. class IntArray public: //... int size() const return asize; } }; private: int asize; int * ia; Παρατήρηση: Μια συνάρτηση µέλους που ορίζεται µέσα σε ορισµό κλάσης ϑεωρείται αυτόµατα ως inline. 14 / 40

15 Αρχικοποίηση αντικειµένων Η C++παρέχει έναν αυτόµατο µηχανισµό για κλάσεις ορισµένες από τον χρήστη. Συνάρτηση κατασκευής (constructor): Ειδική συνάρτηση-µέλος που χρησιµοποιείται για αρχικοποίηση. Ορίζεται από τον προγραµµατιστή. Εχει το ίδιο όνοµα µε αυτό της κλάσης. εν έχει τύπο επιστροφής τιµής. Μπορεί να ορισθεί πολλές ϕορές (µέσω υπερφόρτωσης συναρτήσεων). class IntArray public: IntArray(int sz = DefaultArraySize); IntArray(const int * ar, int sz); IntArray(const IntArray & other); private: static const int DefaultArraySize; //... }; const int IntArray::DefaultArraySize = 12; 15 / 40

16 Η προεπιλεγµένη συνάρτηση κατασκευής IntArray(int sz = DefaultArraySize); // initialises an object of size DefaultArraySize IntArray myarray1; // passes the argument 1000 to the constructor IntArray myarray2(1000); Μια αρχική υλοποίηση της προεπιλεγµένης συνάρτησης κατασκευής // :: class scope operator IntArray::IntArray(int sz) // set the data members asize = sz; ia = new int[asize]; } // initialise the memory for (int i=0; i < asize; ++i) ia[i] = 0; 16 / 40

17 Η δεύτερη συνάρτηση κατασκευής IntArray(const int * array, int sz); // Initialises a new IntArray class object // with a built-in integer array int ia[10] = 0,1,2,3,4,5,6,7,8,9}; IntArray myarray3(ia,10); Υλοποίηση: IntArray::IntArray(int * array, int sz) // set the data members asize = sz; ia = new int[asize]; } // copy the data members for (int i=0; ix < asize; ++i) ia[ix] = array[ix]; 17 / 40

18 Η συνάρτηση κατασκευής αντιγράφου (copy constructor) IntArray(const IntArray & ia); ιαχειρίζεται την αρχικοποίηση ενός αντικειµένου της κλάσης IntArray µε κάποιο άλλο. Ο copy constructor καλείται αυτόµατα: 1 Οταν δηλώνεται µία µεταβλητή και αρχικοποιείται µε την τιµή µιας άλλης. 2 Κατά τη µεταβίβαση ορισµάτων σε συνάρτηση κατ αξία. 3 Κατά την επιστροφή τιµής από συνάρτηση κατ αξία. IntArray myarray4; // equivalent initialisations IntArray A = myarray4; IntArray B(myarray4); Υλοποίηση: // copy constructor IntArray::IntArray(const IntArray & other) asize = other.asize; ia = new int[asize]; for (int i=0; i < asize; ++i) ia[i] = other.ia[i]; } Παρατήρηση: Αν δεν ορίζεται, τότε εκτελείται η προεπιλεγµένη αρχικοποίηση των µελών δεδοµένων (default memberwise initialization). 18 / 40

19 Παράδειγµα µε copy constructor Και οι τρεις συναρτήσεις κατασκευής υλοποιούνται µε παρόµοιο τρόπο. Υπάρχει τρόπος να αποφύγουµε την µη επιθυµητή αναπαραγωγή του ίδιου κώδικα; class IntArray public: //... private: void init(const int * array, int sz); }; void IntArray::init(const int * array, int sz) asize = (sz < 1)? 1 : sz; ia = new int[asize]; } for (int i=0; i < asize; ++i) ia[i] = (!array)? 0 : array[i]; Οι τρεις συναρτήσεις κατασκευής µπορούν να ξαναγραφούν ως εξής: IntArray::IntArray(int sz = DefaultArraySize) init(0, sz); } IntArray::IntArray(const int * ar, int sz) init(ar, sz); } IntArray::IntArray(const IntArray & other) init(other.ia, other.asize); } 19 / 40

20 Συνάρτηση Κατάργησης (destructor) Ειδική συνάρτηση-µέλος που καλείται αυτόµατα όταν τελειώνει η εµβέλεια του αντικειµένου στο πρόγραµµα. Ορίζεται από τον χρήστη. Εχει σαν όνοµα το σύµβολο ακολουθούµενο από το όνοµα της κλάσης. εν έχει τύπο επιστροφής τιµής. class IntArray public: // constructors IntArray(int sz = DefaultArraySize) init(0, sz); } IntArray(const int * ar, int sz) init(ar, sz); } IntArray(const IntArray & other) init(other.ia, other.asize); } // destructor IntArray() delete[] ia; } //... private: void init(const int * array, int sz); //... }; 20 / 40

21 Αριθµοδείκτης Εξειδίκευση του τελεστή αϱιθµοδείκτη ([]) σε σχέση µε τη user-defined κλάση. Ο τελεστής επιστρέφει το συγκεκριµένο στοιχείο µε αναφορά ώστε να είναι δυνατή η τροποποίησή του. Για να είναι δυνατή η κλήση του και σε const στιγµιότυπα του IntArray απαιτείται και µία εκδοχή που ϑα επιστρέφει const αναφορά (µόνο ανάγνωση). Επιτρέπεται η ύπαρξη δύο µεθόδων µε ίδιο όνοµα και ορίσµατα αν η δεύτερη είναι const. #include <cassert> int& IntArray::operator[](int ix) // preprocessor macro to assert a precondition // if false, then a diagnostic message is printed // and the program terminates assert(ix>=0 && ix<size); return _ia[ix]; } // version for const objects const int& IntArray::operator[](int ix) const assert(ix>=0 && ix<size); return _ia[ix]; } 21 / 40

22 Αριθµοδείκτης Καταχώρηση (ανάθεση τιµής) πίνακα: άλλη µια περίπτωση υπερφόρτωσης τελεστή Ο τελεστής ελέγχει µια πιθανή ανάθεση του στιγµιότυπου στον εαυτό του και επιστρέφει το ίδιο το αντικείµενο για να επιτρέπονται αλυσιδωτές αναθέσεις. IntArray& IntArray::operator=(const IntArray & other) if ( this == &other ) // check for assignment to self return *this; } delete[] ia; init(other.ia, other.asize); return *this; // returns the invoking object itself // enables chain assignments Ο έµµεσος δείκτης this Παράδειγµα είκτης που περιέχεται σε κάθε µέλος (συνάρτηση, τελεστή) κλάσης. Αναφέρεται στο αντικείµενο (το δεικτοδοτεί) για το οποίο καλείται η συνάρτηση-µέλος, ή ο τελεστής-µέλος. IntArray myarray1, myarray2; // the returned object *this refers to myarray1 (myarray1 = myarray2 = myarray2).size(); 22 / 40

23 Αντικειµενοστρεφής Σχεδιασµός Η µέχρι τώρα υλοποίηση του IntArray: (1) Υποστηρίζει έλεγχο των ορίων του αριθµοδείκτη. (2) εν υποστηρίζει ταξινοµηµένους πίνακες ιαφορετικές κατηγορίες χρηστών µπορεί να έχουν αντιφατικές απαιτήσεις: π.χ. µία κατηγορία να ϐρίσκει το (2) απολύτως απαραίτητο και ταυτόχρονα δεν ϑέλει την επιβάρυνση που συνεπάγεται το (1). Μια άλλη κατηγορία χρηστών πιστεύει ακριβώς το αντίθετο. Πώς µπορεί η υλοποίησή µας να υποστηρίζει τις διαφορετικές απαιτήσεις διαφόρων χρηστών που ϑέλουν να την χρησιµοποιήσουν; 23 / 40

24 Μια πρώτη προσπάθεια Ανάπτυξη τριών διαφορετικών υλοποιήσεων της κλάσης, αντιγράφοντας το µεγαλύτερο µέρος του κώδικα και τροποποιώντας τον κατάλληλα για να υποστηρίζει ταξινοµηµένους πίνακες. // Unsorted, without range-checking class IntArray... }; // Unsorted, with range-checking class IntArrayRC... }; // Sorted, without range-checking class IntSortedArray... }; 24 / 40

25 Ποια είναι τα µειονεκτήµατα αυτής της λύσης; 1 ιατήρηση τριών υλοποιήσεων πινάκων που περιέχουν ταυτόσηµο το µεγαλύτερο µέρος του κώδικα. Προτίµηση: ένα µοναδικό αντίγραφο του κοινού κώδικα να διαµοιράζεται από τις υπάρχουσες (και µελλοντικές) κλάσεις. 2 Συγγραφή ξεχωριστών συναρτήσεων για οποιαδήποτε λειτουργία πάνω σε αυτούς τους πίνακες. Π.χ.: void process_array(intarray &); void process_array(intarrayrc &); void process_array(intsortedarray &); Προτίµηση: µια µοναδική συνάρτηση που να δέχεται σαν όρισµα τις υπάρχουσες (και µελλοντικές) κλάσεις. 25 / 40

26 Κληρονοµικότητα Ο αντικειµενοστρεφής προγραµµατισµός (στην C++) παρέχει τις εξής λύσεις: 1 Κληρονοµικότητα: όταν µια νέα κλάση (IntArrayRC) κληρονοµεί από µια άλλη, που ονοµάζεται συνήθως κλάση-ϐάσης (IntArray), έχει προσπέλαση στα µέλη δεδοµένων και στις συναρτήσεις-µέλη αυτής της κλάσης-ϐάσης χωρίς να απαιτείται αναπαραγωγή ταυτόσηµου κώδικα. Η νέα κλάση χρειάζεται µόνο να παρέχει εκείνα τα µέλη δεδοµένων και εκείνες τις συναρτήσεις-µέλη που είναι αναγκαίες για την υλοποίηση των επιπρόσθετων λειτουργιών που προσφέρει. 2 Μηχανισµός Εικονικών Συναρτήσεων ( Virtual functions): χειϱίϲεται κλήσεις συναρτήσεων-µελών που συµπεριφέρονται διαφορετικά, εξαρτώµενες από τον πραγµατικό τύπο του αντικειµένου που καλείται στην ιεραρχία κλάσεων/υποκλάσεων (ή τύπων/υποτύπων). 26 / 40

27 Παράδειγµα µε Κληρονοµικότητα Μία υποκλάση (subclass) έχει την ίδια διασύνδεση (interface) µε την κλάση-ϐάσης, η οποία επιτρέπει στην κλάση-ϐάσης και στην υποκλάση να χρησιµοποιούνται εναλλακτικά µέσα σε ένα πρόγραµµα. #include "IntArray.h" void swap(intarray & ia, int i, int j) int tmp = ia[i]; ia[i] = ia[j]; ia[j] = tmp; }... IntArray IA; IntArrayRC IARC; IntSortedArray IAS; string s("non-intarray");... swap(ia,0,10); // ok, IA is of type IntArray swap(iarc,0,10); // ok, IARC is a subtype of IntArray swap(ias,0,10); // ok, IAS is a subtype of IntArray swap(s,0,10); // error, string is not a subtype... // of IntArray 27 / 40

28 Οµως,... Ο τελεστής αριθµοδείκτη που καλείται από την swap πρέπει να αλλάζει δυναµικά σε κάθε κλήση και πρέπει να καθορίζεται από τον πραγµατικό τύπο του πίνακα του οποίου τα στοιχεία ανταλλάσονται. Αυτό επιτυγχάνεται µε τη δήλωση αυτού του τελεστή ως εικονικού ( virtual ). virtual int& operator[](int ix) const; Το ίδιο µπορεί να γίνει και µε κάθε άλλη συνάρτηση-µέλος η οποία είναι εξαρτώµενη από τύπους (type-dependent), π.χ. min(), max(), find(). 28 / 40

29 Πώς προετοιµάζουµε µια κλάση για κληρονοµικότητα; Οι συντακτικές αλλαγές είναι ελάχιστες: ιαχωρισµός συναρτήσεων και µεταβλητών της κλάσης-ϐάσης από αυτών που µπορεί να διαφοροποιούνται στις παράγωγες κλάσεις. Προσδιορισµός συναρτήσεων που πρέπει να δηλωθούν ως εικονικές. Σηµαντική αλλαγή, ο σχεδιασµός της κλάσης-ϐάσης: ηµιουργία ενός προστατευµένου (protected) τµήµατος για εκείνα τα µέλη δεδοµένων και συναρτήσεις-µέλη τα οποία είναι µη διαθέσιµα στο γενικό πρόγραµµα, αλλά γίνονται διαθέσιµα στις παράγωγες κλάσεις. Οτιδήποτε συµπεριληφθεί µέσα στο ιδιωτικό (private) τµήµα είναι διαθέσιµο µόνο στην κλάση-ϐάσης και σε καµία παράγωγη κλάση. Προσδιορισµός των συναρτήσεων-µελών που είναι εξαρτηµένες από τύπους και δήλωσή τους ως εικονικές ( virtual ). 29 / 40

30 Παράδειγµα class IntArray public: // constructors IntArray(int sz = DefaultArraySize) init(0,sz); } IntArray(const int * ar, int sz) init(ar,sz); } IntArray(const IntArray & other) init(other.ia,other.asize); } // virtual destructor virtual IntArray() delete[] ia; } IntArray& operator=(const IntArray&); int size() const return asize; } bool operator==(const IntArray&) const; bool operator!=(const IntArray&) const; // no range checking virtual int& operator[](int i) const return ia[i];} virtual void sort(int, int); virtual int find(int) const; virtual int min() const; virtual int max() const; protected: void init(const int*, int); static const int DefaultArraySize = 12; int asize; int * ia; }; 30 / 40

31 Τι πρέπει να κάνουµε για τις παράγωγες κλάσεις; Να τις δηλώσουµε ως παράγωγες από την κλάση-ϐάσης. Να παρέχουµε τους ορισµούς των συναρτήσεων-µελών που έχουν δηλωθεί ως εικονικές στην κλάση-ϐάση. Να παρέχουµε τις δικές τους συναρτήσεις κατασκευής (για όποια νέα µέλη προσθέτουν), επεκτείνοντας τις συναρτήσεις κατασκευής της κλάσης-ϐάσης που κληρονοµούνται. Συναρτήσεις κατασκευής: Οι συναρτήσεις κατασκευής καλούνται αυτόµατα για όλη την ιεραρχία αρχίζοντας από την κλάση που ϐρίσκεται στη ϱίζα του δένδρου κληρονοµικότητας. Κάθε παράγωγη κλάση αρκεί εποµένως να αρχικοποιεί µόνο τα πεδία που προσθέτει. Οι συναρτήσεις κατάργησης καλούνται αυτόµατα µε την αντίστροφη σειρά. Απαιτείται ένας τρόπος για να µεταβιβάζονται τα ορίσµατα στις συναρτήσεις κατασκευής της κλάσης-ϐάσης αν αυτό είναι αναγκαίο. Παράδειγµα: Πώς µεταβιβάζουµε το IA και το 7 στη συνάρτηση κατασκευής της κλάσης-ϐάσης IntArray; int IA[7] = 0,12,35,2,3,12,81}; IntArrayRC IARC(IA,7); 31 / 40

32 Είδη Πρόσβασης Οι παράγωγες κλάσεις έχουν πρόσβαση µόνο στα non-private µέλη της ϐάσης-κλάσης. Πρόσβαση public protected private κλάση ϐάση ναι ναι ναι παράγωγη κλάση ναι ναι όχι διαφορετικά ναι όχι όχι 32 / 40

33 Παράδειγµα // IntArrayRC.h - part 1 #ifndef IntArrayRC_H #define IntArrayRC_H #include "IntArray.h" #include <cassert> class IntArrayRC : public IntArray public: IntArrayRC(int sz = DefaultArraySize); IntArrayRC(const int *array, int array_size); IntArrayRC(const IntArrayRC &other); virtual int& operator[](int) const; private: void check_range(int i) const assert(i >= 0 && i < asize); } }; 33 / 40

34 Παράδειγµα // IntArrayRC.h - part 2 int& IntArrayRC::operator[](int index) check_range(index); return ia[index]; } // portion after : is called member initialisation list // it provides the mechanism by which the arguments are // passed to the IntArray constructor IntArrayRC::IntArrayRC(int sz) : IntArray(sz) } IntArrayRC::IntArrayRC(const int * iar, int sz) : IntArray(iar, sz) } IntArrayRC::IntArrayRC(const IntArrayRC &other) : IntArray(other.ia, other.asize) } // destructor is not provided, because the derived class // doesn t introduce any data member requiring destruction #endif 34 / 40

35 Είσοδος/ Εξοδος Η είσοδος/έξοδος ορίζεται µε υπερφόρτωση των τελεστών << και >>. Επειδή το πρώτο όρισµα αυτών των τελεστών πρέπει να είναι το ϱεύµα εισόδου ή εξόδου (λόγω του τρόπου κλήσης τους), δεν µπορούν να είναι µέθοδοι της κλάσης αλλά πρέπει να είναι εξωτερικές συναρτήσεις. Πρέπει να επιστρέφουν το ϱεύµα εισόδου/εξόδου ώστε να είναι δυνατή η εκτύπωση πολύπλοκων παραστάσεων. ostream &operator<<(ostream &os, const IntArray &a) for (int i = 0; i << a.size(); ++i) os << a[i] << " "; return os; }... IntArray IA; cout << "Array: " << IA << "\n"; 35 / 40

36 Φίλες Συναρτήσεις και Κλάσεις Μερικές ϕορές µπορεί να ϑέλουµε να επιτρέψουµε την προσπέλαση των ιδιωτικών µελών (δεδοµένα, συναρτήσεις) µιας κλάσης από άλλες κλάσεις ή συναρτήσεις. Αυτό µπορεί να επιτευχθεί δηλώνοντας αυτές τις κλάσεις ή συναρτήσεις ως ϕίλες ( friends). 36 / 40

37 Παράδειγµα class ClassOne friend ClassTwo; friend void set_something(classone &, int &); //... private: int i; int& foo(const int &); }; class ClassTwo; //... ClassTwo(int & z) ClassOne::foo(z)}; //... }; void set_something(classone & Obj, int & x) //... Obj.i = defaultvalue; //... } 37 / 40

38 Γενικευµένος Σχεδιασµός µε Αρχέτυπα template <typename elemtype> class Array public: Array(int sz = DefaultArraySize) init(0, sz); } Array(const elemtype *ar, int sz) init(ar, sz); } Array(const Array & other) init(other.ia, other.asize); } virtual Array() delete[] ia; } Array& operator=(const Array &); int size() const return asize; } virtual elemtype& operator[](int i) const return ia[i];} virtual void sort(int, int); virtual int find(const elemtype &) const; virtual elemtype min() const; virtual elemtype max() const; protected: void init(const elemtype *, int); static const int DefaultArraySize = 12; int asize; elemtype * ia; }; 38 / 40

39 Παράδειγµα // ArrayRC.h #ifndef ARRAYRC_H #define ARRAYRC_H #include "Array.h" template <typename elemtype> class ArrayRC : public Array<elemType> public: ArrayRC(int sz = DefaultArraySize) : Array<elemType>(sz) } ArrayRC(const ArrayRC & r) : Array<elemType>(r) } ArrayRC(const elemtype *ar, int sz) : Array<elemType>(ar, sz) } }; elemtype& operator[](int i); const elemtype& operator[](int i) const; #endif 39 / 40

40 Παράδειγµα // ArrayRC.C #include "ArrayRC.h" #include "Array.C" #include <cassert> template <typename elemtype> elemtype& ArrayRC<elemType>::operator[](int i) assert( i >= 0 && i < asize ); return ia[i]; } template <typename elemtype> const elemtype& ArrayRC<elemType>::operator[](int i) const assert( i >= 0 && i < asize ); return ia[i]; } 40 / 40

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Εισαγωγή στην C++ - 3 1 / 47 Αδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

Διαβάστε περισσότερα

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται

Διαβάστε περισσότερα

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

Διαβάστε περισσότερα

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: είκτες στη C++ Οι τελεστές new και delete Destructors Ορισµός τελεστών κλάσεων Ο δείκτης this ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java

Διαβάστε περισσότερα

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

Αντικειμενοστραφής Προγραμματισμός Κλάσεις Αντικειμενοστραφής Προγραμματισμός Κλάσεις-Αντικείμενα Ένα παράδειγμα Συναρτήσεις κατασκευής (Constructors) Συνάρτηση καταστροφής (Destructor) Συναρτήσεις πρόσβασης (Access Functions) Συνάρτηση

Διαβάστε περισσότερα

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?

Διαβάστε περισσότερα

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Deep/Shallow copies H αναγκαιότητα των κατασκευαστών αντιγραφής Ορισμός και χρήση κατασκευαστών αντιγραφής Τελευταία ενημέρωση:

Διαβάστε περισσότερα

(Διαφάνειες Νίκου Βιδάκη)

(Διαφάνειες Νίκου Βιδάκη) (Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό

Διαβάστε περισσότερα

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες: Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 3 Java Classes Java Objects

Διαβάστε περισσότερα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

Διαβάστε περισσότερα

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών ΜΟΡΥΕ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Διαδικασιακός ή Διαδικαστικός (Procedural)

Διαβάστε περισσότερα

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string 12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string Aλφαριθµητικά της C int main() const int max=80; char str[max); //κάθε char δεσµεύει

Διαβάστε περισσότερα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 9η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 6: C++ ΚΛΑΣΕΙΣ, ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ, ΠΟΛΥΜΟΡΦΙΣΜΟΣ Κλάσεις ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Τάξεις

Διαβάστε περισσότερα

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 7: C++ TEMPLATES, ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ, ΕΞΑΙΡΕΣΕΙΣ Υπερφόρτωση Τελεστών ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ

Διαβάστε περισσότερα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα τοποθετούνται

Διαβάστε περισσότερα

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση

Διαβάστε περισσότερα

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα)

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ηµιουργία και χειρισµός LIFO λιστών µεταβλητού µήκους µε στοιχεία ακεραίους αριθµούς. Γενίκευση για χειρισµό λιστών πραγµατικών

Διαβάστε περισσότερα

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση

Διαβάστε περισσότερα

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές

Διαβάστε περισσότερα

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης 3 Φεβρουαρίου 2013 1 Ομάδα Α - Ερωτήσεις Γενικών Γνώσεων 1. (ΕΓΓ.155) Τι είναι το αντικείμενο και ποια τα χαρακτηριστικά του; Περιγράψτε το

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Διαφορές Java και C++ ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΙΑΦΟΡΕΣ JAVA C++ Η

Διαβάστε περισσότερα

Ενδεικτική περιγραφή μαθήματος

Ενδεικτική περιγραφή μαθήματος ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή. Ο Bjarne Stroustrup, εργαζόμενος στα εργαστήρια

Διαβάστε περισσότερα

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα)

Διαβάστε περισσότερα

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Υπερφόρτωση, keywords CONST, STATIC, FRIEND ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) Τι θα συζητήσουμε σήμερα Υπερφόρτωση Συναρτήσεων Τελεστών CONST αντικείμενα, μεταβλητές και συναρτήσεις

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό με C++

Εισαγωγή στον Προγραμματισμό με C++ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό με C++ Ενότητα # 9: Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό Κωνσταντίνος Κουκουλέτσος Τμήμα

Διαβάστε περισσότερα

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT = Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Δεκέμβριος 2018 1/18 = 2/18 = 1 αντικειμένων Μέθοδοι αντιγράφου (copy constructor) Κατασκευή μέσω

Διαβάστε περισσότερα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 9η 2 Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

Διαβάστε περισσότερα

Κλάσεις και αντικείμενα #include <iostream.h<

Κλάσεις και αντικείμενα #include <iostream.h< Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void

Διαβάστε περισσότερα

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές στο χώρο

Διαβάστε περισσότερα

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5 Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών

Διαβάστε περισσότερα

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23 Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 6: C++ ΚΛΑΣΕΙΣ, ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ, ΠΟΛΥΜΟΡΦΙΣΜΟΣ Κληρονομικότητα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

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

Αντικειµενοστραφής Προγραµµατισµός Κλάσεις Αντικειµενοστραφής Προγραµµατισµός Κλάσεις Αντικείµενα Ιεραρχία κλάσεων Κλάσεις. Ιδιότητες Συµπεριφορά Ιδιότητες (Μεταβλητές) Συµπεριφορά (Μέθοδοι) Κληρονοµικότητα Μέθοδοι επικάλυψης Η χρήση του

Διαβάστε περισσότερα

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

ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) 1 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης CreativeCommons.

Διαβάστε περισσότερα

2.1 Αντικειµενοστρεφής προγραµµατισµός

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( ) ΤΕΛΕΣΤΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τι είναι οι τελεστές Χρήση τελεστών Υπερφόρτωση τελεστών Chain-linking Τελεστών Τελευταία ενημέρωση: Ιούνιος 2013 Εισαγωγή - 2 Τελεστής

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 7: C++ TEMPLATES, ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ, ΕΞΑΙΡΕΣΕΙΣ Templates ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ! Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Σεπτεμβρίου 2011. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Έλεγχος ισότητας για Strings: Διαβάζουμε το String option και θέλουμε ένα loop να συνεχίσει

Διαβάστε περισσότερα

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος ΠΑΡΑ ΕΙΓΜΑ δυναµικής δέσµευσης και αποδέσµευσης µνήµης στη C++ µέσω των new και delete. // create.cpp #include using namespace std; class values public: values() : value1(0), value2(0) count++;

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 1: Αντικειμενοστραφής Προγραμματισμός Εισαγωγή OBJECT-ORIENTED PROGRAMMING ΔΙΔΑΣΚΟΝΤΕΣ: Iωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Εμβέλεια Μεταβλητών Εμβέλεια = το τμήμα του προγράμματος στο οποίο έχει ισχύ ή είναι ορατή η μεταβλητή.

Διαβάστε περισσότερα

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE) EPL 603 TOPICS IN SOFTWARE ENGINEERING Lab 5: Component Adaptation Environment (COPE) Performing Static Analysis 1 Class Name: The fully qualified name of the specific class Type: The type of the class

Διαβάστε περισσότερα

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 6η: Ερωτήσεις 2 Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ

Διαβάστε περισσότερα

Περιεχόμενα. Πρόλογος... 17

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 6: C++ ΚΛΑΣΕΙΣ, ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ, ΠΟΛΥΜΟΡΦΙΣΜΟΣ Πολυμορφισμός ΔΙΔΑΣΚΟΝΤΕΣ:Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

Υπερφόρτωση Τελεστών

Υπερφόρτωση Τελεστών Υπερφόρτωση Τελεστών Υπερφόρτωση του τελεστή ανάθεσης τιμής (=) Υπερφόρτωση των αριθμητικών τελεστών (+, -, *, /) Υπερφόρτωση των αριθμητικών τελεστών ανάθεσης (+=, -=, *=, /=) Υπερφόρτωση των συσχετιστικών

Διαβάστε περισσότερα

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα Αντικειµενοστραφής Προγραµµατισµός Αντικείµενα Ιεραρχία κλάσεων. Ιδιότητες Συµπεριφορά Ιδιότητες (Μεταβλητές) Συµπεριφορά (Μέθοδοι) Κληρονοµικότητα Μέθοδοι επικάλυψης Η χρήση του this και του super Αντικειµενοστραφής

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Εισαγωγή στην C++ ΔΙΔΑΣΚΟΝΤΕΣ:Iωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής H Γλώσσα C++ ΙΣΤΟΡΙΑ 1967:

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 Constructors (Κατασκευαστές) Ειδικός τύπος μεθόδων που δημιουργούν αντικείμενα μιας κλάσης και: Εκτελούνται κατά την αρχικοποίηση των αντικειμένων

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

Διαβάστε περισσότερα

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Μηχανισµός υλοποίησης των σχέσεων γενίκευσης/εξειδίκευσης µεταξύ κλάσεων Η σχέση εξειδίκευσης «υποκλάση-της» (subclass-of)είναι γνωστή σαν σχέση «είναι ένα» (isa) ή «είναι ένα είδος» (ako:

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6 Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:

Διαβάστε περισσότερα

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ! Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Φεβρουαρίου 2010. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 17η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προσθήκη ελέγχου ορίων σε πίνακες χρησιμοποιώντας σχεδιότυπα τάξεων

Διαβάστε περισσότερα

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

02 Αντικειμενοστρεφής Προγραμματισμός 02 Αντικειμενοστρεφής Προγραμματισμός Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Αντικειμενοστρέφεια Στον προγραμματισμό object

Διαβάστε περισσότερα

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)? Θέμα 1. Γράψτε τον κώδικα ενός header file που να περιέχει: 1) Ένα macro με όνομα divides που, αν του μεταβιβάσουμε δύο ακέραιους αριθμούς επιστρέφει 1 αν ο πρώτος αριθμός διαιρεί τον δεύτερο, αλλιώς,

Διαβάστε περισσότερα

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης Δοµές Δεδοµένων 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων Ε. Μαρκάκης Περίληψη Χρήση αναδροµικών εξισώσεων στην ανάλυση αλγορίθµων Αφηρηµένοι τύποι δεδοµένων Συλλογές στοιχείων Στοίβα

Διαβάστε περισσότερα

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ http://courses.softlab.ntua.gr/softeng/ ιδάσκοντες: (nickie@softlab.ntua.gr) Βασίλης Βεσκούκης (bxb@softlab.ntua.gr) Γλώσσες Προγραµµατισµού και Ανάπτυξη Συστηµάτων Λογισµικού ΤΛ

Διαβάστε περισσότερα

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα κληρονοµικότητα Παύλος Εφραιµίδης 1 ιεραρχίες κλάσεων Στην (και γενικότερα στον αντικειµενοστρεφή προγραµµατισµό) µπορεί από µία κλάση να δηµιουργηθεί µια νέα κλάση απόγονος που κληρονοµεί όλα τα χαρακτηριστικά

Διαβάστε περισσότερα

Βασικά της γλώσσας JAVA

Βασικά της γλώσσας JAVA 17 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

17TimeThis.h function returns reference pointer to same object { return *this; }

17TimeThis.h function returns reference pointer to same object { return *this; } Προαπαιτούµενη Κάθε οµάδα θα πρέπει να εµπλουτίσει το ίδιο πρόγραµµα, που έκανε την προηγούµενη φορά, προσθέτοντας στην κλάση του έναν ή περισσότερους υπερφορτωµένους τελεστές (όπως , ++, +,-,+=..)

Διαβάστε περισσότερα

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

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Πίνακες & Δείκτες ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πίνακες Πίνακες Τα στοιχεία

Διαβάστε περισσότερα

Ειδικά Θέματα Προγραμματισμού

Ειδικά Θέματα Προγραμματισμού Ειδικά Θέματα Προγραμματισμού Ενότητα 2: Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

Δυναμική μνήμη με πίνακες και λίστες

Δυναμική μνήμη με πίνακες και λίστες Δυναμική μνήμη με πίνακες και λίστες Ατζέντα ονομάτων Οι πίνακες βοηθάνε στην εύκολη προσπέλαση, στην σειριοποίηση των δεδομένων για αποθήκευση ή μετάδοση. Απαιτούν ωστόσο είτε προκαταβολική δέσμευση μνήμης

Διαβάστε περισσότερα

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό 2013-14 Διδάσκων: Γεώργιος Παπαϊωάννου Μονογραφή επιτηρητή: Στοιχεία Φοιτητή (συμπληρώνεται από το φοιτητή) Όνομα: Αίθουσα/αμφιθέατρο:

Διαβάστε περισσότερα

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης Αντικειµενοστραφής Σχεδίαση Αντώνης Καραγεώργος Τµήµα Μηχανικών Η/Υ και ικτύων Πανεπιστήµιο Θεσσαλίας karageorgos@inf.uth.gr Μέθοδοι Στα πρώτα στάδια της γράφουµε µόνο τα ονόµατα των µεθόδων Γράφουµε τις

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13 Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις

Διαβάστε περισσότερα

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

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

Διαβάστε περισσότερα

Wrapper Classes, Abstract Classes and Interfaces

Wrapper Classes, Abstract Classes and Interfaces Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3 1 Κανόνες Ομαλής Λειτουργίας Ερχόμαστε στην ώρα μας Δεν καπνίζουμε και τρώμε εντός της αίθουσας Επιτρέπετε το

Διαβάστε περισσότερα

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

public void printstatement() { System.out.println(Employee:  + name +  with salary:  + salary); Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Δομές Ελέγχου ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές Ελέγχου Εισαγωγή Πριν

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο

Διαβάστε περισσότερα

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής Στοίβες - Ουρές Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής οµές εδοµένων 1 Στοίβα (stack) οµή τύπουlifo: Last In - First Out (τελευταία εισαγωγή πρώτη εξαγωγή) Περιορισµένος

Διαβάστε περισσότερα

Τι είναι κλάση Κλάση

Τι είναι κλάση Κλάση 35 Τι είναι κλάση Κλάση είναι μια συλλογή από μεταβλητές. Αλλιώς είναι ένα σύνολο από: δεδομένα που δηλώνουν τα χαρακτηριστικά της κλάσης (τι είναι) και συναρτήσεις που προδιαγράφουν την συμπεριφορά της

Διαβάστε περισσότερα

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1 Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors Μαθήματα από το lab Ένα πρόγραμμα αποτελείται από διάφορες κλάσεις και αντικείμενα αυτών των κλάσεων. Μία από τις κλάσεις

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 16/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Τύποι της Java Primitives vs References Οι πρωταρχικοί

Διαβάστε περισσότερα

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams CONSTRUCTORS DESTRUCTORS Η κλάση mystring class mystring private: char s[100]; public: char *GetString(); void SetString(char

Διαβάστε περισσότερα

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

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

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Επέκταση κλάσεων στη C++ Τροποποίηση μεθόδων (method overriding) Κληρονομικότητα και κατασκευαστές, καταστροφείς,

Διαβάστε περισσότερα

Προγραµµατιστικές τεχνικές

Προγραµµατιστικές τεχνικές Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Προγραµµατιστικές τεχνικές Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Ρωµύλος Κορακίτης

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

Συναρτήσεις και Πίνακες

Συναρτήσεις και Πίνακες Συναρτήσεις και Πίνακες Συναρτήσεις καθιερωμένης βιβλιοθήκης της C++ Συναρτήσεις οριζόμενες από τον χρήστη Μεταβίβαση κατ αξία Συναρτήσεις void και λογικές συναρτήσεις Μεταβίβαση κατ αναφορά Επιστροφή

Διαβάστε περισσότερα