A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Linguagens de Programação Conceitos e Técnicas

Apresentações semelhantes


Apresentação em tema: "Linguagens de Programação Conceitos e Técnicas"— Transcrição da apresentação:

1 Linguagens de Programação Conceitos e Técnicas
Exceções Prof. Isabel Cafezeiro *Adaptação das transparências do professor Flávio Varejão Utilizando exemplos de Tutorial Java. André Augusto Cesta. Unicamp 1996.

2 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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

17 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

18 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

19 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

20 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


Carregar ppt "Linguagens de Programação Conceitos e Técnicas"

Apresentações semelhantes


Anúncios Google