Upload
internet
View
108
Download
0
Embed Size (px)
Citation preview
Tratamento de Exceções• Definição: Uma exceção é um evento que ocorre durante a
execução de um programa que interrompe o fluxo normal de suas instruções.
• A plataforma .Net oferece um mecanismo robusto para tratamento de exceções.– provêm da biblioteca System.Exception
• Os erros são tratados como objetos que encapsulam informações necessárias para resolvê-los. Esse mecanismo é conhecido como SEH (Structured Exception Handling).
Tratamento de Exceções• “Onde pode ocorrer uma exceção?” • Em geral a ocorrência de exceção abrange:
– implementação incorreta da solução de um problema;– solicitação de uma tarefa que não está disponível;– utilização inconsistente de um objeto e de seus métodos.
• Algumas situações que podem gerar exceções:– erros de entrada de dados do usuário;– erros de dispositivos;– limitações físicas de hardware como: discos cheios,
memórias, etc;– erro de programação.
Tratamento de Exceções• A forma tradicional para tratamento das situações
errôneas, seria retornar um código de erro onde fosse possível analisar o que é dado válido ou inválido. Porém, esta forma de programação não condiz com orientação a objetos.
• Em orientação a objetos, devemos utilizar exceções para tratar de situações onde erros podem ocorrer.
O objeto Exception• O objeto Exception é a classe base para
todas as exceções e define as propriedades que todas as exceções têm.
O objeto ExceptionPropriedade Descrição
Data Uma coleção de pares (chave/valor) que fornece detalhes adicionais sobre a exceção.
HelpLink O link para o arquivo de ajuda que contém uma descrição da exceção.
InnerException A exceção base que causou o problema.
Message Texto descritivo da exceção.
Source O nome da aplicação ou objeto que causou o problema.
StackTrace Apresenta a seqüência de métodos chamados que dispararam o erro.
TargetSite O método que lançou a exceção atual.
Como tratar exceções• Estrutura básica try catch finally:
try {
// Código a ser executado } catch (TipoExceção1 e) {
// tratamento da exceção1} catch (Exception e) // erro genérico {
// tratamento genérico } finally {
// Este bloco de código sempre será executado, havendo ou não exceção!
}
Como tratar exceções• Vale ressaltar que é possível adicionar quantos catches
forem necessários, ordenando sempre do mais específico para o mais genérico.
• Quando uma exceção for gerada, apenas um bloco catch é executado, desviando o fluxo para o bloco finally (se este existir).
• O bloco finally será sempre executado independente da ocorrência de uma exceção
Exemplotry{
// Código que gerará a exceçãoint x = 10;int y = 0;int z = x/y; //divisão por zerotxtResult.Text = z.ToString(); // esta linha não será executada
}catch (System.Exception e){
// Apresenta o erro txtResult.Text = e.Message;
}finally {
// Este bloco de código sempre será executado, ocorrendo ou não exceção!
lblMsg.Text = “Bloco finally executado!”;}
Gerando ou lançando Exceções• Vimos como tratar exceções, mas em alguns casos é
necessário gerar exceções ou lançar essa exceção para que alguma classe acima trate-a.
• Para isso utilizamos o comando throw
• Exemplos:– throw new Exception(“descrição”);– throw new Exception(“descrição”, excecao_base);
Gerando ou lançando Exceções• Para lançar uma exceção, simplesmente colocamos o
comando:– throw;
• Isso faz com que a exceção ocorrida seja “lançada”. Normalmente utilizamos esse recursos em classes onde o tratamento de exceção não é necessário, como por exemplo classes de acesso a BD. Nesse caso a classe de regras de negócio deveria tratar a exceção.
Classes de Exceções definidas pelo usuário
• Na maioria dos casos, as classes de exceção da .Net Framework são suficientes para o tratamento das exceções dos programas. Porém em alguns casos a necessidade de criação de novas classes de exceções existem.
• Para criar novas classes de exceções é necessário que elas herdem direta ou indiretamente da classe ApplicationException.
Exemplousing System;namespace RaizQuadradaTest{
class NumeroNegativoException: ApplicationException{
public NumeroNegativoException(): base( “Operação inválida para número negativo”){}public NumeroNegativoException(string msg): base( msg){}public NumeroNegativoException(string msg, Exception inner): base(msg, inner){}
}}
Exemplo - Continuação• Método da classe herdada de Formpublic double RaizQuadrada(double valor){
if (valor < 0){
throw new NumeroNegativoException(“Não existe raiz quadrada de número negativo”);}else
return Math.Sqrt(valor);}
Exercício• Criar um programa para demonstrar a
utilização das exceções criadas pelo usuário. Além das exceções criadas, o programa deve tratar outras exceções que possivelmente ocorrerão durante os testes. Por exemplo: FormatException. Ao capturar um erro, o programa deve exibir uma mensagem de erro ao usuário contendo.
Bibliografia• http://www.msdnbrasil.com.br/Tecnologias/
arquitetura/nova/blocos_disp/ger_excecoes/exceptdotnet.htm
• www.msdnbrasil.com.br/docs/net/vstudio_exceptions.doc
• http://www.rodrigobytes.com.br/programacao/ler.aspx?id=3&cat=8