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

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

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

Transcript

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

2 ΑΝΑΚΕΦΑΛΑΙΩΣΗ

3 Θεματολόγιο Κληρονομικότητα Παράδειγμα Κληρονομικότητα Βελτιωμένο Παράδειγμα Ενθυλάκωση : public private - protected πεδία Ενθυλάκωση : public private - protected κληρονομικότητα Ανάθεση αντικειμένων και κληρονομικότητα Ανάθεση διευθύνσεων αντικειμένων σε δείκτες και κληρονομικότητα Πέρασμα παραμέτρων και κληρονομικότητα Άλλα θέματα

4 Κληρονομικότητα Έχουμε μια Βασική Κλάση (Base Class) Β, με κάποια πεδία και μεθόδους. Βασική Κλάση B data x method P Θέλουμε να δημιουργήσουμε μια νέα κλάση D η οποία να έχει όλα τα χαρακτηριστικά της Β, αλλά και κάποια επιπλέον. Παράγωγη Κλάση D data y Αντί να ξαναγράψουμε τον ίδιο κώδικα δημιουργούμε μια Παράγωγη Κλάση (Derivative Class) D, η οποία κληρονομεί όλη τη λειτουργικότητα της Βασικής Κλάσης Β και στην οποία προσθέτουμε τα νέα πεδία και μεθόδους. Αυτή είναι η ιδιότητα της κληρονομικότητας method Q data x method P

5 Κληρονομικότητα Η κληρονομικότητα είναι χρήσιμη όταν Θέλουμε να έχουμε αντικείμενα και της κλάσης Β και της κλάσης D. Θέλουμε να ορίσουμε πολλαπλές παράγωγες κλάσεις D1, D2, που η κάθε μία επεκτείνει την Β με διαφορετικό τρόπο.

6 Κλάση Person First name Κλάση Employee salary Last name getdetails Κλάση Customer credit getsalary() getcredit() First name Last name First name Last name getdetails() getdetails()

7 class Person private: char fname[40]; char lname[40]; public: Person(char fn[], char ln[]); ~Person(); char *getpersonaldetails(); ;

8 Person::Person(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); Person::~Person() cout << ~Person() called\n ; char *Person::getPersonalDetails() char *ret = new char [strlen(fname) + strlen(lname) +40]; sprintf(ret, 1st Name %s -Last Name %s", fname, lname); return ret;

9 class Employee : public Person private: int basicsalary; public: Employee(char fn[], char ln[], int sal); ~Employee(); int getsalary(); ; Employee::Employee(char fn[],char ln[],int sal):person(fn,ln) basicsalary = sal; Employee::~Employee() cout << ~Employee() called ; int Employee::getSalary() return basicsalary;

10 class Customer : public Person private: int credit; char credittype[10]; public: Customer(char fn[], char ln[], char ct[]); ~Customer(); void chargecredit(int amount); int getcredit(); ; Customer::Customer(char fn[], char ln[], char ct[]) : Person(fn, ln) credit = 0; strcpy(credittype, ct); Customer::~Customer() cout << ~Customer called\n ; void Customer::chargeCredit(int amount) credit -= amount; int Customer::getCredit() return credit;

11 int main() char fname[40]; char lname[40]; int sal; int credit; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pet(fname, lname, "VISA"); char *details = john.getpersonaldetails(); sal = john.getsalary(); cout << details << " - Salary : " << sal << endl; delete [] details; pet.chargecredit(250); // οι destructors εκτελούνται αντίστροφα.

12 Κληρονομικότητα Μπορούμε να χρησιμοποιούμε την ιδιότητα της κληρονομικότητας με διάφορους τρόπους αλλά ο πιο χρήσιμος και κατανοητός είναι για να ορίσουμε μια εξειδίκευση/επέκταση μιας κλάσης. Σχέση is-a ή is-like-a

13 UML διαγράμματα Person Employee Customer

14 protected members Για να έχει πρόσβαση στα πεδία (ή μεθόδους) της Person η κλάση Employee θα πρέπει να είναι ορισμένα ως Public, ή Protected Class Person First name Last name getdetails Class Employee: public Person salary getsalary() First name Last name class Person protected: char fname[40]; char lname[40]; public: Person(char fn[], char ln[]); ~Person(); char *getpersonaldetails(); ; getdetails()

15 private inheritance Η μέθοδος getdetails() της κλάσης Person, δεν είναι πλέον προσβάσιμη από αντικείμενα της κλάσης Employee Class Person First name Last name getdetails Class Employee: private Person salary getsalary() First name int main() Employee emp; // cannot call emp.getdetails() Last name getdetails()

16 Γιατί αυτό είναι χρήσιμο? class Array protected: int *A; int size; public: Array(int s); GetElement(int i); ~Array(); ; class SafeArray: private Array public: GetElementSafely(int i); ; SafeArray::GetElementSafely(int i) if (i < 0 i >= size) exit(1); return A[i]; H SafeArray δεν επιτρέπει την χρήση της GetElement(i)

17 Ανάθεση Αντικειμένων και Κληρονομικότητα Στην ανάθεση μεταξύ δύο αντικειμένων x = y πρέπει τα δύο αντικείμενα να είναι της ίδιας κλάσης ή η κλάση του αντικειμένου που ανατίθεται (y) να κληρονομεί (άμεσα ή έμμεσα) από την κλάση του αντικειμένου στο οποίο γίνεται η ανάθεση (x) Δηλαδή το y να παράγεται (έμμεσα η άμεσα) από την κλάση x Στην περίπτωση αυτή λέμε ότι κάναμε upcasting.

18 int main() char fname[40]; char lname[40]; int sal; int credit; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pet(fname, lname, VISA ); cout << john.getpersonaldetails() << "-Salary: " << john.getsalary() << endl; pet.chargecredit(250); cout << pet.getpersonaldetails() << "-Credit: " << pet.getcredit() << endl;

19 Person johnprivatelife = john; // upcasting Person petprivatelife = pet; // upcasting cout << johnprivatelife.getpersonaldetails() << endl; cout << petprivatelife.getpersonaldetails() << endl; // petprivatelife.chargecredit(130); // compile error.. cin >> fname >> lname; petprivatelife.setpersonaldetails(fname, lname); cout << petprivatelife.getpersonaldetails() << endl; cout << pet.getpersonaldetails() << "-Credit: " << pet.getcredit() << endl;

20 Ανάθεση διευθύνσεων αντικειμένων σε δείκτες και κληρονομικότητα Στην ανάθεση της διεύθυνσης ενός αντικειμένου σε ένα pointer p = & x πρέπει ο p να είναι pointer της κλάσης στην οποία ανήκει το αντικείμενο x ή pointer κλάσης από την οποία κληρονομεί η κλάση του αντικειμένου x. Το ποιες μέθοδοι μπορούν να κληθούν μέσω του pointer, καθορίζεται από τον τύπο του pointer και όχι από τον τύπο του αντικειμένου.

21 int main() char fname[40]; char lname[40]; int sal; int credit; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pet(fname, lname, VISA ); cout << john.getpersonaldetails() << "-Salary: " << john.getsalary() << endl; pet.chargecredit(250); cout << pet.getpersonaldetails() << "-Credit: " << pet.getcredit() << endl;

22 Person *johnprivatelife = &john; Person *petprivatelife = &pet; cout << johnprivatelife->getpersonaldetails() << endl; cout << petprivatelife->getpersonaldetails() << endl; // petprivatelife->chargecredit(130); // compile error.. cin >> fname >> lname; petprivatelife->setpersonaldetails(fname, lname); cout << petprivatelife->getpersonaldetails() << endl; cout << pet.getpersonaldetails() << "-Credit: " << pet.getcredit() << endl;

23 Θεματολόγιο Κληρονομικότητα Παράδειγμα Κληρονομικότητα Βελτιωμένο Παράδειγμα Ενθυλάκωση : public private - protected πεδία Ενθυλάκωση : public private - protected κληρονομικότητα Ανάθεση αντικειμένων και κληρονομικότητα Ανάθεση διευθύνσεων αντικειμένων σε δείκτες και κληρονομικότητα Πέρασμα παραμέτρων και κληρονομικότητα Υποσκέλιση (overriding) συναρτήσεων

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

25 Πέρασμα παραμέτρων και Κληρονομικότητα Είδαμε στα προηγούμενα παραδείγματα ότι Σε ένα αντικείμενο βασικής κλάσης μπορεί να ανατεθεί ένα αντικείμενο παραγόμενης κλάσης Σε ένα δείκτη σε αντικείμενα βασικής κλάσης μπορεί να ανατεθεί η διεύθυνση ενός αντικειμένου παραγόμενης κλάσης Η δυνατότητα του upcasting αποκτά εξαιρετική χρησιμότητα στην περίπτωση που το αντικείμενο ή ο δείκτης βασικής κλάσης είναι παράμετρος σε μια άλλη συνάρτηση ή μέθοδο του προγράμματος μας. Η συνάρτηση μας μπορεί να εκτελεστεί επιτυχημένα χωρίς καμία αλλαγή για αντικείμενα οποιασδήποτε κλάσης παράγεται από τη βασική κλάση. => η συνάρτηση μας είναι επαναχρησιμοποιήσιμη

26 Έστω ότι στο πρόγραμμά μας θέλουμε να προσθέσουμε την επιπλέον δυνατότητα να μετατρέπει τις πληροφορίες που διαχειρίζεται για τους πελάτες και τους υπαλλήλους σε html σελίδες και να τις εκτυπώνει.

27 Πέρασμα δια τιμής void HTMLFormattedPrint( Person p ) cout << "<HTML>" << p.getpersonaldetails() << "</HTML>" << endl; p.setpersonaldetails(, ); για να δούμε τη διαφορά περάσματος δια τιμής, και περάσματος με δείκτη ή αναφορά

28 Πέρασμα δια τιμής int main() char fname[40]; char lname[40]; int sal; int credit; H ίδια συνάρτηση καλείται για Customers και Employees μέσω upcasting cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pete(fname, lname, VISA ); HTMLFormattedPrint(pete); HTMLFormattedPrint(john); cout << pete.getpersonaldetails() << " - Credit : " << pete.getcredit() << endl; return 0; Το αντικείμενο περνάει δια τιμής οι αλλαγές δεν είναι εμφανείς στη main ()

29 Πέρασμα δείκτη void HTMLFormattedPrint( Person *p ) cout << "<HTML>" << p->getpersonaldetails() << "</HTML>" << endl; p->setpersonaldetails(, );

30 Πέρασμα δείκτη int main() char fname[40]; char lname[40]; int sal; int credit; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pete(fname, lname, VISA ); HTMLFormattedPrint(&pete); HTMLFormattedPrint(&john); cout << pete.getpersonaldetails() << " - Credit : " << pete.getcredit() << endl; return 0; Το αντικείμενο περνάει δια τιμής οι αλλαγές είναι εμφανείς στη main ()

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

32 Παρόλα αυτά το πρόγραμμά μας μπορεί να μετατρέψει σε html μόνο τις πληροφορίες που περιλαμβάνονται σαν χαρακτηριστικά στη βασική κλάση Person. ΓΙΑΤΙ?? Τι γίνεται αν θέλουμε να τυπώνουμε και τα επιμέρους χαρακτηριστικά που περιλαμβάνουν οι κλάσεις Employee και Customer?

33 METHOD OVERRIDING ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ

34 using namespace std; class Person private: char fname[40]; char lname[40]; public: Person(char fn[], char ln[]); char *getpersonaldetails(); void setpersonaldetails(char fn[], char ln[]); ;

35 class Employee : public Person private: int basicsalary; public: Employee(char fn[], char ln[], int sal); int getsalary(); ; class Customer : public Person private: int credit; char credittype[10]; public: Customer(char fn[], char ln[], char ct[]); void chargecredit(int amount); int getcredit(); char *getcredittype(); ;

36 Person::Person(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); void Person::setPersonalDetails(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); char *Person::getPersonalDetails() char *ret = new char [strlen(fname) + strlen(lname) +40]; sprintf(ret, 1st Name %s - Last Name %s", fname, lname); return ret;

37 Employee::Employee(char fn[], char ln[], int sal) : Person(fn, ln) basicsalary = sal; int Employee::getSalary() return basicsalary;

38 Customer::Customer(char fn[], char ln[], char ct[]) : Person(fn, ln) credit = 0; strcpy(credittype, ct); void Customer::chargeCredit(int amount) credit -= amount; int Customer::getCredit() return credit; char *Customer::getCreditType() return credittype;

39 int main() char fname[40]; char lname[40]; int sal; int credit; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pete(fname, lname, "VISA"); pete.chargecredit(250); cout << john.getpersonaldetails() << " " << john.getsalary() << endl; cout << pete.getpersonaldetails() << " " << pete.getcredittype() << " " << pete.getcredit() << endl; return 0;

40 Η σχεδίαση του κώδικα μας δεν είναι πλέον καλή γιατί χρειαζόμαστε διαφορετικές εντολές για να τυπώσουμε τα στοιχεία αντικειμένων από διαφορετικές κλάσεις. Μια νέα παραγόμενη κλάση θα δημιουργούσε επιπλέον προβλήματα. Θέλουμε μια μοναδική συνάρτηση που να μας δίνει τα στοιχεία του αντικειμένου.

41 Method Overriding Σε κάθε μία από τις παραγόμενες κλάσεις θα επανα-ορίσουμε την μέθοδο getpersonaldetails() O ορισμός στην παραγόμενη κλάση υποσκελίζει (overrides) τον ορισμό στη βασική κλάση.

42 # include <iostream> # include <cstring> using namespace std; class Person private: char fname[40]; char lname[40]; public: Person(char fn[], char ln[]); char *getpersonaldetails(); void setpersonaldetails(char fn[], char ln[]); ;

43 class Employee : public Person private: int basicsalary; public: Employee(char fn[], char ln[], int sal); int getsalary(); char *getpersonaldetails(); ; class Customer : public Person private: int credit; char credittype[10]; public: Customer(char fn[], char ln[], char ct[]); void chargecredit(int amount); int getcredit(); char *getcredittype(); char *getpersonaldetails(); ;

44 Person::Person(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); void Person::setPersonalDetails(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); char *Person::getPersonalDetails() char *ret = new char [strlen(fname) + strlen(lname)+ 40]; sprintf(ret, 1st Name %s - Last Name %s", fname, lname); return ret;

45 Employee::Employee(char fn[], char ln[], int sal) : Person(fn, ln) basicsalary = sal; int Employee::getSalary() return basicsalary; char *Employee::getPersonalDetails() char *name = Person::getPersonalDetails(); char * ret = new char [strlen(name) + 10]; sprintf(ret, "%s %d", name, basicsalary); return ret; Εδώ καλείται και η μέθοδος που επανα-ορίσαμε. Για να μην έχουμε αναδρομή, καθορίζουμε ότι καλούμε τη μέθοδο που κληρονομούμε από την Person

46 Customer::Customer(char fn[], char ln[], char ct[]): Person(fn, ln) credit = 0; strcpy(credittype, ct); void Customer::chargeCredit(int amount) credit -= amount; int Customer::getCredit() return credit; char *Customer::getCreditType() return credittype; char *Customer::getPersonalDetails() char *name = Person::getPersonalDetails(); char * ret = new char [strlen(name) + strlen(credittype) + 10]; sprintf(ret, "%s %s %d", name, credittype, credit); return ret;

47 int main() char fname[40]; char lname[40]; int sal; int credit; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pete(fname, lname, "VISA"); pete.chargecredit(250); cout << john.getpersonaldetails() << endl; cout << pete.getpersonaldetails() << endl; return 0;

48 Πιο περίπλοκο παράδειγμα int main() Person *all[10]; for (int i = 0; i < 10; i++) char fname[40]; char lname[40]; int sal; char choice; cin >> choice; if (choice == p ) cin >> fname >> lname; all[i] = new Person(fname, lname); if (choice == e ) cin >> fname >> lname >> sal; all[i] = new Employee(fname, lname, sal); if (choice == c ) cin >> fname >> lname; all[i] = new Customer(fname, lname, "VISA"); for (int i = 0; i < 10; i++) cout << all[i]->getpersonaldetails() << endl; Τι output θα πάρουμε?

49 Πιο περίπλοκο παράδειγμα int main() Person *all[10]; for (int i = 0; i < 10; i++) char fname[40]; char lname[40]; int sal; char choice; cin >> choice; if (choice == p ) cin >> fname >> lname; all[i] = new Person(fname, lname); if (choice == e ) cin >> fname >> lname >> sal; all[i] = new Employee(fname, lname, sal); if (choice == c ) cin >> fname >> lname; all[i] = new Customer(fname, lname, "VISA"); for (int i = 0; i < 10; i++) cout << all[i]->getpersonaldetails() << endl; Θέλω να καλώ την επανα-ορισμένη μέθοδο της αντίστοιχης παραγόμενης κλάσης Καλείται η μέθοδος της Person

50 Εξήγηση Στη C++ αν έχω: μια βασική κλάση Α και παραγόμενες κλάσεις Β, Γ οι οποίες επανα-ορίζουν μια μέθοδο f() της Α κώδικα (συνάρτηση, μέθοδο, κλπ.) στον οποίο χρησιμοποιείται ένας δείκτης p βασικής κλάσης Α που μπορεί να δείχνει σε αντικείμενα των κλάσεων Α, Β, ή Γ μέσω του δείκτη καλείται η μέθοδος f() στο αντικείμενο στο οποίο δείχνει ο δείκτης p η υλοποίηση της μεθόδου f() που θα καλεστεί καθορίζεται από τον τύπο του δείκτη δηλαδή καλείται η υλοποίηση της μεθόδου f() της βασικής κλάσης Α η επιλογή γίνεται από τον compiler κατά τη διάρκεια της μετάφρασης του προγράμματος (early binding)

51 Virtual Methods and Late Binding Για να κάνουμε την επιλογή της μεθόδου f() που θα καλεστεί να καθορίζεται από τον τύπο του αντικειμένου στο οποίο δείχνει ο δείκτης p (δηλαδή να καλείται η υλοποίηση της μεθόδου f() των παραγόμενων κλάσεων Β, Γ) πρέπει η μέθοδος f() να δηλωθεί στην κλάση A ως virtual μέθοδος. Στην περίπτωση των virtual μεθόδων δίνεται η οδηγία στον compiler ότι η επιλογή της υλοποίησης της f() δεν θα γίνει κατά τη μετάφραση του προγράμματος, με βάση τον τύπο του δείκτη, αλλά κατά την εκτέλεση του προγράμματος με βάση τον τύπο του αντικειμένου στο οποίο δείχνει ο δείκτης κάθε φορά που εκτελείται ο κώδικας (late binding).

52 # include <iostream> # include <cstring> using namespace std; class Person private: char fname[40]; char lname[40]; public: Person(char fn[], char ln[]); virtual char *getpersonaldetails(); void setpersonaldetails(char fn[], char ln[]); ;

53 class Employee : public Person private: int basicsalary; public: Employee(char fn[], char ln[], int sal); int getsalary(); char *getpersonaldetails(); ; class Customer : public Person private: int credit; char credittype[10]; public: Customer(char fn[], char ln[], char ct[]); void chargecredit(int amount); int getcredit(); char *getcredittype(); char *getpersonaldetails(); ;

54 Person::Person(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); void Person::setPersonalDetails(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); char *Person::getPersonalDetails() char *ret = new char [strlen(fname) + strlen(lname) +40]; sprintf(ret, 1st Name %s - Last Name %s", fname, lname); return ret;

55 Employee::Employee(char fn[],char ln[],int sal):person(fn, ln) basicsalary = sal; int Employee::getSalary() return basicsalary; char *Employee::getPersonalDetails() // εδώ καλείται και η μέθοδος που επανα-ορίσαμε char *name = Person::getPersonalDetails(); char * ret = new char [strlen(name) + 10]; sprintf(ret, "%s %d", name, basicsalary); return ret;

56 Customer::Customer(char fn[], char ln[], char ct[]): Person(fn, ln) credit = 0; strcpy(credittype, ct); void Customer::chargeCredit(int amount) credit -= amount; int Customer::getCredit() return credit; char *Customer::getCreditType() return credittype; char *Customer::getPersonalDetails() char *name = Person::getPersonalDetails(); char * ret = new char [strlen(name) + strlen(credittype)+ 10]; sprintf(ret, "%s %s %d", name, credittype, credit); return ret;

57 int main() Person *all[10]; Καλείται η μέθοδος του αντίστοιχου αντικειμένου for (int i = 0; i < 10; i++) char fname[40]; char lname[40]; int sal; char choice; cin >> choice; if (choice == p ) cin >> fname >> lname; all[i] = new Person(fname, lname); if (choice == e ) cin >> fname >> lname >> sal; all[i] = new Employee(fname, lname, sal); if (choice == c ) cin >> fname >> lname; all[i] = new Customer(fname, lname, "VISA"); for (int i = 0; i < 10; i++) cout << all[i]->getpersonaldetails() << endl;

58 Πέρασμα δείκτη void HTMLFormattedPrint( Person *p ) cout << "<HTML>" << p->getpersonaldetails() << "</HTML>" << endl; Τι θα παίρναμε αν δεν είχαμε ορίσει την virtual μέθοδο? Με τη virtual μέθοδο, η συνάρτηση πλέον δουλεύει για οποιοδήποτε αντικείμενο κλάσης Person, Employee, Customer και τυπώνει σωστά τα αντίστοιχα πεδία. Η συνάρτηση HTMLFormattedPrint είναι πλέον επαναχρησιμοποιήσιμη για οποιαδήποτε παράγωγη κλάση της Person.

59 Πολυμορφισμός Τα παραπάνω είναι παραδείγματα πολυμορφισμού. Τι είναι πολυμορφισμός? (πολυμορφισμός = πολλές μορφές. Η χρήση μιας μεθόδου με διαφορετικούς τρόπους). Δύο είδη πολυμορφισμού: Στατικός Πολυμορφισμός (compile time early binding) Method Overloading Method Overriding Δυναμικός Πολυμορφισμός (run time late binding) Virtual methods που αποφασίζονται δυναμικά με βάσει το αντικείμενο.

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

61 Έστω ότι στο πρόγραμμά μας θέλουμε να προσθέσουμε μια μέθοδο που μετατρέπει τις πληροφορίες που διαχειρίζεται για τους πελάτες και τους υπαλλήλους σε html σελίδες και να τις εκτυπώνει. Η μέθοδος παίρνει μία παράμετρο που παίρνει τιμή 1, ή 2: Με την επιλογή 1, τυπώνει μόνο τα βασικά χαρακτηριστικά της κλάσης Person Με την επιλογή 2, τυπώνει μόνο τα οικονομικά επιμέρους χαρακτηριστικά που περιλαμβάνουν οι κλάσεις Employee και Customer

62 # include <iostream> # include <cstring> using namespace std; class Person private: char fname[40]; char lname[40]; public: Person(char fn[], char ln[]); char *getpersonaldetails(); virtual char* getfinancialdetails(); // εικονική μέθοδος χωρίς υλοποίηση void setpersonaldetails(char fn[], char ln[]); ;

63 class Employee : public Person private: int basicsalary; public: Employee(char fn[], char ln[], int sal); int getsalary(); char *getfinancialdetails(); ; class Customer : public Person private: int credit; char credittype[10]; public: Customer(char fn[], char ln[], char ct[]); void chargecredit(int amount); int getcredit(); char *getcredittype(); char *getfinancialdetails(); ;

64 Person::Person (char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); void Person::setPersonalDetails(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); char *Person::getPersonalDetails() char *ret = new char [strlen(fname) + strlen(lname) + 40]; sprintf(ret, 1st Name %s - Last Name %s", fname, lname); return ret; char* getfinancialdetails() return NULL;

65 Employee::Employee(char fn[], char ln[], int sal) : Person(fn, ln) basicsalary = sal; int Employee::getSalary() return basicsalary; char *Employee::getFinancialDetails() char * ret = new char [30]; sprintf(ret, " Basic Salary %d ", basicsalary); return ret;

66 Customer::Customer(char fn[], char ln[], char ct[]) : Person(fn, ln) credit = 0; strcpy(credittype, ct); void Customer::chargeCredit(int amount) credit -= amount; int Customer::getCredit() return credit; char *Customer::getCreditType() return credittype; char *Customer::getFinancialDetails() char * ret = new char [strlen(credittype) + 40]; sprintf(ret, "Credit Type %s Credit %d", credittype, credit); return ret;

67 void HTMLFormattedPrint (Person *p, int choice) if(choice == 1) cout << "<HTML>" << p->getpersonaldetails() << "</HTML>" << endl; else if(choice == 2) cout << "<HTML>" << p->getfinancialdetails() << "</HTML>" << endl;

68 int main() char fname[40]; char lname[40]; int sal; int credit; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pete(fname, lname, "VISA"); pet.chargecredit(250); HTMLFormattedPrint (&pete, 1); HTMLFormattedPrint (&john, 1); HTMLFormattedPrint (&pete, 2); HTMLFormattedPrint (&john, 2); return 0;

69 Εικονικές μεθόδοι Στην ουσία κατασκευάσαμε μια βασική κλάση που περιλαμβάνει μια τετριμμένη εικονική μέθοδο getfinancialdetails μόνο και μόνο για να μπορούμε να την επανα-ορίσουμε στις παραγόμενες κλάσεις και να την καλούμε στην μέθοδο HTMLFormattedPrint Η τετριμμένη μέθοδος όμως επιστρέφει NULL και είναι αρκετά επικίνδυνη Κανείς δεν μπορεί να εγγυηθεί ότι ένας προγραμματιστής που θα επεκτείνει την κλάση Person θα επανα-ορίσει την getfinancialdetails αν δεν επανα-ορίστει η μέθοδος, η NULL τιμή που επιστρέφει μπορεί να δημιουργήσει προβλήματα. Θέλουμε να εξασφαλίσουμε ότι η getfinancialdetails πάντα θα επανα-ορίζεται και δεν θα χρησιμοποιείται ποτέ η τετριμένη μέθοδος

70 Αφηρημένες βασικές κλάσεις Για να εξασφαλίσουμε ότι όσοι επεκτείνουν την κλάση Person θα επανα-ορίσουν την τετριμμένη μέθοδο getfinancialdetails ορίζουμε μια αφηρημένη βασική κλάση. Μια κλάση ονομάζεται αφηρημένη αν περιέχει τουλάχιστον μια εικονική μέθοδο που δεν περιλαμβάνει υλοποίηση δηλώνεται ως virtual methodname() = 0; Η αφηρημένη κλάση λειτουργεί σαν καλούπι για την κατασκευή παραγόμενων που προσφέρουν εναλλακτικές υλοποιήσεις στις εικονικές μεθόδους. Η δημιουργία αντικειμένων αφηρημένης κλάσης ΔΕΝ επιτρέπεται από τον compiler Η μη υλοποίηση εικονικών μεθόδων ΔΕΝ επιτρέπεται από τον compiler

71 # include <iostream> # include <cstring> using namespace std; class Person private: char fname[40]; char lname[40]; public: Person(char fn[], char ln[]); char *getpersonaldetails(); virtual char* getfinancialdetails() = 0; // γνησια εικονική μέθοδος χωρίς υλοποίηση void setpersonaldetails(char fn[], char ln[]); ;

72 class Employee : public Person private: int basicsalary; public: Employee(char fn[], char ln[], int sal); int getsalary(); char *getfinancialdetails(); ; class Customer : public Person private: int credit; char credittype[10]; public: Customer(char fn[], char ln[], char ct[]); void chargecredit(int amount); int getcredit(); char *getcredittype(); char *getfinancialdetails(); ;

73 Person::Person(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); void Person::setPersonalDetails(char fn[], char ln[]) strcpy(fname, fn); strcpy(lname, ln); char *Person::getPersonalDetails() char *ret = new char [strlen(fname) + strlen(lname) +40]; sprintf(ret, 1st Name %s - Last Name %s", fname, lname); return ret; // Δεν υπάρχει υλοποιηση της getfinancialdetails // ούτε καν τετριμένη!!!

74 Employee::Employee(char fn[], char ln[], int sal) : Person(fn, ln) basicsalary = sal; int Employee::getSalary() return basicsalary; char *Employee::getFinancialDetails() char * ret = new char [30]; sprintf(ret, " Basic Salary %d ", basicsalary); return ret; // Αν δεν ορίσουμε την getfinancialdetails θα έχουμε error

75 Customer::Customer(char fn[], char ln[], char ct[]) : Person(fn, ln) credit = 0; strcpy(credittype, ct); void Customer::chargeCredit(int amount) credit -= amount; int Customer::getCredit() return credit; char *Customer::getCreditType() return credittype; char *Customer::getFinancialDetails() char * ret = new char [strlen(credittype) + 40]; sprintf(ret, "Credit Type %s Credit %d", credittype, credit); return ret; // Αν δεν ορίσουμε την getfinancialdetails θα έχουμε error

76 void HTMLFormattedPrint (Person *p, int choice) if(choice == 1) cout << "<HTML>" << p->getpersonaldetails() << "</HTML>" << endl; else if(choice == 2) cout << "<HTML>" << p->getfinancialdetails() << "</HTML>" << endl;

77 int main() char fname[40]; char lname[40]; int sal; cin >> fname >> lname >> sal; Employee john(fname, lname, sal); cin >> fname >> lname; Customer pete(fname, lname, "VISA"); pete.chargecredit(250); // Person mary(fname, lname) θα δώσει compile error! HTMLFormattedPrint (&pete, 1); HTMLFormattedPrint (&john, 1); HTMLFormattedPrint (&pete, 2); HTMLFormattedPrint (&john, 2); return 0;

78 ΑΛΛΑ ΘΕΜΑΤΑ

79 Πολλαπλή κληρονομικότητα Μία κλάση μπορεί να κληρονομεί (να παράγεται) από πολλαπλές άλλες κλάσεις Employee class Employee. Student class Student. WorkingStudent class WorkingStudent: public Employee, public Student.

80 Επίπεδα κληρονομικότητας Μπορούμε επίσης να έχουμε πολλά επίπεδα κληρονομικότητας Person Employee Customer Manager FloorEmp VIP VIP

81 Και συνδυασμό των δύο Person class Person. Employee class Employee: public Person. Student class Student: public Person. WorkingStudent class WorkingStudent: public Employee, public Student.

82 Πολλαπλή Κληρονομικότητα - Αμφισημία class Base1 public: void f(); ; class Base2 public: void f(); ; main() Derived d; d.f(); // υπάρχει αμφισημία! class Derived: public Base1, public Base2...

83 Πολλαπλή Κληρονομικότητα - Αμφισημία class Base1 public: void f(); ; class Base2 public: void f(); ; main() Derived d; d.base1::f(); d.base2::f(); class Derived: public Base1, public Base2...

ΠΟΛΥΜΟΡΦΙΣΜΟΣ, ΠΡΟΤΥΠΑ, ΚΑΘΙΕΡΩΜΕΝΗ ΒΙΒΛΙΟΘΗΚΗ ΠΡΟΤΥΠΩΝ. Polymorphism, Templates, Standard Template Library (STL)

ΠΟΛΥΜΟΡΦΙΣΜΟΣ, ΠΡΟΤΥΠΑ, ΚΑΘΙΕΡΩΜΕΝΗ ΒΙΒΛΙΟΘΗΚΗ ΠΡΟΤΥΠΩΝ. Polymorphism, Templates, Standard Template Library (STL) ΠΟΛΥΜΟΡΦΙΣΜΟΣ, ΠΡΟΤΥΠΑ, ΚΑΘΙΕΡΩΜΕΝΗ ΒΙΒΛΙΟΘΗΚΗ ΠΡΟΤΥΠΩΝ Polymorphism, Templates, Standard Template Library (STL) Πολυμορφισμός Τι είναι πολυμορφισμός? (πολυμορφισμός = πολλές μορφές. Η χρήση μιας κλάσης

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αναφορές, είκτες και Αλφαριθμητικά

Αναφορές, είκτες και Αλφαριθμητικά Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

POINTERS, AGGREGATION, COMPOSITION

POINTERS, AGGREGATION, COMPOSITION POINTERS, AGGREGATION, COMPOSITION POINTERS TO OBJECTS Η κλάση mystring class mystring private: char *s; int size; public: mystring(const char *); ~mystring(); char *GetString(); int GetSize(); ; mystring::mystring(const

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

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

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

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding

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

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++ Εντολές εισόδου - εξόδου Εισαγωγή στη C++ Το πρώτο πρόγραμμα //my first program #include using namespace std; int main(){ cout

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

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++

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

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

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

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

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

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Υπερφόρτωση (Overloading), Μεθόδων (Method Overloading), Τελεστών (Operator Overloading (C++, C#))

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

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

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

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

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

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Παράδειγμα Στο προηγούμενο παράδειγμα οι φοιτητές και οι καθηγητές είχαν κάποια κοινά στοιχεία Και οι δύο είχαν όνομα Και οι δύο είχαν κάποιο

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

Δομές δεδομένων (Structures) Εισαγωγή στη C++

Δομές δεδομένων (Structures) Εισαγωγή στη C++ Δομές δεδομένων (Structures) Εισαγωγή στη C++ 1 Γενικά Μια δομή (struct) είναι μία συλλογή δεδομένων. Μπορεί να περιέχει πλήθος μεταβλητών οι οποίες μπορεί να είναι διαφορετικών τύπων. Τα στοιχεία που

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

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

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

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

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

Υπερφόρτωση τελεστών (operator( Υπερφόρτωση τελεστών (operator( overloading) Η υπερφόρτωση τελεστών είναι ένα από τα πιο ενδιαφέροντα χαρακτηριστικά του αντικειμενοστραφούς προγραμματισμού. Αναφέρεται στην πρόσθετη χρήση των συνηθισμένων

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

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

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

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

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

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

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

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Πολλαπλή κληρονομικότητα, Συσχετίσεις μεταξύ κλάσεων ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) (Απλή) Κληρονομικότητα Student + calctuition(): double GraduateStudent + calctuition():

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

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

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

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

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης Εισαγωγή Στη C++ υπάρχει η δυνατότητα να δηλώσουμε μία συμβολοσειρά ως αντικείμενο, χρησιμοποιώντας τη βιβλιοθήκη . Επειδή οι συμβολοσειρές είναι

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

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

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

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

Τελικό τεστ - απαντήσεις

Τελικό τεστ - απαντήσεις Τελικό τεστ - απαντήσεις Θεωρήστε το παρακάτω πρόγραμμα και απαντήστε στις ερωτήσεις που ακολουθούν. 1 class parent { 2 public: 3 int a; int b; 4 parent(int _a, int _b) {} 5 6 void f1(int x) { cout

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

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

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

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

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

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12 Διάγραμμα κλάσεων [Class diagram] Διάλεξη #12: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism] Database Music Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

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

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++ Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++ Γενικά Η εντολή: int arr[5][2]; Δηλώνει την μεταβλητή arr σαν πίνακα με πέντε γραμμές (rows) και με δύο στήλες (columns). Η αρίθμηση και των δύο δεικτών

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

Εισαγωγή στην επιστήμη των υπολογιστών

Εισαγωγή στην επιστήμη των υπολογιστών Εισαγωγή στην επιστήμη των υπολογιστών Λογισμικό Υπολογιστών Γλώσσες Προγραμματισμού 1 Εξέλιξη Οι γλώσσες προγραμματισμού είναι σύνολα από προκαθορισμένες λέξεις οι οποίες συνδυάζονται σε προγράμματα σύμφωνα

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

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java JAVA, NETBEANS ΑΝΑΚΕΦΑΛΑΙΩΣΗ Τα βασικά για την γλώσσα Java Java portability Το μεγαλύτερο πλεονέκτημα της Java είναι η μεταφερσιμότητα: ο κώδικας μπορεί να τρέξει πάνω σε οποιαδήποτε πλατφόρμα. Write-Once-Run-Anywhere

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα Downcasting Πολυμορφισμός Late Binding

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα Downcasting Πολυμορφισμός Late Binding ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Downcasting Πολυμορφισμός Late Binding tostring και equals Είπαμε ότι η Java για κάθε αντικείμενο «περιμένει» να δει τις μεθόδους tostring και

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

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

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

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

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

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

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

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

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

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

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods (Object Oriented Programming) Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος

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

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

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

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

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

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

(Απλή) Κληρονομικότητα

(Απλή) Κληρονομικότητα Πολλαπλή κληρονομικότητα, υςχετίςεισ μεταξύ κλάςεων ΟΝΣΟΚΕΝΣΡΙΚΟ ΠΡΟΓΡ/ΜΟ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) (Απλή) Κληρονομικότητα Student + calctuition(): double GraduateStudent + calctuition(): double

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object

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

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } { Δυναμική κατανομή μνήμης Ιωάννης Γ. Τσ ούλος 2014 1 Χρήσ η δεικτών Οι δείκτες μπορούν να χρησ ιμοποιηθούν προκειμένου να αναφερθούν σ ε διευθύνσ εις μεταβλητών και όχι απευθείας σ τις ίδιες τις μεταβλητές.

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

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΒΑΣΙΚΗ ΚΑΙ ΠΑΡΑΓΩΓΕΣ ΚΛΑΣΕΙΣ #include class logariasmos //basikh klash //prostateymeno dedomeno-melos float ypoloipo; logariasmos() //dhlosh constructor ypoloipo=0; float pareypoloipo()

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

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

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

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

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

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

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

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video ιάγραµµα κλάσεων [Class diagram] Εβδοµάδα 2: Υπο-τύποι και πολυµορφισµός [sub-typing and polymorphism] Database Music Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη

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

Συµβολοσειρές - Strings

Συµβολοσειρές - Strings Συµβολοσειρές - Strings 1 Συµβολοσειρέςστην C/C++ 2 Χαρακτήρες 'a', 'z', '0', Χαρακτήρες σαν int 'z' επίσης αναπαριστά την ακεραία τιµή του χαρακτήρα z Strings-Συµβολοσειρές Σειρές από χαρακτήρες σαν µια

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Παράδειγμα Στο προηγούμενο παράδειγμα οι φοιτητές και οι καθηγητές είχαν κάποια κοινά στοιχεία Και οι δύο είχαν όνομα Και οι δύο είχαν κάποιο

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

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

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

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

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

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

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

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

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

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

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

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

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

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( ) ΣΥΜΒΟΛΟΣΕΙΡΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Ο τύπος string Μετατροπή από και προς τον τύπο string Βασικές μέθοδοι Χρήση Ελληνικών Συναρτήσεις C εκτύπωσης και ανάγνωσης Τελευταία

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

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες

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

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

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

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

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Εργαστήριο 2: Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραμματισμού

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

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee Μία εταιρεία πληρώνει τους εργαζόμενους της σε εβδομαδιαία βάση. Οι αποδοχές των εργαζόμενων υπολογίζονται με τέσσερις διαφορετικούς τρόπους : Α) Μισθωτοί (SalariedEmployee), πληρώνονται με σταθερό ποσό

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Αντικείμενα μέσα σε αντικείμενα Ορίζουμε κλάσεις για να ορίσουμε τύπους δεδομένων τους οποίους χρειαζόμαστε Π.χ., ο τύπος δεδομένων Date

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

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

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

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

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ 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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή Οποιαδήποτε κλάση

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Κληρονομικότητα Employee name hiringdate getname gethiringdate Οι παράγωγες κλάσεις κληρονομούν τα πεδία

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

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

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

Διαγράμματα Κλάσεων στη Σχεδίαση

Διαγράμματα Κλάσεων στη Σχεδίαση Διαγράμματα Κλάσεων στη Σχεδίαση περιεχόμενα παρουσίασης Αφηρημένες κλάσεις Ιδιότητες Λειτουργίες Απλοί τύποι Συσχετίσεις Εξάρτηση Διεπαφές αφηρημένες κλάσεις Οι αφηρημένες κλάσεις δεν μπορούν να δημιουργήσουν

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

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

Υπερφόρτωση τελεστών Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΔΙΚΕΣ ΜΑΣ ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΤΙΚΕΙΜΕΝΑ Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού Εισαγωγή στην επιστήμη των υπολογιστών Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού 1 Εξέλιξη Οι γλώσσες προγραμματισμού είναι σύνολα από προκαθορισμένες λέξεις οι οποίες συνδυάζονται σε προγράμματα

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

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

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Πίνακες Αντικειμένων Όπως στην C μπορούμε να έχουμε πίνακες από

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Βρείτε τα λάθη Στο πρόγραμμα στην επόμενη διαφάνεια υπάρχουν διάφορα λάθη Ποια είναι? public abstract

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8 Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 1000 1001 1002 1003 1004 1005 12 9.8 9976 3 1010 26 1006 1007 1008 1009 1010 1011 16 125 1299 a 13 1298 Δήλωση Δήλωση Τύπος

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

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 7: Διαχείριση Μνήμης,Δυναμικές Δομές Δεδομένων, Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Δυναμικές Δομές Δεδομένων Γενικά - Δυναμική Δέσμευση/Αποδέσμευση

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

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

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

Προγραμματισμός Δομές Δεδομένων

Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων (Data Structures) Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων Ομαδοποίηση πληροφορίας που

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

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

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

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

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;.. Επιλογή - Επανάληψη Η εντολή if-else Ο τελεστής παράστασης συνθήκης H εντολή switch Η εντολές for και while Η εντολή do-while Η εντολές break - continue - goto Μαθηματικές συναρτήσεις Λέξεις κλειδιά στη

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