IPRO - PC Magazine Romania, Aprilie 2003
SOLUŢII PENTRU PROGRAMATORII ŞI DESIGNERII WEB Servicii
web realizate cu ASP.NET
Tratarea excepţiilor
Mircea Scărlătescu
Odată cu impunerea programării orientate pe obiecte au apărut o serie de
concepte care au transformat modul în care aplicaţiile sunt gândite şi implementate.
Vom parcurge aici conceptul de tratare a excepţiilor, o componentă de bază
a oricărei aplicaţii. Termenii excepţie şi eroare sunt similari în limbajul
programatorilor, ei desemnând o situaţie limită, în care programul nu mai
poate funcţiona corect. Desigur, aceste situaţii trebuie să fie intuite de
programator, şi să fie tratate ca atare, generându-se o avertizare şi adaptarea
la noile condiţii de execuţie. Java are implementat un sistem de tratare
a erorilor bine pus la punct şi platforma .NET a preluat aceste concepte
şi pentru noile sale limbaje C# şi VisualBasic.NET. Tratarea excepţiilor
a intrat astfel în atenţia programatorilor Web prin impelmentările Java (în
JSP, Servletts) şi mai nou ASP.NET; ne vom ocupa în cele ce urmează de tratarea
excepţiilor în ASP.NET şi VisualBasic.NET
Vom prezenta un serviciu web care încorporează mecanismul de tratare a erorilor.
Considerăm următoarea metodă:
<
WebMethod()> Public Function ExceptionExample(ByVal value As Integer)
As Integer
Dim exampleArray(99) As Integer
Dim i As Integer
For i = 0 To 99
exampleArray(i) = 100 - i
Next
Dim result As Integer
result = 0
For i = 0 To 99
If exampleArray(i) = value
Then
result = i + 1
End If
Next
Try
If result = 0 Then
Throw New Exception(Numarul nu a fost gasit")
Else
Return result
End If
Catch e As Exception
Return -1
End Try
End Function
Metoda realizează o căutare a unui număr într-un vector, după un algoritm
uşor de înţeles din codul de mai sus. Variabila result va conţine fie
poziţia valorii
parametrului în vector, fie -1 (dacă nu a fost găsită valoarea). Aici intervine
mecanismul de tratare a erorilor: în cadrul blocului try-catch se aruncă
o excepţie (dacă este cazul) prin instrucţiunea:
Throw New Exception(Numarul nu
a fost gasit")
Această secvenţă instanţiază un obiect de tipul Exception. O prezentare
completă a acestei clase este disponibilă în documentaţia MSDN. Cuvântul
cheie Throw,
specifică faptul că se aruncă o excepţie, care trebuie să fie "prinsă" de
către program. Acest lucru se realizează prin cuvântul cheie catch.
Catch e As Exception
Prin intermediul variabilei "e" putem să
consultăm proprietăţile obiectului de tip excepţie care a fost aruncat (mesajul
excepţiei, stivă, etc). Trebuie
subliniat că se pot arunca mai multe excepţii în cadrul unui bloc try, care
pot fi "prinse" şi tratate similar ca mai sus. Structura generală
pentru blocuri de tratare a erorilor este:
Try
Catch e As Exception
Finally
End Try
Cuvântul cheie Finally specifică faptul că urmează o secvenţă de cod care
se execută după execuţia codului din blocul catch. Ea poate să lipsească
din cadrul
sintaxei. Un alt aspect important este faptul că un bloc try poate să
fie urmat de mai multe blocuri catch fiecare dintre aceste blocuri fiind
însărcinat
să
trateze câte un tip de excepţie. .NET conţine o ierarhie de clase de
tip excepţie sistem ce pot fi aruncate. Lista completă a acestora este disponibilă
în documentaţii.
De asemenea, o aplicaţie profesională va avea întodeauna implementată
propria
ierarhie de clase care tratează excepţii. Pentru programarea unei aplicaţii
de dimensiuni mari se recomandă implementarea a cât mai multor clase
de tratare a erorilor, pentru ca aplicaţia să devină cât mai fiabilă.
|