Top

Documente similare
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

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

Microsoft Word - CarteC.doc

Laborator 3

Programarea şi utilizarea calculatoarelor

SUBPROGRAME

Limbaje de Programare Curs 6 – Functii de intrare-iesire

tehnologii web

L7

Programarea şi utilizarea calculatoarelor

1

Microsoft Word - PCLP2_Curs_4_2019.doc

Slide 1

Slide 1

E_d_Informatica_sp_MI_2015_bar_02_LRO

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

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Paradigme de Programare

Microsoft Word - CarteC.doc

Paradigme de programare

E_d_Informatica_sp_SN_2014_bar_10_LRO

-

Limbaje de Programare Curs 5 – Siruri de caractere

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

Limbaje de Programare Curs 8 – Fisiere

PROGRAMARE ORIENTATA PE OBIECTE

Microsoft Word - Curs 7 - JavaScript.doc

Ingineria Sistemelor de Programare

Object Oriented Programming

Microsoft Word - Raspunsul la niste provocari. Partea III..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

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

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

Aggregating Data

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

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

Proiectarea Sistemelor Software Complexe

LUCRAREA NR

Ingineria Sistemelor de Programare

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

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Slide 1

Microsoft Word - O problema cu bits.doc

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

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

Microsoft Word - 2 ES RO.doc

Declararea variabilelor

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

Analiză statică Analiza fluxului de date 23 octombrie 2014

proiectarea bazelor de date

Microsoft Word - lab4.doc

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

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

PPSD

Analiză de flux de date 29 octombrie 2012

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

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

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

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

Programarea şi utilizarea calculatoarelor

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

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

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

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

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

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

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

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

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

PHP (II)

-

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

PowerPoint Presentation

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

PowerPoint-Präsentation

Introducere în limbajul JavaScript

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

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

Tablouri (continuare)

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

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

Diapositive 1

Slide 1

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

C++ Probleme

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

CURS

Metode de programare Proiectarea algoritmilor

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

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

PCLPII-C16(9)

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

REVISAL Versiunea: Data release: 15 martie 2016 IMPORTANT! Distribuţia curentă (v6.0.4) a aplicaţiei Revisal conţine nomenclatorul COR ISCO 08 î

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Microsoft Word - c6.doc

Curs 10

Transcriere:

PROGRAMARE ORIENTATĂ PE OBIECTE Tratarea excepțiilor O excepție este o eroare care poate să apară la rularea unui program. Exemple: încercarea de deschidere a unui fișier ce nu există depășirea limitelor unui tablou încercarea de alocare a unui spațiu de memorie ce depășește dimensiunea heap-ului erori aritmetice etc. Excepțiile pot fi gestionate în mod tradițional (ex.: apelarea metodelor exit() sau abort(), afișarea unor mesaje de eroare), se pot returna coduri de eroare lasând sau nu programul într-o stare de eroare, se poate utiliza variabila globală errno pentru a indica o eroare, se pot apela funcții error-hanhler etc. Există multe situații în care metodele amintite anterior nu pot fi eficiente (ex. erorile apărute în constructori, aceștia fiind definiți prin funcții care nu returneaza nimic). O soluție este oferită de următorul model: o funcţie care nu poate gestiona o problemă, aruncă o excepţie (throws) cu scopul ca funcția care a apelat-o (direct ori indirect) să gestioneze problema. funcţia care vrea să gestioneze o anumită problema indică acest lucru captând excepţia respectivă. Acest model presupune folosirea try, throw şi catch, astfel având posibilitatea ca o eroare apărută într-o funcţie să fie tratată în alta. Prima funcție doar generează sau aruncă excepţia (throw). Aruncarea unei excepții nu garantează că excepţia va fi şi tratată în afara funcţiei. Pentru aceasta, trebuie specificată o secvenţă de cod care detectează sau prinde excepţia şi o tratează. Programatorul trebuie să includă într-un bloc try codul care ar putea genera o eroare generatoare a unei excepţii. Blocul try este urmat de unul sau mai multe blocuri catch. Fiecare bloc catch specifică tipul excepţiei pe care o poate detecta și va executa blocul corespunzator tipului excepției. Excepţiile sunt interceptate şi prelucrate folosind construcţia try şi catch, care are sintaxa: //codul care ar putea genera erori catch(tip1 Var1){... catch(tipn VarN){ 1

Fiecare bloc catch are între paranteze rotunde tipul de excepţie care va fi interceptat şi prelucrat de blocul de instrucţiuni. Important: Blocurile try şi catch formează o singură construcţie (nu se poate folosi un bloc try fără cel puţin un bloc catch şi nu se poate folosi un bloc catch fără un bloc try). Între cele două blocuri nu pot exista alte secvenţe de instrucţiuni. Se pot înlănţui oricâte blocuri catch, câte unul pentru fiecare tip de excepţie ce se doreşte a fi tratată. Exemplu void main(void){ cout << "Start" << endl; try { cout << "Exemplu tratare exceptii." << endl; throw 100;//lansam o exceptie cout << "Cod care nu se va executa."; catch(int i) { cout << "Am captat exceptia care are codul: "<< i << endl; cout << "Stop" << endl; Dacă în blocul catch am fi avut catch(double i) { cout << "Am captat exceptia care are codul: "<< i << endl; atunci excepția nu ar fi fost captata (am lansat o exceptie de tip int) și ar fi condus la o terminare anormală a programului. Fie funcţia: Exemplu int factorial(int n){ if(n<0)//aruncam o exceptie throw "Argumentul trebuie sa fie pozitiv"; if(n==0)return 1; return n*factorial(n-1); void main(){ cout<<"start test exceptii"<<endl; cout<<"n!="<<factorial(-5)<<endl; cout<<"sfarsit test exceptii"<<endl; În acest caz ajungem la o terminare anormală a programului. Mesajul "Sfarsit test exceptii" nu mai apare. Execuţia se întrerupe în momentul apariţiei excepţiei. Dacă tratăm excepţia în funcţia main: 2

void main(){ cout<<"start test exceptii"<<endl; cout<<"n!="<<factorial(-5)<<endl; catch(char* p){ cout<<p<<endl; catch(int){ cout<<"o alta exceptie"; cout<<"sfarsit test exceptii"<<endl; atunci rezultatul execuţiei va fi: Start test exceptii Argumentul trebuie sa fie pozitiv Sfarsit test exceptii Press any key to continue Se observă apariţia mesajului Sfarsit test exceptii. Important: Excepţiile pot fi utilizate în constructori. class Test{ char* pv; public: Test(char* p) { if (p == 0 p == "")//Nu permitem ca pv sa fie null sau sirul vid. throw invalid_argument("argumentul este null sau blank"); else pv = p; ; Cel mai simplu mod de a defini o excepţie este acela de a defini o clasă special creată pentru acel tip de eroare. O excepţie poate purta informaţii despre eroarea pe care o reprezintă. Pot fi aruncate excepţii de orice tip cu condiţia să poate fi copiate. class NoCopy { NoCopy(const NoCopy& x) = delete;//fara constructor de copiere ; class Eroare{ //... ; void f(int n){ Eroare e; switch (n){ case 0: throw e; // OK 3

case 1: throw NoCopy{; // eroare: nu se poate copia NoCopy case 2: throw Eroare; // eroare: Eroare este un tip case 3: throw Eroare{; // valabil doar in C++11 class Vector{ static const int DMAX=100;// dimensiune maxima vector float* v; int d; // numar de elemente vector public: class Range{; // clase exceptii class Size {; Vector(int n); float& operator[](int i); ; Vector::Vector(int n){ if(n < 0 n >= DMAX) throw Size(); d = n; v = new float[n]; ; float& Vector::operator[](int i){ if(i >= 0 && i < d) return v[i]; throw Range(); ; void main(){ Vector v(200); // declanseaza exceptia Size v[130] = 1.3; // declanseaza exceptia Range catch(vector::size){ cout<<"depasire dimensiune maxima admisa"<<endl; catch(vector::range){ cout<<"depasire limite tablou"<<endl; Clasele de excepţii standard formează o ierarhie bazată pe clasa exception. Aceasta conţine o funcţie virtuală what ce returnează un char*. Această ierarhie poate fi folosită pentru simplificarea tratării erorilor. 4

std::vector<int> vect(10); try { vect.resize(vect.max_size() + 1); catch (const std::length_error& e) { cout << "Length error: " << e.what() << '\n'; try { vect.at(20) = 100; catch (const std::out_of_range& e) { cout << "Out of Range error: " << e.what() << '\n'; Important: Dacă dorim să captăm orice excepție putem folosi blocul catch(...). Sintaxă //codul care ar putea genera erori catch(tip1 Var1){... catch(tipn VarN){ catch( ){ // captraza orice exceptie Nu este încurajată utilizarea blocului catch(...) deoarece se pierde orice informaţie despre excepţia apărută. 5

Unele funcţii nu aruncă excepţii iar pentru a indica acest lucru se poate declara funcţia respectivă ca funcţie noexcept. Este util pentru un programator să știe că o funcție nu va arunca excepții deoarece nu trebuie sa mai scrie blocul try/catch pentru apelul funcţiei respective şi de asemenea modulul de optimizare al compilatorului nu mai are în vedere toată calea petru găsirea unui handler. double functiecarenuaruncaexceptii(double) noexcept{ //... 6