Programação Orientada a Objetos

Documentos relacionados
Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo

O tratamento de erros em Java

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Tratamento de Exceções cont. Profa. Thienne Johnson EACH/USP

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Tratamento de Exceção. Tratamento de Exceções. Vantagens de TE. Exemplos de Exceções. Exemplo: Divide1 (sem TE)

Erros, exceçõ. ções e asserçõ

Tratamento de Exceções

[Desenvolvimento OO com Java] Exceções e controle de erros

Notas de Aula 09: Tratamento de exceções

Tratamento de Exceções. Prof. Leonardo Barreto Campos 1

9 Exceções. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

Exceções. Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12. quarta-feira, 21 de março de 12

Java Standard Edition (JSE)

AULA TEÓRICA 3. Tema 4. Excepções Ø Tratamento de excepções

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

Tratamento de Exceções

Paradigmas da Programação PPROG. Linguagem JAVA. Exceções. (Livro Big Java, Late Objects Capítulo 7) Nelson Freire (ISEP DEI-PPROG 2015/16) 1/45

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Aplicações, durante a execução, podem incorrer em muitas espécies de erros de vários graus de severidade Quando métodos são invocados sobre um objeto:

terminar o programa; retornar um valor de erro indicando falha; retornar e ignorar o problema; chamar uma função para tratar o erro, etc...

Programação Orientada a Objetos. Manipulação de Exceções

Exceções. SCC0504 Programação Orientada a Objetos. Luiz Eduardo Virgilio da Silva ICMC, USP

Programação Orientada a Objetos SANTOS, Rafael (PLT)

Mecanismo de exceções em Java

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Tratamento de Exceções em Java

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP

Capítulo 10. Tratamento de Exceções. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Tratamento de Erro e Javadoc. Professor: Norton T. Roman

Programação Orientada a Objetos JAVA - NETBEANS

Array em Java. Figura 1 - Exemplo de um array de inteiros

Tratando exceções em Java

O que é uma Exceção? Call Stack. Java Tratamento de Exceção. de métodos que foram usados até chegar na presente instrução.

Escola Superior de Gestão e Tecnologia. Tratamento de Exceções

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

Exceções e controle de erros

Exceções em Java Padrões, anti-padrões e boas práticas


Classes e Objetos. Sintaxe de classe em Java

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Tratamento de Exceções. Alberto Costa Neto DComp - UFS

Transcrição:

Programação Orientada a Objetos Prof. Kléber de Oliveira Andrade pdjkleber@gmail.com

Tratamento de Exceções Quem pensa pouco, erra muito Leonardo da Vinci

Exceções!!! 12/09/2011 Prof. Kléber de Oliveira Andrade 3

Exceções Uma exceção representa uma situação que normalmente não ocorre e representa algo de estranho ou errado no sistema. 1. Erros de lógica de programação Ex: limites do vetor ultrapassados, divisão por zero Devem ser corrigidos pelo programador 2. Erros devido a condições do ambiente de execução Ex: arquivo não encontrado, rede fora do ar, etc. Fogem do controle do programador contornados em tempo de execução mas podem ser 3. Erros graves onde não adianta tentar tecuperar Ex: falta de memória, erro interno do JVM Fogem do controle contornados do programador e não podem ser 12/09/2011 Prof. Kléber de Oliveira Andrade 4

Exercício para começar com os conceitos 12/09/2011 Prof. Kléber de Oliveira Andrade 5

Rastro da pilha (stacktrace) 12/09/2011 Prof. Kléber de Oliveira Andrade 6

Como funcionam as exceções Quando um método é invocado ele é colocado na pilha onde são inseridos os métodos em execução na ordem em que foram chamados. Sempre que um método termina a sua execução ele é desempilhado e o fluxo do programa volta para o método anterior, ou para aquele que está no topo da pilha. Quando uma exceção é lançada em um método e não é tratada, este método é interromido e a execeção se propaga para o próximo método na pilha de execuções. Desta forma, enquanto uma exceção não for tratada, ela irá ser repassada para um nível abaixo da pilha até chegar ao método main. O método main que representa o primeiro método a ser chamado em qualquer programa é a última alternativa para que ocorra captura e tratamento de uma exceção lançada, pois caso contrário o programa será encerrado. void main(string[] args){... método1();... } void metodo1(){ metodo2(); } void metodo2(){... } stackframe (gomo da pilha) stack (pilha de execução) metodo2() metodo1() main() 12/09/2011 Prof. Kléber de Oliveira Andrade 7

Controle de erros com Exceções Exceções são: Erros de tempo de execução Objetos criados a partir de classes especiais que são lançados quando ocorrem condições excepcionais. Métodos podem capturar ou deixar passar exceções que ocorrerem em seu corpo É obrigatório, para a maior parte das exceções, que o método declare quaisquer exceções que ele não capturar Mecanismo try/catch é usado para tentar capturar exceções enquanto elas passam por métodos 12/09/2011 Prof. Kléber de Oliveira Andrade 8

Controle de Erros (Exceções) O mecanismo de tratamento de erros em Java é feito pelas diretivas try, catch e finally. Podem existir múltiplos blocos catch no tratamento de erros. Cada um para um tipo específico de Exception. 12/09/2011 Prof. Kléber de Oliveira Andrade 9

Bloco try O bloco try tenta executar um bloco de código que pode causar exceções (erros). Deve ser seguido por: Um ou mais blocos catch ( TipoDeExecao ref ). E/ou um bloco finally. O bloco try não pode aparecer sozinho, devendo ser seguido por pelo menos um catch ou por um finally. 12/09/2011 Prof. Kléber de Oliveira Andrade 10

Bloco catch Blocos catch recebem um tipo de execção como argumento Se ocorrer uma exceção no try, ela irá descer pelos catch até encontrar um que declare capturar exceções de uma classe ou superclasse da exceção lançada. Apenas um dos blocos catch é executado. 12/09/2011 Prof. Kléber de Oliveira Andrade 11

Bloco finally O bloco finally contém instruções que devem ser executadas independentemente da ocorrência ou não de exceções. Exemplos disso são códigos de limpeza como fechamento de arquivos, liberação de recursos, etc. 12/09/2011 Prof. Kléber de Oliveira Andrade 12

Ex. 1 Colocando try/catch Pegando ArrayIndexOutOfBoundsException Fora do laço for. O que o código imprime agora? 12/09/2011 Prof. Kléber de Oliveira Andrade 13

Saída do Ex. 1 12/09/2011 Prof. Kléber de Oliveira Andrade 14

Ex. 2 Colocando try/catch Pegando ArrayIndexOutOfBoundsException Dentro do laço for. Qual a diferença? 12/09/2011 Prof. Kléber de Oliveira Andrade 15

Saída do Ex. 2 12/09/2011 Prof. Kléber de Oliveira Andrade 16

Ex. 3 Colocando try/catch Pegando ArrayIndexOutOfBoundsException Na chamada do metodo2() Qual a diferença? 12/09/2011 Prof. Kléber de Oliveira Andrade 17

Saída do Ex. 3 12/09/2011 Prof. Kléber de Oliveira Andrade 18

Ex. 3 Colocando try/catch Pegando ArrayIndexOutOfBoundsException Na chamada do metodo1() Qual a diferença? 12/09/2011 Prof. Kléber de Oliveira Andrade 19

Saída do Ex. 4 12/09/2011 Prof. Kléber de Oliveira Andrade 20

Como causar uma exceção? Uma exceção é um tipo de objeto que sinaliza que uma condição excepcional ocorreu A identificação (nome da classe) é sua parte mais importante Precisa ser criada com new e depois lançada com throw throw new IllegalArgumentException( Erro! ); 12/09/2011 Prof. Kléber de Oliveira Andrade 21

Exemplo: exceções com throw A função da chamada throw é lançar uma exceção assim que a mesma ocorre, deixando a cargo do método tratar possíveis erros de programação vindos da passagem errada de parâmetros. Neste caso, exibir uma simples mensagem de erro do tipo ArithmeticException é o bastante para apresentar o problema ao usuário. 12/09/2011 Prof. Kléber de Oliveira Andrade 22

Execuções e métodos Uma declaração throws (observe o s ) é obrigatória em métodos e construtores que deixam de capturar uma ou mais exceções que ocorrem em seu interior. public void metodo() throws Excecao1, Excecao2 {... } public Circulo() throws ExcecaoDeLimite {... } throws declara que o método pode provocar exceções do tipo declarado (ou de qualquer subtipo) A declaração abaixo declara que o método pode provocar qualquer exceção (nunca faça isto) Public void metodo() throws Exception {... } Métodos sobrepostos não podem provocar mais exceções que os métodos originais 12/09/2011 Prof. Kléber de Oliveira Andrade 23

Exemplo: exceções com throws A chamada do método calc(10, 0) é executada normalmente e o erro é retornado para a função chamadora, que em nosso caso seria o main. No entanto, o main não trata o erro, fazendo com que a JVM libere como saída o erro padrão de ArithmeticException. De forma a corrigir este problema e tornar o tratamento mais amigável ao usuário final, é necessário a utilização do throws em conjunto com as cláusulas try / catch(). 12/09/2011 Prof. Kléber de Oliveira Andrade 24

Exemplo: exceções com throws tyr/catch O corpo do try / catch() do método main trata possíveis erros a chamada do método calc(). Como nosso throws faz referência à exceção ArithmeticException, um catch() foi criado para imprimir uma mensagem para este tipo de exceção. No entanto, se o erro criado não for o bastante para debugar o problema, é possível imprimir junto a esse o erro padrão da API Java. 12/09/2011 Prof. Kléber de Oliveira Andrade 25

Controle de Erros (Exceções) Todo erro, ou condição especial, em Java é uma subclasse de Throwable. Porém 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 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 subclasses da classe Exception. 12/09/2011 Prof. Kléber de Oliveira Andrade 26

Hierarquia Exceções não checadas pelo compilador (erros de lógica) Condições excepcionais checadas pelo compilador (eventos recuperáveis) Object Throwable Erros não checados pelo compilador (eventos irrecuperáveis) Exception Error RuntimeException ClassCastException NullPointerException NumberFormatException ArrayIndexOutOfBoundsException... IOException FileNotFoundException MinhaExcecao SuaExcecao... OutOfMemoryError InternalError VirtulMachineErro UnknownError... Boas práticas: Prefira sempre usar as classes de exceções existentes na API antes de criar suas próprias exceções! 12/09/2011 Prof. Kléber de Oliveira Andrade 27

Outras Exceções: checked e unchecked! Java possui Checked Exceptions (Exceções checadas) que estendem java.lang.exception O compilador força o programador a capturar tais exceções Elas precisam fazer parte da assinatura dos métodos Java também possui Unchecked Exceptions (Exceções não checadas) que estendem java.lang.runtimeexception Essas exceções não precisam ser capturadas (mas podem sê-lo) A questão é: em que situação você deveria usar cada tipo de exceção? Há gente que advoga usar Checked Exceptions e outros que advogam o contrário Você vai ter que decidir, em cada situação 12/09/2011 Prof. Kléber de Oliveira Andrade 28

Criando uma Exceção A classe java.lang.throwable é a raiz da hierarquia de classes de exceções e de erros. Java.lang.Throwable define um método denominado getmessage() que retorna uma mensagem descritiva do problema ocorrido. Para definir um novo tipo de exceção crie uma classe que estenda a classe java.lang.throwable ou alguma de suas subclasses. Normalmente estende-se Exception ou RuntimeException. Defina atributos e métodos especificos da exceção. Para armazenar uma mensagem descritiva da exceção, defina um construtor da exceção que recebe uma String e invoca (direta ou indiretamente) o construtor correspondente da superclasse java.lang.throwable. 12/09/2011 Prof. Kléber de Oliveira Andrade 29

Exemplo: Criando uma Exceção Algumas sobrecargas dos construtores, não é necessário todos! 12/09/2011 Prof. Kléber de Oliveira Andrade 30

Principais métodos Construtores de Exception Exception() Exception (String message) Exception (String message, Throwable cause) Métodos de Exception String getmessage() Retorna mensagem passado pelo construtor Throwable getcause() Retorna exceção que causou esta exceção String tostring() Retorna o nome da exceção e mensagem Void printstacktrace() Imprime detalhes (stack trace) sobre exceção 12/09/2011 Prof. Kléber de Oliveira Andrade 31

Como cavar a própria cova Não tratar exceções e simplesmente declará-las em todos os métodos evita trabalho, mas torna o código menos robusto Mas o pior que um programador pode fazer é capturar exceções e fazer nada, permitindo que erros graves passem despercebidos e causem problemas dificílimos de localizar no futuro NUNCA escreva o seguinte código try { //... Código que pode causar exceções } catch ( Exception e ) { } Ele pega até NullPointerException, e não diz nada. O mundo se acaba, o programa trava ou funciona de modo estranho e ninguém saberá a causa a não ser que mande imprimir o valor de e, entre as chaves do catch. Pior que isto só se no lugar de Excepetion houver Throwable. 12/09/2011 Prof. Kléber de Oliveira Andrade 32

Por que usar exceções? Separam a parte de lógica do sistema da parte de tratamento de erros. Evitam a criação de um código específico para cada situação em que um tipo de erro ocorre. Concentram o tratamento de erros em partes específicas do código, facilitando a legibilidade e manutenção. 12/09/2011 Prof. Kléber de Oliveira Andrade 33

Exercício 1 Faça um programa que solicite dois números ao usuário e, em seguida, imprime o resultado da divisão do primeiro pelo segundo. Trate a exceção ArithmeticException. Teste o método getmessage e printstacktrace de Exception e observe o tipo de mensagem. 12/09/2011 Prof. Kléber de Oliveira Andrade 34

Exercício 2 Re-escreva o exercício 1 de maneira que os números que compõem a razão sejam recebidos pela linha de comando. Trate todas as exceções necessárias. Não esqueça de tratar os possíveis erros de entrada caso o usuário entre com caracteres inválidos. 12/09/2011 Prof. Kléber de Oliveira Andrade 35

Resumo Tratar: try {... } catch (TipoExcecao ex) {... } finally {... } Lançar: If (condicao) throw new MinhaExcecao( Voce só pode ser uma anta ); Propagar / deixar passar: public int buscalojas() throws MinhaExcecao() {... } Criar / Definir Public class MinhaExcecao extends Throwable {... } 12/09/2011 Prof. Kléber de Oliveira Andrade 36

Referências e Material Complementar http://blog.caelum.com.br/lidando-com-exceptions/ http://sergiotaborda.wordpress.com/desenvolvimento-desoftware/java/trabalhando-com-excecoes-conceitos/ http://sergiotaborda.wordpress.com/desenvolvimento-desoftware/java/excecoes-classes-utilitarias/ http://sergiotaborda.wordpress.com/desenvolvimento-desoftware/java/excecoes-boas-praticas-mas-praticas/ http://www.ibm.com/developerworks/java/library/j-jtp05254/index.html http://www.javalobby.org/java/forums/t16517.html 12/09/2011 Prof. Kléber de Oliveira Andrade 37