programação orientada à objetos

31
Aula 16- Tratamento de Exceções Programação Orientada à Objetos

Upload: nissim-johnston

Post on 30-Dec-2015

33 views

Category:

Documents


0 download

DESCRIPTION

Programação Orientada à Objetos. Aula 16- Tratamento de Exceções. ADO.NET – Tratando Exceções (Erros). Qualquer pessoa que já foi um simples usuário de uma aplicação já se deparou com alguma mensagem de erro na sua tela. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programação Orientada à Objetos

Aula 16- Tratamento de Exceções

Programação Orientada à Objetos

Page 2: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Qualquer pessoa que já foi um simples usuário de uma aplicação já se deparou com alguma mensagem de erro na sua tela.

Algumas aplicações não tratam tais erros (exceções) de forma correta e deixam que os usuários recebam mensagens que só são entendidas pelo programador - e que não ajudam em nada o usuário.

O tratamento de exceções consiste em interceptar esses erros fim de que o programa não aborte inesperadamente e ainda, consiga informar ao usuário o que está errado.

Page 3: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

No C# as exceções (ou exceptions) são tratadas com as instruções try, catch e finally.

A idéia consiste em proteger um bloco de código com o try e, caso ocorra algum erro, a exceção gerada será capturada pelo bloco catch.

Dentro do bloco catch geralmente exibimos uma mensagem (MessageBox) para o usuário, explicando-lhe que houve um erro.

Caso seja necessário sempre executar uma determinada ação (código) ao final, não importando se foi OK ou se deu algum erro, inserimos tal código num bloco finally.

Page 4: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros) Resumindo:

• try - define o bloco que contem a execução normal do código;

• catch - define o bloco com o código que será executado caso ocorra alguma exceção dentro do bloco protegido pelo try. Aqui é feito o tratamento de erros;

• finally (opcional) - define o bloco que será executado independentemente

se ocorreu uma exceção ou não.

Page 5: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Na prática:

A seguir a interface e o código de um formulário que tem por objetivo calcular a área de um triângulo:

Page 6: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Evento click do botão

Page 7: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

O código acima funciona perfeitamente mas não prevê erros.

Se por acaso clicarmos no botão com os campos vazios ou letras no lugar de números o programa vai exibir uma mensagem padrão do .NET, indicando que ocorreu uma exceção e o código será interrompido.

Page 8: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

A mensagem padrão de erro será parecida com esta:

O que o usuário irá pensar ao ver esta mensagem?!? :(

Page 9: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros) Agora vejamos o código com tratamento de erro

simples. Nesse caso, se ocorrer algo errado uma mensagem mais amigável será exibida no lugar da mensagem de erro padrão do .NET.

Page 10: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Agora, se o usuário não informar os dados e clicar no botão, a mensagem que será exibida será assim:

Page 11: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Exemplo do finally

Vamos imaginar que a gente queira limpar o conteúdo dos textBox ao final, não importando se deu certo ou se deu erro.

Para isso, basta adicionar um bloco finally com o código correspondente.

A seguir o código completo com a instrução finally:

Page 12: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Page 13: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Exercício 1

Agora crie um projeto chamado ProjTratamentoExcecao e reproduza o exemplo citado anteriormente (ou similar). Execute e teste sua aplicação.

Page 14: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Quando trabalhamos com BD as exceções geralmente ocorrem em dois momentos:

1. Ao tentar conectar com o BD;

2. Ao executar um comando SQL.

Page 15: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Os erros que ocorrem na hora da conexão com o BD frequentemente estão associados a:• String de conexão inválida (errada).• Servidor de BD não existe ou não está acessível.• Falha no login (usuário e/ou senha inválidos).

Já os erros mais comuns quando tentamos executar um comando SQL são:• Sintaxe incorreta do comando SQL (SELECT,

UPDATE, INSERT e DELETE).• Nome da tabela ou coluna incorretos.

Page 16: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Vimos também que podemos tratar os erros ocorridos na aplicação através da estrutura try..catch..finally.

Agora vamos aprender um pouco mais sobre as exceções em .NET.

Page 17: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Toda exceção lançada por um programa em .NET pertence à classe Exception (System.Exception).

Isto significa que a classe de uma exceção sempre será System.Exception ou uma de suas sub-classes, por exemplo, FormatException ou DivideByZeroException.

Page 18: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Vamos criar uma aplicação para ficar mais claro. Crie o projeto ProjTratamentoExcecoes e configure o formulário principal da forma ilustrada a seguir:

Page 19: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Este programa irá receber a base e a altura de um triângulo e então calcular e exibir a sua área em um MessageBox.

Digite o código a seguir no evento Click do botão:

Page 20: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Perceba que a principal diferença entre o tratamento de erro usado aqui e o do exemplo anterior está no bloco catch, onde agora definimos a variável erro da classe Exception para que possamos acessar as informações do erro originado pelo .NET.

O comando erro.Message irá retornar a mensagem de erro original, já o erro.GetType() retornará a classe da exceção gerada.

Page 21: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Se agora executarmos nossa aplicação e clicarmos no botão sem preencher qualquer campo, receberemos a seguinte mensagem:

Page 22: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Perceba que além de exibirmos a mensagem padrão ("Ocorreu um erro ao calcular a área"), temos outras informações: a mensagem de erro originado pelo .NET e a sua classe (FormatException).

Agora outro teste. Se digitarmos valores muito grandes nos campos e clicarmos no botão a mensagem será:

Page 23: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Veja como mudaram a mensagem original e a classe da exceção (OverflowException).

Tanto FormatException como OverflowException são sub-classes da classe Exception.

A seguir um diagrama de classes UML para ilustrar melhor essa hierarquia de classes de exceções:

Page 24: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros) Perceba que toda exceção possui uma classe ancestral em comum, a

classe Exception.

Através desta hierarquia podemos refinar/melhorar nossas mensagens de erro para o usuário. Podemos, por exemplo, exibir a mensagem "Digite apenas números para os campos" quando a classe da exceção for FormatException.

E a mensagem "Valor informado está muito grande" quando a classe for OverflowException. E ainda, exibir a mensagem padrão "Ocorreu um erro ao calcular a área" no caso de qualquer outra exceção.

Fazemos isso inserindo vários blocos catch – um para cada exceção que desejamos capturar e tratar separadamente. Veja o código de exemplo:

Page 25: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Page 26: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Uma coisa importante a observar neste código é que, os blocos catch mais específicos (FormatException e OverflowException) devem ser digitados antes dos mais genéricos (Exception).

Mas não se preocupe, se não tomarmos este cuidado, o compilador irá nos avisar exibindo uma mensagem de erro ao compilarmos o nosso programa.

Como todas as exceções são classes elas possuem propriedades e métodos. Message é uma propriedade que nos informa a mensagem original do .NET e GetType() é um método que nos retorna a classe da exceção.

Tanto Message como GetType() estão implementados na classe Exception e, portanto, estão acessíveis em todas as suas sub-classes.

Page 27: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros) A exceção SqlException

Uma classe de exceção que muito nos interessa quando trabalhamos com acesso ao BD é a SqlException. Além das propriedades herdades de Exception ela possui outras, dentre elas podemos citar:

• Number : informa o código interno do erro no BD. Cada erro lançado por um SGBD possui um código interno – estes códigos são diferentes para cada SGDB (MS SQL Server, Oracle, Postgres etc);

• LineNumber : informa a linha do comando SQL onde ocorreu o erro.

Com estas propriedades, podemos tratar as mensagens lançadas pelo BD, que são as exceções da classe SqlException, através do seu código e ainda informar qual a linha onde ocorreu o erro.

Page 28: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros) Vamos a um exemplo prático.

Abra o MS SQL Server Management Studio. Na tela inicial (onde informamos o servidor, usuário e senha) digite um servidor que não existe, por exemplo "teste123" e clique no botão 'Connect'. Receberemos então uma mensagem gerada pelo SGDB a qual conterá seu código interno, veja a imagem do erro:

Page 29: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Percebam no destaque que o código interno do erro gerado pelo SQL Server foi 53. Podemos recuperar este código no C# e exibir uma mensagem de erro mais amigável para o usuário dessa forma:

Page 30: Programação Orientada à Objetos

ADO.NET – Tratando Exceções (Erros)

Exercício 2

Baseando-se no exemplo anterior, insira um tratamento de exceções adequado no projeto da aula anterior (ou similar) para que, ao clicar no botão 'Conectar ao BD', sejam tratadas as exceções de: servidor inválido, banco de dados inválido e usuário/senha inválidos. Como parte deste exercício, você terá que descobrir os códigos dos respectivos erros e implementá-los na sua aplicação.

Page 31: Programação Orientada à Objetos

Dúvidas?