A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Linguagem II Exceções.

Apresentações semelhantes


Apresentação em tema: "Linguagem II Exceções."— Transcrição da apresentação:

1 Linguagem II Exceções

2 Davi Pires {dpr@cin.ufpe.br}
Revisão Herança Construtores Sobrescrição de métodos Classes Abstratas métodos abstratos. Interfaces implements Polimorfismo Davi Pires

3 Davi Pires {dpr@cin.ufpe.br}
Tratamento de Erros Robustez “Capacidade de um sistema para continuar funcionando mesmo com erros ou falhas durante a execução do programa.” Como temos feito nosso tratamento de erros? Davi Pires

4 Davi Pires {dpr@cin.ufpe.br}
Tratamento de erros Console public void transferir(double valor, Conta destino) { if( destino != null ) { //ação... destino.creditar(valor); this.debitar(valor); } else { //Erro! System.out.println(“Erro!”); } Davi Pires

5 Davi Pires {dpr@cin.ufpe.br}
Tratamento de erros Problemas Código emaranhado. “macarrônico”... Erros não são vistos além do método. estado após o método é incerto. quem chamou não sabe se houveram erros. Single Responsibility Law violada. Davi Pires

6 Davi Pires {dpr@cin.ufpe.br}
Tratamento de erros “Sacrificar” o tipo de retorno. public boolean transferir(double valor, Conta destino) { if( destino != null ) { //ação... destino.creditar(valor); this.debitar(valor); return true; } else { //Erro! return false; } Davi Pires

7 Davi Pires {dpr@cin.ufpe.br}
Tratamento de erros Mais um exemplo. public int transferir(double valor, Conta destino) { if( destino != null ) { //ação... destino.creditar(valor); this.debitar(valor); return 0; } else { //Erro! return 1; } Davi Pires

8 Davi Pires {dpr@cin.ufpe.br}
Tratamento de erros Técnicas ad hoc. O que seria interessante? Separação de código. Preservação da assinatura dos métodos. Java fornece meios específicos para declarar e tratar erros. Davi Pires

9 Davi Pires {dpr@cin.ufpe.br}
Exceções Classes que representem os possíveis erros do sistema. geralmente, criadas pelos programadores. Partilham alguns comportamentos comuns: podem ser “lançadas”. podem ser “interceptadas”. para depois serem “tratadas”. Davi Pires

10 Davi Pires {dpr@cin.ufpe.br}
A Classe Exception package java.lang; implements java.io.Serializable; É a superclasse de todas as exceções. Define construtores. Exception(); Exception(String input); Exception(Throwable cause); Exception(Throwable cause, String input); Davi Pires

11 Davi Pires {dpr@cin.ufpe.br}
Exceções Devem estender Exception public class MinhaExcecao extends Exception { public MinhaExcecao( ) { super(“Erro! Minha exceção!”); } public class OutraExcecao extends Exception { } Davi Pires

12 Davi Pires {dpr@cin.ufpe.br}
Exceções Exemplo: SaldoInsuficienteException.java ContaDestinoNulaException.java Davi Pires

13 Davi Pires {dpr@cin.ufpe.br}
Exceções Também podem carregar informações importantes sobre o erro ocorrido. Podem ter atributos e métodos próprios. Padrão de Codificação Nomes terminando com “Exception”. NullPointerException ArrayIndexOutOfBoundsException Davi Pires

14 Davi Pires {dpr@cin.ufpe.br}
Exceções Exemplo: OperacaoAbortadaException.java Davi Pires

15 Davi Pires {dpr@cin.ufpe.br}
Tratamento de Erros Inserindo exceções no código Como separar detecção de tratamento? Como avisar o método anterior? Como manter a SRL? Exceções são lançadas usando a cláusula throw. Davi Pires

16 Davi Pires {dpr@cin.ufpe.br}
Inserindo exceções “Pontos de erro” public void transferir(double valor, Conta destino) { if( destino != null ) { //ação... destino.creditar(valor); this.debitar(valor); } else { //Erro! } throw new ContaDestinoNulaException( ); Davi Pires

17 Davi Pires {dpr@cin.ufpe.br}
Inserindo exceções A cláusula throw Interrompe a execução do método “unreachable statements” public void transferir(double valor, Conta destino) { if( destino != null ) { //ação... } else { //Erro! throw new ContaDestinoNulaException( ); System.out.println(“erro!”); } Davi Pires

18 Davi Pires {dpr@cin.ufpe.br}
Exceções e métodos metodoA( ) metodoB( ) metodoC( ) Exceção Davi Pires

19 Davi Pires {dpr@cin.ufpe.br}
Exceções e métodos Relançando exceções cláusula throws Tratando exceções blocos try-catch-finally. Davi Pires

20 Davi Pires {dpr@cin.ufpe.br}
Cláusula throws Na assinatura do método. Especifica quais exceções ele lança. public void transferir(double valor, Conta destino) { if( destino != null ) { //ação... } else { //Erro! throw new ContaDestinoNulaException( ); } public void transferir(double valor, Conta destino) throws ContaDestinoNulaException { if( destino != null ) { //ação... } else { //Erro! throw new ContaDestinoNulaException( ); } Davi Pires

21 Davi Pires {dpr@cin.ufpe.br}
Cláusula throws Em interfaces, também devem ser declaradas as exceções lançadas pelo método. Uma hierarquia de exceções que um método lança pode ser resumida em uma única exceção. java.lang.Exception Davi Pires

22 Davi Pires {dpr@cin.ufpe.br}
Cláusula throws Exemplo: Conta.java RepositorioContas.java Exercício Altere as classes de Conta* da aula passada para que eles lancem as seguintes exceções: ContaNulaException, ao inserir uma conta cujo valor seja null. RepositorioVazioException, ao tentar imprimir o conteúdo de um repositório vazio. Altere o método main e teste! Davi Pires

23 Blocos try-catch-finally
Exceções devem ser tratadas tão cedo possível. Não podem chegar à JVM. Tratamento é feito com blocos try-catch-finally Permitem o tratamento individual de cada exceção. Davi Pires

24 Davi Pires {dpr@cin.ufpe.br}
Tratando exceções try { código que lança exceções. } catch ( NomeDaExcecao nomeDaVariavel ) { //Tratamento da exceção } catch (NomeDeOutraExcecao outroVariavel) //Outro tratamento de exceção } catch .. //Tantos blocos catch quanto necessários } finally { // SEMPRE é executado } Davi Pires

25 Davi Pires {dpr@cin.ufpe.br}
Tratando exceções Exemplo: Conta.debitar(...); Conta conta = new Conta(“123”, 15.0); try { conta.debitar(10.0); } catch (SaldoInsuficienteException sie) { //Tratamento System.out.println(“Saldo insuficiente!”); } Davi Pires

26 Davi Pires {dpr@cin.ufpe.br}
Tratando exceções Exemplo: Conta.transferir(...); Conta conta = new Conta(“123”, 15.0); try { conta.transferir(20.0, null); } catch (SaldoInsuficienteException sie) { //Tratamento System.out.println(“Saldo insuficiente!”); } Conta conta = new Conta(“123”, 15.0); try { conta.transferir(20.0, null); } catch (SaldoInsuficienteException sie) { System.out.println(“Saldo insuficiente!”); } catch (ContaDestinoNulaException cdne) { System.out.println(“Conta destino nula!”); } Davi Pires

27 Davi Pires {dpr@cin.ufpe.br}
Tratando exceções Exemplo: ./contas/CadastroContas.java Davi Pires

28 Davi Pires {dpr@cin.ufpe.br}
Dúvidas Davi Pires

29 Davi Pires {dpr@cin.ufpe.br}
Exercícios Escreva um repositório de X que tenha dois métodos public: void inserir(X novoX) throws ArrayCheioException void duplicarArray( ) throws ArrayNaoCompletoException Escreva uma classe CadastroX, chame os métodos do repositório repassando as exceções. Faça um método main para testar! Trate as exceções com try-catch no main. Davi Pires

30 Davi Pires {dpr@cin.ufpe.br}
Exercícios Operações matemáticas inválidas em Java lançam ArithmeticException. e.g. divisão por zero. Faça um programa em que os usuários insiram repetidamente os operandos de operações matemáticas. Trate o caso de uma operação inválida. Davi Pires

31 Este trabalho está licenciado sob uma Licença Creative Commons Atribuição-Uso Não-Comercial-Compatilhamento pela mesma licença. Para ver uma cópia desta licença, visite ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.


Carregar ppt "Linguagem II Exceções."

Apresentações semelhantes


Anúncios Google