Extras din curs
Un TDA este constituit atat din date cat si functii, interfata unui TDA fiind conferita de multimea de operatii care se pot efectua asupra datelor
Obiectul reprezinta un element (entitate) care se constituie atat din structuri de date (atribute, caracteristici) cat si operatii (actiuni, comportament). Totodata, un obiect este considerat o instanta a unei clase, un caz particular al acesteia.
Clasa reprezinta o colectie de obiecte similare care impartasesc aceleasi atribute si acelasi comportament. Operatia de creare a unui obiect dintr-o clasa se numeste instantiere, de aici rezultand si denumirea de instanta pentru un obiect creat.
Mesajul reprezinta o functie care confera un comportament unui obiect. Trimiterea unui mesaj este echivalenta unei cereri adresata unui obiect de a invoca o functie. Mesajele sunt cele care permit comunicarea intre obiecte.
Incapsularea reprezinta principiul asociat abstractizarii datelor, in sensul ca structura de date utilizata este ascunsa, fiind furnizata doar o interfata. In programarea orientata pe obiecte incapsularea datelor se realizeaza cu ajutorul claselor.
Mostenirea reprezinta acea tehnica de programare prin care se pot utiliza si extinde clase deja create, utilizand astfel codul sursa deja scris. Mecanismul mostenirii permite dezvoltarea de noi clase numite clase derivate (subclase) din clase de baza (superclase). Avantajul acestei tehnici este faptul ca o clasa derivata mosteneste toate atributele si comportamentele clasei de baza, la care se pot adauga atribute si comportamente proprii.
Polimorfismul indica mai multe comportamente alternative intalnite in clase derivate inrudite. Polimorfismul se intalneste si sub sintagma "o singura interfata, mai multe metode", avantajul fiind numarul redus de elemente in cazul unei interfete comune care permite acces la mai multe actiuni.
Operatiile de intrare/iesire (I/O) se bazeaza pe conceptul de stream ce reprezinta un model abstract al dispozitivelor de intrare/iesire. Un stream este o secventa de octeti.
Sintaxa operatiei de intrare: cin>>v1>>v2>> >vn;
Sintaxa operatiei de iesire:cout<<e1<<e2<< <<en;
Biblioteca folosita este iostream.h. Biblioteca iostream include si patru stream-uri predefinite:
- cin - stream de intrare conectat la intrarea standard;
- cout - stream de iesire conectat la iesirea standard;
- cerr - stream de iesire setat pentru o iesire fara buffer catre un dispozitiv standard de eroare;
- clog - stream similar cu cerr, dar avand buffer.
In limbajul C, alocarea dinamica a memoriei se realizeaza cu ajutorul functiilor malloc, iar eliberarea memoriei cu functia free. In limbajul C++ exista doi operatori new si delete care joaca acelasi rol de alocare, respectiv dealocare a memoriei. Operatorul new returneaza un pointer la zona de memorie alocata dinamic, in caz de insucces returnand NULL. Operatorul delete elibereaza zona de memorie indicata de argumentul sau, care este de fapt un pointer obtinut ca urmare a alocarii cu operatorul new.
Sintaxa generala a operatorului de alocare dinamica a memoriei este:
tip * pt_tip;pt_tip=new tip;
sau direct:
Tip *pt_tip=new tip;
unde tip reprezinta un tip de date fundamental, iar pt_tip reprezinta pointerul catre tipul de date dorit.
Sintaxa generala a operatorului de dealocare dinamica a memoriei este:
delete pt_tip; unde pt_tip reprezinta pointerul catre tipul de date dorit pentru care s-a alocat memorie.
Clasa este un tip de date abstract si contine date membru si functii membru sau metode. Clasele ofera un nivel superior de protectie atat datelor, cat si functiilor membru, prin incapsularea datelor. O multime de obiecte ce impartasesc aceleasi atribute si aceleasi comportamente alcatuiesc o clasa.
Obiectele sunt instante ale unei clase care comunica intre ele prin intermediul metodelor (invocate la primirea unui mesaj). O metoda reprezinta o functie membru a unei clase. Comportamentul unui obiect reprezinta totalitatea metodelor care ii pot fi asociate.
In limbajul C++, definitia structurii este extinsa, astfel incat o structura devine un caz particular de clasa, cu exceptia faptului ca membrii unei structuri sunt impliciti publici, in tip ce membrii unei clase sunt impliciti privati, pentru a asigura incapsularea implicita a datelor.
Sintaxa declararii unei clase este urmatoarea:class nume_clasa
{private:
// date si functii membru private
public:
// date si functii membru publice
protected:
// date si functii membru protejate
};
Sectiunea privata desemnata de cuvantul cheie private sau in mod implicit, la inceputul clasei dupa acolada deschisa "{", grupeaza membrii clasei (date si functii), care sunt accesibili doar functiilor membru ale clasei respective si eventual, asa-numitelor functii prietene ale acesteia. Membrii privati nu sunt accesibili din afara clasei. Accesarea acestor membrii se face in mod indirect, prin intermediul functiilor publice.
Sectiunea publica desemnata de cuvantul cheie public grupeaza membrii clasei (date si functii), care sunt accesibili in toate sectiunile programului care acceseaza obiecte ale clasei respective.
Sectiunea protejata desemnata de cuvantul cheie protected grupeaza membrii clasei (date si functii), care pot fi accesati de catre clasele derivate din clasa respectiva.
Sintaxa de definire a unei functii membru:
tip NumeClasa::NumeFunctie(lista parametri)
{ declaratii locale;
Instructiuni;}
Preview document
Conținut arhivă zip
- POO.docx