Sunteți pe pagina 1din 5

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei


Departamentul ISA

Raport
Lucrare de Laborator Nr. 1
LA DISCIPLINA “PROGRAMAREA ORIENTATĂ PE OBIECT”

Tema : Conceptele POO

A efectuat : st. Gr. TI-161 FR


Raducan Alina

A verificat: asistent universitare


Scrob Sergiu
Chişinău 2018

1. Obiective

- Formarea unei imagini generale, preliminare, despre programarea


orientată pe obiecte (POO) şi deprinderea cu noile facilitaţi oferite de limbajul C++.
- Studierea principalelor concepte (caracteristici) ale POO: abstractizarea, incap.....
- crearea unei aplicaţii de tip consolă în limbajul de programare
C++. Să se ofere răspuns la lista de întrebari adresate mai jos. Studentul trebuie să
realizeze un raport de tip document (doc sau docx) care să includă pagina de titlu, tema,
sarcina si obiectivele lucrării, lista de întrebarile şi răspunsuri, codul sursă a aplicaţiei,
rezultate - imagini screenshot a aplicatiei, concluzie personală referitor la această lucrare

2. Sarcina lucrării

Folosind funcţii şi clase friend, să se realizeze un program care implementează gestiunea


unui magazin de CD-uri, folosind o clasă CD. Fiecare obiect de tip CD are câmpurile:
interpret, titlu şi melodii_componente. Melodiile trebuie memorate sub forma unei liste
simplu înlănţuite. Programul trebuie să permită 2 opţiuni: introducerea informaţiilor
pentru CD-uri şi afişarea tuturor CD-urilor în ordinea introducerii (titlu, interpret,
melodiile care le cuprind). Cele 2 funcţii care realizează aceste operaţii vor fi funcţii
friend ale clasei CD şi nu metode ale acesteia.

3. Teoria

Conceptele Programarii Orientată Obiect (POO) este o metodă de proiectare și


implementare în care programele sunt reprezentate sub forma unor colecții de obiecte
care interacționează între ele prin intermediul mesajelor.

Principiile de baza sunt:

 Abstractizarea – Este posibilitatea ca un program să ignore unele aspecte ale informației


pe care o manipulează, adică posibilitatea de a se concentra asupra esențialului. Fiecare
obiect în sistem are rolul unui “actor” abstract, care poate executa acțiuni, își poate modifica
și comunica starea și poate comunica cu alte obiecte din sistem fără a dezvălui cum au fost
implementate acele facilitați. Procesele, funcțiile sau metodele pot fi de asemenea abstracte,
și în acest caz sunt necesare o varietate de tehnici pentru a extinde abstractizarea:
 Încapsularea – numită și ascunderea de informații: Asigură faptul că obiectele nu pot
schimba starea internă a altor obiecte în mod direct (ci doar prin metode puse la dispoziție de
obiectul respectiv); doar metodele proprii ale obiectului pot accesa starea acestuia. Fiecare
tip de obiect expune o interfață pentru celelalte obiecte care specifică modul cum acele
obiecte pot interacționa cu el.
 Polimorfismul – Este abilitatea de a procesa obiectele în mod diferit, în funcție de tipul
sau de clasa lor. Mai exact, este abilitatea de a redefini metode pentru clasele derivate. De
exemplu pentru o clasă Figura putem defini o metodă arie. Dacă Cerc, Dreptunghi, etc. ce
vor extinde clasa Figura, acestea pot redefini metoda arie.
 Moștenirea – Organizează și facilitează polimorfismul și încapsularea, permițând
definirea și crearea unor clase specializate plecând de la clase (generale) deja definite -
acestea pot împărtăși (și extinde) comportamentul lor, fără a fi nevoie de a-l redefini. Aceasta
se face de obicei prin gruparea obiectelor în clase și prin definirea de clase ca extinderi ale
unor clase existente. Conceptul de moștenire permite construirea unor clase noi, care
păstrează caracteristicile și comportarea, deci datele și funcțiile membru, de la una sau mai
multe clase definite anterior, numite clase de bază, fiind posibilă redefinirea sau adăugarea
unor date și funcții noi. Se utilizează ideea: ”Anumite obiecte sunt similare, dar în același
timp diferite”. O clasă moștenitoare a uneia sau mai multor clase de bază se numește clasă
derivată. Esența moștenirii constă în posibilitatea refolosirii lucrurilor care funcționează.

Altfel spus o problemă preluată din natură trebuia fragmentată în repetate rânduri astfel încât
să se identifice elementele distincte, implementabile într-un limbaj de programare. O mare
problemă a programării procedurale era separarea datelor de unitățile care prelucrau datele
(subrutinele), ceea ce făcea foarte dificilă extinderea și întreținerea unui program. Astfel s-a
pus problema ca aceste două entități (date și subrutine) să fie grupate într-un anumit mod,
astfel încât subrutinele să "știe" în permanență ce date prelucrează și, mai mult decât atât, ele
să formeze un modul, adică o unitate care separă implementarea de interfață, ceea ce implică
posibilitatea refolosirii codului. A apărut astfel conceptul de clasă. Clasa realizează, în speță,
ceea ce am văzut mai înainte: grupează datele și unitățile de prelucrare a acestora într-un
modul, unindu-le astfel într-o entitate mult mai naturală. Deși tehnica se numește
"Programare Orientată Obiectual", conceptul de bază al ei este Clasa. Clasa, pe lângă faptul
că abstractizează foarte mult analiza/sinteza problemei, are proprietatea de generalitate, ea
desemnând o mulțime de obiecte care împart o serie de proprietăți.

4. Întrebări

1. Explicaţi termenul de iniţializare.

În cazul datelor de tipuri predefinite, este posibilă inițializarea acestora la momentul


declarării. Exemplu: int x=10; float a[2]={3,8}; n În cazul obiectelor, inițializarea la
declarare se face prin intermediul unor funcții speciale numite constructori.

2. Ce este încapsularea?

Incapsularea se refera la protectia datelor unui obiect.


utilizatorul ( tot programator ) al unui obiect sa nu aibe acces direct la datele clasei;
in programarea structurata, structurile erau publice , daca apelai x.medie = 6; acesta iti
mergea si poate sa-ti strice programu;
pentru programe mici nu iti ofera cine stie ce avantaj , dar daca implementezi ceva complex,
programarea pe obiecte este foarte avantajoasa.

3. Ce cuvinte cheie se utilizează pentru definirea constructorului şi a destructorului?

Pentru definirea constructorului si destructorului se utilizeaza cuvintul-cheie numele


clasei . Iar pentru desturctor se mai adauga un sumbol in fata constructorului cu
numele tilda.

4. Poate oare un constructor să returneze o valoare?


Constructorul nu returneaza nici o valoare fiindca participa la initializare

5. Pot oare să existe clase fără constructori?


Da .In cazul in care nu se defineste constructor, compilatorul creeaza automat un
constructor.
6. Cîţi constructori poate conţine o clasă? Dar destructori? De ce?
Nu este limitat numarul de constructori, dar e limitat numarul de destructori(unul
singur);
Numarul de constructori este stabilit in functie de cerinte si limitele limbajului.

7. Enumeraţi tipurile de constructori?

Implicit, cu parametri: de copier si de conversie

8. Cum se apelează un constructor?

Apelarea unu contructor are loc la instantierea unei classe

9. De ce este nevoie de definit un constructor de copiere?

Pentru a putea copia obiectle clasei, si a manipula mai comod cu datele.

10. De ce este nevoie de definit un constructor de conversie a tipului?

Un astfel de constructor este binevenit la supraincarcarea operatorilor, si la


conversiile dintr-un tip in altul.

11. În ce cazuri se apelează constructorul de copiere? Care este sintaxa apelului?

Constructorul de copiere transmite o referinta catre un obiect din aceiasi clasa.


Permite crearea unui obiect din-trun obiect deja existent.

12. Ce sunt listele de iniţializare (iniţializatori)?

13. În care caz se defineşte obligatoriu constructorul implicit?

Daca o clasa nu are definit nici un constructor, compilatorul genereaza un constructor


implicit avind corpul vid.

14. Ce este operatorul de rezoluţie?

In C++ este definit un operator de rezolutie ( :: ), care permite accesul la un identificator


cu domeniu fisier, dintr-un bloc în care acesta nu este vizibil, datorita unei alte declaratii.
Principala aplicatie a operatorului este legata de clase si obiecte si va fi prezentata mai
târziu.

15. Referinţa este un pointer?


16. Care sunt operatorii de alocare şi dezalocare de memorie în limbajul C++?

Operator de alocare de memorie new


Operator dezalocare a memorie delete

5. Cod sursă
6. Rezultate (imagini)
7. Concluzie

S-ar putea să vă placă și