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ă.
|