Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Java - Slides 08 - Exceções, Slides de Programação para Java

Slides da aula de Exceções em Java apresentado na Academia BR LP

Tipologia: Slides

2020

Compartilhado em 15/03/2020

renan.costaalencar
renan.costaalencar 🇧🇷

5

(1)

7 documentos

1 / 55

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Linguagens de Programação
8 Exceções
Vítor E. Silva Souza
(vitor.souza@ufes.br)
http://www.inf.ufes.br/~vitorsouza
Departamento de Informática
Centro Tecnológico
Universidade Federal do Espírito Santo
Este%obra%foi%licenciada%sob%uma%Licença%Creative%Commons%Atribuição%3.0%Não%Adaptada.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37

Pré-visualização parcial do texto

Baixe Java - Slides 08 - Exceções e outras Slides em PDF para Programação para Java, somente na Docsity!

Linguagens de Programação

8 – Exceções

Vítor E. Silva Souza ([email protected]) http://www.inf.ufes.br/~vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Este obra foi licenciada sob uma Licença Creative Commons Atribuição 3.0 Não Adaptada.

Conteúdo do curso

  • Introdução;
  • Amarrações;
  • Valores e tipos de dados;
  • Variáveis e constantes;
  • Expressões e comandos;
    • Modularização;
    • Polimorfismo;
    • Exceções;
    • Concorrência;
    • Avaliação de linguagens.
  • Estes slides foram baseados em:
    • Slides do prof. Flávio M. Varejão;
    • Livro “Linguagens de Programação – Conceitos e Técnicas” (Varejão);
    • Livro “Linguagens de Programação – Princípios e Paradigmas, 2a edição” (Tucker & Noonan).

Causas de exceções

Exceções Erros Hardware Software Fluxo Múltiplos resultados

  • Erros de hardware:
    • Ex.: falha no disco rígido;
  • Erros de software:
    • Ex.: acesso a índice inexistente de vetor;
  • Múltiplos resultados:
    • Ex.: leitura de registro ou fim de arquivo.

Abordagens de LPs para exceções

  • Não oferecer recursos próprios:
    • Tratamento através de mecanismos já existentes (testes, subprogramas e desvio incondicional);
    • Ex.: C, Pascal e Modula-­‐2;
  • Possuir mecanismo de tratamento de exceções:
    • Comandos específicos;
    • Novo tipo de fluxo de execução;
    • Ex.: Ada, C++ e Java.

Abortar

  • Reduz a confiança do usuário no sistema;
    • Pode levar a prejuízos financeiros…
  • Dificulta a depuração dos erros;
  • Muitas exceções podem ser contornadas sem que seja necessário interromper a execução do programa.

Teste e tratamento imediato

  • Carrega muito o texto do programa com código de tratamento: - Obscurece a funcionalidade do algoritmo com testes de exceções; - Subprogramas para tratamento reduzem esse problema;
  • Programador tem de lembrar, identificar e testar todas as possíveis condições causadoras de exceções: - Isso normalmente não ocorre;
  • Algumas exceções não podem ser tratadas localmente.

Teste e tratamento imediato

void executaFuncionalidade(int x) { printf ("Faz alguma coisa!!!"); } void f(int x) { if (condicao1(x)) trata1(); if (condicao2(x)) trata2(); if (condicao3(x)) { printf("Nao consegue tratar aqui"); exit(1); } executaFuncionalidade(x); } Quantas linhas de tratamento e quantas de real funcionalidade em f()?

Retorno de código de erro

  • Quem chama deve realizar teste e tratamento para cada código de retorno: - Sobrecarga de código fica ainda maior; - Testes no local da exceção e no código de chamada; - Pode duplicar o tamanho de um programa;
  • Resolve o problema de tratamento não local da exceção;
  • Experiência mostra que o programador não testa todos os códigos de retorno possíveis; - Motivo: não é obrigatório fazê-­‐lo;

Retorno de código de erro

  • Parâmetro de saída:
    • Melhor do que o retorno em variável global ou no resultado da função;
    • Nem toda LP dá suporte, pode exigir “gambiarras” (ex.: uso de ponteiros em C);
    • Exige inclusão de um novo parâmetro nas chamadas dos subprogramas;
    • Requer a propagação desse parâmetro até o ponto de tratamento da exceção;
    • Diminui a redigibilidade do código.

Retorno de código de erro

int f(int x) { if (condicao1(x)) return 1; if (condicao2(x)) return 2; if (condicao3(x)) return 3; executaFuncionalidade(x); return 0; } void g() { int resp; resp = f(7); if (resp == 1) trata1(); if (resp == 2) trata2(); if (resp == 3) trata3(); } Qual abordagem foi usada aqui?

Outras opções em C

  • Exigem tratamento imediato da exceção;
  • Solução signal() concentra o tratamento de todas as exceções em uma única função;
  • Solução setjmp() e longjmp() permite localizar o tratamento em qualquer ponto do programa; - Restringe o tratamento ao último setjmp();
  • Soluções complexas e com baixa legibilidade;
  • Fica a critério do programador C decidir qual a abordagem de tratamento será utilizada.

Mecanismos de tratamento de exceções

  • Buscam garantir e estimular o tratamento das condições excepcionais sem que haja uma grande sobrecarga do texto do programa;
  • Quando uma exceção ocorre ela necessita ser tratada;
  • Tratador de Exceção:
    • Bloco ou unidade de código que manipula a exceção;
  • Sinalização ou disparo da exceção:
    • Ação de indicar a ocorrência da exceção e transferir o controle para o tratador.

Exceções em LPs orientadas a objeto

  • Objetos:
    • Podem ser lançados para outras partes do programa seguindo um fluxo de controle distinto do usual;
    • Classes podem ser especiais ou não;
  • Podem/devem ser organizadas dentro de uma hierarquia de classes; - Exemplo em C++: class ErroMedico {}; class ErroDiagnostico: public ErroMedico {}; class ErroCirurgia: public ErroMedico {};

Exceções padrão de C++

exception runtime_error logic_error bad_alloc bad_exception bad_cast bad_typeid ios_base::failure overflow_error out_of_range