Indrumar laborator POO

download Indrumar laborator POO

of 48

Transcript of Indrumar laborator POO

PROGRAMAREA ORIENTAT PE OBIECTE

NDRUMAR DE LABORATOR

Liviu erbnescu UNIVERSITATEA HYPERION

LISTA LUCRRILOR

1. Iniiere ntr-un mediu de programare. Structura unui program C++. 2. Noiunea de clas i obiect. Operatori specifici C++. 3. Clase i moteniri. Clase de baz virtuale 4. Constructori i destructori 5. Modificatorii i specificatorii de acces 6. Date i funcii de tip friend i statice 7. Polimorfism, funcii virtuale 8. Suprancrcarea operatorilor 9. Fluxuri de intrare/ieire.Obiecte standard 10. Fluxuri de intrare/ieire.Operatii de intrare/iesire cu fisiere 11. Tratarea excepiilor 12. Utilizarea claselor wxWidgets (I) 13. Utilizarea claselor wxWidgets (II) 14. Teste.

LABORATORUL NR.1 INIIERE NTR-UN MEDIU DE PROGRAMARE. STRUCTURA UNUI PROGRAM C++ Scop: 1. Familiarizarea cu mediul integrat CodeLite. 2. nelegerea structurii unui program scris n limbajul C++. 3. nelegerea bibliotecilor ce utilizeaz programarea orientat pe obiecte.

Consideraii teoretice: Mediul integrat - OpenSource - CodeLite Un spaiu de lucru (workspace) detine un numar de proiecte, de exemplu, acestea pot avea legtur unele cualtele sau nu Crearea unui spaiu de lucru se realizeaz prin selectarea " "Workspace | Create new Workspace"" Un proiect (project) poate avea va rezultat n urma compilrii i apoi a link-editrii un executabil, o bibliotec dinamic (*.DLL), o bibliotec static(*.LIB), etc. Proiectul n sine conine toate informaiile necesare pentru a produce o aplicaie de un anumit tip (aplicaie consol, aplicaie grafic ce utilizeaz un anumit set de controale vizuale, aplicaie cu obiecte grafice, etc). Fiierul ce conine informaii despre spaiul de lucru se numete .workspace Fiierul ce conine informaii despre proiect este . prj Pentru crearea unui proiect nou se va utiliza opiunea GUI (Graphics User Interface).

Structura unui program C++ Un programC++ cuprinde urmtoarele elemente pricipale:

operatori (aritmetici, logici, etc) instruciuni (de decizie, de parcurgere a unei bucle, etc) funcii (apelate din cadrul bibliotecilor sau definite de utilizator) variabile i constante funcia main()

Textul unui program poate fi scris ntr-un fiier sau n mai multe fiiere. Un program va avea o singur funcie main() indiferent dac este scris ntr-un singur fisier sau n mai multe fiiere. Programul compilat i linkeditat va incepe ntodeauna prin lansarea n execuie a instruciunilor i funciilor din cadrul lui main(). Prin ieirea din funcia main() se ncheie i execuia programului.

Desfurarea lucrrii: 1. Lansarea mediului CodeLite, i studierea principalelor componente ale interfeei acestuia 2. Crearea unor spaii de lucru 3. Crearea unui proiect pentru aplicaie consol 4. Compilarea unui exemplu. Modificarea setrilor implicite de compilare. 5. Executarea separat aLink-editrii pentru o aplicaie. Modificarrea setrilor implicite pentru link-editare 6. Adugarea bibliotecilor cu clase. 7. Recompilarea (avnd i biblioteci cu clase) 8. Relinkeditarea .

LABORATORUL NR.2 NOIUNEA DE CLAS I OBIECT. OPERATORI SPECIFICI C++ Scop: 1. nelegerea noiunilor de clas i obiect 2. nelegerea operatorilor specifici C++ Consideraii teoretice:CONCEPTE FUNDAMENTALE Ideea de baza de la care pleaca programarea orientata obiect este de a grupa structurile de date cu operatiile care prelucreaza respectivele date. Un asemenea ansamblu poarta denumirea de obiect sau clasa (tipul datei). Proiectarea de programe utilizand clase se numeste programare orientat pe obiecte (OOP- Object Oriented Programming). Notiuni fundamentale: Datele (membrii) i funciile (membrele / metodele) unei clase Datele sunt reprezentate prin declaraiile variabilelor din cadrul clasei. n cadrul unei clase pot fi declarate inclusiv variabile de tip structur sau de tip clas. Date + Metode = Obiect sau Clas (tipul datei) Principiul ncapsulrii (ascunderea informaiei ce st la baza realizrii clasei): accesul la datele membre se poate face numai prin intermediul setului de metode asociat. Obiectul este caracterizat complet prin metodele asociate. O parte din metode vor fi utilizate de cel ce utilizeaz clasa n cadrul aplica iilor, iar alt parte va fi invizibil pentru utlizatorul final (att codul ct i apelul acestora). Conform principiului ncapsulrii utilizatorul nu are acces la date ci numai la metodele pe care dezvoltatorul clasei le-a lsat pentru a putea fi apelate.Operatorii specifici C++ OPERATORUL SIMBOLU L rezoluie / indicator acces valoare valoare new delete this :: .* ->* newdelete

FORMA ::a ::f() OB.*a OB->*a new tipdelete a delete a[]

Operaia realizat- acceseaz variabilele globale chiar dac au acelai nume cu cele locale - acceseaz membrii/membrele claselor - ntoarce valoarea (OB valoare) - ntoarce valoarea (OB pointer) aloc memorie. ex ptr. un vector de 10 ntregi: new int[10], ntoarce NULL n caz de eec altfel ntoarce adresa alocat elibereaz zona de memorie arat adresa obiectului curent (n care ne aflm) iar *this este valoarea obiectului curent

this

this/ *this

Desfurarea lucrrii: 1. Se execut exemplele corespunztoare din seciunea TESTE

LABORATORUL NR.3 CLASE I MOTENIRI. CLASE DE BAZ VIRTUALE Scop: 1. negerea motenirii claselor 2. Utilizarea funciilor i a claselor de baz virtuale Consideraii teoretice:Procedeul de derivare permite definirea unei clase noi, numit clas derivat, care motenete propietile (membri + membre) unei clase deja definite, numit clas de baz, pe care le completeaz cu propieti (membri+membre) noi. Clasa de baz nu este afectat i nu trebuie recompilat, declaraia (fiierul header) i codul obiect (fiier obj / dll/ lib) ale clasei de baz sunt suficiente pentru crearea unei clase derivate. Dintr-o clas (numit clas de baz) pot fi derivate mai multe clase, iar fiecare clas derivat poate servi ca baz pentru alte clase derivate. Astfel se realizeaz o ierarhie de clase. Pornind de la clase simple i generale, fiecare nivel al ierarhiei acumuleaz caracteristicile (membri +membre) claselor "printe" (baz) i le adaug un anumit grad de specializare. n cazul n care o clas motenete proprietile mai multor clase avem motenire multipl. Sintaxa declaraia clasei derivate n cazul unei singure clase de baz: class nume_clasa_derivata : modificator_acces nume_clas_baza iar n cazul mai multor clase de baz (motenire multipl): class nume_clasa_derivata : modificator_acces nume_clas_baza_1 []

Funciile constructor, destructor i mecanismul de motenire Clasa de baz, clasa derivat, sau ambele, pot avea funcii constructor i/sau destructor. Cnd o clas de baz i una derivat conin att funcii constructor ct i destructor, cele constructor sunt executate n ordinea derivrii iar funciile destructor sunt executate n ordine invers. Adic duncia constructor din clasa de baz este executat naintea celei din clasa derivat iar destructorul unei clase derivate este executat naintea celui din clasa de baz. Cnd se expliciteaz costructorul din clasa derivat trebuie s se specifice care din constructorii clasei de baz este apelat ( constructorii difer ntre ei - n momentul declarrii - prin numrul i tipul argumentelor) De asemenea, primele argumente din constructorul clasei derivate trebuie s coincid cu argumentele constructorului ales din clasa de baz. Sintaxa este: nume_clas_derivat::nume_clas_derivat(lista_argumente_1,lista_argumente_2):nume_clas a_baza (lista_argumente_1v) { corpul constructorului } unde: lista_agumente_1 este lista de argumente a constructorului bazei (tipuri +variabile), lista_agumente_1v este lista de argumente a constructorului bazei (variabile) iar lista_agumente_2 este lista de argumente a suplimentar, specific constructorului clasei derivate (tipuri +variabile) iar n cazul motenirii multiple sintaxa este: nume_clas_derivat::nume_clas_derivat (lista_argumente_1, lista_argumente_2):nume_clasa_baza_1(lista_argumente_11v)[] { corpul constructorului }unde lista_argumente_n1v sunt incluse n lista_argumente_1v

Clase de baz virtuale Presupunem ca avem o clas BAZA i dou clase ce deriv din BAZA, numite DER1 i DER2. Apoi din DER1 i DER2 derivm o alt clas denumit DER12 . Deci, clasa DER12 motenete de dou ori clasa BAZA, o dat prin DER1 i o dat prin DER2. Acest lucru determin o ambiguitate cnd clasa DER12 vrea s aib acces la datele din clasa BAZA. (de ex. pot fi date din clasa BAZA, modificate n cadrul clasei DER1

sau modificate n cadrul clasei DER2 - att DER1 ct i DER2 au cte o copie a clasei BAZA). Pentru a rezolva aceast ambiguitate, C++ include un mecanism prin care doar o copie a clasei BAZA va fi inclus n clasa DER12. Acesta const n declararea clasei BAZA ca fiind clasa de baz virtual. Se utilizeaz cuvntul cheie virtual naintea modificatorului de acces. (ex: class DER1: virtual public BAZA {}; class DER2: virtual public BAZA {}; class DER12: public DER1, public DER2 {};#include #include //mostenire de tip - diamant class A{ int a1,a2; public: A() {a1=0;a2=0;} A(int a1_,int a2_) {a1=a1_;a2=a2_;} void afis() {std::cout