A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )

Apresentações semelhantes


Apresentação em tema: "Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )"— Transcrição da apresentação:

1 Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani (eduardo.mantovani@aes.edu.br )

2 Tratamento de exceções Exceção: o que foge à regra. POO: Programa-se a regra. As exceções devem ser tratadas independentemente. Algumas exceções são percebidas pelo próprio processador (ou pela JVM) (divisão por zero, fim de arquivo, utilização de ponteiros nulos, etc...), enquanto outras podem ser condições criadas e detectadas pelo próprio software desenvolvido (cliente não encontrado, CPF inválido, etc...) Um software desenvolvido em uma LPOO tem recursos para prever e tratar cada tipo de exceção possível Com o correto tratamento de exceções, um software pode ficar robusto e resistente a falhas, o que é desejável

3 Arquitetura do tratamento de exceções em POO Método tradicional: prever o “erro” e dar a volta, evitando que os mesmo aconteça: if (x == 0) printf(“X não pode ser ZERO”); else y = z/x; Com o tratamento de exceções, a exceção (não é um “erro”) é detectada e transfere a execução para outro ponto. Dessa maneira, o código principal fica enxuto e de mais fácil compreensão: y = z/x;

4 Lançamento de exceções Na POO, uma exceção é um objeto (oriundo de uma classe adequada), que traz com ele os detalhes da situação que a gerou. Quando uma exceção é lançada, fica claro que o processo iniciado pelo chamador não foi concluido com êxito (o método que estava em execução quando ocorreu a exceção não é concluido) e o ponteiro de execução retorna para um ponto especial, onde a situação será tratada. O mecanismo de exceções independe do tipo de retorno do método em que ocorre a exceção. As linguagens em que há tratamento de exceções geralmente são dotadas de uma hierarquia de classes que especializa as diferentes situações de exceção, permitindo o tratamento diferenciado para cada caso. Isso é válido para Java, C++, C#, Object Pascal (Delphi), etc...

5 Hierarquia de classes de exceções em Java Uma parte da hierarquia de exceções é apresentada a seguir: Throwable ExceptionError RuntimeException IOException NullPointerExceptionArithmeticException ArrayIndexOutOfBoundsException

6 Hierarquia de exceções em Java: detalhamento Classe raiz: Throwable (generaliza todas as exceções e erros possíveis) Error: exceções não tratáveis, ou erros. Falta de recursos (memória, disco, etc...) são exemplo de ocasião onde ocorrem. Tratamento é limitado. Exception: exceções tratáveis RunTimeException: exceções não verificadas Demais descendentes de Exception: exceções verificadas

7 Exceções verificadas x não verificadas Exceções verificadas demandam o tratamento de maneira compulsória. Se um método lança uma exceção verificada, essa deve ser obrigatoriamente tratada pelo programador no momento que o método seja utilizado. Exceções não verificadas ocorrem, basicamente, por detecção automática do processador e seu tratamento não é obrigatório. Acesso a ponteiros nulos, divisão por zero, acesso a elementos de vetores além dos limites, etc...

8 Processo de tratamento de exceções O processo de tratamento de exceções em Java é, basicamente, similar ao seguinte código: try { // código que pode gerar a(s) exceção(ões) } catch(Exception e) // captura a exceção { // tratamento para a exceção } finally { // execução independente da ocorrência de exceções } No exemplo, qualquer exceção que derive de Exception será capturada

9 Processo de tratamento de exceções especializadas É possível utilizar exceções especializadas e fazer o tratamento diferenciado para cada exceção que possa ocorrer try { // código que pode gerar a(s) exceção(ões) } catch(NullPointerException e) // captura a exceção { // tratamento para a exceção de ponteiro nulo } catch(ArithmeticException e) // captura a exceção { // tratamento para a exceção de aritmética (divisão/zero) }

10 Lançamento/Repasse de exceções (Java) Para os casos em que a exceção é devida a uma situação prevista pelo software, pode haver o lançamento da exceção programado Para os casos em que o programador prefere que a exceção seja tratada por outro método, uma exceção ocorrida pode ser relançada/repassada Para as duas situações, utiliza-se as palavras reservadas throw / throws

11 Lançamento de exceções (throw) O programador pode determinar uma situação em que a lógica de seu método indique uma exceção e lançar essa exceção naquele ponto A sintaxe de uso de throw, nesse caso é: throw new >( >); Exemplo: throw new ArithmeticException();

12 Repasse de exceções Quando uma exceção ocorre e o programador decide que ela será relançada pelo método indicando com throws a exceção que poderá ser relançada, na assinatura do método Dessa forma, não haverá bloco try...catch para tratamento da exceção neste ponto e sim no chamador de tal método Exemplo: public void ping(String ip) throws IOException, InterruptedException { Runtime rt = Runtime.getRuntime(); // lança as exceções indicadas // são verificadas! Process p = rt.exec("ping " + ip); int result = p.waitFor(); System.out.println(result); }

13 Definição de classes de exceção especializadas É possível criar novas classes de exceção que se adaptam às necessidades do software em desenvolvimento Para isso, basta que a nova classe herde (seja uma extensão) de qualquer classe derivada de Exception Exemplo: public class CPFInvalidoException extends Exception {... }


Carregar ppt "Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )"

Apresentações semelhantes


Anúncios Google