Documente Academic
Documente Profesional
Documente Cultură
2009 C11 Tratarea Erorilor in VB NET
2009 C11 Tratarea Erorilor in VB NET
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
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
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")
Acum totul este controlat de program. Astfel: - dac vom introduce x=10a i y= 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
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
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: