Tecnologia para Web Tratamento de Exceções Enrique Pimentel Leite de Oliveira...

Post on 18-Apr-2015

107 views 0 download

Transcript of Tecnologia para Web Tratamento de Exceções Enrique Pimentel Leite de Oliveira...

Tecnologia para WebTratamento de Exceções

Enrique Pimentel Leite de Oliveira

enrique.leite@aes.edu.br

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