1 / 29

Programare orientata- obiect (POO) utilizand C++

Programare orientata- obiect (POO) utilizand C++. Dorel Lucanu. Bibliografie. H. Schildt : C++ manual complet, Teora, 2000 Bjarne Stroustrup: The C++ Programming Language, Adisson-Wesley, 3 nd edition, 1997 Manuale electronice

elma
Télécharger la présentation

Programare orientata- obiect (POO) utilizand C++

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. Programare orientata- obiect (POO)utilizand C++ Dorel Lucanu

  2. Bibliografie • H. Schildt: C++ manual complet, Teora, 2000 • Bjarne Stroustrup: The C++ Programming Language, Adisson-Wesley, 3nd edition, 1997 Manuale electronice • Peter Müller : Introduction to Object-Oriented Programming Using C++ • Bruce Eckel : Thinking in C++, 2nd Edition • *** : Online C++ tutorial • SGI Standard Template Library Programmer's Guide POO – Proiectarea de clase

  3. Organizare • pagina curs: • e posibil ca ordinea unor tematici sa fie schimbata • laboratoarele • exercitii de antrenament • exercitii de test • examinare • pe parcurs: 2 teste • 60% din nota finala • laborator • 40% din nota finala • conditii de promovabilitate • 40% din punctajul maxim de la teste • 60% din punctajul maxim de la laborator POO – Proiectarea de clase

  4. Curs 1 • Primul pas in POO • incapsulare si ascundere • Clase si obiecte • atribute, metode, stari • declararea claselor si obiectelor in C++ • utilizarea obiectelor in C++ • constructori, destructori • exemplul Cont • Tipuri abstracte de data si obiecte • Exemplul Stiva • Utilizare de clase: my_string POO – Proiectarea de clase

  5. Obiecte si clase • O prima definitie pentru obiecte si clase: • Un obiect este caracterizat de: • nume • atribute (date) • valorile atributelor la un moment dat definesc o stare • metode (servicii, operatii) • O clasa descrie unul sau mai multe obiecte ce pot fi precizate printr-un set uniform de atribute si metode. POO – Proiectarea de clase

  6. nume atribute metode Obiecte si clase - reprezentare grafica POO – Proiectarea de clase

  7. Clasa Cont (versiunea 01) • Specificarea clasei • Un cont bancar: • are un titular, sold, o rata a dobinzii, numar de cont si • se pot efectua operatii de depunere, extragere, actualizare sold • Extragerea atributelor: • titular, sold, rata a dobinzii, numar de cont • Extragerea metodelor • depunere, extragere, actualizare sold • Completarea specificatiei • actualizare sold  data ultimei operatii POO – Proiectarea de clase

  8. Clase (continuare) • definitia unei clase presupune: • combinarea datelor cu operatii • ascunderea informatiei POO – Proiectarea de clase

  9. Cont sold sold depune( ) depune( ) Combinarea datelor cu operatiile asupra lor • datele si operatiile asupra lor sint incluse in aceeasi unitate sintactica • datele si procesele devin legate • C++: clase, structuri POO – Proiectarea de clase

  10. OK! cont.depune(suma) Ascunderea informatiei • modul de structurare a datelor nu este cunoscut • actiunile asupra datelor sint realizate numai prin operatiile (metodele) clasei • si anumite actiuni pot fi ascunse: e.g., validare a contului cont.sold += suma POO – Proiectarea de clase

  11. Incapsulare Incapsulare Ascundere = Combinare + POO – Proiectarea de clase

  12. Combinarea: avantaje • defineste clar ce structuri de date sint manevrate si care sunt operatiile legale asupra lor • adauga programului modularitate • scade riscul ca datele sa fie alterate de programele "slabe" • faciliteaza ascunderea informatiei POO – Proiectarea de clase

  13. Ascunderea informatiei: avantaje • programe mai sigure si fiabile • elibereaza clasele utilizator de grija cum sint manevrate datele • previne aparitia erorilor produse de clasele utilizator ce manevreaza datele utizind cod "slab" POO – Proiectarea de clase

  14. Incapsulare (Combinare + Ascundere): avantaje • combinare + ascunderea informatiei = protejarea datelor • previne aparitia erorilor prin limitarea accesului la date • asigura portabilitatea programelor • faciliteaza utilizarea exceptiilor • interfata unei clase = operatiile cu care o clasa utilizator poate manevra datele POO – Proiectarea de clase

  15. sectiuni publice sectiuni private Structurarea nivelului de acces la informatie limitarea accesului la informatii POO – Proiectarea de clase

  16. Cont.h class Cont { public: Cont(); ~Cont(); void depune(double); void extrage(double); void setDob(double); private: char *titular; char *nrCont; double sold; double rataDob; char *dataUltOp; void actualizeazaSold(); void atribuieNrCont(); }; POO – Proiectarea de clase

  17. Cont::Cont() { titular = NULL; dataUltOp = NULL; sold = 0; rataDob = 0; atrbuieNrCont(); } Cont::~Cont() { delete titular; delete dataUltOp; } void Cont::depune(double suma) { sold += suma; } void Cont::setDob(double nouaRata) { actualizeazaSold(); rataDob = nouaRata; } . . . Cont.cpp POO – Proiectarea de clase

  18. Demo.cpp void main() { Cont cont; cont.depune(2000); } cont.sold += 5000; error C2248: 'sold' : cannot access private member POO – Proiectarea de clase

  19. Tipuri de date abstracte si obiecte • A doua definitie pentru obiecte si clase: • O clasa este o implementare a unui tip de date abstract. Ea defineste atribute si metode care implementeaza structura de date respectiv operatiile tipului de date abstract. • Un obiect este o instanta a unei clase. El este unic determinat de numele sau si defineste o stare reprezentata de valorile atributelor sale la un anumit moment particular. POO – Proiectarea de clase

  20. Stiva tab[0..MAX-1] virf push() pop() top() este_vida() Stiva • tipul de data abstract Stiva • entitati de tip data: liste LIFO • operatii • push() • pop() • top() • este_vida() POO – Proiectarea de clase

  21. Stiva.h class Stiva { public: Stiva(); ~Stiva(); void push(char); void pop(); char top(); bool este_vida(); private: char tab[MAX_STIVA]; int virf; }; POO – Proiectarea de clase

  22. Stiva.cpp void Stiva::push(char c) { if (virf == MAX_STIVA-1) throw "Depasire superioara."; tab[++virf] = c; } char Stiva::top() { if (virf < 0) throw "Depasire inferioara."; return tab[virf]; } POO – Proiectarea de clase

  23. Stiva_demo Stiva s; char c = 'a'; try { while (true) { s.push(c++); cout << s.top() << endl; } } catch (char *mes_err) { cout << mes_err << endl; } a b c d e f g h i j Depasire superioara. Press any key to ... POO – Proiectarea de clase

  24. Utilizarea de clase • exista multe bibloteci de clase • STL • MFC • etc • pentru utilizare, trebuie cunoscuta doar interfata (elementele publice) • nu intereseaza implementarea • programul care utlizeaza clasa este independent de implementarea clasei • Exemplu: string • my-string.h • STL POO – Proiectarea de clase

  25. my_string.h class string { public: // Constructori/destructori string(); string(char* new_string); string(const string& new_string); . . . ~string(); POO – Proiectarea de clase

  26. my_string.h (continuare) // operatii int size() const; const char* c_str() const; // operatori friend string operator+ (const string& lhs, const string& rhs); string& operator= (const string& a_string); . . . private: char* char_arr; int string_length; }; POO – Proiectarea de clase

  27. my_string - utilizare string s1("123"); // creare sir dintr-un sir C string s2; // creare sir vid s2 = string("abc") + s1; //creare sir si concat. s1 = s2 ; // operator atribuire string s3(s2); // apelare constructor de copiere s1 = "armata"; // constructor si op. atribuire b = (s1 == s2); // operatorul de testare a egalit. STL (Standard Template Library) #include <string> #using namespace std POO – Proiectarea de clase

  28. cont.h (versiunea 02) #include <string> using namespace std; class Cont { public: . . . private: string titular; string nrCont; . . . string dataUltOp; . . . }; POO – Proiectarea de clase

  29. demo.cpp (versiunea 02) Cont cont("Ionescu", 10000); cont.extrage(2000); cont.afiseaza(); Titular: Ionescu Sold: 8000 ... #include "..\string\my_string.h" ... Titular: Ionescu Sold: 8000 POO – Proiectarea de clase

More Related