Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Slides:



Advertisements
Apresentações semelhantes
Curso de aprofundamento na linguagem C
Advertisements

Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Ferramenta de Desenvolvimento Material IV-Bimestre Tratamento de.
Paulo Marques Hernâni Pedroso
Reflexão Marco Antonio Arquiteto de Software Novembro/2007.
Tratamento de Exceções
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS TRATAMENTO DE EXCEÇÕES
Excepções Algoritmos e Tipos Abstractos de Informação (ATAI)
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Java Como Programar, 8/E.
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Os programas que obtêm certos tipos de recursos devem retorná-los ao sistema explicitamente.
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Classes Concretas e Abstratas
Exceptions em Java Leonardo Freitas e
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
Linguagem C Estruturas de Controle de Fluxos
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Tecnologia para Web JavaScript
Paradigmas da Programação – Semestre 1 – Aula 3
Aula 10 Manipulação de Exceções
Estrutura de Dados em Java
Introdução a Computação e Cálculo Numérico
Bruno Rafael de Oliveira Rodrigues. Tratadores de Excessões A exceção é uma indicação de que um erro ou problema aconteceu durante a execução de uma aplicação.
Unidade I: “Dê um mergulho rápido”
Aula prática 13 Orientação a Objetos – C++ Parte 1
Python: Exceções, Iteradores e Geradores
Linguagens de Programação
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
A NÁLISE Q UANTITATIVA DA I MPLEMENTAÇÃO DE T RATAMENTO DE E XCEÇÕES NA L INGUAGEM P TOLEMY Aluno: Cleivson Arruda Orientador: Fernando Castor T RABALHO.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Tópicos avançados em internet A
Carlos Oberdan Rolim Ciência da Computação
Linguagem de Programação II
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de Programação II
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de Programação II
Tecnologia para Web Tratamento de Exceções
Processo Entidade dinâmica e efêmera
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Erick Luis Moraes de Sousa
Prof. Roberto Rosa Aula 8.  A partir de agora vamos aprender como ver qual é o erro que está acontecendo em nosso projeto. Para.
SISTEMAS OPERACIONAIS I
Excepções Conceito de Excepção A classe Exception
Linguagem II Exceções.
Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )
Tratamento de Exceções
Multiplicação e Divisão com Números Racionais
Capítulo 6 Exceções.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
Slide 1 Programação com Objetos Distribuídos Trabalho Leve 1 The Guardian Model and Primitives for Exception Handling in Distributed Systems Universidade.
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Java Conexão com Baco de dados Saulo Bazzi Oberderfer Fonte:
Construtores e Destrutores
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Seminário: Manipulação de exceções em Java Fabiana Piesigilli Rodrigo Mendes Leme MAC Programação Orientada a Objetos.
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Programação para Web I AULA 4 ESTRUTURAS DE CONTROLE.
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Capítulo 15 – Tratamento de Exceções
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Java™ Como Programar, 8/E.
Tratamento de Exceções. Roteiro O que são exceções? Quando usar Capturando Exceções Exemplos.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
ProgramaçãoConcorrente Glêdson Elias
Transcrição da apresentação:

Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação

Tratamento de exceções

Mecanismo que permite tratar de erros em tempo de execução de modo mais controlado, simplificado e eficiente que as formas tradicionais de detecção e tratamento de erros Trata dos mecanismos de disparo, captura e tratamento de exceções Problemas durante a execução de um programa

Exceções Exceções são erros que ocorrem durante a execução de um programa. Normalmente, muitos desses erros podem ser previstos pelo programador que utiliza funções próprias para trata-los Exceções em C++ constituem um novo mecanismo, uma ferramenta poderosa e flexível para simplificar a detecção e tratamento de erros durante a execução do programa

Modo tradicional Forma tradicional uma função retorna um valor determinando a ocorrência de um erro. Necessita verificar o valor retornado todas as vezes Com o uso de classes e objetos como saber se ocorreu um erro durante a execução do construtor ou do destrutor ?

O mecanismo de exceções Exceção em C++ é uma resposta a uma situação anormal que surge enquanto um programa está em execução Exemplo: divisão por zero Podem provocar a transferência do controle para uma parte do programa para outra parte. Envolve três conceitos: Utilização de um bloco try (try) Captura da uma exceção por um manipulador de exceções (catch) Disparo de uma exceção (throw)

O mecanismo de exceções Envolver o bloco suspeito de gerar exceção com um try. Começa com um comando try seguido do código entre chaves Pode ser seguido de um ou mais catch A captura de uma exceção é feita por um catch. Começa com a palavra catch seguido seguido por uma declaração de tipo associada ao tipo de exceção a qual responde Corpo igual a uma função ou método normal Será disparado por um throw Throw indica o disparo de uma exceção quando surge algum problema implicando o desvio para um outro ponto (bloco catch) É seguido de um valor (string, constante, obj, etc) que indica o tipo de exceção

O mecanismo de exceções Bloco catch Exceção ? Bloco try S N

Int main ( ) { Int dividendo, divisor, quociente; cin >> dividendo; cin >> divisor; try { if (divisor == 0) throw Tentativa de divisão por zero; quociente = dividendo / divisor; cout << Resultado << dividendo; }catch (const char * msg) { cout << Erro : << msg << endl; } return 1; } Exemplo básico de tratamento de exceção

Informações adicionais Um try pode por meio de um throw disparar mais de uma exceção Disparo de throw lembra um return mas ao invés de retornar o controle a função chamadora faz com que o programa vá para o catch correspondente No bloco catch( const char *msg) existe a correspondencia com a exceção disparada que é uma string. Declaração de msg assemelha-se a um argumento de função Caso um bloco try seja executado sem disparar exceções os blocos catch não serão executados. Caso haja o disparo de exceção o bloco catch será executado e o programa continuará após o último bloco catch

Int main ( ) { Int dividendo, divisor, quociente; cin >> dividendo; cin >> divisor; try { if (divisor == 0) throw Tentativa de divisão por zero; if (divisor < 0) throw 8888; quociente = dividendo / divisor; cout << Resultado << dividendo; }catch (const char * msg) { cout << Erro : << msg << endl; } }catch (int erro) { cout << Erro : << erro << endl; } return 1; } Exemplo disparando mais de uma exceção

Exceções e funções A definição de uma função pode ser qualificada com a especificação da exceção para indicar quais tipos de exceção essa função pode disparar E um bloco catch poderá responder a mais de uma exceção Para qualificar a função usar nomeFunção (argumentos) throw (excessção1, exceção2,...) Exemplo int calcular(int valor1, int valor2) throw (const char *); Ou int calcular(int valor1, int valor2) throw (const char *, int);

..... double calcRaiz(double) throw (const char *); int main () { double numero, raizq; cin >> numero; try { raizq = calcRaiz(numero); cout << Raiz: << raizq; } catch ( const char * msg) { cout << Erro << msg << endl; } cout << Termino do programa << end; return 1; } double calcRaiz(double numero) throw (const char *){ if (numero == 0) throw Raiz de num negativo; return sqrt(numero); } Exemplo de código com função qualificada com exceção

Múltiplos blocos try Pode-se utilizar vários blocos try dentro de um programa.... cin >> numero; try { raizq = calcRaiz(numero); cout << Raiz: << raizq; } catch ( const char * msg) { cout << Erro << msg << endl; } try { raizq = Dobro(numero); cout << Dobro: << dobro; } catch ( const char * msg) { cout << Erro << msg << endl; }

Captura de qualquer exceção É possível usar um bloco catch genérico que é executado quando qualquer exceção for disparada Basta escrever... (reticencias) no lugar do tipo de exceção

Int main ( ) { Int dividendo, divisor, quociente; cin >> dividendo; cin >> divisor; try { if (divisor == 0) throw Tentativa de divisão por zero; if (divisor < 0) throw 8888; quociente = dividendo / divisor; cout << Resultado << dividendo; }catch (...) { cout << Ocorreu uma exceção << endl; } return 1; } Exemplo com catch genérico capturando qualquer tipo de exceção

Exceções e classes Exceções podem ser aplicadas em classes com algumas diferenças Por exemplo um construtor poderia disparar uma exceção quando uma chamada ao new fosse mal sucedida Na utilização de exceções associadas a classes a prática é disparar objetos como exceções e captura-los com referência Para um método que dispara uma exceção, define-se uma classe de exceção dentro da classe principal para ser utilizada como o tipo da exceção disparada

Exceções e classes Declaração de classe dentro da classe é conveniente, pois o tipo de exceção indica a classe que a originou, além de ajudar a evitar nomes conflitantes class vetor { public: class erro { }; private:.... }; Assim será possível disparar uma exceção do tipo throw erro(); a ser tratada por um bloco catch ( vetor :: erro ) {... }

class numExtenso { public: ler(); class Erro { }; private: int numero; }; int main () { numExtenso num; try { num.ler(); } catch(numExtenso :: Erro ){ cout << Numero fora do invervalo; return 1; } return 0; } void numExtenso :: ler () { cin 5) throw Erro; } Exemplo com classe de exceção vazia

class numExtenso { public: ler(); class Erro { public: Erro(); int indice; }; private: int numero; }; int main () { numExtenso num; try { num.ler(); } // catch(numExtenso :: Erro ){ catch(numExtenso :: Erro & i ){ cout << i. indice << fora do invervalo; return 1; } return 0; } void numExtenso :: ler () { cin 5) throw Erro(numero); } numExtenso :: Erro :: Erro (int i){ indice = i; } Exemplo com classe de exceção com membros

Exceções e o operador new Com o mecanismo de exceção quando a alocação de memória com o operador new for mal sucesidade será disparada uma exceção do tipo bad_alloc que é uma classe derivada da classe exception. Em função da derivação bad_alloc herda um método virtual chamado what() que retorna um string indicativo da ocorrência de uma exceção Essa string varia de acordo com implementação do C++

struct conta { double saldo[5000]; }; Int main ( ) { conta * ptr; try { cout << operador new tenta alocar espaco em memória; ptr = new conta[10000]; } catch ( bad_alloc & msg){ cout << String do metodo what(): << msg.what() << endl; return 1; } delete [ ] ptr; return 0; } Exemplo de exceção com alocação dinâmica Saída: O operador new tenta alocar espaço em memória String do método what(): st9bad_alloc