Tecnologia para Web
Tratamento de Exceções
Enrique Pimentel Leite de Oliveira
[email protected]
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 Exception
Propriedade
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
Exemplo
try
{
// Código que gerará a exceção
int x = 10;
int y = 0;
int z = x/y; //divisão por zero
txtResult.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.
Exemplo
using 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 Form
public 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_exceco
es/exceptdotnet.htm
• www.msdnbrasil.com.br/docs/net/vstudio_
exceptions.doc
• http://www.rodrigobytes.com.br/programac
ao/ler.aspx?id=3&cat=8
Download

Slide 1 - Objetivo Sorocaba