Buscar

Tratamento de Exceções em .NET

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

AULA 1 - Profa. ADRIANA SICSÚ, DSc.
*
DESENVOLVIMENTO DE SOFTWARE 
AULA 5
Profa: ADRIANA SICSÚ, DSc.
adriana.aparicio@globo.com
*
*
OBJETIVOS DA AULA
Exceções
Tratamento de Exceções Estruturadas
Tipos de Exceção
Bloco Try... End Try
A seção Catch
Blocos Try... End Try Aninhados
A seção Finally
Lançamento de Exceções
*
*
*
Exceção
Exceção é um erro no fluxo normal de execução do código de um programa de uma aplicação. 
O .NET framework oferece uma forma unificada de identificar e tratar exceções entre todas as linguagens de programação .NET (BALENA, 2006).
 Há dois tipos de exceções: 
 Exceções de Hardware 
 Exceções de Software. 
*
*
*
Exceção
*
Exceção de Hardware
 São causadas por erros do programa a nível de hardware.
	Exemplo: Violação de acesso a endereços de memória.
Exceção de Software
 são causadas por erros do programa a nível de software.
 Exemplo: Atribuir um valor incompatível a uma variável
 Divisão por zero
(MACKENZIE e SHARKEY, 2003).
*
*
Tratamento de Exceções Estruturadas (SEH)
O tratamento de exceções estruturadas (Structured Exception Handling - SEH) é uma estratégia para codificar o programa de uma aplicação para tratar tanto as exceções de hardware quanto as exceções de software.
Dessa forma, o código para tratamento de exceções se torna unificado e mais consistente por tratar tanto as exceções de hardware quanto as exceções de software. 
O tratamento de exceções estruturadas é codificado para proteger seções do código que estiverem propensas a gerarem exceções como, por exemplo, cálculos, acesso a banco de dados, operações com arquivos etc. 
(MACKENZIE e SHARKEY, 2003). 
*
*
*
Tipos de Exceções
Os principais tipos de exceções são:
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
IndexOutOfRangeException
NotImplementedException
OutOfMemoryException
OverflowException
FileNotFoundException
*
 
Os tipos de exceções derivam da classe System.Exception que é definida no .NET framework.
*
*
Bloco Try ... End Try
As palavras-chave Try... End Try delimitam o bloco de códigos protegidos para tratar as exceções que ocorrerem. 
*
 
Sintaxe:
Try
 ...
 Catch ex As Exception
 ...
End Try
Cath: 
 Marca a seção do bloco que captura e trata as exceções que podem eventualmente ocorrer.
 Em geral, usa-se uma seção Catch para capturar cada tipo de exceção e uma seção Catch, chamada genérica, no final para capturar todos os demais tipos de exceções que não foram capturados pelas seções Catch anteriores.
*
*
Bloco Try ... End Try
*
 
Sintaxe:
Try
 ...
Catch ex1 As Exception1
 ' Código para tratamento da Exception1
 ...
Catch exN As ExceptionN
 ' Código para tratamento da ExceptionN
 ...
' Captura Genérica
Catch ex As Exception
 ' Código para tratamento das demais exceções
 ...
End Try
*
*
Bloco Try ... End Try
*
Exemplo: Sem Captura e Tratamento de Exceção
Sub Main()
 Dim i As Decimal = 10
 Dim j As Decimal = 0
 Dim Resultado As Decimal
  Resultado = i / j
 Console.ReadKey()
End Sub
Erro:
Divisão por Zero
*
*
Bloco Try ... End Try
*
Exemplo: Com Captura e Tratamento de Exceção
Sub Main()
 Dim i As Decimal = 10
 Dim j As Decimal = 0
 Dim Resultado As Decimal
 
 Try
  Resultado = i / j
 Catch ex As Exception
 ' Captura Genérica
 Console.WriteLine("Houve um erro de exceção de divisão por zero.")
 End Try
 Console.ReadKey()
End Sub
 Permite realizar a captura e o tratamento da exceção genérica, ou seja, de qualquer tipo de exceção.
*
*
Bloco Try ... End Try
*
Exemplo: Com Captura e Tratamento de Exceção
Sub Main()
 Dim i As Decimal = 10
 Dim j As Decimal = 0
 Dim Resultado As Decimal
 Try
  Resultado = i + 10
 Resultado = i / j
 Catch exDivideByZero As DivideByZeroException
 ‘ Captura DivideByZeroException
 Console.WriteLine("Houve um erro de exceção de divisão por zero.")
 Catch ex As Exception
 ' Captura Genérica
 Console.WriteLine("Houve um erro de exceção genérica.")
 End Try
 Console.ReadKey()
 End Sub
 Permite realizar a captura e o tratamento da Divisão por Zero e capturar e tratar uma exceção genérica, ou seja, de qualquer tipo de exceção.
*
*
Bloco Try ... End Try - Aninhado
*
 
Imports System.IO
Module Module1
 Sub Main()
 Dim FileName As String = "TestFile.data" 
 ' Bloco externo
 Try
 Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.Read)
 ' Bloco interno
 Try
 Dim reader As New BinaryReader(fs)
 reader.ReadInt32()
 Catch ex As Exception
 Console.WriteLine("Exceção na leitura do arquivo.")
 End Try
 Catch ex As Exception
 Console.WriteLine("Exceção na abertura do arquivo.")
 End Try
 Console.ReadKey()
 End Sub
 End Module
 Define um bloco Try...End Try externo que contém um outro bloco Try...End Try interno.
 Se ocorrer uma exceção na abertura do arquivo, o programa exibe a mensagem "Exceção na abertura do arquivo." e se após a abertura do arquivo sem exceção, ocorrer uma exceção na leitura do arquivo, o programa exibe a mensagem "Exceção na leitura do arquivo.“
*
*
Seção Finally
Define o código que deverá ser sempre executado, sem ou com a ocorrência de uma exceção, antes de terminar o bloco Try...End Try.
Em geral, contém o código para liberar recursos alocados no bloco Try...End Try ou o código comum a ser executado antes de terminar o bloco Try...End Try.
*
*
*
Seção Finally
*
Sub Main()
 Dim i As Decimal = 10
 Dim j As Decimal = 0
 Dim Resultado As Decimal
 Try
  i = i + 10
 Resultado = i / j
 Catch exDivideByZero As DivideByZeroException
 ' Captura DivideByZeroException
 Console.WriteLine("Houve um erro de exceção de divisão por zero.")
 Catch ex As Exception
 ' Captura Genérica
 Console.WriteLine("Houve um erro de exceção genérica.")
 Finally
 Beep()
 End Try
 Console.ReadKey()
 End Sub
 Sempre emite um sinal sonoro, Beep(), antes de terminar o bloco Try...End Try.
 
*
*
Lançamento de Exceções
Em algumas situações você pode deseja lançar uma exceção para esta seja tratada por uma rotina de tratamento de exceção ou para gerar uma exceção.
*
Sintaxe: 
 Throw [ expressão ]
 
*
*
Lançamento de Exceção
*
Sub Main() Exemplo: Lançamento de Exceção
 Dim i As Decimal = 10
 Dim j As Decimal = 0
 Dim Resultado As Decimal
 Try
  i = i + 10
 If (j = 0) Then
 Throw New System.Exception("Divisor j igual a zero.")
 End If
 Resultado = i / j
 Catch ex As Exception
 ' Captura Genérica
 Console.WriteLine("Houve um erro de exceção de divisão por zero.")
 Finally
 Beep()
 End Try
 Console.ReadKey()
End Sub
 Lançar uma exceção genérica com a mensagem "Divisor j igual a zero" se o valor da variável j for igual a zero. 
*
*
Saiba Mais ....
Tratamento de Exceções
http://msdn.microsoft.com/pt-br/library/c68xfk56.aspx
Manipulação Estruturada de Exceções 
http://msdn.microsoft.com/pt-br/library/8a9f2ew0.aspx
Classe Exception 
http://msdn.microsoft.com/pt-br/library/system.exception.aspx
Como Capturar uma exceção
http://msdn.microsoft.com/pt-br/library/ys1b32h3.aspx
Declaração Try... Catch... Finally... End Try
http://msdn.microsoft.com/pt-br/library/fk6t46tz.aspx
Tratamento de Exceção Não Estruturado	
 http://msdn.microsoft.com/pt-br/library/sf1hwa21.aspx
Declaração On Error 
http://msdn.microsoft.com/pt-br/library/5hsw66as.aspx
Quando Usar Manipulação de Exceção Estruturada ou Não Estruturada
http://msdn.microsoft.com/pt-br/library/s74yzzb5.aspx
Como Lançar um exceção
http://msdn.microsoft.com/pt-br/library/z7w9ff54.aspx
Declaração Throw em linguagem 
http://msdn.microsoft.com/pt-br/library/ty79csek.aspx
*
*
*
Próxima Aula
Programação Orientada a Objetos
*
*

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais