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

Documente similare
Laborator 7 - Stream-uri

Microsoft Word - CarteC.doc

Limbaje de Programare Curs 6 – Functii de intrare-iesire

SUBPROGRAME

L7

Paradigme de Programare

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Top

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

Microsoft Word - CarteC.doc

Laborator 3

E_d_Informatica_sp_SN_2014_bar_10_LRO

E_d_Informatica_sp_MI_2015_bar_02_LRO

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

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

Limbaje de Programare Curs 8 – Fisiere

Microsoft Word _POO_Lab_1_Modificari_v01.htm

PROGRAMARE ORIENTATA PE OBIECTE

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

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

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

Limbaje de Programare Curs 5 – Siruri de caractere

tehnologii web

Microsoft Word - PCLP2_Curs_4_2019.doc

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

Slide 1

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

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Lab6LCD

LUCRAREA NR

Microsoft Word - c6.doc

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

Slide 1

Paradigme de programare

EXCEL FĂRĂ SECRETE Grafice şi diagrame

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

Înregistrator de temperatură şi umiditate AX-DT100 Instrucţiuni de utilizare

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

PCLPII-C16(9)

Slide 1

Minicurs CCS C / Aplicatia1 1.Programul CCS C Compiler. Instalare.Creare proiect. Descarcati ultima versiune a programului de

Microsoft Word - Programarea Portului Paralel - IBM-PC. .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

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Aggregating Data

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Analiză statică Analiza fluxului de date 23 octombrie 2014

Microsoft Word - Algoritmi genetici.docx

Addendum Syllabus 6 Microsoft Word 2016 REF Syllabus 6.0 Crearea unui document nou pe baza unor șabloane disponibile local sau online Microsoft

Ghid SmartTV-ro-M

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Analiză de flux de date 29 octombrie 2012

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

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

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Lucrarea 10

MIdland CT210 manual

Slide 1

Microsoft Word - O problema cu bits.doc

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

Microsoft Word - lab4.doc

proiectarea bazelor de date

CABINET MINISTRU

Programarea şi utilizarea calculatoarelor

Microsoft Word - 2 ES RO.doc

-

PPSD

Informație și comunicare

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

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 1. Google Drive, Google Calendar, WeTr

MyBRD Net Ghid practic de utilizare a Dispozitivului token

Declararea variabilelor

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

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

Diapositive 1

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

Ingineria Sistemelor de Programare

Object Oriented Programming

Utilizare Internet

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

Programarea şi utilizarea calculatoarelor

CURS

LABORATOR 1. Stocarea si partajarea fisierelor online cu ajutorul Dropbox, WeTransfer.com PREZENTAREA LUCRĂRII DE LABORATOR Lucrarea de laborator îşi

Manual de utilizare Room Booking System

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

Regulile jocului Hotline Hotline este un slot video cu 5 role, 3 rânduri și 30 de linii (fixe) care conține simboluri Wild și Expanding Wild, Re-Spins

PowerPoint Presentation

Microsoft Word - Curs_07.doc

Gestionarea I/E

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

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

Microsoft Word - Excel_3.DOC

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

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Laborator 2-3 Utilizarea programului de simulare electromagnetică EmPro Continuare În lucrarea de laborator se va investiga o linie de transmisie micr

Microsoft Word - PDS_proiect5_2019

Transcriere:

Laborator 2 - Încapsularea Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema 2.2 Să se modifice funcţiile referitoare la cerc astfel încât parametrul CERC să fie transmis prin referinţă. Consideraţii teoretice 2.2 La consideraţii teoretice 1.1 am prezentat faptul că funcţiile pot primi argumente în două feluri: apel prin valoare şi apel prin pointer. Acest lucru este valabil pentru compilatorul de C. Compilatorul C++ vine cu încă o metodă de transmitere a argumentelor: apelul prin refeinţă. Primele două moduri de transmitere a argumentelor le-am introdus prin intermediul unui exemplu, o funcţie care interschimba două valori. Vom exemplifica acest nou mod de transmitere a argumentelor prin intermediul aceluiaşi exemplu. void schimb(int &x, int &y) int r; r = x; x = y; y = r; int m=5,n=7; cout<<m<<" "<<n<<" "; schimb(m,n); cout<<m<<" "<<n; În acest caz variabilele locale x, y vor avea alocată memoria peste variabilele m, n. De fapt variabila x va ocupa în memorie exact aceeaşi zonă cu variabila m, la fel se întâmplă cu variabilele y şi n. main schimb m, x : 5 Perechile m, x şi n, y ocupând aceleaşi locaţii de memorie în momentul în care se face schimbarea de valori între x şi y automat acestă schimbare se reflectă şi pentru m şi n n, y : 7-1 -

Indicaţii 2.2 Se va forţa utilizarea compilatorului de C++ (de exemplu prin modificarea extensiei fişierului sursa în *.CPP) Tema 2.3 Să se definească tipul CERC în context C++ (fără operatorul typedef) Consideraţii teoretice 2.3 La consideraţiile teoretice 1.5 am prezentat modul de definire a unei structuri. Precizăm că acel mod de definire este specific compilatorului C (dar este totodată recunoscut şi de compilatorul C++). În C++, o dată ce a fost declarată o structură, se pot declara variabile de acel tip folosind doar numele structurii, fără să mai trebuiască să fie precedată de cuvântul cheie struct. Motivul acestei diferenţe între C şi C++ este acela că în C un nume generic de structură nu este un nume de tip complet, în timp ce în C++ este. În concluzie în C++ prin intermediul lui struct se vor defini noi tipuri de date. Forma generală va fi tot cea prezentată la punctul 1.5. struct nume_structura tip1 nume_membru1; tip2 nume_membru2;... variabile_structura; Memoria ocupată de o structură este egală cu suma memoriei ocupate de fiecare membru al structurii: sizeof(struct)= Σ(sizeof(membrii)) Ne vom folosi în continuare de următorul exemplu: o structură RATIONAL, pentru reprezentarea numerelor raţionale (de forma m/n) şi doua funcţii: una de afişare şi una care face adunarea unui număr raţional cu un întreg. struct RATIONAL ; ; void Adun_int(RATIONAL &x, int y) x.numarator += y*x.numitor; Afisez(x); - 2 -

x.numarator = 4; x.numitor = 3; Adun_int(x,2); Indicaţii 2.3 Atenţie la sintaxa de definire (la numele tipului şi la ; ). Tema 2.4 Să se mute funcţia Muta în interiorul structurii CERC Consideraţii teoretice 2.4 Într-o strctură se pot defini nu numai campuri de date ci şi funcţii. Forma geneală a definirii structurii va deveni: struct nume_structura tip1 nume_membru1; tip2 nume_membru2;... tip_returnat1 nume_functie1(lista_parametrii1);... ; Declararea funcţiilor definite într-o strctură se modifică astfel: tip_retunat1 nume_structura::nume_functie1(lista_parametrii) corp functie; ; Apelarea funcţiilor definite într-o strctură se va face astfel: nume_strctura variabila; variabila.nume_functie1(parametrii); Funcţiile definite într-o structură mai poartă numele de metode. Dimensiunea memoriei ocupată de structură nu se modifică datorită adaugării de metode în structură: sizeof(struct)= Σ(sizeof(membrii)) Revenim la exemplul prezentat la punctul anterior. Dorim să introducem în structura RATIONAL funcţia Adun_int. Exemplul va deveni: struct RATIONAL void Adun_int(RATIONAL &x, int y); ; - 3 -

; void RATIONAL::Adun_int(RATIONAL &x, int y) x.numarator += y*x.numitor; Afisez(x); x.numarator = 4; x.numitor = 3; x.adun_int(x,2); Indicaţii 2.4 Apelul metodei Muta trebuie făcut folosind operatorul. legat de un cerc. Tema 2.5 Să se renunţe la parametrul de tip CERC din cadrul metodei Muta. Consideraţii teoretice 2.5 În exemplul cu clasa RATIONAL apelul funcţiei Adun_int era sub forma: x.adun_int(x,2); Se observă că variabila x apare de două ori: la început fiind variabila care apelează funcţia Adun_int şi apoi ca parametru al funcţiei Adun_int. Apărând în două locuri ne punem întrbarea dacă nu este posibilă renunţarea la x ca şi parametru? Pentru a putea face acest lucru vom fi nevoiţi să ne folosim de pointerul this. Atunci cand este apelată o funcţie membru, i se pasează automat ca argument implicit pointerul this, care este un pointer către variabila care a generat apelarea (variabila care a invocat funcţia). Exemplul nostru va fi modificat astfel: struct RATIONAL void Adun_int(int y); ; ; void RATIONAL::Adun_int(int y) this->numarator += y*this->.numitor; Afisez(*this); - 4 -

x.numarator = 4; x.numitor = 3; x.adun_int(2); Indicaţii 2.5 Se va elimina parametrul de tip CERC şi se va înlocui cu cercul indicat de pointerul this. Atenţie, this este pointer şi uneori avem nevoie de cerc nu de adresa sa. Tema 2.6 Să se introducă în structura CERC şi celelalte funcţii care ţin de cerc în mod asemănător cu funcţia Muta. Indicaţii 2.6 Atenţie la funcţia OurInitGraph(). Se vor repeta temele 2.4 si 2.5 pentru fiecare din metodele respective Tema 2.7 Să se renunţe la scrierea lui this acolo unde este posibil. Consideraţii teoretice 2.7 La membrii unei strcturi se poate căpăta acces direct din cadrul unei funcţii membru, fără nici un specificator de obiect sau structură. this->x este echivalent cu x, unde x este un membru al structurii (atât câmp de date cât şi metodă). struct RATIONAL void Adun_int(int y); ; ; void RATIONAL::Adun_int(int y) numarator += y*numitor; Afisez(*this); x.numarator = 4; x.numitor = 3; - 5 -

x.adun_int(2); Indicatii 2.7 Deşi se poate renunţa la this nu uitaţi că de fapt compilatorul îl foloseşte. Tema 2.8 Să se găsească un membru (dată sau metodă) al structurii CERC care poate fi făcut privat şi programul să meargă fără alte modificări. Consideraţii teoretice 2.8 Într-o structură membrii pot fi de două tipuri: publici sau privaţi. Membrii publici sunt membrii care pot fi accesaţi atât de către metodele definite în structură cât şi de funcţiile din afara structurii. Membrii privaţi sunt membrii care pot fi accesaţi doar de către metodele definite în structură. Forma generală pentru definirea structurii va deveni: struct nume_structura lista_membrii_publici; private: lista_membrii_privati; lista_membrii_publici;... ; Implicit membrii unei structuri sunt publici. Indicaţii 2.8 Membrul respectiv nu trebuie să fie folosit din exteriorul structurii. Tema 2.9 Să se introducă o nouă metodă care să permită definirea tuturor datelor din structura CERC private. Consideraţii teoretice 2.9 Pentru a declara datele din structură private este necesară o funcţie publică care să facă iniţializarea datelor respective. Devenind private datele nu vor mai putea fi modificate decât cu ajutorul metodelor definite în structură. Exemplul cu structura RATIONAL ar putea fi rescris astfel: struct RATIONAL private: void Adun_int(int y); void Initializez(int x, int y); ; - 6 -

; void RATIONAL::Initializez(int x, int y) numarator = x; numitor = y; ; void RATIONAL::Adun_int(int y) numarator += y*numitor; Afisez(*this); x.initializez(4,3); x.adun_int(2); O justificare a ascunderii datelor în cazul exemplului nostru este aceea că altfel am putea risca să uităm să iniţializăm numitor-ul. Indicaţii 2.9 Se va folosi o metodă publică (cu patru parametrii) care va initializa toate datele respective. Tema 2.10 Să se transforme structura CERC în clasa CERC. Consideraţii teoretice 2.10 În C++ o structură este echivalentă cu o clasă, singura diferenţă fiind aceea că într-o structură implicit membrii sunt publici iar într-o clasă membrii sunt implicit privaţi. Forma generală a definirii unei clase este: class nume_clasa lista_membrii_publici; private: lista_membrii_privati; lista_membrii_publici;... ; O variabilă definită de tipul unei clase este un obiect, iar în loc de definire vom spune că instanţiem un obiect de tipul clasei. class RATIONAL - 7 -

private: void Adun_int(int y); void Initializez(int x, int y); ; ; void RATIONAL::Initializez(int x, int y) numarator = x; numitor = y; ; void RATIONAL::Adun_int(int y) numarator += y*numitor; Afisez(*this); x.initializez(4,3); x.adun_int(2); //instantierea obiectului x Indicaţii 2.10 Atenţie la tipul implicit al membrilor. Tema 2.11 Să se separe codul sursă aferent clasei CERC în fisiere separate (cerc.cpp şi cerc.h) care să fie parte a unui proiect. Consideraţii teoretice 2.11 Prin directiva #include compilatorul ştie că trebuie să citescă nu numai fişierul sursă (care conţine directiva) ci şi fişierul care este specificat în directivă. Prin această directivă se introduc pentru citire şi compilare fişiere antet pentru sistemul de fişiere al funcţiilor de biliotecă. Utilizatorii pot avea sursele scrise în mai multe fişiere, care vor trebui organizate în proiecte pentru ca compilatorul să stie de unde poate citi funcţiile. Proiectele sunt colecţii de fişiere sursă (.cpp). Principala condiţie într-un proiecte este aceea că în fişierele sursă nu are voie să existe decât o singură funcţie main. Pentru crearea unui proiect se foloseşte opţiunea din meniu Project->Create project, iar apoi se includ în proiect fişierele dorite. Compilarea unui proiect se face prin compilarea fiecărui fişier component al proiectului. Indicaţii 2.11 În proiect se includ doar fişierele cpp. Fiecare fişier cpp este compilat separat, link-editarea este comună. - 8 -

Anexa 2 ex2.c #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include "ex2.h" // variabile Globale CERC c[16]; // declararea unui vector de 16 cercuri //********* // variabile locale int CercCurent=0,gata=0,k; // cod OurInitGraph(); // initializarea modului grafic // initializarea valorilor pentru cele 16 cercuri si afisarea lor pe ecran for(k=0;k<16;k++) c[k].x = 30*k+100; c[k].y = 200; c[k].r = 5*k+ 25; c[k].c = k ; Afiseaza(&c[k]); while(!gata) switch(getch()) case ESC: gata=1; break; case TAB: CercCurent++; CercCurent%=16; break; case 0: switch(getch()) case LEFT: Muta( &c[cerccurent], -10, 0 ); break; case RIGHT: Muta( &c[cerccurent], 10, 0 ); break; case UP: Muta( &c[cerccurent], 0,-10 ); break; case DOWN: Muta( &c[cerccurent], 0, 10 ); break; case F1: Creste( &c[cerccurent], +10 ); break; case F2: Creste( &c[cerccurent], -10 ); break; default: break; - 9 -

closegraph(); void Sterge(CERC *c) //****************** // functie care sterge un cerc (prin scrierea unui cerc negru peste cel vechi) setcolor(black); circle(c->x,c->y,c->r); // stergere void Afiseaza(CERC *c) //******************** // functie care afiseaza un cerc setcolor(c->c); circle(c->x,c->y,c.->r); //afisare void Muta(CERC *c,int dx,int dy) //****************************** // functie care muta un cerc (sterge cercul de pe vechea pozitie, modifica // coordonatele centrului si apoi afiseaza cercul pe noua pozitie) Sterge(c); //stergere cerc c->x += dx; c->y += dy; Afiseaza(c); //mutare coordonate centru //afisare in noua pozitie void Creste(CERC *c,int dr) //************************* // functie care modifica dimensiunea unui cerc (sterge cercul cu dimensiunea // veche, modifica raza cercului si apoi afiseaza cercul cu noua dimensiune) Sterge(c); //stergere c->r += dr; Afiseaza(c); //redimensionare //afisare cu noua dimensiune void OurInitGraph() //***************** int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver,&gmode,""); /* initialize graphics and local variables */ errorcode = graphresult(); /* read result of initialization */ if (errorcode!= grok) /* an error occurred */ printf("graphics error: %s\n", grapherrormsg(errorcode)); printf("press any key to halt:"); getch(); exit(1); /* terminate with an error code */ ex2.h - 10 -

// definirea ca si constante a codurilor ASCII pentru tastele folosite #define TAB 9 #define ESC 27 #define LEFT 75 #define RIGHT 77 #define UP 72 #define DOWN 80 #define F1 #define F2 59 // tasta F1 folosita pentru cresterea cercului 60 // tasta F2 folosita pentru micsorarea cercului // definirea structurii CERC typedef struct int x; int y; int r; int c; CERC; // prototipuri de functii folosite void OurInitGraph(void); void Muta(CERC *c,int dx,int dy); void Sterge(CERC *c); void Afiseaza(CERC *c); void Creste(CERC *c,int dr); - 11 -