1 / 9

Aula 14

Aula 14. Tratamento de erros O rigens dos erros Instruções usuais Papeis do humano Protecção contra : erros lógicos erros do utilizador erros com origem em recursos externos. Origens dos erros. Utilizador humano do programa

Download Presentation

Aula 14

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. 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 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) 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 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 Programação Orientada para Objectos

  5. Ferramentas • Instruções de selecção • Instruções condicionais • Instruções de iteração • Asserções • Excepções Programação Orientada para Objectos

  6. #include <iostream> #include <limits> using namespace std; /** Devolve uma aproximação da raiz quadradade 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<double>::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; } Cálculo da raiz quadrada Programação Orientada para Objectos

  7. #include <iostream> #include <limits> #include <cassert> #include <cstdlib> using namespace std; /** Devolve uma aproximação da raiz quadradade valor. @pre 0 <= valor. @post |raizDe × raizDe-valor| <= e × v,onde e (epsilon) é a diferença entre omenor double maior que 1 e 1, representando portanto de alguma forma o limite mínimo deerro alcançável. e = numeric_limits<double>::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<double>::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; } Protecção contra erros do programador Programação Orientada para Objectos

  8. ... 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; } Protecção contra erros do utilizador Programação Orientada para Objectos

  9. Protecção contra erroscom 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 Programação Orientada para Objectos

More Related