Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouTéo Lage Alterado mais de 10 anos atrás
1
2002/2003 Programação Orientada para Objectos 1 Aula 14 Tratamento de erros Origens dos erros Instruções usuais Papeis do humano Protecção contra: erros lógicos erros do utilizador erros com origem em recursos externos
2
2002/2003 Programação Orientada para Objectos 2 Origens dos erros Utilizador humano do programa Erros do programador (quer como programador consumidor quer como programador produtor) Recursos externos inadequados (errados, indisponíveis ou insuficientes)
3
2002/2003 Programação Orientada para Objectos 3 Princípios O utilizador errará O utilizador falhará na pior ocasião (a única não prevista) O programador errará Alguns os erros do programador resistirão a todos os testes e revelar-se-ão apenas depois de o programa ter sido distribuido ao seu utilizador final
4
2002/2003 Programação Orientada para Objectos 4 Papeis do humano Erros têm, muitas vezes, origem humana Utilizador do programa é tipicamente humano Programador, quer como programador consumidor quer como programador produtor, é também humano
5
2002/2003 Programação Orientada para Objectos 5 Ferramentas Instruções de selecção Instruções condicionais Instruções de iteração Asserções Excepções
6
2002/2003 Programação Orientada para Objectos 6 Cálculo da raiz quadrada #include using namespace std; /** Devolve uma aproximação da raiz quadrada de valor. @pre 0 <= valor. @post | raizDe × raizDe - valor | <= e × v, onde e (epsilon) é a diferença entre o menor double maior que 1 e 1, representando portanto de alguma forma o limite mínimo de erro alcançável. e = numeric_limits ::epsilon(). */ double raizDe(double const valor) { double raiz_anterior = 0.0; double raiz = valor; while(raiz != raiz_anterior) { raiz_anterior = raiz; raiz = 0.5 * (raiz_anterior + valor / raiz_anterior); } return raiz; } int main() { cout << "Introduza um valor: "; double valor_lido; cin >> valor_lido; cout << "raiz de " << valor_lido << " é << raizDe(valor_lido) << endl; }
7
2002/2003 Programação Orientada para Objectos 7 Protecção contra erros do programador #include using namespace std; /** Devolve uma aproximação da raiz quadrada de valor. @pre 0 <= valor. @post | raizDe × raizDe - valor | <= e × v, onde e (epsilon) é a diferença entre o menor double maior que 1 e 1, representando portanto de alguma forma o limite mínimo de erro alcançável. e = numeric_limits ::epsilon(). */ double raizDe(double const valor) { assert(0.0 <= valor); double raiz_anterior = 0.0; double raiz = valor; while(raiz != raiz_anterior) { raiz_anterior = raiz; raiz = 0.5 * (raiz_anterior + valor / raiz_anterior); } assert(abs(raiz * raiz - valor) <= numeric_limits ::epsilon() * valor); return raiz; } int main() { cout << "Introduza um valor: "; double valor_lido; cin >> valor_lido; cout << "raiz de " << valor_lido << " é << raizDe(valor_lido) << endl; }
8
2002/2003 Programação Orientada para Objectos 8 Protecção contra erros do utilizador... void ignoraLinha() { cin.clear(); char caractere; do cin.get(caractere); while(not cin.fail() and caractere != '\n'); } void lêValorNãoNegativoPara(double& valor_lido) { while(true) { cout << "Introduza um valor: "; cin >> valor_lido; if(not cin.fail() and 0.0 <= valor_lido) return; if(cin.fail()) { ignoraLinha(); cout << "Tem de ser real! << endl; } else // valor_lido < 0.0 cout << Não pode ser negativo! << endl; } int main() { double valor_lido; lêValorNãoNegativoPara(valor_lido); cout << "raiz de " << valor_lido << " é " << raizDe(valor_lido) << endl; }
9
2002/2003 Programação Orientada para Objectos 9 Protecção contra erros com origem em recursos externos Filosofia: recursos disponíveis e sem problemas, excepto casos excepcionais Utilização de excepçoes Erros são detectados e são lançadas excepções Só captura a excepção quem sabe lidar com o erro
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.