“Nature provides exceptions to every rule.“ - Margaret Fuller 3 – Exceções.

Slides:



Advertisements
Apresentações semelhantes
Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Ferramenta de Desenvolvimento Material IV-Bimestre Tratamento de.
Advertisements

Metodologia de testes Nome: Gustavo G. Quintão
Tratamento de Exceções
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS TRATAMENTO DE EXCEÇÕES
Excepções Algoritmos e Tipos Abstractos de Informação (ATAI)
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Java Como Programar, 8/E.
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Os programas que obtêm certos tipos de recursos devem retorná-los ao sistema explicitamente.
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Classes Concretas e Abstratas
Exceptions em Java Leonardo Freitas e
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Sincronização de Processos (2)
Introdução a JDBC Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Estrutura de Dados em Java
Bruno Rafael de Oliveira Rodrigues. Tratadores de Excessões A exceção é uma indicação de que um erro ou problema aconteceu durante a execução de uma aplicação.
Unidade I: “Dê um mergulho rápido”
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 6 Vetores e Matrizes
Python: Exceções, Iteradores e Geradores
Linguagens de Programação
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tecnologia para Web Tratamento de Exceções
Aula prática 6 Vetores e Matrizes
Operadores e Atribuições Capítulo 3
Programação Orientada à Objetos
Erick Luis Moraes de Sousa
Capítulo 6 Exceções.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Programação Orientada à Objetos
Prof. Roberto Rosa Aula 8.  A partir de agora vamos aprender como ver qual é o erro que está acontecendo em nosso projeto. Para.
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Classes e Objetos em Java.
Curso de Aprendizado Industrial Desenvolvedor WEB
Linguagem II Exceções.
Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Tratamento de Exceções
Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.
Aula Prática 4 Monitoria IP/CC (~if669).
Capítulo 6 Exceções.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Acabias Marques Luiz. III – Variáveis, constantes e executáveis Parte 1 – Introdução a linguagem  Variáveis e Constantes  Atalhos na manipulação de.
Seminário: Manipulação de exceções em Java Fabiana Piesigilli Rodrigo Mendes Leme MAC Programação Orientada a Objetos.
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
2 – Revisão de Programação Orientada a Objetos
2 – Revisão de Programação Orientada a Objetos
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Capítulo 15 – Tratamento de Exceções
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Java™ Como Programar, 8/E.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Tratamento de Exceções. Roteiro O que são exceções? Quando usar Capturando Exceções Exemplos.
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos.
Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos.
SOCKET - É um canal de comunicação entre processos que estabelece uma conexão entre eles na forma de cliente-servidor. Por meio de sockets, os computadores.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
POO Exceções “Nature provides exceptions to every rule.“
“Nature provides exceptions to every rule.“
Transcrição da apresentação:

“Nature provides exceptions to every rule.“ - Margaret Fuller 3 – Exceções

“Nosso software não tem bugs.”  “Nós não encontramos bugs em nosso software.” Entradas (as vezes maliciosa), falhas na Rede, falhas no Banco de Dados... Tratamento de erros e exceções

Contextualização Implementação do programa que executa nos caixas de auto-atendimento dos bancos. 3

Motivação O que acontece com o método saca(1000)? 4

Como saber se o usuário passou um valor <0? Magic numbers: mudar o retorno de boolean para int, e tratar cada número como código de um erro que ocorreu. Nós perdemos o retorno do método e o valor devolvido é "mágico" e só legível perante extensa documentação; Continuamos não obrigando o programador a tratar esse retorno (ele pode esquecer...) e, caso ele esqueça, seu programa rodará em um estado inconsistente. Algum problema nisso? 5

Exceção Por esses e outros motivos, utilizamos um código diferente em Java para tratar aquilo que chamamos de exceções: os casos onde acontece algo que, normalmente, não iria acontecer. – Exemplo: o argumento do saque inválido, além do limite disponível ou um valor negativo 6 Uma exceção representa uma situação que normalmente não ocorre e representa algo de estranho ou inesperado no sistema.

Estrutura: blocos try-catch try { // Insira algum código aqui que possa causar algum // tipo de exceção. // Podemos ter muitas linhas de código aqui // ou apenas uma. } catch (MinhaExcecao ex) { // Insira um código aqui que manipule essa exceção. } finally{ // libere os recursos alocados no “try” }

Execício I Antes de resolvermos o nosso problema, vamos ver como a Java Virtual Machine age ao se deparar com situações inesperadas, como divisão por zero ou acesso a um índice da array que não existe. – Para aprendermos os conceitos básicos das exceptions do Java, teste o seguinte código você mesmo (5 minutos) – O que é impresso e qual a ordem de execução dos métodos 8

Execício I Main  Metodo1  metodo2 – cada método tem suas variáveis locais (só o método em questão enxerga) – Toda invocação de método é empilhada na pilha de execução (stack) 9

Resultado 10 stack trace, ou rastro da pilha Exceção: índice fora dos limites do array

Sistema de exceções do Java Quando uma exceção é lançada (throw), a JVM entra em estado de alerta e vai ver se o método atual toma alguma precaução ao tentar (try) executar esse trecho de código; 11 ArrayIndexOutOfBounds Exceção é lançada no metodo2, mas ele não toma nenhuma precaução (try); JVM, pára a execução dele e desce um stackFrame; A exceção (batata quente) continua viva, pois ninguém tratou ela. Logo, ela é passada adiante. JVM volta pra o metodo1, mas ele também não toma nenhuma precaução com a exceção ArrayIndexOutOfBoundsException; De modo similar, a exceção vai pro main, que também não a trata, e assim o programa explode e pára de funcionar!

Obviamente, aqui estamos forçando esse caso e não faria sentido tomarmos cuidado com ele. É fácil arrumar um problema desses: basta percorrermos a array no máximo até o seu length. Porém, apenas para entender o controle de fluxo de uma Exception, vamos colocar o código que vai tentar (try) executar o bloco perigoso e, caso o problema seja do tipo ArrayIndexOutOfBoundsException, ele será pego (caught). Repare que é interessante que cada exceção no Java tenha um tipo... ela pode ter atributos e métodos. 12

13 ?

Retire o try/catch e coloque ele em volta da chamada do metodo2. 14 ?

Faça o mesmo, retirando o try catch novamente e colocando em volta da chamada do metodo1. Rode os códigos, o que acontece? 15 ? A partir do momento que uma exception foi catched (pega, tratada, handled), a execução volta ao normal a partir daquele ponto.

Hierarquia 16 Situações incomuns que não são causados por erro de implementação Geralmente são causadas por erro de implementação Geralmente são causadas por indisponibilidades ou inexistência do recurso Errors Unchecked exceptions Checked exceptions

17 NullPointerException e ClassCastException, são checked (obrigatoriamente precisam ser tratadas) ou unchecked / runtime?

Unchecked/RuntimeExceptions número/0  ArithmeticException acessar elemento fora dos limites de um array  ArrayIndexOutOfBoundsException acessar atributos ou chamar métodos de referência nula  NullPointerException Tentar converter uma variável de referência em um tipo que não passa no teste É-UM (instanceof)  ClassCastException Também são chamadas de Unchecked Exceptions – Podem ser consertadas programaticamente

19 Unchecked/RuntimeExceptions

Compila? Checked Exceptions obriga a quem chama o método ou construtor (que lança a exceção) a tratar essa exceção – checked: o compilador checará se ela está sendo devidamente tratada, diferente das anteriores, conhecidas como unchecked – caso não esteja sendo tratada, o código não compilará 20

Como resolver?

Múltiplas exceções

Lançando exceções 23 throw está no imperativo, ou seja, significa lance RuntimeException é muito genérica algo foi usado como argumento e o método saca não gostou

24 Lançando exceções É boa prática adicionar msg explicando a exceção E se o valor passado fosse negativo, como resolveríamos esse problema?

O que colocar dentro do try? Mas há ainda uma outra opção: imagine que, para o nosso sistema, uma falha ao sacar da conta poupança deve parar o processo de saques e nem tentar sacar da conta corrente.

Criando nossa própria Exceção 26

Discussão final Existe uma péssima prática de programação em java que é a de escrever o catch e o throws com Exception. – Existem códigos que sempre usam Exception pois isso cuida de todos os possíveis erros. O maior problema disso é generalizar o erro. Se alguém joga algo do tipo Exception para quem o chamou, quem recebe não sabe qual o tipo específico de erro ocorreu e não vai saber como tratar o mesmo. Sim, há casos onde o tratamento de mais de uma exception pode ser feito de uma mesma maneira. Por exemplo, se queremos terminar a aplicação tanto no caso de IOException quanto em SQLException. Se fizermos catch(Exception e)para pegar esses dois casos, teremos um problema: a aplicação vai parar mesmo que outra exceção seja lançada. A solução correta seria ter dois catches, mas aí teríamos código repetido. Para evitar o código repetido, podemos usar o multi-catch do Java 7, que permite um mesmo catch cuidar de mais de 1 exceção, através da sintaxe: catch(IOException | SQLException e) {... }. 27

Referências Essa aula utilizou os exemplos das apostilas caelum e do livro de certificação Java (SCJP por Kathy Sierra). Leitura adicional: exceptions/ 28