Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.

Slides:



Advertisements
Apresentações semelhantes
Tecnologia para Web Tratamento de Exceções
Advertisements

Prof. Roberto Rosa Aula 8.  A partir de agora vamos aprender como ver qual é o erro que está acontecendo em nosso projeto. Para.
Linguagem II Exceções.
Tratamento de Exceções
Capítulo 6 Exceções.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.
Polimorfismo com Interfaces Pacotes em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB.
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
PROGRAMANDO EM JAVA Dilvan Moreira (baseado no livro Big Java)
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Disciplina:PROA3V José Henrique Verhalem e Renan Tenório Professor: Alexandre Cassimiro Novembro 2015.
Programação em Java Tratamento de Exceções Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel.
Testes de Unidade Paulo Cheque 10/02/2009 Verão 2009.
Linguagens de Programação Conceitos e Técnicas Definições e declarações Prof. Isabel Cafezeiro
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal
Recursividade, Entrada pelo teclado e Funções com retorno
Diges Feltrin Guizelini
Linguagens de Programação Conceitos e Técnicas
Projeto PLP Equipe: Emerson Espínola Marcela Marmo Concorrência em OO1.
Introdução a Programação
Python: Exceções, Iteradores e Geradores
AsyncTask e Socket no Android
Linguagem C Para programadores Python
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
IP – Condicionais e controle de fluxo
Dilvan Moreira (baseado no livro Big Java)
Criação e manipulação de objetos
Unidade IV– Relacionamento entre Objetos
Tratamento de Erros com JS
IP – Repetições Prof. Eduardo Falcão.
Introdução à Programação
Programação Orientada a Objetos
Programação Orientada a Objetos
Elaboração de Casos de Teste Funcionais RUP
Lucas Van Langendonck – 1BCC
Elaborando as Interfaces Aulas 37, 38 e 39.
Remote Method Invocation
Wrappers.
Programação Orientada a Objetos*
Orientação a Objetos Programação em C++
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
Laboratório I Mateus Raeder.
Laboratório I Mateus Raeder.
ALGORITMOS.
Teste de Software 04: Que parte devo testar?
A classe String.
Python: Exceções, Iteradores e Geradores
Programação Orientada a Objetos
Introdução a progrmação Comandos condicionais: if e switch
Unidade VI – Exceções e Interfaces
Constantes, Variáveis e Memória
Operadores Lógicos e Relacionais
Operadores Aritméticos
RESULUÇÃO DOS EXERCÍCIOS E
Programação de Computadores II
Transcrição da apresentação:

Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática, UFPE

2 Conta: declaração public class Conta { private String numero; private double saldo;... public void debitar(double valor) { saldo = saldo - valor; } Como evitar débitos acima do limite permitido?

3 1. Desconsiderar Operação public class Conta { private String numero; private double saldo;... public void debitar(double valor) { if (valor <= saldo) saldo = saldo - valor; }

4 2. Mostrar mensagem de erro public class Conta { private String numero; private double saldo;... public void debitar(double valor) { if (valor <= saldo) saldo = saldo - valor; else System.out.print("Saldo negativo"); } Mistura indesejada Como avisar quem chamou?

5 3. Retornar Código de Erro public class Conta { private String numero; private double saldo;... public boolean debitar(double valor) { boolean r = false; if (valor <= saldo) { saldo = saldo - valor; r = true; } return r; }

6 3. Retornar Código de Erro public class FachadaBanco {... public int debitar(String numero, double valor) { int erro = 0; Conta c = repContas.procurar(numero); if (c != null) { boolean b = c.debitar(valor); if (b) erro = 0; else erro = 2; } else erro = 1; return erro; } 2 tipos de erros possíveis - tende a piorar...

7 3. Retornar Código de Erro Não retorna a causa ou o tipo do erro explícito Métodos que invocam debitar têm que testar o resultado retornado para decidir o que deve ser feito A dificuldade é maior para métodos que já retornam valores –e se debitar já retornasse um outro valor qualquer? O que teria que ser feito?

8 Exceções Ao invés de códigos, teremos exceções... São objetos comuns, a partir de uma classe associada Classes representando exceções são subclasses de Exception (API de Java) Definiremos subclasses de Exception –oferecer informações extras sobre a falha, ou –distinguir os vários tipos de falhas

9 Solução: exceções em Java public class SaldoNegativoException extends Exception { public SaldoNegativoException(String num) { super ("Saldo Insuficiente em:"+num); } Todas as exceções estendem java.lang.Exception Define o construtor com mensagem

10 Métodos e exceções public class Conta {... public void debitar(double valor) throws SaldoNegativoException { if (valor <= saldo) saldo = saldo - valor; else { throw new SaldoNegativoException(this.numero); } Ops, aconteceu! Criar objeto e lançar Anuncia “eu posso lançar essa daqui!!”

11 Métodos e exceções public class Conta {... public void transferirDe(Conta c, double v) throws SaldoNegativoException { this.debitar(v); c.creditar(v); } Exceções lançadas indiretamente também devem ser avisadas

12 Tratamento de exceções FachadaBanco banco = new FachadaBanco(...); try {... banco.debitar(“123-4”,90.00);... } catch (SaldoNegativoException e) { System.out.println(e.getMessage()); } {...outros blocos catch...} Se nos interessa, vamos “prender” a exceção!

13 Tratando exceções A execução do try termina assim que uma exceção é lançada O primeiro catch de uma exceção é executado e o fluxo de controle passa para o código seguinte ao último catch Se não houver nenhum catch compatível, a exceção passa para quem chamou este método com try/catch

14 Tratando exceções: forma geral try {... } catch (E1 e1) {... }... } catch (En en) {... } finally {... } O bloco finally é sempre executado, qualquer que seja o resultado

15 Tratando exceções O bloco finally é sempre executado –após a terminação normal do try –após a execução de um catch –quando não existe nenhum catch compatível Quando o try termina sem exceções ou um catch é executado –fluxo de controle é passado para o bloco finally –Depois continua normalmente para o próximo comando

16 Exceções nas camadas: básicas public class FachadaBanco {... public void debitar(String num, double valor) throws SaldoNegativoException{ Conta c = repContas.procurar(num); c.debitar(valor); } Deu o aviso! public class InterfaceTexto {... FachadaBanco banco = new FachadaBanco(...); try {... banco.debitar(“123-4”,90.00);... } catch (SaldoNegativoException e) { System.out.println(e.getMessage()); }

17 Exceções: repositórios public class RepositorioContasArray {... public Conta procurar(String numero) throws ObjetoNaoEncontradoException { int ind = procurarIndice(numero); if (ind != -1) return contas[ind]; else throw new ObjetoNaoEncontradoException("Conta inexiste"); } public class RepositorioContasArray {... public Conta procurar(String numero) { int ind = procurarIndice(numero); if (ind != -1) return contas[ind]; else return null; } Antes Depois

18 Exceções: repositórios Antes Depois public class FachadaBanco {... public void debitar(String num, double valor) throws SaldoNegativoException{ Conta c = repContas.procurar(num); c.debitar(valor); } public class FachadaBanco {... public void debitar(String num, double valor) throws SaldoNegativoException, ObjetoNaoEncontradoException{ Conta c = repContas.procurar(num); c.debitar(valor); }

19 Exceções: fachada public class FachadaBanco {... public void cadastrarCliente (Cliente cli){ boolean achou = repClientes.existe(cli.getCpf()); if (!achou) repClientes.inserir(cli); } Antes Depois public class FachadaBanco {... public void cadastrarCliente (Cliente cli) throws ObjetoJaCadastradoException { boolean achou = repClientes.existe(cli.getCpf()); if (!achou) repClientes.inserir(cli); else throw new ObjetoJaCadastradoException(“Cliente existe”); }

20 Exceções em Java: hierarquia Problemas sérios de ambiente, não são tratáveis Checadas: se lançadas e não avisadas, erro de compilação Não-checadas: não tem problema de compilação; erros que não deveriam ir para o usuário

Aula Prática Exceções

22 Objetivos da prática Modificar sistema bancário em camadas para incluir tratamento de exceções Exceções são lançadas onde ocorrem, mas tratamento é feito apenas na GUI

23 Passo 1 Criar pacote excecoes Criar as exceções apropriadas, de acordo com as necessidades do projeto;

24 Passo 2 SaldoNegativoException Lançar a exceção no método debitar de Conta –Não esqueça do anúncio Atualizar classes que chamam este método Na InterfaceTexto, tratar a exceção ao chamar debitar –Macete do Eclipse para o try,catch

25 Passo 3 ObjetoNaoEncontradoException ObjetoJaCadastradoException São lançadas nos Repositórios ou Fachada –Repositorio: procurar, atualizar –Fachada: cadastrarXXX –Atualizar os que chamam Exceções tratadas apenas na camada GUI –Único lugar onde podemos mostrar uma mensagem ao usuário