aula 14 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Aula 14 PowerPoint Presentation
Download Presentation
Aula 14

Loading in 2 Seconds...

play fullscreen
1 / 9
shelby-hensley

Aula 14 - PowerPoint PPT Presentation

85 Views
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. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - 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