Programação Orientada a Objetos II Aula - 10 Tratamento de Erros/Exceções Prof. Pedro Luís Antonelli Anhanguera Educacional Tipos de “erros” em programação Existem basicamente três tipos de erros a que um programa de computador pode estar sujeito: - Erros de Sintaxe ( escrita ); - Erros de Semântica ( lógica ); - Erros durante a execução ( exceções ). Erros de Sintaxe A Sintaxe diz respeito à forma como as instruções devem ser escritas, ou seja, o conjunto de regras formais que especificam a composição dos algoritmos a partir de letras, dígitos e outros símbolos. É o tipo mais primitivo de erro e o mais facilmente detectado, pois são facilmente encontrados pelos programas tradutores ( interpretadores e compiladores). Exemplo de erros de Sintaxe Corrigindo os erros de Sintaxe Erros de Semântica A Semântica diz respeito ao significado lógico das instruções que serão executadas pelo computador. Os erros de semântica também são conhecidos como erros de “lógica” do programa. A violação da semântica de um algoritmo não impede que ele seja executado, nem causa um erro durante sua tradução. Todavia, ele processará um resultado diferente do desejado. Exemplo de erro de Semântica Corrigindo o de erro de Semântica Erros de execução ( exceção) Os erros durante a execução dos programas são chamados de exceções. Em outras linguagens são chamados genericamente de “RunTime Error”, e podem ser causados por uma enormidade de circunstâncias, tais como: - Falta de memória; - Impossibilidade de gravar ou de abrir um arquivo; - Atribuição de um valor impossível a um objeto; - Divisão por zero; - Etc. Exemplo de erro de execução Erros de execução ( exceção) Os erros durante a execução dos programas podem causar a interrupção dos mesmos, com consequências das mais imprevisíveis. Chamamos de exceção a um problema durante a execução do programa. O tratamento de exceções é utilizado em situações em que o sistema, no caso da linguagem Java a JMV, pode se recuperar do mau funcionamento que causou a exceção. Tratamento de exceções em Java A linguagem Java disponibiliza um mecanismo para tratamento das exceções: try { // código a ser executado } catch (ClasseDeExceção instânciaDaExceção) { // tratamento da exceção } finally { // código a ser executado mesmo que uma exceção //seja lançada } Tratamento de exceções em Java • try ( tentar) é usada para indicar um bloco de código que possa ocorrer uma exceção. • catch ( pegar) serve para manipular as exceções, ou seja, tratar o erro. Pode existir mais de um bloco catch. • ClasseDeExceção e instânciaDaExceção classe da exceção a ser tratada; • finally (finalmente) sempre será executado depois do bloco try/catch e é opcional. Tratando a exceção do exemplo anterior Usando o bloco finally no exemplo anterior Observações sobre o bloco finally: A função básica de finally é sempre executar seu bloco de dados mesmo que uma exceção seja lançada. É muito útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de banco de dados e abertura de buffer para leitura ou escrita de arquivos, etc. Observações sobre as exceções em Java: As exceções são, na verdade, instâncias de classes e como qualquer classe ou objeto, podemos facilmente manipular. Todas as exceções em Java derivam da classe Throwable. Existem métodos comuns entre todas as classes de Exceções. Exemplo de uso de um método de uma exceções em Java: Hierarquia das classe de exceções: Modalidades de exceções em Java: Error Hierarquia em laranja na imagem, representam situações incomuns, que não são causadas pelo programa; Indicam situações que não acontecem usualmente durante a execução de um programa. Exemplo: Quando uma chamada recursiva causa um estouro da pilha de execução é gerada uma exceção do tipo StackOverflowError. Modalidades de exceções em Java: Checked Exception Hierarquia em cinza, representam situações que, geralmente, não são erros de programação e sim indisponibilidade de recursos ou condição necessária para a correta execução inexistente. Exemplo: Em aplicações distribuídas existe dependência externa de rede de comunicação, no caso do servidor não ser encontrado é gerado uma exceção do tipo NoRouteToHostException. Modalidades de exceções em Java: Unchecked Exception (RuntimeException) Hierarquia em azul escuro, representam situações que, geralmente, identificam erros de programação (programa não é robusto) ou mesmo situações incomuns/difíceis de tratar. Exemplo: Acessar índice inválido em um array gera uma exceção do tipo ArrayIndexOutOfBoundsException. Forçando de exceções em Java: throw É possível em algum trecho do nosso programa, se uma determinada condição acontecer, forçar ( “throw”- lançar ) uma exceção para informar que a situação esperada aconteceu. Vamos implementar no nosso exemplo, uma “exceção” caso o valor da média seja menor que zero. Implementando o método menorQueZero ... Chamando o método e testando... Implementando mais de um bloco catch ... Testando as exceções ... Modificando o aplicativo para testes ... Testando o resultado Infinity em cálculos ... BIBLIOGRAFIA BÁSICA PADRÃO SANTOS, Rafael. Introdução à Programação Orientada a Objetos Usando Java. 1ª ed. Rio de Janeiro: Campus - Elsevier, 2008. BIBLIOGRAFIA BÁSICA DA UNIDADE 1) DEITEL, Harvery M.. Java : Como Programar. 6ª ed. São Paulo: Pearson - Prentice Hall, 2007. 2) SIERRA, Kathy; BATES, Bert. Use a Cabeça! Java. 1ª ed. Rio de Janeiro: Alta Books, 2005. BIBLIOGRAFIA COMPLEMETAR 1) BARNES, David J.. PROGRAMAÇÃO ORIENTADA A OBJETOS COM JAVA : UMA INTRODUÇÃO PRÁTICA USANDO O BLUE J. 1ª ed. São Paulo: Pearson, 2004. 2) KURNIAWAN, Budi. Java para Web com Servlets, JSP e EJB. 1ª ed. Rio de Janeiro: Ciência Moderna, 2002. 3) GOMES ASCENCIO, Ana Fernanda; CAMPOS, Edilene A.V. de. Fundamentos da Programação de Computadores : Algoritmos, Pascal, C/C++ e Java. 2ª ed. São Paulo: Pearson - Prentice Hall, 2008. 4) HORSTMANN, Cay S.; CORNELL, Gary. Core Java 2 : Fundamentos. 7ª ed. Rio de Janeiro: Alta Books, 2005. 5) ANSELMO, Fernando. Tudo Sobre a JSP : Com o Netbeans em Aplicações Distribuídas. 1ª ed. São Paulo: VisualBooks, 2005.