Top Banner
Exceções, Loops e Recursão Guilherme Carvalho (gvc)
41

Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Nov 10, 2018

Download

Documents

ngobao
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: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Exceções, Loops e Recursão

Guilherme Carvalho (gvc)

Page 2: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Instruções para a aula Façam silêncio. Se tiverem dúvidas, perguntem a mim. Se tiverem vergonha, levantem a mão e me

chamem. Evitem ter vergonha, sua dúvida pode ser a

do seu colega. Participem. Se tiverem dúvidas, perguntem a mim. Façam silêncio. Participem. E se lembrem de tirar dúvidas comigo. COMIGO! Beleza?

Page 3: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O que temos pela frente Exceções

Motivação Criando Tratando

Memory Leak Como o Garbage Collector funciona!

Loops while for do-while for

Recursão Miniprova

Page 4: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Situações excepcionais O que são situações excepcionais?

“É um evento que ocorre durante a execução de um programa que interrompe o fluxo normal das instruções”

Definição da Sun

4

Page 5: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Situações excepcionais Como a Microsoft trata?

5

Page 6: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

6

Page 7: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Erros em Java Quando acontece uma situação excepcional

na execução de um programa Java, como é feita a notificação?

7

Page 8: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Erros em Java A Api de Java define uma classe Throwable,

que define todos os erros e exceções. Da classe Throwable, foram criadas as classes

Exception e Error.

8

Page 9: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

A família Error A classe Error serve para representar

condições anormais, que não deveriam ocorrer nunca.

Programas não devem tratar Errors. Exemplo:

OutOfMemoryErrorSe você tentar alocar 2147483648 inteiros.

9

Page 10: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

A família Exception A classe Exception representa os erros que

um programa deve tratar. A partir da classe Exception foi criado mais

um subtipo: RuntimeException.

10

Page 11: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

A família RuntimeException São exceções não checadas.

Mais disso daqui a alguns slides. Vocês conhecem sua filha mais famosa!

NullPointerException E a filha menos famosa:

ArithmeticException

11

Page 12: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Exceções As exceções predefinidas de Java não servem

para todas as situações. Nós, programadores, queremos criar nossas

próprias exceções. A que família nossas exceções pertencem?

12

Page 13: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Criando exceções

13

Uma exceção é uma classe como outra qualquer, vocês já sabem criar uma!

Devem extender Exception. Para facilitar a legibilidade, e seguir os

padrões, seus nomes devem acabar com Exception.

Dois exemplos:

Page 14: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Criando exceções

14

public class DeuPauException extends Exception {

/*

Corpo da exceção.

*/

}

Agora, uma exceção séria.

Page 15: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Criando exceções

15

public class ImpossivelDividirPorZeroException {

int dividendo;

public ImpossivelDividirPorZeroException (int dividendo){

this.dividendo = dividendo;

}

public String getMessage() {

return “Impossível dividir “ + resultado + “ por zero!“;

}

}

Isso é uma exceção?

Page 16: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Criando exceçõespublic class ImpossivelDividirPorZeroException extends

Exception {

int dividendo;

public ImpossivelDividirPorZeroException (int dividendo){

this.dividendo = dividendo;

}

public String getMessage() {

return “Impossível dividir “ + resultado + “ por zero!“;

}

}

Isso é uma exceção?16

Page 17: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Lançando exceções

17

Um método que queira lançar uma exceção deverá ter duas coisas a mais.1. Declarar no seu cabeçalho que pode lançar uma

exceção.2. Ao detectar um erro, lançar a exceção.

Vejamos:

Page 18: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Lançando exceções

18

//...

//...

public int dividir(int dividendo, int divisor)

throws ImpossivelDividirPorZeroException {

if(divisor == 0) {

throw new ImpossivelDividirPorZeroException(dividendo);

} else {

return dividendo / divisor;

}

Page 19: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Lançando exceções

19

Observação:Um método que chama um outro método que pode lançar uma exceção PRECISA declarar no cabeçalho a possibilidade do lançamento, apesar de não ter o throw no seu corpo.

Page 20: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Exceções checadas e não checadas

20

Como prometido, o que é uma exceção não checada:

É uma exceção que não precisa ser declarada no cabeçalho do método que a lança.

E agora, o que é uma exceção checada?

Page 21: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Tratando exceções

21

Java nos coloca a disposição três blocos especiais para o tratamento de exceções: try catch e finally.

Como usamos? No próximo slide!

Page 22: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Tratando exceções

22

public static void main (String[] args) {

int a = 10;

int b = 0;

try {

int resultado = dividir(a, b);

} catch (ImpossivelDividirPorZeroException e) {

System.out.println(e.getMessage());

} finally {

System.out.println(“Passei pelo try ou pelo catch”);

}

System.out.println(“O resultado foi: “ + resultado);

}

Page 23: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Por que usar exceções? Separa o código de tratamento do código

“normal”. Propagação de erros mais efetiva. Possibilitar a criação de diferentes tipos de

erros para diferentes situações.

23

Page 24: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Exceções Dúvidas sobre exceções? Não sejam tímidos...

E agora, para uma coisa completamente diferente.

24

Page 25: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Memory leak

25

Acontece pouco em Java, por causa do Garbage Collector.

Cuidado! Ninguém manda no Garbage Collector!!

Page 26: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Garbage collector Vejamos como ele funciona, dado o código:

public class MinhaJanela extends Window {

Button b1;

Button b2;

public MinhaJanela() {

b1 = new Button(“1”);

b2 = new Button(“2”);

//....

b1 = b2;

}

}

26

Page 27: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Garbage collector

27

b1

b2

Xiiii!

Page 28: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Loops - Motivação Precisamos repetir muitas vezes algum trecho

de código Podemos não saber de antemão quanto

“muitas” é Aumento da produtividade do programador

28

Page 29: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Loops em Java Java fornece três tipos de loop controlador por

expressões booleanas. São eles:

while for do-while

29

Page 30: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O comando while Sintaxe:

...

while(condicao) {

bloco de código

}

Semântica: Enquanto condicao for true, execute o bloco de

código

30

Page 31: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O comando while Pode executar o bloco de código 0 ou mais

vezes. Deve ser utilizado quando não sabemos a

princípio quantas vezes será executado.

31

Page 32: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O comando for Sintaxe:...

for(inicializacao; condicao; incremento) {

bloco de código

}

Semântica: Baseado no while

inicializacao;

while(condicao) {

bloco de código

incremento;

}

32

Page 33: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O comando for Qualquer uma das 3 partes do for pode ser

omitida. A inicialização só é executada uma vez. A condição é verificada antes de cada

iteração. O incremento é executado após toda iteração.

33

Page 34: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O comando for Pode executar o bloco de código 0 ou mais

vezes. Deve ser utilizado quando sabemos quantas

vezes o bloco será executado.

34

Page 35: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O comando do-while Sintaxe:...

do {

bloco de código

} while(condicao);

Semântica: Execute o bloco de código enquanto a condição

for true

35

Page 36: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

O comando do-while Pode executar o bloco de código 1 ou mais

vezes. Deve ser utilizado quando não sabemos a

princípio quantas vezes será executado, mas sabemos que pelo menos uma vez terá que ser executado.

36

Page 37: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Recursão O que é recursão?

Alguma coisa definida em termos de si próprio. Muito utilizado na matemática.

37

Page 38: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Recursão Um caso famoso:

Fatorial: n! = n * (n-1)!

5! = 5 * 4!

4! = 4 * 3!

3! = 3 * 2!

2! = 2 * 1!

1! = 1 * 0!

0! = 0 * -1!

Epa! Está faltando alguma coisa! O que?

38

Page 39: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Recursão O caso base é tão importante para a recursão

quanto o passo recursivo. Agora, a definição completa do fatorial:

n! = n * (n-1)! 1! = 1

39

Page 40: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Recursão em Java É simples:

public int fatorial(int n) {

int retorno;

if ( n == 1) {

retorno = 1;

} else {

retorno = n * fatorial(n - 1);

}

return retorno;

}

40

Page 41: Exceções, Loops e Recursão - cin.ufpe.brgvc/arquivos/aulas/Aula 02 - Exceções.pdf · Mais disso daqui a alguns slides. ... Muito utilizado na matemática. 37. Recursão ... fatorial(5)

Recursão em Java E se esquecêssemos o caso base?fatorial(5)

fatorial(4)

fatorial(3)

fatorial(2)

fatorial(1)

fatorial(0)

fatorial(-1)

fatorial(-2)

fatorial(-3)

fatorial(-4)

...

...

StackOverflow

41