Sunteți pe pagina 1din 9

C11 Tratarea erorilor in VB NET

1) Ce tipuri de erori exist?


Exist mai multe tipuri de erori:
- erori n faza de proiectare (erori de sintax) care survin cnd o
comand este scris greit (cuvinte cheie incorecte, parametrii lips,
expresii incorecte, etc.)
-erori de execuie (detectabile) care sunt cauzate de situaii
necontrolabile de program (mprirea la zero, un fiier lips, un fiier
deja activ, depirea sau violarea memoriei, etc.)
- erori de logic care duc la obinerea de rezultate incorecte sau
imprevizibile
2) Care este asemnarea i deosebirea dintre o eroare i o excepie?
Limbajele de programare tradiionale aveau un foarte bine dezvoltat
concept care cuprindea noiunea de eroare (error). Se considera ca fiind
eroare orice situaie n care programul nu evolua corect.
Ulterior, platformele moderne (C++, Java) au introdus un nou concept
excepia (exception)
n aceste noi condiii (din punctul strict de vedere al programrii):
-eroarea ine strict de programator, atunci cnd nu gestioneaz n mod
corect structurile aplicaiei (exemplu: a nu prevedea faptul c numrul la
care se realizeaz mprirea poate fi zero poate fi considerat o eroare)
-excepia este o situaie care nu se ncadreaz n modul de execuie uzual
sau dorit al aplicaiei, ns nu nseamn c apare mai rar sau mai des
dect situaia dorit de programator sau utilizator (exemplu: dac stabilim
c numrul la care se realizeaz mprirea nu poate fi zero, atunci cazul n
care utilizatorul introduce valoarea zero este o excepie)

2) Cum sunt tratate AUTOMAT excepiile n VB.NET?


-atunci cnd apare o excepie programul se ntrerupe i sistemul afieaz o
caset ajuttoare pentru a depista cauza anomaliei
Exemplu:
Fie funcia Impart definit astfel
Private Function Impart(ByVal a As Integer, ByVal b As Integer) As Decimal
Dim Rezultat As Decimal
Rezultat = a / b
Return Rezultat
End Function

i apelul acesteia
Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim X As Integer
Dim Y As Integer
X = InputBox("Tastati deimpartitul:")
Y = InputBox("Tastati impartitorul:")
'Apel functie
MsgBox("X/Y= " & Impart(X, Y))
End Sub

Evident c dac vom introduce x=10 i y=2 vom obine rezultatul

Dar dac vom introduce x=10 i y=0 vom obine rezultatul

De asemenea dac vom introduce x=10a i y= vom obine rezultatul

3) Cum ar trebui tratate excepiile de programator n VB.NET?


Programatorul ar trebui s prevad posibilitatea apariiei unor asemenea
anomalii i s le trateze prin program prin mecanisme specifice
Excepiile sunt obiecte derivate din clasa System.Exception, care ofer
dou proprieti mai importante:

- Message conine o descriere textual a erorii;


-Source red numele aplicaiei sau al obiectului care a generat eroarea
4) Ce ofer VB.NET pentru tratarea excepiilor?
VB.NET ofer o modalitate structurat de interceptare i tratare a
excepiilor, bazat pe structura Try Catch Finally cu sintaxa
Try

[instructiuni monitorizate]
[Exit Try]
[Catch NumeExceptie [As TipExcepte]

[instructiuni de tratare a tipului de exceptie]


[Exit Try]
Finally

[instructiuni care se executa la sfarsit]


End Try

5) Cum poate fi perfecionat programul anterior?


Vom monitoriza zona generatoare de erori i vom trata excepiile
previzibile i restul excepiilor astfel:
Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim X As Integer
Dim Y As Integer
'Inceputul monitorizarii
Try
X = InputBox("Tastati deimpartitul:")
Y = InputBox("Tastati impartitorul:")
'Apel functie
MsgBox("X/Y= " & Impart(X, Y))
'Tratarea exceptiilor specifice previzibile
Catch DateNenumerice As InvalidCastException
MsgBox("Date nenumerice")
Catch ImpartireLaZero As OverflowException
MsgBox("Impatire la zero")
'Tratarea exceptiilor neprevizibile
Catch ExceptiiGenerice As Exception
MsgBox("Alte erori")

End Try
End Sub

Acum totul este controlat de program. Astfel:


- dac vom introduce x=10a i y= vom obine rezultatul

-iar dac vom introduce x=10 i y=0 vom obine rezultatul

Atunci cnd vor apare alte situaii anormale generate de sistem sau de
mediul de operare vom obine i mesajul Alte erori
6) Ce alte posibiliti de tratare a erorilor mai exist n VB.NET?
A) Exit posibilitatea de a ne crea propria clas pentru tratarea erorilor,
evident o clas derivat dintr-o clas a sistemului, de regul derivat din
clasa System.Exception.
B) Vom avea posibilitatea s generm propriile excepii atunci cnd sunt
ndeplinite anumite condiii. Generarea aruncarea unei excepii se poate
face prin instruciunea:
Throw exceptie
unde excepie reprezint o instan a unei clase de excepie.

n momentul apariiei sau generrii unei excepii, execuia programului se


oprete n punctul respectiv i se transfer blocului Catch (dac este
definit, dac nu, aa cum am artat mai sus apare o caset de excepie i
progranul se ncheie).
Generarea excepiilor se poate folosi la implementarea mai riguroas a
validrilor de integritate a proprietilor, cnd n loc s afim un mesasj de
eroare vom ntrerupe controlat execuia programului la introducerea unor
date incorecte i nu vom permite continuarea programului dect dup
introducerea corect a datelor. Ca s nelegem acest mecanism vom relua
exemplul de validare a datelor de la cursul 8 (punctul 2) unde am marcat cu
galbel zonele care vor fi afectate:
a) Programul iniial de la Cursul 8
-definirea clasei Cec
Public Class Cec
'definirea clasei parinte
Inherits Document
'definirea atributelor
Private m_TipOperatie As String
Private m_SumaCec As Integer
'definirea proprietatilor
Public Property tipOperatie() As String
Get
Return m_TipOperatie
End Get
Set(ByVal value As String)
'validarea datelor introduse
If value = "I" Or value = "P" Or value = "S" Then
m_TipOperatie = value
Else
m_TipOperatie = ""
MsgBox("Tip operatie diferit de I,P sau S")
End If
End Set
End Property
Public Property sumaCec() As Integer
Get
Return m_SumaCec
End Get
Set(ByVal value As Integer)
m_SumaCec = value
End Set
End Property
'definirea metodelor

End Class

ii) definirea coleciei


Public Class Form1
'definirea colectiei
Dim cecuri As New ArrayList
End Class

iii) instanierea unui obiect i adaugarea n colecie


Public Class Form1
'definirea colectiei
Dim cecuri As New ArrayList
Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Definesc un cec o instanta a clasei Cec
Dim unCec As New Cec
'Incarc proprietatile
unCec.felDoc = InputBox("Tastati fel document")
unCec.tipOperatie = InputBox("Tastati tip operatie")
unCec.sumaCec = InputBox("Tastati suma")
'Verific daca cecul este corect
If unCec.tipOperatie = "" Then
'Distrug cecul - nu este corect
MsgBox("Cec gresit")
unCec = Nothing
Else
'Incarc un cec in colectie - este corect
cecuri.Add(unCec)
MsgBox("Cec Ok")
End If
End Sub
End Class

b) Programul modificat am marcat cu verde locul modificrilor


-definirea clasei Cec
Public Class Cec
'definirea clasei parinte
Inherits Document
'definirea atributelor
Private m_TipOperatie As String
Private m_SumaCec As Integer
'definirea proprietatilor
Public Property tipOperatie() As String
Get

Return m_TipOperatie
End Get
Set(ByVal value As String)
'validarea datelor introduse
If value = "I" Or value = "P" Or value = "S" Then
m_TipOperatie = value
Else
Throw New Exception("Tip operatie diferit de I,P sau S")'Generare exceptie
End If
End Set
End Property
Public Property sumaCec() As Integer
Get
Return m_SumaCec
End Get
Set(ByVal value As Integer)
m_SumaCec = value
End Set
End Property
'definirea metodelor
End Class

ii) definirea coleciei


Public Class Form1
'definirea colectiei
Dim cecuri As New ArrayList
End Class

iii) instanierea unui obiect i adaugarea n colecie


Public Class Form1
'definirea colectiei
Dim cecuri As New ArrayList
Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Definesc un cec o instanta a clasei Cec
Dim unCec As New Cec
Try'Incepem monitorizarea
'Incarc proprietatile
unCec.felDoc = InputBox("Tastati fel document")
unCec.tipOperatie = InputBox("Tastati tip operatie")
unCec.sumaCec = InputBox("Tastati suma")
cecuri.Add(unCec)
Catch TipOperatieEronat As Exception
MsgBox(A aparut eroarea: & TipOperatieEronat.Message )
End Try'Sfarsit monitorizare
End Sub

End Class

Practic atunci cnd tipul operaiei va fi eronat (diferit de I, P sau S)


programul va fi ntrerupt i n loc s se execute operaia cecuri.Add(unCec)
adic adugarea unui nou cec n colecie, se va executa blocul Catch adic
afiarea unui mesaj de eroare MsgBox(A aparut eroarea: &
TipOperatieEronat.Message ) i programul ne oblig s introducem un tip de
operaie corect pentru a putea continua sau s abandonm programul.
Oricum ceea ce este important c n colecie nu vor fi introduse cecuri cu
tip operaie eronat.

vom monitoriza zona generatoare de erori i vom trata excepiile


previzibile i restul excepiilor astfel:

S-ar putea să vă placă și