Tratarea Excepțiilor

Curs
10/10 (3 voturi)
Domeniu: Calculatoare
Conține 1 fișier: doc
Pagini : 6 în total
Cuvinte : 1511
Mărime: 11.88KB (arhivat)
Publicat de: Theodor Marginean
Puncte necesare: 0

Extras din curs

2. Tratarea exceptiilor în C++.

O exceptie reprezinta o conditie de eroare, care transmisa sistemului determina producerea unei erori la executie. De exemplu: o înpartire prin 0, iesirea indicelui în afara limitelor unui tablou, etc.

La aparitia unei exceptii, utilizatorul îsi poate defini o secventa proprie de tratare a acesteia.

În C++ se utilizeaza un model ierarhic de tratare a exceptiilor. Acesta foloseste 3 cuvinte cheie: try – detectare, catch – tratare, throw – activare.

Transmiterea informatiilor se va face prin intermediul unor obiecte exceptii.

Cuvântul try delimiteaza un bloc din programul utilizatorului, care va fi supravegheat pentru a detecta aparitia unor exceptii. În cazul aparitiei unui anumit tip de exceptie, este pasata exceptia sesizata prin throw(obiect_exceptie) rutinei de tatare corespunzatoare, care începe prin catch(obiect_exceptie).

Exceptia poate fi captata, specificând numai tipul ei, prin catch(tip_exceptie). La aparitia exceptiei este construit un obiect având tipul exceptiei corespunzatoare si se activeaza exceptia. Membrii obiectului servesc la identificarea naturii exceptiei.

Rutina de tratare a exceptiei urmeaza imediat dupa blocul try:

catch(tip_exceptie){

// rutina de tratare a exceptiei;

}

Sa consideram doua exceptii, care pot sa apara în cazul folosirii vectorilor:

• iesirea indicilor în afara limitelor vectorului - clasa exceptie Range

• construirea unui vector cu dimensiune care depaseste dimensiunea maxima admisa – clasa exceptie Size

Primul tip de exceptie apare la indexare, deci exceptia va fi activata în functia operator de indexare.

A doua exceptie apare la declararea unui obiect vector, deci exceptia va fi activata în constructorul clasei vector.

Clasele exceptii vor fi declarate drept clase incluse în clasa Vector:

class Vector{

float* v;

int d; // numar de elemente vector

enum{DMAX=100}; // dimensiune maxima vector

public:

class Range{}; // clase exceptii

class Size {};

Vector(int n); // constructor

float& operator[](int i);//functie operator de indexare

};

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();

return v[0];

};

void main(){

try{

Vector x[200]; // declanseaza exceptia Size

int i=150;

x[i] = 1.5; // declanseaza exceptia Range

. . .

};

catch(Vector::Size){

. . .

// rutina de tratare exceptie Size

. . .

};

catch(Vector::Range){

. . .

// rutina de tratare exceptie Range

. . .

};

}

3. Zone de nume.

În programele mari, scrise de mai multi programarori, partajate în mai multe fisiere sursa, riscul conflictelor de nume (de variabile, functii, clase, obiecte) este ridicat.

O regiune declarativa a unui program este o zona în care se fac declaratii. Astfel regiunea declarativa a unei variabile locale o reprezinta functia, iar a unei variabile globale este fisierul în care este declarata.

Domeniul potential de vizibilitate al unui nume se întinde de la declararea acestuia pâna la sfârsitul regiunii declarative.

O variabila poate sa nu fie vazuta peste tot în domeniul potential de vizibilitate. Ea poate fi ascunsa de catre un alta variabila cu acelasi nume, declarata într-o regiune declarativa imbricata.

Domeniul de vizibilitate reprezinta zona în care variabila poate fi accesata.

O zona de nume este un mecanism de exprimare a unei grupari logice.

Declararea zonei de nume se face printrr-o interfata de forma:

namespace nume{

declaratii entitati (variabile, functii, etc)

};

De exemplu, o zona de nume FunMatGrade, în care se declara functii trigonometrice cu argumentul exprimat în grade, care pastreaza aceleasi nume cu cele din fisierul antet <math.h> este:

namespace FunMatGrade {

double sin(double);

double cos(double);

. . .

};

Definirea zonei de nume, este de obicei separata de declarare, fiind situata în partea de implementare.

În definitie, numele definite sunt calificate cu numele zonei, folosind operatorul de rezolutie.

Astfel numele din zona de nume data mai sus se definesc prin:

double FunMatGrade :: sin(double){/* . . . */};

double FunMatGrade :: cos(double){/* . . . */};

. . .

Accesul la un nume din zona de nume se face de asemeni calificat. Exemplu:

y = FunMatGrade :: sin(x);

Aceste notatii lungi si greoaie pot fi evitate folosind declaratii de utilizare. Acestea sunt formate din using si numele calificat, care în continuare poate fi folosit necalificat. Astfel:

using FunMatGrade :: sin(double);

ne permite sa apelam functia definita pentru calculul sinusului prin y=sin(x). Pentru a putea folosi functia obisnuita de calcul a sinusului, declarata în <math.h> , vom preceda numele cu operatorul de rezolutie, adica y= :: sin(x).

Aceasta reprezinta zona de nume globala si corespunde regiunii declarative la nivel de fisier.

Zonele de nume sunt deschise, adica putem adauga nume la zone existente.

Declaratia de utilizare adauga un nume la regiunea declarativa locala, împiedicând declararea altei variabile locale cu acelasi nume (si ascunzând variabila globala cu acelasi nume).

Exemplu:

namespace A{

int x;

void f();

};

char x; //nume global

void main(){

using A::x; //x din zona de nume considerat local

double x; //eroare, exista x local din zona de nume

cin >> ::x; //citeste x global

}

Preview document

Tratarea Excepțiilor - Pagina 1
Tratarea Excepțiilor - Pagina 2
Tratarea Excepțiilor - Pagina 3
Tratarea Excepțiilor - Pagina 4
Tratarea Excepțiilor - Pagina 5
Tratarea Excepțiilor - Pagina 6

Conținut arhivă zip

  • Tratarea exceptiilor.doc

Alții au mai descărcat și

AutoCad

APERTURE - controleazã mãrimea cursorului selector, caracteristic modului object snap. ARC - traseazã un arc de cerc de orice dimensiune. A -...

Biblioteca de Șabloane Standard

Biblioteca de Sabloane Standard (STL) asigura o abstractizare standardizata a datelor prin intermediul containerelor si o abstractizare procedurala...

Clase Derivate

1. Clase derivate. Prin mostenire, atributele unei clase de baza sunt transmise unor clase derivate. Derivarea permite definirea unor clase noi,...

Clase în Java

Clase pentru miniaplicatii Miniaplicatiile constituie extensii ale unei clase deja existente java.applet.Applet. Structura clasei unui applet...

Clase

1. Programare procedurala –Programare orientata pe obiecte. Limbajul C, ca si Pascal, utilizeaza modelul programarii structurate procedurale, care...

Comunicații internet

2.1. Stilurile caracterelor {n sfirsit pagina dvs. contine ceva, chiar daca este vorba numai de un nume. Vom analiza in continuare elementele de...

Crearea unei aplicații independente în Java

Toate aplicatiile Java contin o metoda main(), spre deosebire de miniaplicatii. class FirstApp { public static void main( String argsst) {...

Curs Excel

Deplasarea prin foi Deplasarea dintr-o foaie in alta se face cu clic cu mouse-ul pe eticheta foii dorite. Deplasarea prin celule Va puteti...

Te-ar putea interesa și

Sistem Informatic pentru Creditarea Persoanelor Juridice

INTRODUCERE În conţinutul lucrării îmi propun să cuprind elementele de bază ale limbajului de programare C#.NET, a transferului de date între...

Sistem de Gestiune a unei Librării Folosind Reguli de Afaceri

MOTIVAŢIA LUCRĂRII În majoritatea aplicaţiilor, care sunt construite pentru a satisface cerinţe din domeniul unei afaceri, logica afacerii este o...

Java Message Service

1. Schimbul de mesaje Schimbul de mesaje este o formă de comunicare între aplicaţii şi între componente software. În modul în care schimbul de...

Java

Java este o tehnologie inovatoare lansata de compania Sun Microsystems 1n 1995, care a avut un impact remarcabil asupra a1ntregii comunitatsi a...

Laboratoare SQL

Obiective • Cunoaşterea capabilităţilor instrucţiunilor SELECT • Executarea unor instrucţiuni SELECT de bază • Cunoaşterea diferenţelor dintre...

Introducere în C Sharp

Noţiuni generale Pentru gruparea fişierelor sursă şi a altor resurse utilizate în cadrul aplicaţiei, mediul Visual Studio .Net (VS) utilizează...

Programarea orientată spre obiecte - limbajul Java

1. INTRODUCERE IN PROGRAMAREA ORIENTATA SPRE OBIECTE OBIECTE D. Un obiect este un un mod simplificat de a identifica într-un program un lucru, o...

Ai nevoie de altceva?