ling. prog

Download Ling. Prog

Post on 07-Jan-2017

221 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 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