SlideShare una empresa de Scribd logo
1 de 34
Aula 5 Erros e casos excepcionais: conceitos; representação, criação, detecção e tratamento; boas práticas (e segurança)
Na aula anterior… A infra-estrutura aplicacional de colecções do Java (Java Collections Framework) 2009/2010 Programação Orientada por Objectos 2
Conceitos 2009/2010 Programação Orientada por Objectos 3
Representação e criação Em Java, casos excepcionais, erros de programação e erros no ambiente de execução representam-se através de lançáveis Os lançáveis são criados e lançados Explicitamente: throw Implicitamente: assert Automaticamente: JVM, por exemplo Por métodos sobre os quais não temos controlo 2009/2010 Programação Orientada por Objectos 4
Detecção e tratamento Lançáveis em Java podem ser capturados Para lidar integralmente com um caso excepcional Para lidar parcialmente com um caso excepcional Apenas para “arrumar a casa” , quando não se sabe lidar com um caso excepcional Para terminar o programa de forma adequada em caso de erro de programação ou de erro no ambiente de execução 2009/2010 Programação Orientada por Objectos 5 Isto não é uma recuperação, mas sim um elegante harakiri.
Lançáveis Java Usados para representar Casos excepcionais Erros de programação Erros no contexto de execução de um programa São objectos de classes pertencentes à hierarquia com base na classe Throwable São lançáveis através da instrução throw Lançamento interrompe o fluxo normal de um programa Programação Orientada por Objectos 2009/2010 6
Hierarquia de lançáveis em Java 2009/2010 Programação Orientada por Objectos 7 Throwable Casos excepcionais. Erros de programação correspondentes a violação de pré-condições em contratos não privados. Erros no ambiente de execução. Error Exception IOException VirtualMachineError … … RuntimeException AssertionError ArithmeticException Erros de programação (excepto violação de pré-condições em contratos não privados). NullPointerException …
Hierarquia de lançáveis em Java Throwable Error VirtualMachineError … AssertionError Exception IOException … RuntimeException ArithmeticException NullPointerException IndexOutOfBoundsException … Erros de programação (excepto violação de pré-condições em contratos não privados). Criação implícita quando asserção falha. Normalmente irrecuperáveis. Erros de programação correspondentes a violações pré-condições de contratos não privados. Criação explícita. Lançamento com throw. Normalmente irrecuperáveis. 2009/2010 8 Programação Orientada por Objectos Erros no ambiente de execução. Criação automática. Normalmente irrecuperáveis. Casos excepcionais. Criação explícita. Lançamento com throw. Normalmente recuperáveis.
Características 2009/2010 Programação Orientada por Objectos 9 Possibilidade de lançamento tem de ser declarada! 1 Para aplicações não críticas. 2 Excepto RuntimeException e derivadas. 3 Para violações de pré-condições em contratos não privados. 4 Para todos os restantes casos. 5 Excepto AssertionError.
Algumas RuntimeException 2009/2010 Programação Orientada por Objectos 10
Lançamento explícito para caso excepcional public void someMethod(…) throwsSomeException {     …     if (…) throw new SomeException("Informative message");     … } Declaração de possibilidade de lançamento: ,[object Object]
Não recomendada para restantes casos (Error e RuntimeException).2009/2010 11 Programação Orientada por Objectos
Lançamento explícito para erro de programação static public double squareRoot(final double value) {     if (value < 0.0)         throw new IllegalArgumentException(             "Illegal value " + value              + ", should be 0 ≤ value");     … } 2009/2010 12 Programação Orientada por Objectos Violação de pré-condição em contrato não privado.
Delegação ou declaração de passagem (throws) public void someMethod(…) throws SomeException {     … anObject.someOtherMethod(…);      … // only if no exception is thrown. } 2009/2010 Programação Orientada por Objectos 13
Lidando com caso excepcional public void someMethod(…) { try {         … anObject.someOtherMethod(…);         … // only if no exception is thrown.     } catch (final SomeException exception) {         … // fix the problem using information available.      }     … // continue execution. } 2009/2010 14 Programação Orientada por Objectos
Arrumando a casa com finally public void someMethod(…) {     try {         … anObject.someOtherMethod(…);         …     } catch (final SomeException exception) {         …     } finally {         … // clean house in any case.     }     … } 2009/2010 15 Programação Orientada por Objectos Bloco finally executado mesmo no caso de excepções não capturadas, retornos, novos lançamentos, asserções falhadas, etc.
Lidando parcialmente com caso excepcional public void someMethod(…) throws SomeException {     try {         … anObject.someOtherMethod(…);         …     } catch (final SomeException exception) {         … // fix part of the problem using information available.         throw exception;     }     … } 2009/2010 16 Programação Orientada por Objectos Relançamento da excepção capturada.
Informação adicional sobre a ocorrência public void someMethod(…) throws SomeOtherException {     try {         … anObject.someOtherMethod(…);         …     } catch (final SomeException exception) {         … // clean house if necessary.         throw new SomeOtherException(             "Informative message", exception);     }     … } 2009/2010 17 Programação Orientada por Objectos Apenas se se tratar de um caso excepcional. Lançável capturado é a causa do novo lançável.
Captura múltipla public void someMethod(…) { try {         …     } catch (final SomeException exception){         …     } catch (final RuntimeException exception){         …     } catch (final IOException exception){         …     } catch (final Exception exception){         …     }     … } Excepções mais específicas têm de estar primeiro. 2009/2010 18 Programação Orientada por Objectos
Operação printStackTrace publicvoidsomeMethod(…) {     … try {         …     } catch (final SomeExceptionexception) { exception.printStackTrace();         …     }     … } Imprime uma representação da pilha de invocações no momento em que a excepção foi lançada. pt.iscte.dcti.poo.exceptions.SomeException atpt.iscte.dcti.poo.SomeClass.someMethod(SomeClass.java:16) atpt.iscte.dcti.poo.SomeOtherClass.someOtherMethod(SomeOtherClass.java:9) atpt.iscte.dcti.poo.MainClass.main(MainClass.java:36) 2009/2010 19 Programação Orientada por Objectos
Contratos: documentação e verificação /**  * Returns the double closest to the square root of its argument  * value.  *  * @pre 0 ≤ value  * @post …  * @param value the value whose square root will be approximated  * @throws IllegalArgumentException If value < 0  */ static public double squareRoot(final double value) {     if(value < 0)         throw new IllegalArgumentException(“Message");     …     assert … : "Informative message";     return result; } 2009/2010 20 Programação Orientada por Objectos As asserções, por omissão, estão desactivadas. Para que tenham algum efeito tem de se executar a JVM com a opção -ea.
Invariante de instância public Rational(final int numerator,                  final int denominator) {     if(denominator == 0)         throw new IllegalArgumentException("Message"); this.numerator = numerator; this.denominator = denominator;     normalize(); checkInvariant(); } private void checkInvariant() {     assert 0 < denominator : "…";     assert gcd(numerator, denominator) == 1 : "…"; } … Onde? No final dos construtores, no início de métodos não modificadores e no início e no fim de métodos modificadores. O invariante de instância é a condição que todas as instâncias de uma classe têm de verificar para que estejam num estado correcto. 2009/2010 21 Programação Orientada por Objectos
Métodos privados private void reduce() {     assert denominator != 0;     if (denominator < 0) {         denominator = -denominator;         numerator = -numerator;     }     final intgcd = gcd(numerator, denominator);     numerator /= gcd;     denominator /= gcd;     assert mdc(numerator, denominator) == 1 : "…";     assert 0 < denominator : "…"; } 2009/2010 Programação Orientada por Objectos 22 Pré-condição de método privado (parte da implementação da classe) verificada com asserção. Nos métodos privados não se verifica o invariante de instância, pelo menos enquanto tal.
Lançáveis definidos pelo programador public class SomeException extends Exception {     public Exception() {     }     public Exception(final String message) {         super(message);     }     public Exception(final String message,                      final Throwable cause) {         super(message, cause);     }     public Exception(final Throwable cause) {         super(cause);     } } 2009/2010 23 Programação Orientada por Objectos
Boas práticas Distinga claramente a natureza dos erros e casos excepcionais Lide com cada ocorrência usando os mecanismos adequados (e convencionais) à sua natureza 2009/2010 Programação Orientada por Objectos 24
Boas práticas Use assert apenas para erros de programação Pré-condições de métodos privados Pós-condições Invariantes de instância Asserções propriamente ditas Use throw Para erros de programação Pré-condições de métodos não privados Casos excepcionais 2009/2010 25 Programação Orientada por Objectos
Boas práticas Não tente recuperar de uma ocorrência sem antes perceber a sua causa Não desactive as asserções durante a operação normal do softwaresenão quando tiverem um impacte negativo significativo sobre o seu desempenho Tente recorrer a lançáveis já existentes na biblioteca padrão do Java 2009/2010 Programação Orientada por Objectos 26
Boas práticas Documente possibilidade de lançamento de deRuntimeException (e classes derivadas) quando esse lançamento puder ocorrer devido erros na utilização da interface da operação Lembre-se que pode capturar um lançável e lançar um outro que torne mais claro qual o problema (não deve abusar desta estratégia) 2009/2010 Programação Orientada por Objectos 27
Boas práticas: segurança Escreva o seu código de modo a que o lançamento de um lançável num método deixe o programa no mesmo estado em que estava antes da operação correspondente ser invocada Se isso não for possível, escreva o código de modo a, pelo menos, deixar todos os objectos num estado válido 2009/2010 Programação Orientada por Objectos 28
Boas práticas: testes Para cada unidade (classe ou conjunto de classes intimamente ligadas) crie um caso de teste JUnit Crie os testes antes mesmo de começar a desenhar a unidade: pensar nos testes ajuda a perceber melhor que interface deve ter a unidade Teste sempre as situações limite e casos especiais (referências nulas, cadeias de caracteres vazias, valores numéricos no limite, etc.) 2009/2010 29 Programação Orientada por Objectos
Boas práticas: testes Lembre-se que os testes se devem basear apenas na interface não privada da unidade (testes de caixa preta) Evite alterar a interface não privada quando fizer alterações a uma unidade Se precisar de alterar a interface não privada de uma unidade, actualize todos testes e reveja todos os contratos e respectiva documentação Quando alterar a implementação de uma unidade, reveja o seu invariante e execute todos os seus testes 2009/2010 30 Programação Orientada por Objectos
A reter… Detecção e tratamento de ocorrências fundamental para boa programação Princípio subjacente à programação em linguagens como o Java é que quanto mais cedo se detectarem erros, mais fácil é corrigi-los e menor o seu impacte Asserções usam-se para expressar condições que devem ser verdadeiras para que o programa esteja correcto Asserções antecipam detecção de erros de programação e melhoram sua localização 2009/2010 31 Programação Orientada por Objectos
A reter… A relação das excepções declaradas com a operação em causa deve ser clara e deve ser documentada Detecção de erro de programação ou de erro no ambiente de execução do programa deve levar sistema, se não crítico, a cometer um elegante harakiri, tão simpático para utilizadores quanto possível Um programa honrado percebe quando falha e extingue-se voluntariamente, não deixando que erros se propaguem 2009/2010 Programação Orientada por Objectos 32
A ler para as próximas aulas ... Capítulo 18 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos 33

Más contenido relacionado

La actualidad más candente

Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
elliando dias
 

La actualidad más candente (19)

Ferramentas testes2003
Ferramentas testes2003Ferramentas testes2003
Ferramentas testes2003
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
 
Evento CODERS
Evento CODERSEvento CODERS
Evento CODERS
 
Threads e Estruturas de dados
Threads e Estruturas de dadosThreads e Estruturas de dados
Threads e Estruturas de dados
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
UnP Eng. Software - Aula 28
UnP Eng. Software - Aula 28UnP Eng. Software - Aula 28
UnP Eng. Software - Aula 28
 
Power mock
Power mockPower mock
Power mock
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Android DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJavaAndroid DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJava
 
Java12
Java12Java12
Java12
 
TDC2013 Otimizando-C
TDC2013 Otimizando-CTDC2013 Otimizando-C
TDC2013 Otimizando-C
 
Java14
Java14Java14
Java14
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Java 06
Java 06Java 06
Java 06
 
TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOS
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps Android
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 

Destacado

Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013
guisester
 
Conceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoConceitos e técnicas de programação introdução
Conceitos e técnicas de programação introdução
Robson Ferreira
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
Robson Ferreira
 

Destacado (20)

14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android - Alcides Maya 16.04.2013
 
Aplicando logica orientada_a_objeto_em_java
Aplicando logica orientada_a_objeto_em_javaAplicando logica orientada_a_objeto_em_java
Aplicando logica orientada_a_objeto_em_java
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
 
Conceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoConceitos e técnicas de programação introdução
Conceitos e técnicas de programação introdução
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectos
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
 

Similar a Programação Orientada por Objectos - Aula 5

Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
Alvaro Oliveira
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04
Diego Pacheco
 

Similar a Programação Orientada por Objectos - Aula 5 (20)

Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)
 
Testes: Por onde Começar?
Testes: Por onde Começar?Testes: Por onde Começar?
Testes: Por onde Começar?
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Mock Objects
Mock ObjectsMock Objects
Mock Objects
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Mock objects - Teste de código com dependências
Mock objects - Teste de código com dependênciasMock objects - Teste de código com dependências
Mock objects - Teste de código com dependências
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Android DevConference - Indo além com automação de testes de apps Android
Android DevConference - Indo além com automação de testes de apps AndroidAndroid DevConference - Indo além com automação de testes de apps Android
Android DevConference - Indo além com automação de testes de apps Android
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Aula5
Aula5Aula5
Aula5
 

Más de Manuel Menezes de Sequeira

Más de Manuel Menezes de Sequeira (20)

10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
 
Eng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de softwareEng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de software
 
Eng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoEng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validação
 
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorEng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
 
Eng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoEng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónico
 

Último

matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
LeloIurk1
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
LeloIurk1
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
rosenilrucks
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 

Último (20)

matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
praticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médiopraticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médio
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 

Programação Orientada por Objectos - Aula 5

  • 1. Aula 5 Erros e casos excepcionais: conceitos; representação, criação, detecção e tratamento; boas práticas (e segurança)
  • 2. Na aula anterior… A infra-estrutura aplicacional de colecções do Java (Java Collections Framework) 2009/2010 Programação Orientada por Objectos 2
  • 3. Conceitos 2009/2010 Programação Orientada por Objectos 3
  • 4. Representação e criação Em Java, casos excepcionais, erros de programação e erros no ambiente de execução representam-se através de lançáveis Os lançáveis são criados e lançados Explicitamente: throw Implicitamente: assert Automaticamente: JVM, por exemplo Por métodos sobre os quais não temos controlo 2009/2010 Programação Orientada por Objectos 4
  • 5. Detecção e tratamento Lançáveis em Java podem ser capturados Para lidar integralmente com um caso excepcional Para lidar parcialmente com um caso excepcional Apenas para “arrumar a casa” , quando não se sabe lidar com um caso excepcional Para terminar o programa de forma adequada em caso de erro de programação ou de erro no ambiente de execução 2009/2010 Programação Orientada por Objectos 5 Isto não é uma recuperação, mas sim um elegante harakiri.
  • 6. Lançáveis Java Usados para representar Casos excepcionais Erros de programação Erros no contexto de execução de um programa São objectos de classes pertencentes à hierarquia com base na classe Throwable São lançáveis através da instrução throw Lançamento interrompe o fluxo normal de um programa Programação Orientada por Objectos 2009/2010 6
  • 7. Hierarquia de lançáveis em Java 2009/2010 Programação Orientada por Objectos 7 Throwable Casos excepcionais. Erros de programação correspondentes a violação de pré-condições em contratos não privados. Erros no ambiente de execução. Error Exception IOException VirtualMachineError … … RuntimeException AssertionError ArithmeticException Erros de programação (excepto violação de pré-condições em contratos não privados). NullPointerException …
  • 8. Hierarquia de lançáveis em Java Throwable Error VirtualMachineError … AssertionError Exception IOException … RuntimeException ArithmeticException NullPointerException IndexOutOfBoundsException … Erros de programação (excepto violação de pré-condições em contratos não privados). Criação implícita quando asserção falha. Normalmente irrecuperáveis. Erros de programação correspondentes a violações pré-condições de contratos não privados. Criação explícita. Lançamento com throw. Normalmente irrecuperáveis. 2009/2010 8 Programação Orientada por Objectos Erros no ambiente de execução. Criação automática. Normalmente irrecuperáveis. Casos excepcionais. Criação explícita. Lançamento com throw. Normalmente recuperáveis.
  • 9. Características 2009/2010 Programação Orientada por Objectos 9 Possibilidade de lançamento tem de ser declarada! 1 Para aplicações não críticas. 2 Excepto RuntimeException e derivadas. 3 Para violações de pré-condições em contratos não privados. 4 Para todos os restantes casos. 5 Excepto AssertionError.
  • 10. Algumas RuntimeException 2009/2010 Programação Orientada por Objectos 10
  • 11.
  • 12. Não recomendada para restantes casos (Error e RuntimeException).2009/2010 11 Programação Orientada por Objectos
  • 13. Lançamento explícito para erro de programação static public double squareRoot(final double value) { if (value < 0.0) throw new IllegalArgumentException( "Illegal value " + value + ", should be 0 ≤ value"); … } 2009/2010 12 Programação Orientada por Objectos Violação de pré-condição em contrato não privado.
  • 14. Delegação ou declaração de passagem (throws) public void someMethod(…) throws SomeException { … anObject.someOtherMethod(…); … // only if no exception is thrown. } 2009/2010 Programação Orientada por Objectos 13
  • 15. Lidando com caso excepcional public void someMethod(…) { try { … anObject.someOtherMethod(…); … // only if no exception is thrown. } catch (final SomeException exception) { … // fix the problem using information available. } … // continue execution. } 2009/2010 14 Programação Orientada por Objectos
  • 16. Arrumando a casa com finally public void someMethod(…) { try { … anObject.someOtherMethod(…); … } catch (final SomeException exception) { … } finally { … // clean house in any case. } … } 2009/2010 15 Programação Orientada por Objectos Bloco finally executado mesmo no caso de excepções não capturadas, retornos, novos lançamentos, asserções falhadas, etc.
  • 17. Lidando parcialmente com caso excepcional public void someMethod(…) throws SomeException { try { … anObject.someOtherMethod(…); … } catch (final SomeException exception) { … // fix part of the problem using information available. throw exception; } … } 2009/2010 16 Programação Orientada por Objectos Relançamento da excepção capturada.
  • 18. Informação adicional sobre a ocorrência public void someMethod(…) throws SomeOtherException { try { … anObject.someOtherMethod(…); … } catch (final SomeException exception) { … // clean house if necessary. throw new SomeOtherException( "Informative message", exception); } … } 2009/2010 17 Programação Orientada por Objectos Apenas se se tratar de um caso excepcional. Lançável capturado é a causa do novo lançável.
  • 19. Captura múltipla public void someMethod(…) { try { … } catch (final SomeException exception){ … } catch (final RuntimeException exception){ … } catch (final IOException exception){ … } catch (final Exception exception){ … } … } Excepções mais específicas têm de estar primeiro. 2009/2010 18 Programação Orientada por Objectos
  • 20. Operação printStackTrace publicvoidsomeMethod(…) { … try { … } catch (final SomeExceptionexception) { exception.printStackTrace(); … } … } Imprime uma representação da pilha de invocações no momento em que a excepção foi lançada. pt.iscte.dcti.poo.exceptions.SomeException atpt.iscte.dcti.poo.SomeClass.someMethod(SomeClass.java:16) atpt.iscte.dcti.poo.SomeOtherClass.someOtherMethod(SomeOtherClass.java:9) atpt.iscte.dcti.poo.MainClass.main(MainClass.java:36) 2009/2010 19 Programação Orientada por Objectos
  • 21. Contratos: documentação e verificação /** * Returns the double closest to the square root of its argument * value. * * @pre 0 ≤ value * @post … * @param value the value whose square root will be approximated * @throws IllegalArgumentException If value < 0 */ static public double squareRoot(final double value) { if(value < 0) throw new IllegalArgumentException(“Message"); … assert … : "Informative message"; return result; } 2009/2010 20 Programação Orientada por Objectos As asserções, por omissão, estão desactivadas. Para que tenham algum efeito tem de se executar a JVM com a opção -ea.
  • 22. Invariante de instância public Rational(final int numerator, final int denominator) { if(denominator == 0) throw new IllegalArgumentException("Message"); this.numerator = numerator; this.denominator = denominator; normalize(); checkInvariant(); } private void checkInvariant() { assert 0 < denominator : "…"; assert gcd(numerator, denominator) == 1 : "…"; } … Onde? No final dos construtores, no início de métodos não modificadores e no início e no fim de métodos modificadores. O invariante de instância é a condição que todas as instâncias de uma classe têm de verificar para que estejam num estado correcto. 2009/2010 21 Programação Orientada por Objectos
  • 23. Métodos privados private void reduce() { assert denominator != 0; if (denominator < 0) { denominator = -denominator; numerator = -numerator; } final intgcd = gcd(numerator, denominator); numerator /= gcd; denominator /= gcd; assert mdc(numerator, denominator) == 1 : "…"; assert 0 < denominator : "…"; } 2009/2010 Programação Orientada por Objectos 22 Pré-condição de método privado (parte da implementação da classe) verificada com asserção. Nos métodos privados não se verifica o invariante de instância, pelo menos enquanto tal.
  • 24. Lançáveis definidos pelo programador public class SomeException extends Exception { public Exception() { } public Exception(final String message) { super(message); } public Exception(final String message, final Throwable cause) { super(message, cause); } public Exception(final Throwable cause) { super(cause); } } 2009/2010 23 Programação Orientada por Objectos
  • 25. Boas práticas Distinga claramente a natureza dos erros e casos excepcionais Lide com cada ocorrência usando os mecanismos adequados (e convencionais) à sua natureza 2009/2010 Programação Orientada por Objectos 24
  • 26. Boas práticas Use assert apenas para erros de programação Pré-condições de métodos privados Pós-condições Invariantes de instância Asserções propriamente ditas Use throw Para erros de programação Pré-condições de métodos não privados Casos excepcionais 2009/2010 25 Programação Orientada por Objectos
  • 27. Boas práticas Não tente recuperar de uma ocorrência sem antes perceber a sua causa Não desactive as asserções durante a operação normal do softwaresenão quando tiverem um impacte negativo significativo sobre o seu desempenho Tente recorrer a lançáveis já existentes na biblioteca padrão do Java 2009/2010 Programação Orientada por Objectos 26
  • 28. Boas práticas Documente possibilidade de lançamento de deRuntimeException (e classes derivadas) quando esse lançamento puder ocorrer devido erros na utilização da interface da operação Lembre-se que pode capturar um lançável e lançar um outro que torne mais claro qual o problema (não deve abusar desta estratégia) 2009/2010 Programação Orientada por Objectos 27
  • 29. Boas práticas: segurança Escreva o seu código de modo a que o lançamento de um lançável num método deixe o programa no mesmo estado em que estava antes da operação correspondente ser invocada Se isso não for possível, escreva o código de modo a, pelo menos, deixar todos os objectos num estado válido 2009/2010 Programação Orientada por Objectos 28
  • 30. Boas práticas: testes Para cada unidade (classe ou conjunto de classes intimamente ligadas) crie um caso de teste JUnit Crie os testes antes mesmo de começar a desenhar a unidade: pensar nos testes ajuda a perceber melhor que interface deve ter a unidade Teste sempre as situações limite e casos especiais (referências nulas, cadeias de caracteres vazias, valores numéricos no limite, etc.) 2009/2010 29 Programação Orientada por Objectos
  • 31. Boas práticas: testes Lembre-se que os testes se devem basear apenas na interface não privada da unidade (testes de caixa preta) Evite alterar a interface não privada quando fizer alterações a uma unidade Se precisar de alterar a interface não privada de uma unidade, actualize todos testes e reveja todos os contratos e respectiva documentação Quando alterar a implementação de uma unidade, reveja o seu invariante e execute todos os seus testes 2009/2010 30 Programação Orientada por Objectos
  • 32. A reter… Detecção e tratamento de ocorrências fundamental para boa programação Princípio subjacente à programação em linguagens como o Java é que quanto mais cedo se detectarem erros, mais fácil é corrigi-los e menor o seu impacte Asserções usam-se para expressar condições que devem ser verdadeiras para que o programa esteja correcto Asserções antecipam detecção de erros de programação e melhoram sua localização 2009/2010 31 Programação Orientada por Objectos
  • 33. A reter… A relação das excepções declaradas com a operação em causa deve ser clara e deve ser documentada Detecção de erro de programação ou de erro no ambiente de execução do programa deve levar sistema, se não crítico, a cometer um elegante harakiri, tão simpático para utilizadores quanto possível Um programa honrado percebe quando falha e extingue-se voluntariamente, não deixando que erros se propaguem 2009/2010 Programação Orientada por Objectos 32
  • 34. A ler para as próximas aulas ... Capítulo 18 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos 33
  • 35. Sumário Erros e casos excepcionais Conceitos Excepções Erros de programação Erros no ambiente de execução Representação, criação, detecção e tratamento Excepções Java Asserções Java Boas práticas (incluindo segurança) 2009/2010 Programação Orientada por Objectos 34