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 (excepion) 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 situaia dorit de proframator 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 exceie 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 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.

om monitoriza zona generatoare de erori i vom trata excepiile previzibile i restul excepiilor astfel:

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