tópicos especiais de programação orientada a objetos · 2012-09-28 · tratamento de erros em...

33
JAVA Tópicos Especiais de Programação Orientada a Objetos 1 sexta-feira, 28 de setembro de 12

Upload: others

Post on 11-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

JAVATópicos Especiais de Programação

Orientada a Objetos

1

sexta-feira, 28 de setembro de 12

Page 2: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROSTRY CATCH

2

sexta-feira, 28 de setembro de 12

Page 3: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

O que fazer quando algo inesperado acontece?

3

sexta-feira, 28 de setembro de 12

Page 4: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

O que fazer quando algo inesperado acontece?

3

Com JAVA podemos nos prevenir!!!

sexta-feira, 28 de setembro de 12

Page 5: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?

4

você

seu código

escreve que usa métodos da

classe que você

não criou

1Suponhamos  que  você  quisesse  chamar  um  método  de  uma  classe  que  não  criou.

sexta-feira, 28 de setembro de 12

Page 6: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?

5

a classe que você não criou

void moo() {if (serverDown) {

explode();}

}

2Esse  método  faz  algo  arriscado,  algo  que  pode  não  funcionar  no  tempo  de  execução.

sexta-feira, 28 de setembro de 12

Page 7: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?

6

3Você  precisa  saber  se  o  método  que  está  chamando  é  perigoso.

você

classe que você

não criou

Meu método moo() será

interrompido se o servidor travar.

Será que esse método pode

travar?

sexta-feira, 28 de setembro de 12

Page 8: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

O que acontecerá quando um método que você quiser chamar (provavelmente de uma classe que não criou) for perigoso?

7você

seu código

escreve com segurança

4Em  seguida,  você  escreverá  um  código  que  consiga  manipular  a  falha,  se  ela  realmente  ocorrer.  É  preciso  estar  preparado,  para  o  caso  de  acontecer.

Agora que eu sei, posso tomar

precauções.

sexta-feira, 28 de setembro de 12

Page 9: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

Moral da história: Previna-se

8

sexta-feira, 28 de setembro de 12

Page 10: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei” ao código que os chamou.O mecanismo de manipulação de exceções do Java é uma maneira simples e clara de lidar com as exceções que podem surgir no tempo de execução.Ele se baseia no fato de você saber que o método que está sendo chamado é perigoso, o que te permite criar um código que trate essa possibilidade.

Mas como saber se um método lança uma exceção?

9

sexta-feira, 28 de setembro de 12

Page 11: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei” ao código que os chamou.O mecanismo de manipulação de exceções do Java é uma maneira simples e clara de lidar com as exceções que podem surgir no tempo de execução.Ele se baseia no fato de você saber que o método que está sendo chamado é perigoso, o que te permite criar um código que trate essa possibilidade.

Mas como saber se um método lança uma exceção?

9

Através da cláusula throws na declaração do método.

sexta-feira, 28 de setembro de 12

Page 12: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

10

sexta-feira, 28 de setembro de 12

Page 13: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

Através de um bloco Try Catch é possível informar ao compilador que você estará tratando esta exceção. O compilador não se importará com a maneira como você manipulará; o importante é que você informe que está cuidando do problema.

11

try  {//código  a  ser  executado

}  catch  (Exceção)  {//código  de  tratamento  de  erro

}finally  {//código  sempre  executado

}

Sintaxe:

sexta-feira, 28 de setembro de 12

Page 14: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

12

public  class  TratativaDeErros  {

  public  static  void  main(String[]  args)  {         int[]  array  =  {0,  1,  2,  3,  4,  5};         for  (int  i=0;  i<10;  i++)  {       array[i]  +=  i;       System.out.println("array["  +  i  +  "]  =  "  +  array[i]);     }         System.out.println("Laço  executado  com  sucesso.");       }}

sexta-feira, 28 de setembro de 12

Page 15: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

13

public class TratativaDeErros { public static void main(String[] args) { int[] array = {0, 1, 2, 3, 4, 5}; try {

for (int i=0; i<10; i++) { array[i] += i; System.out.println("array[" + i + "] = " + array[i]); } System.out.println("Laço executado com sucesso.");

} catch (ArrayIndexOutOfBoundsException e) { System.out.println("Acessou um índice inexistente."); } catch (Exception e) { System.out.println("Outro tipo de exceção."); } finally { System.out.println("Isto SEMPRE executa."); } }}

sexta-feira, 28 de setembro de 12

Page 16: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

14

sexta-feira, 28 de setembro de 12

Page 17: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

14

sexta-feira, 28 de setembro de 12

Page 18: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

15

O que é uma exceção?!?!?!Uma exceção é um objeto... De tipo Exception.

Throwable

getMessage()printStrackTrace()

Exception

InterruptedExceptionIOException

Parte da hierarquia da classe Exception. Todas as classes estendem a classe Throwable e herdam dois métodos-chaves.

sexta-feira, 28 de setembro de 12

Page 19: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

16

Existem 3 diferentes tipos de erros:

•Erro de Runtime (java.lang.Runtime)•Erro de Sistema (java.lang.Error)•Erro Customizado (java.lang.Exception)

Os erros de Runtime são causados por bugs do programa, que desconhecemos, ou seja, uma condição especial que sequer havíamos imaginado. Os erros de Runtime são subclasses da classe Runtime, que é subclasse de Exception.

Os erros de sistema são erros imprevisíveis, causados por falha do sistema, como acesso a disco, erro do banco de dados e etc. Estes erros são subclasses da classe Error.

E os erros Customizados são erros ou condições especiais previstas no programa. Esses erros são subclasse da classe Exception.

sexta-feira, 28 de setembro de 12

Page 20: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

17

1

Mas realmente como funciona o “lançamento” de uma exceção?

Código perigoso que lança uma exceção:

public  void  takeRisk()  throws  BadException  {if  (abandonAllHope)  {throw  new  BadException();

}}

Cria um novo objeto Exception e o lança.

Informa para todos o tipo de exceção que pode ser lançada.

sexta-feira, 28 de setembro de 12

Page 21: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

18

2 Seu código que chama o método perigoso:

public  void  crossFingers()  {try  {anObject.takeRisk();

}  catch  (BadException  ex)  {System.out.println(“Ai  não!!!”);ex.printStackTrace();

}}

Se você não conseguir se recuperar da exceção, pelo menos execute um restreamento de pilha, usando o método printStackTrace() que todas as exceções herdam.

sexta-feira, 28 de setembro de 12

Page 22: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

19

Um método pode lançar mais de um tipo de exceção, mas a delcaração de um método deve incluir todas as exceções verificadas que ele pode lançar. Porém se duas ou mais exceções tiverem a mesma superclasse, o método poderá declarar apenas a superclasse.public  class  Lavanderia  {

public  void  lavarRoupas()  throws  CalcaException,  LingerieException  {//código

}}public  class  Foo  {

public  void  go()  {Lavanderia  lavanderia  =  new  Lavanderia();try  {

lavanderia.lavarRoupas();}  catch  (CalcaException  cex)  {

//tratativa}  catch  (LingerieException  lex)  {

//tratativa}

}}

sexta-feira, 28 de setembro de 12

Page 23: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

20

As exceções são Polimórficas.

Exception

RoupaExceptionIOException

CalcaException LingerieException CamisaException

CamisaSocialExceptionCamisetaException

sexta-feira, 28 de setembro de 12

Page 24: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

21

As exceções são Polimórficas.

Você pode declarar exceções usando um supertipo das exceções que lançar.

public  void  lavarRoupas()  throws  RoupaException  {

Você pode capturar exceções usando um supertipo da exceção lançada.

try  {lavanderia.lavarRoupas();

}  catch  (RoupaException  rex)  {//tratativa

}

sexta-feira, 28 de setembro de 12

Page 25: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

22

Só porque você pode capturar tudo com um superbloco catch polimórfico, não quer dizer que sempre deva fazê-lo.

try  {lavanderia.lavarRoupas();

}  catch  (Exception  ex)  {//tratativa

}

Esse bloco catch capturará QUALQUER exceção, portanto, você não saberá automaticamente o que deu errado.

sexta-feira, 28 de setembro de 12

Page 26: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

23

Crie blocos diferentes para cada tipo de exceção que você tiver que manipular exclusivamente.

try  {lavanderia.lavarRoupas();

}  catch  (CamisetaException  cex)  {//tratativa  de  Camiseta

}  catch  (LingerieException  lex)  {//tratativa  de  Lingerie

}  catch  (RoupaException  rex)  {//tratativa  das  demais  exceções

}

Todas as outras exceções serão tratadas aqui.

Tratativas específicas

sexta-feira, 28 de setembro de 12

Page 27: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

24

Mas cuidado! Você não pode colocar cestas de roupas maiores em cima de cestas menores!

try  {lavanderia.lavarRoupas();

}  catch  (RoupaException  rex)  {//tratativa  das  demais  exceções

}  catch  (LingerieException  lex)  {//tratativa  de  Lingerie

}  catch  (CamisetaException  cex)  {//tratativa  de  Camiseta

}

O tamanho é importante quando temos vários blocos catch. O de cesta maior tem que ficar no final. Caso contrário, os de cestas menores serão inúteis.

sexta-feira, 28 de setembro de 12

Page 28: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

25

E como eu faço para criar minha própria classe de exceção?

sexta-feira, 28 de setembro de 12

Page 29: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

26

Através do uso do Polimorfismo, basta criar sua classe e estendê-la a partir da classe Exception. Repare que como a classe herda as características da classe Exception, onde há o construtor que recebe como parâmetro um valor em String contendo a mensagem do erro, representada pela variável, da superclasse msg. Isto serve para ser usada o método getMessage() da classe Exception.

public  class  CalcaException  extends  Exception  {

public  CalcaException()  {super();

}

public  CalcaException(String  msg)  {super(  msg  );

}

}

sexta-feira, 28 de setembro de 12

Page 30: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

27

Mas e se eu não quiser tratar o erro, o que eu faço? Deixe para que outra pessoa trate por você!Quando você não quiser manipular, você pode desviar-se dela.

public  class  Foo  {public  void  go()  throws  RoupaException  {

Lavanderia  lavanderia  =  new  Lavanderia();lavanderia.lavarRoupas();

}}

Mas lembre-se: Desviar o erro apenas retarda o inevitável.

sexta-feira, 28 de setembro de 12

Page 31: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

TRATAMENTO DE ERROS

27

Mas e se eu não quiser tratar o erro, o que eu faço? Deixe para que outra pessoa trate por você!Quando você não quiser manipular, você pode desviar-se dela.

public  class  Foo  {public  void  go()  throws  RoupaException  {

Lavanderia  lavanderia  =  new  Lavanderia();lavanderia.lavarRoupas();

}}

Mas lembre-se: Desviar o erro apenas retarda o inevitável.

sexta-feira, 28 de setembro de 12

Page 32: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

BIBLIOGRAFIA

28

•Introdução ao Java, Daniel Destro do Carmo•Use a Cabeça Java, Kathy Sierra e Bert Bates•Certificação Sun para Programador Java 6, Kathy Sierra e Bert Bates

sexta-feira, 28 de setembro de 12

Page 33: Tópicos Especiais de Programação Orientada a Objetos · 2012-09-28 · TRATAMENTO DE ERROS Em Java os métodos usam exceções para informar “Aconteceu algo errado. Falhei”

OBRIGADO

29

PROF. EMILIO PARMEGIANI

DOWNLOAD DO MATERIAL

sexta-feira, 28 de setembro de 12