PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Documente similare
Microsoft Word _POO_Lab_1_Modificari_v01.htm

Laborator 3

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Ingineria Sistemelor de Programare

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Paradigme de Programare

PROGRAMARE ORIENTATA PE OBIECTE

Top

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

CURS

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

Microsoft Word - CarteC.doc

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Paradigme de programare

Microsoft Word - lab4.doc

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Programarea şi utilizarea calculatoarelor

Microsoft Word - O problema cu bits.doc

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

SUBPROGRAME

Slide 1

E_d_Informatica_sp_MI_2015_bar_02_LRO

Programarea şi utilizarea calculatoarelor

tehnologii web

Proiectarea Sistemelor Software Complexe

-

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Slide 1

proiectarea bazelor de date

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

PHP (II)

Declararea variabilelor

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Microsoft Word - Curs_09.doc

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

PPSD

Microsoft Word - Curs_07.doc

1

Curs 6 Gestiunea memoriei in C++ Alocare dinamica. Destructor. RAII. Rule of three. Tratarea excepțiilor exception safe code Moștenire Curs 5 Template

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Limbaje de Programare Curs 8 – Fisiere

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Programarea şi utilizarea calculatoarelor

Microsoft Word - CarteC.doc

Introducere în limbajul JavaScript

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Ghid utilizare aplicație PARKING BUCUREȘTI Aplicație PARKING BUCUREȘTI 1

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Slide 1

4. Detectarea cantelor Calculul gradientului într-o imagine Detectorul de cante Canny Transformata Hough În această lucrare vor fi studiate metode de

Diapositive 1

Информационная система персонализации, печати и учета документов об образовании

-

CL2009R0976RO bi_cp 1..1

Act Aditional Nr. 1 la Regulamentul Campaniei Începe vara Coca-Cola! S.C. Coca-Cola HBC Romania S.R.L. (denumita in continuare "Organizatorul"), socie

Progresivitatea dezvoltării limbajului la preșcolari prin aplicarea probelor de evaluare

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

Lucrarea nr. 9 - Liste dublu înlănţuite Breviar teoretic În cadrul elementelor studiate anterior s-a putut observa utilitatea listelor simplu înlănuit

Microsoft Word - CarteC.doc

Inteligență artificială Laboratorul 8 Perceptronul și rețele de perceptroni în Scikit-learn Stanga :multimea de antrenare a punctelor 3d; Dreapta : mu

MANUAL UTILIZARE ANGAJATORI PISA 2.0 Aplicatia este accesibila de pe siteurile: respectiv de la buto

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

-

Microsoft Word - dice town.docx

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft Word - PCLP2_Curs_4_2019.doc

A

GHID PENTRU RESETAREA PAROLEI Informații Generale Din dorința de a facilita procesul de autentificare, chiar dacă nu mai cunoașteti datele necesare, a

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare

Tema laborator TS.NET 2019 Vom simula (partial, in scop didactic) activitatea unui service auto. Pentru aceasta vom considera urmatoarele tipuri: Clie

REGULAMENTUL OFICIAL AL CAMPANIEI PROMOTIONALE

COMISIA EUROPEANĂ DIRECȚIA GENERALĂ INFORMATICĂ Componenta de aplicare a politicii WiFi4EU Ghid de implementare v1.0 Cuprins 1. Introducere Br

Subiectul 1

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Sesiunea de comunicări ştiinţifice studenţeşti – Ediţia 2019

REGULAMENTUL Campaniei Promotionale

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Platforma 5. 1 Introducere in MSSQL Introducere Pe parcursul ultimilor ani, se poate observa o cuplare a limbajelor de programare majore cu tipuri de

Oferte preactivate

REGULAMENTUL OFICIAL AL CAMPANIEI PROMOȚIONALE TOMBOLA IKEA FAMILY SECŢIUNEA 1. ORGANIZATOR Organizatorul prezentei loterii publ

Structuri de date pentru partiţii de mulţimi O partiţie finită a unei mulţimi nevide S este o mulţime finită de submulţimi ale lui S: {S 1, S 2,..., S

REGULAMENTUL CAMPANIEI PROMOTIONALE

E_d_Informatica_sp_SN_2014_bar_10_LRO

Microsoft Word - Excel_3.DOC

Transcriere:

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri noi de date, inexistente pana in momentul acela in limbajul C++. Cuvantul cheie prin care creem o clasa este class, acesta nefiind permis a fi folosit ca nume de variabila pentru ca este un cuvant rezervat. Tipul nou definit de data va constitui tipul obiectelor create in program. Obiectele sunt instante ale unei clase sau exemplare ale unei clase. Putem crea oricate obiecte(exemplare) de tipul clasei definite intr-un program. O clasa are doua elemente principale: Atribute si Metode Atributele reprezinta insusirile sau proprietatile pe care le poate avea tipul nou de data pe care il definim. Atributele sunt de fapt variabile cunoscute din limbajul C++ care trebuie sa prezinte un tip si un nume(int greutate, double real, string nume etc). Exemple: clasa complex are ca atribute : partea reala si partea imaginara, o alta clasa persoana poate avea o serie de atribute precum: nume, prenume, varsta, greutate Metodele reprezinta actiunile posibile care pot fi realizate pe baza atributelor. Metodele sunt identificate in programarea procedurata ca fiind functii care au bineinteles un tip de data, un nume, un corp al functiei (corpul descrie cum lucreaza functia) si eventual o valoare returnata (un functie de tipul de date al functiei). Pentru orice clasa putem scrie o serie de metode speciale: Metode de tip setter prin care atribuim indirect valori atributelor si metode de tip getter prin care extragem valori ale atributelor. Ordinea fireasca este de a folosi intai un setter si apoi un getter. Metodele de tip setter vor avea tipul void pentru ca nu returneaza nimic dar vor avea un argument, metodele de tipul getter vor avea tipul de date pe care il returneaza, exemplu: getterul pentru partea reala va returna un double, getterul pentru nume va returna un string, getterul pentru varsta va returna un int, etc Compilatorul va deduce ca e vorba de un getter sau un setter dupa prezenta sau absenta argumentului de functie. Daca metoda are argument inseamna ca va apela setterul, daca metoda nu are argument va apela getterul. Conceptul care sta la baza acestui comportament se numeste Polimorfism. O serie aparte tot de metode speciale este reprezentata de constructori. Orice clasa are un constructor implicit care este apelat intotdeauna la crearea unui obiect. Constructorul implicit poate fi realizat de compilator pentru noi desi nu va insera cod suplimentar vizibil in program. Insa constructor implicit putem scrie si noi ca programatori. In acest ultim caz compilatorul nu va mai crea un constructor

automat. Prin constructorul implicit ne propunem sa atribuim valori default atributelor in momentul cand creem un obiect dar nu mai dorim sa accesam si metoda setter pentru acel obiect. De fapt sunt mai multe metode de a face ca atributele sa primeasca valori: Atribuire directa : nu ne dorim in programare acest lucru deoarece dorim sa protejam atributele pentru a nu primi valori nedorite. Atribuirea directa se folosea in programarea procedurala. Atribuire indirecta prin setter: este de preferat a fi folosita deoarece in metoda setter putem face verificari suplimentare(filtrari) cu privire la valorile date atributelor. Exemplu: daca dorim sa dam valori unui atribut de tip numitor de fractie, atunci in metoda setter trebuie sa testam daca nu cumva valoarea trimisa atributului numitor este zero ( o fractie nu poate avea numitorul zero- caz de nedeterminare). Atribuire indirecta prin constructor implicit. Metoda aceasta o folosim in momentul cand nu dorim sa mai creem o metoda setter si dorim ca toate obiectele de acel tip al clasei sa primeasca valori default. Mai sunt apoi o ultima parte de metode standard dar acestea sunt specifice fiecarei clase in parte. De exemplu clasei Persoana ii putem asocia metodele: Mananca(), Dieta(), ProfilPersoana(). Clasei Pistol ii putem asocial mtodele: IncarcaGloante(), Trage(), PunePiedica()..etc. Atat atributelor si metodelor li se pot asocia modificatori de acces, acesta pot fi: public, protected, private. Daca ar fi sa facem o paralela cu ce se intampla la structuri de date, acolo datele din interiorul unei structure puteau fi accesate din exteriorul structurii, acesta inseamna ca datele membre ale structurii sunt date implicit publice. La clase insa situatia este la polul opus. Implicit toate datele membre ale unei clase sunt date private ; deci nu pot fi accesate din exteriorul clasei decat daca le asociem modificatori de acces. In lucrarea curenta ne dorim sa vizualizam efectul modificatorului de acces public, in felul urmator: atributele ne dorim sa ramana private, iar metodele de tip setter, getter dar si constructorul implicit ne dorim sa le facem publice. Declaratia pentru setter, getter si constructor o vom face in interiorul clasei, folosind modificatorul de acces public, iar definirea acestora o vom face inafara clasei pentru ca public ne permite acest lucru. Ne propunem asadar sa construim o prima clasa care modeleaza un numar complex. Ca si atribute lucram cu o parte reala _re si o parte imaginara _im, care nu vor avea modificator de acces alocat deci vor fi private, neaccesibile dinafara clasei. Preferam sa prefixam caracterul _ inainte de numele atributelor pentru a nu le confunda cu numele metodelor. Asadar metodele se vor numi Re() si Im(). Vom avea cate un setter si un getter pentru fiecare din cele doua atrubute deci 4 metode. O a cincea metoda va fi constructorul implicit.

Urmarim in continuare codul programului in care am creat clasa Complex: #include <iostream> using namespace std; class Complex //creez un nou tip de date numit Complex double _re; // declar cele doua atribute private _re si _im; double _im; // le pun _in fata ca sa le deosebesc de metodele cu acelasi nume //un atribut sau metoda care nu are modificator de acces, se considera implicit private public: clasei, accesibile //in continuare ne dorim doar sa declaram metodele in interiorul //le vom defini inafara clasei, avem acest drept deoarece sunt //datorita modificatorului de access public void Re(double val); //metoda setter pentru partea reala(publica) void Im(double val); //metoda setter pentru partea imaginara(publica) double Re(); //metoda getter pentru partea reala(publica) double Im(); //getter pentru imaginar(publica) Complex(); //constructorul implicit pentru clasa Complex ; void Complex::Re(double r)//definesc metoda de tip setter pentru partea reala //prin operatorul de rezolutie (::) precizez apartenenta metodei la clasa Complex _re=r; //atribui partii reale valoarea data ca parametru in metoda Re

void Complex::Im(double i)//definesc metoda de tip setter pentru partea imaginara _im=i; ////atribui partii reale valoarea data ca parametru in metoda Im double Complex::Re() //definesc metoda de tip getter pentru partea reala, //prin operatorul de rezolutie (::) precizez apartenenta metodei la clasa Complex return _re; double Complex::Im() //definesc metoda de tip getter pentru partea imaginara return _im; Complex::Complex()//definesc constructorul clasei Complex, //folosim tot operatorul de rezolutie deoarece suntem inafara clasei si trebuie sa precizam //clasa la care apartine acest constructor(ne foloseste in special in cazul programelor mai complexe //in care avem mai multe clase intr-un singur fisier.cpp _re =0.0; //atribui valori default pentru cele doua atribute ale clasei _im =0.0; //in caz ca prin getter nu atribui valori particulare acestor atribute //la crearea obiectului c1 atributele se initializeaza cu valorile din constructor //daca atribui valori atunci se initializeaza cu acele valori.

int main() double real,imag; Complex c0;//creez obiectul cu numele c0 si tipul Complex cout<<"partea reala este:"; cin>>real; cout<<"partea imaginara este:"; cin>>imag; c0.re(real); c0.im(imag); cout <<"Numarul complex introdus de la tastatura este: "<<c0.re()<< " + " << c0.im()<<"i\n"; Complex c1; //creez obiectul cu numele c1 si tipul Complex c1.re(2.0); //atribui elemente particulare prin setter, daca sunt comentate atunci se folosesc c1.im(3.5); //valorile default din constructor cout <<"Numarul complex obtinut prin metodele de tip setter este: "<<c1.re()<< " + " << c1.im()<<"i\n"; Complex c2;//creez obiectul c2 tot de tipul Complex in care atributele isi vor lua valorile //default din constructorul implicit cout <<"Numarul complex cu valori implicite din constructor este: "<<c2.re()<< " + " << c2.im()<<"i\n"; return 0;

Al doilea exemplu de clasa va fi clasa Persoana, care va avea ca si atribute: Nume, Prenume, Varsta, Greutate. Vom scrie setter si getter pentru fiecare din aceste 4 atribute, apoi constructor implicit pentru a initializa atributele cu valori default. Ca metode standard, vom implementa : Metoda TesteazaVarsta() care va lua un numar de la tastatura il va testa daca este intre anumite limite si doar daca este o varsta valida va fi atribuita persoanei. Metoda mananca() unde testam daca persoana nu cumva este deja prea grasa, caz in care nu ii mai dam de mancare ci doar vom afisa un mesaj de eroare. Daca persoana este normal atunci I se poate aplica metoda mananca in sensul ca greutatea va creste cu 10kg. Metoda dieta() unde testam ca nu cumva persoana este deja prea slaba, si implicit evitam cazul in care are o greutate negative (fizic imposibil) daca va avea mai putin de o anumita limita atunci afisam mesaj de eroare, daca este peste limita ii putem aplica metoda aceasta care consta in scaderea greutatii cu 10kg Metoda Profil() care, aplicata succesiv dupa mai multe metode mananca ()/dieta() va preciza in ce stare a greutatii se afla persoana, slaba, normal, grasa etc. Sa examinam codul acestei clase: #include <iostream> using namespace std; class Persoana string _nume,_prenume; //atributele clasei Persoana, private int _varsta,_greutate; public: void Nume(string n); //setter pentru nume void Prenume(string p); //setter pentru prenume string Prenume(); //getter pentru prenume string Nume(); //getter pentru nume

void Varsta(int v); //setter pentru prenume int Varsta(); //getter pentru varsta int TesteazaVarsta(); //metode standard publice int Mananca(); int Dieta(); int Profil(); Persoana();//declar constructorul clasei Persoana ; void Persoana::Nume(string n) //setter pentru nume _nume=n; void Persoana::Prenume(string p) //setter pentru prenume _prenume=p; string Persoana::Nume() //getter pentru nume return _nume; string Persoana::Prenume() //getter pentru prenume return _prenume;

int Persoana::Varsta() //getter pentru varsta return _varsta; void Persoana::Varsta(int v) _varsta=v; int Persoana::TesteazaVarsta() //atribui varsta unui obiect dar in anumite limite int v; do cout<<"introduceti varsta persoanei : "; cin>>v; while(v<0 v>200); //testez daca varsta este valida _varsta=v; return _varsta; int Persoana::Mananca()//metoda standard if(_greutate<=80)//testez daca persoana este normala ca greutate _greutate=_greutate+10;

else sa slabeasca\n"; cout<<"persoana nu mai poate manca a devenit obeza, trebuie return _greutate; int Persoana::Dieta() if(_greutate<=30)//testez daca persoana nu cumva e prea slaba manance\n"; cout<<"persoana nu poate tine dieta, este prea slaba, trebuie sa else _greutate=_greutate-10; return _greutate; int Persoana::Profil() switch(_greutate) case 30: cout<<"persoana este foarte slaba\n";

case 40: cout<<"persoana este slaba\n"; case 50: cout<<"persoana este slabuta\n"; case 60: cout<<"persoana este Normala\n"; case 70: cout<<"persoana este Plinuta\n"; case 80: cout<<"persoana este Grasa\n"; default: cout<<"eroare\n"; Persoana::Persoana() // definesc constructorul clasei Persoana; _nume="popescu"; _prenume="ion"; _varsta=10; _greutate=50;

int main() Persoana standard;//valorile vor fi luate din constructorul implicit cout <<"Numele complet al studentului implicit este : "<<standard.prenume()<<" "<<standard.nume()<<"\n"; Persoana student;//valorile vor fi luate din setteri student.nume("dobrescu");//obiectul student apeleaza metoda de tip Setter iar atributul nume va lua valoarea "Dobrescu" student.prenume("vlad"); cout <<"Studentul "<<student.prenume()<<" "<<student.nume()<<" are varsta "<<student.varsta()<<" ani\n"; student.varsta(40);//valoare data prin setter cout<<"varsta studentului este "<<student.varsta()<<" ani\n"; //atribui varsta unui obiect dar in anumite limite cout<<"varsta studentului este "<<student.testeazavarsta()<<" ani \n"; Persoana p4; //creez obiectul p4 de tip Persoana p4.profil(); // cout<<"greutatea persoanei este "<<p4.mananca()<<"\n"; p4.profil(); cout<<"greutatea persoanei este "<<p4.mananca()<<"\n"; p4.profil();//apelez succesiv metoda profil intre diversele apeluri ale metodelor mananca() si dieta() cout<<"greutatea persoanei este "<<p4.mananca()<<"\n"; p4.profil(); cout<<"greutatea persoanei este "<<p4.mananca()<<"\n"; cout<<"greutatea persoanei este "<<p4.mananca()<<"\n";

p4.profil(); p4.profil(); p4.profil(); Tema: Modelati clasa Masina si clasa Vietate: construiti setteri, getteri, constructor implicit pentru fiecare si metode standard. Fiecare clasa se va realiza in fisier.cpp separat.