Baixe o app para aproveitar ainda mais
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 * *
Compartilhar