1 / 31

Linguagem II

Linguagem II. Exceções. Revisão. Herança Construtores Sobrescrição de métodos Classes Abstratas métodos abstratos. Interfaces implements Polimorfismo. Tratamento de Erros. Robustez

navid
Download Presentation

Linguagem II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linguagem II Exceções

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

  3. 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 {dpr@cin.ufpe.br}

  4. 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 {dpr@cin.ufpe.br}

  5. 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 {dpr@cin.ufpe.br}

  6. 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); returntrue; } else { //Erro! return false; } } Davi Pires {dpr@cin.ufpe.br}

  7. 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 {dpr@cin.ufpe.br}

  8. 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 {dpr@cin.ufpe.br}

  9. 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 {dpr@cin.ufpe.br}

  10. 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 {dpr@cin.ufpe.br}

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

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

  13. 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 {dpr@cin.ufpe.br}

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

  15. 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 {dpr@cin.ufpe.br}

  16. 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 {dpr@cin.ufpe.br}

  17. 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 {dpr@cin.ufpe.br}

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

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

  20. 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 {dpr@cin.ufpe.br}

  21. 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 {dpr@cin.ufpe.br}

  22. 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 {dpr@cin.ufpe.br}

  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 {dpr@cin.ufpe.br}

  24. 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 {dpr@cin.ufpe.br}

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

  26. 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 {dpr@cin.ufpe.br}

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

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

  29. 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 {dpr@cin.ufpe.br}

  30. 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 {dpr@cin.ufpe.br}

  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 http://creativecommons.org/licenses/by-nc-sa/2.0/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

More Related