1 / 13

Paradigmas da Programação – Semestre 1 – Aula 10

Paradigmas da Programação – Semestre 1 – Aula 10. Professor: Eduardo Mantovani (eduardo.mantovani@aes.edu.br). Tratamento de exceções. Exceção: o que foge à regra. POO: Programa-se a regra. As exceções devem ser tratadas independentemente.

hayes
Télécharger la présentation

Paradigmas da Programação – Semestre 1 – Aula 10

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 Exception Error RuntimeException IOException ArrayIndexOutOfBoundsException NullPointerException ArithmeticException

  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 <<Classe de exceção>>(<<Parâmetros>>); • 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 { ... }

More Related