linguagem ii

31
Linguagem II Exceções

Upload: navid

Post on 20-Jan-2016

26 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linguagem II

Linguagem II

Exceções

Page 2: Linguagem II

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

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

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

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

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

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

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

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

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

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

Davi Pires {[email protected]}

ExceçõesExceções

• Exemplo:– SaldoInsuficienteException.java– ContaDestinoNulaException.java

Page 13: Linguagem II

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

Davi Pires {[email protected]}

ExceçõesExceções

• Exemplo:– OperacaoAbortadaException.java

Page 15: Linguagem II

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

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

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

Davi Pires {[email protected]}

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

metodoA( )

metodoB( )

metodoC( )

Exceção

Page 19: Linguagem II

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

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

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

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

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

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

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

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

Davi Pires {[email protected]}

Tratando exceçõesTratando exceções

• Exemplo:– ./contas/CadastroContas.java

Page 28: Linguagem II

Davi Pires {[email protected]}

DúvidasDúvidas

Page 29: Linguagem II

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

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

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.