Linguagens de Programação Conceitos e Técnicas

Slides:



Advertisements
Apresentações semelhantes
Tratamento de Exceções
Advertisements

(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Os programas que obtêm certos tipos de recursos devem retorná-los ao sistema explicitamente.
Classes Concretas e Abstratas
Estrutura de Dados em Java
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.
Python: Exceções, Iteradores e Geradores
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.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tecnologia para Web Tratamento de Exceções
Prof. Roberto Rosa Aula 8.  A partir de agora vamos aprender como ver qual é o erro que está acontecendo em nosso projeto. Para.
Linguagem II Exceções.
Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )
Tratamento de Exceções
Capítulo 6 Exceções.
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.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
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
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.
PROGRAMANDO EM JAVA Dilvan Moreira (baseado no livro Big Java)
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Linguagens de Programação Conceitos e Técnicas Valores e Tipos de Dados Prof. Isabel Cafezeiro
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Linguagens de Programação Conceitos e Técnicas Variáveis Prof. Isabel Cafezeiro
Programação em Java RMI - Remote Method Invocation Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Programação em Java JButton e Tratamento de Eventos Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Programação em Java Tratamento de Exceções Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Linguagens de Programação Conceitos e Técnicas Expressões Prof. Isabel Cafezeiro
Transações George Azevedo da Silva José Antônio da Cunha.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Vetores e Laço de Repetição
Linguagens de Programação Conceitos e Técnicas
Vetores e Matrizes em C/C++
INF1007: Programação 2 2 – Alocação Dinâmica
Python: Exceções, Iteradores e Geradores
Módulo I Capítulo 2: IDE e Variáveis
Algoritmos e Estruturas de Dados I
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Linguagens de Programação Conceitos e Técnicas
FUNDAMENTO DE PROGRAMAÇÃO
Java: Interfaces Alcides Calsavara.
Dilvan Moreira (baseado no livro Big Java)
Criação e manipulação de objetos
Edson Susumu Asaga JavaBeans Edson Susumu Asaga
IP – Repetições for Prof. Eduardo Falcão.

Elaborando as Interfaces Aulas 37, 38 e 39.
Remote Method Invocation
Sistemas Operacionais Aula 3
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos*
Programação Orientada a Objetos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
Rosemary Silveira Filgueiras Melo
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Tipos Primitivos de Dados
Python: Exceções, Iteradores e Geradores
Unidade VI – Exceções e Interfaces
Tratamento de Exceções (try)
Programação de Computadores II
Transcrição da apresentação:

Linguagens de Programação Conceitos e Técnicas Exceções Prof. Isabel Cafezeiro isabel@dcc.ic.uff.br http://www.dcc.ic.uff.br/~isabel *Adaptação das transparências do professor Flávio Varejão Utilizando exemplos de Tutorial Java. André Augusto Cesta. Unicamp 1996.

Linguagens de Programação Exceções Evento ocorrido durante a execução de um programa, que desvia o fluxo normal de instruções Condições anormais no comportamento do software, que muitas vezes não podem ser detectadas na compilação Exemplos Divisão por zero; Falha na abertura de arquivo; Fim de arquivo; Overflow; Acesso a índice inválido; Uso de objeto não inicializado. Exceções Linguagens de Programação

Linguagens de Programação Exceções Linguagens sem mecanismo de tratamento de exceções: Ausência de ações de tratamento: software inseguro Ações de tratamento inseridas no código: software obscuro Tratamento Local testar cada possível exceção no local provável de sua ocorrência e realizar o tratamento imediato. Tratamento não local sinalizar código de erro em variável global específica, parâmetro específico ou retorno de função. uso de sinalizadores da biblioteca padrão Exceções Linguagens de Programação

Linguagens de Programação Exceções Tratamento local em C: int divideInteiros (int num, int den) { if (den == 0) trata_divisao_por_zero(); else return num/den; } int trata_divisao_por_zero(void) { printf(“Divisão por zero”); return 1; Programa usuário, que implementa a funcionalidade. O tratador é chamado no local da ocorrência. Tratador da exceção prevista Exceções Linguagens de Programação

Linguagens de Programação Exceções Tratamento não local em C: int funcionalidade (int x) { if (condição1(x)) return 1; if (condição2(x)) return 2; if (condição3(x)) return 3; executafuncionalidade(x); } void g( ) { int erro; erro := funcionalidade(7); if (erro == 1) trata1; if (erro == 2) trata2; if (erro == 3) trata3;} Programa usuário, que implementa a funcionalidade Condições de exceção previstas Código que implementa a funcionalidade Função que permite o tratamento, após o retorno do código onde ocorreu a exceção Tratadores de exceção Exceções Linguagens de Programação

Linguagens de Programação Exceções Tratamento não local em C: Uso de variáveis globais da biblioteca padrão errno: variável global que guarda o código do erro Uso de sinais da biblioteca padrão raise: função que gera um sinal quando ocorre um comportamento anormal no programa. overflow: função que gera um sinal quando ocorre um acesso indevido à memória. signal: função que permite o tratamento destes eventos. setjmp,longjmp: funções que salvam e recuperam o estado do programa. longjmp desvia a execução para o local do último setjmp. Exceções Linguagens de Programação

Linguagens de Programação Exceções Tratamento não local em C: O usuário pode desconhecer a existência da variável errno e esquecer de implementar o tratador. Pode ocorrer uma exceção para a qual o usuário não previu tratamento. Soluções baseadas em sinais são complexas. Exceções Linguagens de Programação

Linguagens de Programação Exceções Ações de tratamento inseridas no código: Baixa legibilidade: funcionalidade básica versus condições eventuais. Nem sempre se pode prever todas as possíveis exceções. Algumas exceções não podem ser tratadas localmente. Exceções Linguagens de Programação

Linguagens de Programação Exceções Linguagens com mecanismo de tratamento de exceções: Tratar exceções sem sobrecarregar o programa. Modularizar e reutilizar o código dos tratadores. Poupar o usuário de memorizar todas as possíveis exceções. Exceções Linguagens de Programação

Linguagens de Programação Exceções Ações envolvidas no tratamento de exceções: 10) Sinalizar (levantar, jogar): suspender o bloco ativo, e ... ... passar a identidade da exceção para o tratador mais próximo Modos: Automático: em qualquer ponto do programa Explícito: dentro de bloco específico Exceções Linguagens de Programação

Linguagens de Programação Exceções Ações envolvidas no tratamento de exceções: 20) Tratar: Executar o código que implementa as ações corretivas (tratador). Fica a cargo do programador: Implementar o tratador. Fica a cargo da linguagem: Fornecer o mecanismo de identificação da exceção. Gerenciar a ocorrência da exceção. Exceções Linguagens de Programação

Linguagens de Programação Exceções Ações envolvidas no tratamento de exceções: 30) Propagar: Quando não há tratador para a exceção ocorrida no bloco onde ocorreu ... ... ela se propaga para o bloco mais externo, e daí,... ... se propaga pela cadeia dinâmica ... ... até que seja encontrado o tratador ou a função principal. Exceções Linguagens de Programação

Linguagens de Programação Exceções Ações envolvidas no tratamento de exceções: 40) Retomada da Execução: Retomada: O controle volta para o local onde ocorreu a exceção. Terminação (quando há propagação da exceção): São desempilhados os registros de ativação do bloco onde ocorreu a exceção até o bloco onde ocorreu o tratamento. A execução prossegue na unidade onde o tratador foi encontrado, após a região do tratamento. Exceções Linguagens de Programação

Linguagens de Programação Exceções Em Java: Nem sempre é possível programar sem exceções: Alguns métodos de classes definidas na linguagem podem gerar exceções. Neste caso, o usuário da classe tem de programar o tratador. Exceções são objetos em Java: Throwable Error Exception Exceções definidas pelo programador estendem esta classe Exceções Linguagens de Programação

Linguagens de Programação Exceções Em Java: A exceção definida pelo programador public class DivisaoPorZero extends Exception { //public String info; public DivisaoPorZero(String i) //info=i; } Texto emitido pelo método sinalizador da exceção Exceções Linguagens de Programação

Linguagens de Programação Exceções Em Java: A Sinalização em Java: O método capaz de sinalizar a exceção possui a cláusua throw em seu cabeçalho. Na ocorrência da condição anormal, este método é interrompido e o controle passa ao método chamador. Deverá existir um tratador no método chamador, ou na cadeia dinâmica. Exceções Linguagens de Programação

Linguagens de Programação Exceções Em Java: O método sinalizador class Fracao { private int num,den; //numerador, denominador .... public Fracao divisao(Fracao j) throws DivisaoPorZero { Fracao g; if (j.den==0) throw new DivisaoPorZero("Na classe Fracao"); g=new Fracao(num*j.den,den*j.num); return g; } ... Sinalização Na ocorrência da exceção, a execução não chega neste ponto. Exceções Linguagens de Programação

Linguagens de Programação Exceções Em Java: O tratador em Java: try { .... } catch ( C o) { ... } Trecho de código onde possivelmente ocorrerá a exceção Classe e identificador da exceção Código tratador Exceções Linguagens de Programação

Linguagens de Programação Exceções Em Java: O tratador, no método chamador class Principal { public static void main(String args[]) { Fracao a,b,c,d; a=new Fracao(5,3); b=new Fracao(4,2); c=new Fracao(6,0); System.out.print("Esta e' a fracao a: "); a.mostra(); System.out.print("Esta e' a fracao b: "); b.mostra(); System.out.print("Esta e' a fracao c: "); c.mostra(); Exceções Linguagens de Programação

Linguagens de Programação Exceções Na classe Fração, o método divisão sinaliza a exceção. A execução do método sinalizador (divisão) é interrompida. A execução deste bloco é interrompida. Estas linhas não serão efetuadas. O tratamento é efetuado. A retomada ocorre nos comandos seguintes ao tratador. Em Java: O tratador, no método chamador try { d=a.divisao(b); System.out.print(“Divisao de a por b: "); d.mostra(); d=a.divisao(c); System.out.print(“Divisao de a por c: "); } catch(DivisaoPorZero minhaexcecao) { System.out.println("Nao posso dividir por zero"); System.out.println("Fim da execucao!!!"); } } // fim do método, fim da classe Exceções Linguagens de Programação