Ling. Prog
date post
07-Jan-2017Category
Documents
view
238download
0
Embed Size (px)
Transcript of Ling. Prog
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Linguagens de Programao
Prof. Miguel Elias Mitre Campista
http://www.gta.ufrj.br/~miguel
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Parte IV
Introduo Programao em C++ (Continuao)
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Relembrando da ltima Aula...
Entrada e sada
Mais exemplos de programao orientada a objetos...
Tratamento de Exceo
Excees
Indicam problemas ocorridos no programa Ocorrncias nem sempre esperadas que no deveriam
acontecer
Representam comportamento que no comum Uma "exceo" em um programa que normalmente funciona
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo
Tratamento de exceo
Programas que resolvem excees Continuam a sua execuo mesmo em face de um erro
Programas que so capazes de continuar execuo Trmino controlado
Problemas mais severos podem impedir que um programa continue a sua execuo
Programas que toleram falhas Ex.: Lidar com um programa que divida por zero
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo
Considere o pseudocdigo:
Realize uma tarefa
Se a tarefa precedente no executou corretamente Realize processamento de erro
Realize a prxima tarefa
Se a tarefa precedente no executou corretamente Realize processamento de erro
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo
Considere o pseudocdigo:
Realize uma tarefa
Se a tarefa precedente no executou corretamente Realize processamento de erro
Realize a prxima tarefa
Se a tarefa precedente no executou corretamente Realize processamento de erro
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Mistura de lgica e tratamento de erro pode tornar o programa difcil de ler/depurar
Tratamento de Exceo
Tratamento de exceo remove correo de erro da linha principal do programa
Torna o programa mais claro e melhora a manuteno
Programadores podem decidir se tratam: Todas as excees
Excees de um tipo especfico
Excees de tipos relacionados
Objetos de classes especficas tratam os erros Possibilidade do uso de herana e polimorfismo
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo
S pode tratar erros sncronos:
Aqueles que seguem a linha de execuo do programa Exs.: diviso por zero, ponteiro nulo
No pode tratar erros assncronos (independente do programa)
Ex.: I/O de disco, mouse, teclado, mensagens de rede que ocorrem em paralelo e de maneira independente do fluxo de controle do programa em execuo
Erros mais fceis de tratar
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo
Terminologia
Funo que tem erros dispara uma exceo (throws an exception)
Tratamento de exceo (se existir) pode lidar com problema
Pega (catches) e trata (handles) a exceo
Se no houver tratamento de exceo, exceo no pega
Pode terminar o programa (uncaught)
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo
Cdigo C++ try {
cdigo que pode provocar uma exceo
}
catch (exceptionType){
cdigo para tratar a exceo
}
Bloco try possui cdigo que pode provocar exceo
Um ou mais blocos catch devem ser escritos imediatamente aps o bloco try correspondente
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Bloco catch
Exceo tratada em um bloco catch apropriado Blocos catch definem exatamente o tipo de exceo
tratada Pode ser o tipo exato ou uma classe base da exceo
disparada
Parmetro de recebimento do bloco catch Se nomeado, pode acessar objeto de exceo
Cada bloco catch trata apenas um tipo de exceo
Colocar mais de um tipo separado por vrgulas erro de sintaxe
Bloco catch
Reporta a exceo ao usurio
Registra a exceo em um arquivo
Termina o programa corretamente Ou tenta uma estratgia alternativa para lidar com a
tarefa que falhou
Tratamento de Exceo
Throw point
Local no bloco try onde a exceo ocorre
Se a exceo for tratada Programa pula o restante do bloco try
Executa o bloco catch correspondente
Reinicia depois do bloco catch Variveis locais ao bloco catch saem do escopo
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Execuo do programa no retorna ao ponto onde a exceo foi disparada!
Tratamento de Exceo
Throw point
Se a exceo for disparada mas no for tratada por nenhum bloco catch
Ou se a exceo for disparada em uma sentena que no est em um bloco
Funo termina imediatamente e o programa tenta encontrar o bloco try na funo chamadora
Se no houver exceo Programa termina o bloco try e continua a execuo
aps pular todos os blocos catchs No implica queda de desempenho
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Outras Tcnicas para Tratamento de Erros
Ignorar exceo Tpico para software pessoal (no comercial)
Programa pode falhar
Abortar programa Frequentemente apropriado
No apropriado para software de misso crtica
Teste para condio de erro Chamar funo exit () e passar cdigo de
erro
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo Simples de Tratamento de Exceo: Diviso por Zero
Palavra-chave: throw Dispara uma exceo
Usada quando ocorre erro
Pode disparar objeto de exceo, inteiro etc. throw myObject;
throw 5;
Objetos de exceo Classe base exceo ( ) Construtor pode receber uma string (para descrever a
exceo) Funo membro what() retorna essa string
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo Simples de Tratamento de Exceo: Diviso por Zero
Tratamento de erros por diviso por zero Define nova classe de exceo
DivideByZeroException
Herdada da classe exception
Na funo de diviso Testar denominador
Se zero, dispara uma exceo (throw object)
No bloco try
Tentativa de dividir
Possui associado o bloco catch Pega objetos DivideByZeroException
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Primeiro Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Possibilidade 1
Primeiro Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Possibilidade 2
Primeiro Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Primeiro Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Primeiro Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Redisparo de uma Exceo (Rethrow exception)
Usado quando um tratador de exceo no pode processar a exceo ou quando pode somente process-la parcialmente
Nesses casos, o tratador da exceo pode adiar o tratamento
Pode redisparar mesmo aps o tratador ter feito algum processamento
Pode redisparar uma exceo para um outro tratador Vai para o prximo bloco try
Blocos catch correspondentes tentam tratar
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Redisparo de uma Exceo (Rethrow exception)
Para redisparar Usado com o sentena "throw;"
Sem argumentos
Termina uma funo
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo Usando Tratamento de Exceo em C++
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo Usando Tratamento de Exceo em C++ O redisparo fez com que...
A funo throwException no continue a sua exe