1 / 26

Mo ştenirea claselor

Mo ştenirea claselor. Programarea calculatoarelor şi limbaje de programare II Capitolul 5. Obiective. Înţelegerea modului în care se pot crea clase noi prin moştenirea din clasele existente Înţelegerea modului în care moştenirea promovează reutilizarea codului

winter
Télécharger la présentation

Mo ştenirea claselor

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Moştenirea claselor Programarea calculatoarelor şi limbaje de programare II Capitolul 5

  2. Obiective • Înţelegerea modului în care se pot crea clase noi prin moştenirea din clasele existente • Înţelegerea modului în care moştenirea promovează reutilizarea codului • Înţelegerea noţiunilor de clasă de bază şi clasă derivată

  3. Introducere • Moştenirea este o formă de reutilizare a codului în care noile clase sunt create din clase existente prin • absorbirea atributelor şi comportamentelor lor • prin înlocuirea unor comportamente • prin adăgarea unor atribute şi comportamente noi • Reutilizarea codului economiseşte timp preţios în dezvoltarea software

  4. Introducere • O clasă moşteneşte datele membre şi funcţiile membre dintr-o clasă de bază definită anterior • Noua clasă este o clasă derivată • Moştenirea se foloseşte la crearea unei noi clase asemănătoare uneia existente pentru a nu rescrie complet datele membre şi funcţiile membre • Fiecare clasă derivată poate deveni, mai departe, un candidat pentru derivări ulterioare

  5. Introducere • Moştenirea simplă • o clasă este derivată dintr-o singură clasă de bază • Moştenirea multiplă • o clasă este derivată din mai multe clase de bază • Limbajul C++ oferă trei tipuri de moşteniri • public • fiecare obiect al unei clase derivate poate fi folosit oriunde se foloseşte un obiect al clasei de bază din care a fost derivată acea clasă • un obiect din clasa derivată este şi obiect al clasei de bază • protected • private

  6. Introducere • O relaţie „has a” înseamnă compunere de clase • un obiect al unei clase are ca membri unul sau mai multe obiecte ale altor clase • O relaţie „is a” este o moştenire • obiectele unei clase derivate pot fi tratate şi ca obiecte ale clasei de bază

  7. Sumar • Moştenirea: clase de bază şi clase derivate • Membrii protected • Folosirea funcţiilor membre • Suprascrierea membrilor clasei de bază în clasele derivate • Moştenirea public, protected şi private • Clase de bază directe şi clase de bază indirecte

  8. Moştenirea: clase de bază şi clase derivate • Adeseori, un obiect al unei clase este un obiect al altei clase în acelaşi timp • Un dreptunghi este un patrulater, la fel ca şi un pătrat, un paralelogram sau un trapez • Clasa Dreptunghi moşteneşte clasa Patrulater • Clasa Patrulater-clasă de bază • Clasa Dreptunghi- clasă derivată

  9. Moştenirea: clase de bază şi clase derivate • Exemple Clasa de bază Clase derivate Forma Cerc Triunghi Dreptunghi Credit CreditAuto CreditImobiliar Cont ContCurent ContDepozit ContPlati

  10. Forma FormaBidimensionala FormaTridimensionala Cerc Triunghi Patrat Sfera Cub Moştenirea: clase de bază şi clase derivate • Exemplu • Moştenirea conduce la relaţii între clase care poti fi reprezentate prin structuri arborescente • Un obiect al clasei Cerc este în acelaşi timp şi o FormaBidimensionala, dar şi o Forma class FormaBidimensionala : public Forma { ... };

  11. Sumar • Moştenirea: clase de bază şi clase derivate • Membrii protected • Folosirea funcţiilor membre • Suprascrierea membrilor clasei de bază în clasele derivate • Moştenirea public, protected şi private • Clase de bază directe şi clase de bază indirecte

  12. Membriiprotected • Membrii public ai unei clase de bază pot fi accesaţi de orice funcţie din program • Membrii private al unei clase de bază sunt accesibili doar funcţiilor membre sau prietenilor clasei • Membrii protected ai unei clase de bază pot fi accesaţi doar de • membrii şi de prietenii clasei de bază • de membrii şi prietenii claselor derivate

  13. Membriiprotected • Datele protected depăşesc ideea de încapsulare pentru că o schimbare a membrilor protected din clasa de bază poate influenţa toate clasele derivate • se recomandă ca datele membre să fie declarate private • protected trebuie folosit numai atunci când este strict necesar

  14. Sumar • Moştenirea: clase de bază şi clase derivate • Membrii protected • Folosirea funcţiilor membre • Suprascrierea membrilor clasei de bază în clasele derivate • Moştenirea public, protected şi private • Clase de bază directe şi clase de bază indirecte

  15. Folosirea funcţiilor membre • O clasă derivată nu poate accesa direct membri private ai clasei de bază • Acesta este un aspect crucial de inginerie software in C++ • Dacă o clasă derivată ar putea accesa membrii private ai clasei de bază, s-ar încălca principiul încapsulării pentru obiectele clasei de bază • Dacă o clasă derivată ar putea accesa membrii private ai clasei sale de bază, atunci clasele care sunt derivate mai departe din clasele derivate pot accesa şi ele aceşti membri şi aşa mai departe • Propagarea accesului la datele private ar anula astfel beneficiile încapsulării datelor în cadrul unei ierarhii de derivare

  16. Sumar • Moştenirea: clase de bază şi clase derivate • Membrii protected • Folosirea funcţiilor membre • Suprascrierea membrilor clasei de bază în clasele derivate • Moştenirea public, protected şi private • Clase de bază directe şi clase de bază indirecte

  17. Suprascrierea membrilor clasei de bază în clasele derivate • Override • O clasă derivată poate suprascrie o funcţie membră a clasei de bază printr-o nouă versiune a acestei funcţii cu aceeaşi semnătură • Când numele acestei funcţii este menţionat în clasa derivată, este selectată automat versiunea din clasa derivată • Overload • Semnăturile sunt diferite

  18. Suprascrierea membrilor clasei de bază în clasele derivate • Exemplu class Employee { public: Employee(const char*, const char*); void print() const; ~Employee(); private: char* firstName; char* lastName; };

  19. Suprascrierea membrilor clasei de bază în clasele derivate class HourlyWorker : public Employee { public: HourlyWorker(const char*, const char*, double, double); double getPay() const; void print() const; private: double wage; double hours; }; Funcţia print este suprascrisă

  20. Suprascrierea membrilor clasei de bază în clasele derivate void HourlyWorker::print() const { cout << "Se executa HourlyWorker::print()\n\n"; Employee::print(); cout << " este un lucrator angajat cu ora platit cu " << setiosflags(ios::fixed | ios::showpoint) << setprecision(2) << getPay() << " EUR" << endl; } int main() { HourlyWorker h("Bob", "Smith", 40.0, 10.00); h.print(); return 0; } Apelul functiei print din clasa de baza Se executa HourlyWorker::print() Bob Smith este un lucrator angajat cu ora platit cu 400.00 EUR

  21. Sumar • Moştenirea: clase de bază şi clase derivate • Membrii protected • Folosirea funcţiilor membre • Suprascrierea membrilor clasei de bază în clasele derivate • Moştenirea public, protected şi private • Clase de bază directe şi clase de bază indirecte

  22. Moştenireapublic, protected şi private • Pentru membrii public din clasa de bază • Moştenire public • public în clasa derivată • Poate fi accesat direct prin orice funcţie membră nestatică, funcţie friend sau funcţie nemembră • Moştenire protected • protectedîn clasa derivată • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend • Moştenire private • privateîn clasa derivată • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend

  23. Moştenireapublic, protected şi private • Pentru membrii protected din clasa de bază • Moştenire public • protected în clasa derivată • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend • Moştenire protected • protectedîn clasa derivată • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend • Moştenire private • privateîn clasa derivată • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend

  24. Moştenireapublic, protected şi private • Pentru membrii private din clasa de bază • Moştenire public • Inaccesibil în clasa derivată. • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend prin funcţii membre public sau protected din clasa de bază • Moştenire protected • Inaccesibil în clasa derivată. • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend prin funcţii membre public sau protected din clasa de bază • Moştenire private • Inaccesibil în clasa derivată. • Poate fi accesat direct prin orice funcţie membră nestatică sau funcţie friend prin funcţii membre public sau protected din clasa de bază

  25. Sumar • Moştenirea: clase de bază şi clase derivate • Membrii protected • Folosirea funcţiilor membre • Suprascrierea membrilor clasei de bază în clasele derivate • Moştenirea public, protected şi private • Clase de bază directe şi clase de bază indirecte

  26. Clase de bază directe şi clase de bază indirecte • Clasă de bază directă a unei clase derivate • este listată explicit în header-ul clasei derivate, după semnul : • Clasă de bază indirectă • nu este listată explicit în header-ul clasei • este moştenită cu două sau mai multe nivele înainte în ierarhia de moştenire

More Related