prof. edwar saliba júnioresj.eti.br/.../poo_unidade_10_tratamentodeexcecoes.pdf · unidade 10 –...

40
Unidade 10 – Tratamento de Exceções 1 Programação Orientada a Objetos Prof. Edwar Saliba Júnior Tratamento de Exceções Instituto Federal de Educação, Ciência e Tecnologia do Triângulo Mineiro Prof. Edwar Saliba Júnior Abril de 2019

Upload: others

Post on 13-Aug-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 1

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Tratamento de Exceções

Instituto Federal de Educação, Ciência e Tecnologia do Triângulo MineiroProf. Edwar Saliba Júnior

Abril de 2019

Page 2: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 2

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Conceito● Robustez: capacidade de um software

continuar seu processamento mesmo sob condições anormais;

● Problemas: Como prevenir-se de erros em tempo de execução? Como prevenir-se de situações anormais?

● Exemplos de situações anormais:● Divisão por zero, fim de arquivo, overflow,

utilização de um objeto não instanciado, acesso a um índice inválido de um vetor.

Page 3: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 3

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exceção● É um evento ocorrido durante a

execução normal de um programa que desvia o fluxo normal de execução;

● É uma condição provocada por uma situação excepcional, que requer uma ação específica imediata.

(Varejão, 2004)

Page 4: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 4

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Mecanismo para Tratar Exceções● Existem linguagens de programação que não possuem tais

mecanismo. Como por exemplo:

● Linguagem C e

● Linguagem Pascal;

● Neste caso o programador deve produzir código para fazer o tratamento das possíveis exceções.

● Exemplo:

if(x != 0)

res = y / x;

else

printf(“Erro de divisão por zero!”);

Page 5: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 5

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Mecanismo para Tratar Exceções● Por outro lado, existem linguagens que

possuem tais mecanismos. Como:● Delphi,● C#,● Java e etc.;

● Benefícios:● Diminuição da sobrecarga do texto do

programa;● Maior comodidade, para o programador, no

tratamento das condições anormais.

Page 6: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 6

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo de Exceções em Java

● NullPointerException – ocorre quando a operação realizada gera um acesso a uma área não alocada (nula);

● IndexOutOfBoundException – ocorre quando se tenta acessar um índice de um vetor que está fora de seus limites.

Page 7: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 7

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Lançamento de Exceções● O lançamento (ou sinalização) de exceções pode

ser realizado da seguinte forma:● Automaticamente: o próprio mecanismo

existente na linguagem é o responsável por lançar a exceção. Pode ocorrer em qualquer ponto do programa passível de geração de situação anormal.

– Exemplo: o usuário do software entra com um valor do tipo string num campo que espera um valor do tipo float.

● Explicitamente: o programador escreve o código para lançar uma possível exceção e consequentemente capturá-la.

Page 8: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 8

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Lançamento de Exceções● Em casos específicos um programador pode fazer

o lançamento de exceções que não são tratadas pela JVM;

● O exemplo a seguir mostra um lançamento de exceção explícito em Java. Para tal, emprega-se o comando throw;

throw new Exception();

● Mais adiante veremos um exemplo prático.

Page 9: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 9

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Tratamento de Exceções● Exceções podem ser tratadas a partir de

trechos de códigos que tomam determinadas atitudes quando da ocorrência da anormalidade;

● Em Java para tratar uma exceção usa-se a instrução try:● A instrução try é composta por três blocos:

– bloco try,– bloco catch e o– bloco finally. (Facultativo.)

Page 10: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 10

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Atenção ao Código!● Projeto criado no Eclipse:

Page 11: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 11

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Classe Livro

Page 12: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 12

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Classe FicharioDeLivros

Page 13: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 13

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Classe Principal

Page 14: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 14

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Erro!● Existe um erro proposital no código que foi apresentado.

● E ao executar este programa o mesmo será finalizado com o seguinte “erro”:

Page 15: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 15

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

O Erro nos diz:que o índice do vetor está fora do limite,

o índice que extrapolou o limite,

o tamanho do vetor,

a linha (22) do método onde o erro ocorreu e

a linha (12) que chamou o método onde o erro aconteceu.

Page 16: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 16

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Analisando o Código

Foram inseridos 5 livros no ArrayList.Desta forma, o tamanho do ArrayList

é 5 e seus índices vão de 0 a 4.

No “for” os índices percorridos vão de 1 a 5.

Page 17: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 17

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Atenção!

Após o “for” existe uma mensagem que não foi impressa.Isto ocorreu porque o programa terminou antes de imprimi-la.

Page 18: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 18

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Blindando o Código

Page 19: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 19

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Execução Após Blindagem

Perceba que a excução do código,mesmo com o erro, não foi interrompida.

E a mensagem final (que se encontra depois do “for”), mesmo não condizente com a realidade, ainda assim, foi impressa.

Ou seja, a execução do programa não foi interrompida.

Page 20: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 20

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo

Page 21: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 21

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Explicando:● No exemplo do slide anterior a cláusula catch(NumberFormatException x) captura exceções de formatação numérica;

● A cláusula catch(ArithmeticException j) captura exceções ocorridas em operações aritméticas, por exemplo o erro de divisão por zero e a

● Cláusula catch(Exception f) captura qualquer tipo de exceção ocorrida dentro da instrução try;

● Os comandos dentro dos blocos catch são o tratamento das possíveis exceções;

● Já as variáveis x, j e f, cada qual, contém a sua respectiva exceção no idioma da linguagem de programação, ou seja, o inglês, mais os detalhes técnicos desta.

Page 22: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 22

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Propagação de Exceções

● Quando uma exceção ocorre a JVM busca pela cláusula catch associada ao seu tipo. A sequência para realização da busca é a que aparece no código (aninhamento de catch’s);

● Quando uma exceção não é tratada no bloco em que ocorreu, ela é propagada para o bloco mais externo;

● Se for uma chamada de método, então é propagada para o método chamador.

Page 23: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 23

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo Hipotético...

try{

try{

// Aqui pode ocorrer uma exceção do tipo IOException.

}

catch(IOException e){

... // Tratamento parcial.

}

}

catch(IOException e){

... // Restante do tratamento.

}

Page 24: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 24

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo em Código

Page 25: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 25

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Propagação de Exceções● Se o bloco ou método para o qual a

exceção foi propagada não fizer seu tratamento, então a exceção continua sendo propagada;

● Se a exceção chegar ao método principal (main) e também não for tratada, então o programa é abortado.

Page 26: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 26

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo Sem Tramamento 1

Page 27: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 27

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo Sem Tratamento 2

Page 28: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 28

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

A Cláusula throws● A cláusula throws faz parte da

assinatura do método;● Ela foi criada para ser um indicativo de

que o método pode gerar uma exceção do tipo que foi declarado na cláusula throws;

● Desta forma, um trecho de código que venha a chamar este método deve obrigatoriamente capturar uma possível exceção que o método poderá lançar.

Page 29: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 29

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo

Page 30: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 30

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Atenção!

● O fato de existir a cláusula throws na assinatura do método não eximi o programador de ter que colocar a chamada do método dentro de uma instrução try … catch.

Page 31: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 31

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Relançamento de Exceções● Em algumas situações, pode ser

necessário que o local onde ocorreu a exceção a trate de maneira parcial, deixando o restante para blocos mais externos;

● Neste caso, utiliza-se o recurso de relançamento de exceções.

Page 32: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 32

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo Hipotético...

try{

try{

// Aqui pode ocorrer uma exceção do tipo IOException.

}

catch(IOException e){

... // Tratamento parcial.

throw e; // Relançamento da exceção.

}

}

catch(IOException e){

... // Restante do tratamento.

}

Page 33: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 33

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo em Código

O método não trata,mas relança a exceção

Page 34: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 34

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Continuação após o Tratamento de Exceções

● Em algumas situações pode ser necessária a execução de um conjunto de comandos, independentemente de ter ocorrido uma exceção na instrução try;

● A cláusula finally de Java provê este recurso;

● Em geral, este recurso é utilizado quando deseja-se restabelecer o estado de algum objeto de forma independente da ocorrência e da propagação de exceções;

● Exemplo:

● encerramento de conexões com banco de dados ou fechamento de arquivos, quando houver a ocorrência de determinadas exceções.

Page 35: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 35

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Continuação após o Tratamento de Exceções

● É possível a existência de um bloco try sem um bloco catch. Mas não é possível existir uma instrução try sem, pelo menos, um bloco catch ou um bloco finally;

● Havendo um bloco finally na instrução try e independente do que aconteça, o código dentro do bloco finally sempre será executado.

Page 36: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 36

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplos Hipotéticotry{

...

// Código qualquer.

...

}

finally{

...

// Código qualquer.

...

}

try{

// Código qualquer.

}

catch(Exception e){

// Código qualquer.

}

finally{

// Código qualquer.

}

Page 37: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 37

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exemplo Try … Finally

Page 38: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 38

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Exempo Try, Catch, Finally

Page 39: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 39

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Dúvidas?

Page 40: Prof. Edwar Saliba Júnioresj.eti.br/.../POO_Unidade_10_TratamentoDeExcecoes.pdf · Unidade 10 – Tratamento de Exceções 8 Programação Orientada a Objetos Prof. Edwar Saliba

Unidade 10 – Tratamento de Exceções 40

Programação Orientada a ObjetosProf. Edwar Saliba Júnior

Bibliografia● DEITEL, H. M.; DEITEL, P. J. Java Como Programar;

tradução Edson Furmankiewicz; revisão técnica Fábio Lucchini. 6a. ed., São Paulo: Pearson, 2005.

● DESENVOLVE WEB. IconesBr. Disponível em: <http://www.iconesbr.net/index.php?acao=search&q=aten%E7%E3o&s=>. Acesso em: 01 maio 2019.

● FERREIRA, Kecia Aline Marques. Slides da disciplina de Programação de Computadores II. CEFET-MG, 2009.

● STACKOVERFLOW. Usando as palavras-chave Throws e Throw. Disponível em: <https://pt.stackoverflow.com/questions/17025/usando-as-palavras-chave-throws-e-throw>. Acesso em: 01 maio 2019.