Top Banner
Linguagem II Exceções
31

Linguagem II Exceções. Davi Pires {[email protected]} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Apr 22, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Linguagem II

Exceções

Page 2: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

RevisãoRevisão

• Herança– Construtores– Sobrescrição de métodos

• Classes Abstratas– métodos abstratos.

• Interfaces– implements

• Polimorfismo

Page 3: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratamento de ErrosTratamento 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?

Page 4: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratamento de errosTratamento de erros

• Consolepublic void transferir(double valor, Conta destino) {

if( destino != null ) {//ação...destino.creditar(valor);this.debitar(valor);

} else {//Erro!System.out.println(“Erro!”);

}}

Page 5: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratamento de errosTratamento 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.

Page 6: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratamento de errosTratamento 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;

}}

Page 7: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratamento de errosTratamento 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;

}}

Page 8: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratamento de errosTratamento 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.

Page 9: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

ExceçõesExceçõ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”.

Page 10: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

A Classe ExceptionA 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);

Page 11: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

ExceçõesExceções

• Devem estender Exceptionpublic class MinhaExcecao extends Exception {

public MinhaExcecao( ) {super(“Erro! Minha exceção!”);

}}

public class OutraExcecao extends Exception {

}

Page 12: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

ExceçõesExceções

• Exemplo:– SaldoInsuficienteException.java– ContaDestinoNulaException.java

Page 13: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

ExceçõesExceçõ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

Page 14: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

ExceçõesExceções

• Exemplo:– OperacaoAbortadaException.java

Page 15: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratamento de ErrosTratamento 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.

Page 16: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Inserindo exceçõesInserindo 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( );

Page 17: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Inserindo exceçõesInserindo 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!”);

}}

Page 18: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Exceções e métodosExceções e métodos

metodoA( )

metodoB( )

metodoC( )

Exceção

Page 19: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Exceções e métodosExceções e métodos

• Relançando exceções– cláusula throws

• Tratando exceções– blocos try-catch-finally.

Page 20: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

public void transferir(double valor, Conta destino) {if( destino != null ) {

//ação...} else {

//Erro!throw new ContaDestinoNulaException( );

}}

Cláusula throwsCláusula throws

• Na assinatura do método.

• Especifica quais exceções ele lança.

public void transferir(double valor, Conta destino) throws ContaDestinoNulaException {

if( destino != null ) {//ação...

} else {//Erro!throw new ContaDestinoNulaException( );

}}

Page 21: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Cláusula throwsClá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

Page 22: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Cláusula throwsClá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!

Page 23: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Blocos try-catch-finallyBlocos 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.

Page 24: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratando exceçõesTratando 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

}

Page 25: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratando exceçõesTratando exceções

• Exemplo: Conta.debitar(...);

Conta conta = new Conta(“123”, 15.0);try {

conta.debitar(10.0);conta.debitar(10.0);

} catch (SaldoInsuficienteException sie) {//TratamentoSystem.out.println(“Saldo insuficiente!”);

}

Page 26: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratando exceçõesTratando exceções

• Exemplo: Conta.transferir(...);

Conta conta = new Conta(“123”, 15.0);try {

conta.transferir(20.0, null);} catch (SaldoInsuficienteException sie) {

//TratamentoSystem.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!”);}

Page 27: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

Tratando exceçõesTratando exceções

• Exemplo:– ./contas/CadastroContas.java

Page 28: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

DúvidasDúvidas

Page 29: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

ExercíciosExercí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.

Page 30: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

Davi Pires {[email protected]}

ExercíciosExercí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.

Page 31: Linguagem II Exceções. Davi Pires {dpr@cin.ufpe.br} Revisão Herança –Construtores –Sobrescrição de métodos Classes Abstratas –métodos abstratos. Interfaces.

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.