POO Excees e controle de erros O que

  • Slides: 23
Download presentation
POO Exceções e controle de erros

POO Exceções e controle de erros

O que é Quando se cria um programa existem 3 tipos de erro que

O que é Quando se cria um programa existem 3 tipos de erro que podem ocorrer: � Erros de Sintaxe – Identificados pelo compilador/interpretador � Erros de logica – que são tratados pelo processo de teste � Erros de tempo de execução – que ocorrem por diversos fatores e podem levar a falhas criticas

O que é Os erros em tempo de execução pode ter diversas origens e

O que é Os erros em tempo de execução pode ter diversas origens e causas, e por muitas vezes a logica do algoritmo nao podem lidar com elas, Podemos citar: � Tentar abrir um arquivo que não existe. � Tentar fazer consulta a um banco de dados que não está disponível. � Tentar escrever algo em um arquivo sobre o qual não se tem permissão de escrita. � Tentar conectar em servidor inexistente.

O que é Estes erros imprevistos durante a execução, são conhecidos como exceções Alguns

O que é Estes erros imprevistos durante a execução, são conhecidos como exceções Alguns possíveis erros de lógica para ocorrer uma exceção são: � Tentar manipular um objeto que está com o valor nulo. � Dividir um número por zero. � Tentar manipular um tipo de dado como se fosse outro. � Tentar utilizar um método ou classe não existentes.

Tratando Exceções Pode permitir que o programa continue executando como se nenhum problema tivesse

Tratando Exceções Pode permitir que o programa continue executando como se nenhum problema tivesse sido encontrado � Pode impedir um programa de continuar executando normalmente em vez de requer que o problema seja informado � É necessário que os programadores escrevam programas robustos e tolerantes a falhas

Tratando Exceções Vantagens � Úteis para informar ao usuário erros causados por informação de

Tratando Exceções Vantagens � Úteis para informar ao usuário erros causados por informação de dados errados ou inválidos � Mascaramento de erros técnicos complexos ao usuário � Tomada de ações independentes da ação ou intervenção do usuário � Separação e organização do fluxo do programa

try catch Uma maneira de tentar contornar esses imprevistos é realizar o tratamento dos

try catch Uma maneira de tentar contornar esses imprevistos é realizar o tratamento dos locais no código que podem vir a lançar possíveis exceções, como por exemplo, campo de consulta a banco de dados, locais em que há divisões, consulta a arquivos de propriedades ou arquivos dentro do próprio computador. Para tratar as exceções em Java são utilizados os comandos try e catch.

try catch try { //linhas de comando que podem lançar uma exceção } catch(tipo_exceçao_1

try catch try { //linhas de comando que podem lançar uma exceção } catch(tipo_exceçao_1 e) { //ação a ser tomada } catch(tipo_exceçao_n e) { //ação a ser tomada }

try catch try{ … } - Neste bloco são introduzidas todas as linhas de

try catch try{ … } - Neste bloco são introduzidas todas as linhas de código que podem vir a lançar uma exceção. catch(tipo_excessao e) { … } - Neste bloco é descrita a ação que ocorrerá quando a exceção for capturada.

try catch public float dividir(float a, float b) { float r = 0; try

try catch public float dividir(float a, float b) { float r = 0; try { r = a/b; } catch(Exception err){ System. out. println(“Divisão por Zero!”); } return r; }

try catch public String concatenar(String t 1, String t 2) { string r =

try catch public String concatenar(String t 1, String t 2) { string r = “”; try { r = t 1 + “ “+ t 2; } catch(Null. Pointer. Exception e){ r = “Frase vazia !!!”; } catch(Exception err){ System. out. println(“Ocorreu um erro”+ err. ge. Message()); } return r; }

finally Comando que é sempre executado, tendo ou não ocorrido uma exceção durante a

finally Comando que é sempre executado, tendo ou não ocorrido uma exceção durante a execução do código dentro do try �É utilizado para liberação de recursos, mesmo se algum erro ocorra � Quando utilizamos o try/catch, se alguma coisa dá errada no meio do try, ele o INTERROMPE para entrar no catch, ou seja, o código dentro do try DEPOIS do erro não será executado � Se existe algo importante a ser executado no código, de modo que, ocorrendo algum erro ou não, isso deva ser feito, pode-se utilizar o finally

finally Exemplos de utilização do comando finally: � foi aberta uma conexão com o

finally Exemplos de utilização do comando finally: � foi aberta uma conexão com o banco de dados para realizar determinada ação, e no meio deste processo seja lançada alguma exceção, como por exemplo, Null. Pointer. Exception ao tentar manipular um determinado atributo de um objeto. � Neste caso seria necessário que mesmo sendo lançada uma exceção no meio do processo a conexão fosse fechada. Um outro exemplo bom seria a abertura de determinado arquivo para escrita no mesmo, e no meio deste processo é lançada uma exceção por algum motivo, o arquivo não seria fechado, o que resultaria em deixar o arquivo aberto. Quando uma exceção é lançada e é necessário que determinada ação seja tomada mesmo após a sua captura, utilizamos a palavra reservada finally.

finally try { //linhas de comando que podem lançar uma exceção } catch(tipo_exceçao_1 e)

finally try { //linhas de comando que podem lançar uma exceção } catch(tipo_exceçao_1 e) { //ação a ser tomada } finally { //ação a ser tomada }

finally public String concatenar(String t 1, String t 2) { string r = “”;

finally public String concatenar(String t 1, String t 2) { string r = “”; try { r = t 1 + “ “+ t 2; } catch(Exception e){ r = “Frase vazia !!!”; } finally{ return r. to. Upper. Case(); } }

throw e throws Imagine uma situação em que não é desejado que uma exceção

throw e throws Imagine uma situação em que não é desejado que uma exceção seja tratada na própria classe ou método, mas sim em outro que venha lhe chamar. Para solucionar tal situação utilizamos o comando throws na assinatura do método com a possível exceção que o mesmo poderá a vir lançar.

throw e throws Ato de “lançar uma exceção” para o método chamador � Permite

throw e throws Ato de “lançar uma exceção” para o método chamador � Permite que o programa force a detecção de uma exceção em determinada situação � Pode ou não exigir o tratamento do chamador – Mas transfere o controle do fluxo para eles � Também é uma cláusula para dizer qual exceção um determinado método irá provocar caso algum erro específico ocorra � Útil para se obter uma maneira padronizada de tratar erros causados pelo usuário, e não pelo sistema Exemplos: digitação de CPF inválido, data inválida, campos obrigatórios não informados em um sistema

throw e throws tipo_retorno nome_metodo() throws tipo_exceção_1, tipo_exceção_2, tipo_exceção_n { … }

throw e throws tipo_retorno nome_metodo() throws tipo_exceção_1, tipo_exceção_2, tipo_exceção_n { … }

throw e throws public class Teste. String { //lançando excessão private static void aumentar.

throw e throws public class Teste. String { //lançando excessão private static void aumentar. Letras() throws Null. Pointer. Exception { String frase = null; String nova. Frase = null; nova. Frase = frase. to. Upper. Case(); System. out. println("Frase antiga: "+frase); System. out. println("Frase nova: "+nova. Frase); } public static void main(String args[]) { try { aumentar. Letras(); } catch(Null. Pointer. Exception e) { System. out. println("Ocorreu um Null. Pointer. Exception ao executar o método aumentar. Letras() "+e); } } }

throw e throws Agora imagine o caso em que seja necessário lançar uma exceção

throw e throws Agora imagine o caso em que seja necessário lançar uma exceção padrão ao invés de uma especifica. Para resolver este problema, utilizamos o comando throw dentro do bloco catch que desejamos converter a exceção.

throw e throws public class Agenda { public void mostra. Detalhes(String cpf) throws Null.

throw e throws public class Agenda { public void mostra. Detalhes(String cpf) throws Null. Pointer. Exception { if(cpf==null){ throw new Null. Pointer. Exception(“Cpf invalido”); } else { System. out. println(“Cpf ok!”); } }

throw e throws Essa exceção poderia então ser tratada de acordo com os formatos

throw e throws Essa exceção poderia então ser tratada de acordo com os formatos de tela do sistema, colocando assim o sistema funcionando sobre um padrão de mensagens de erro

Overview A robustez de um programa estritamente ligada como seus erros são tratados, em

Overview A robustez de um programa estritamente ligada como seus erros são tratados, em poo isto e mais importante pois a reutilização do codigo e praxe. Ao expor uma classe em novos sistemas e consequentemente a novas situações estes controles de execeções são vitais.