INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Documentos relacionados
INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Tratamento de Exceções. Julio Cesar Nardi

TRATAMENTO DE EXCEÇÕES

O tratamento de erros em Java

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

Programação Orientada a Objetos

Programação Java. Tratamento de Exceções

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Tratamento de Exceções em Java

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo

Tratamento de Exceções

Tratamento de Exceções

Tratamento de Exceções cont. Profa. Thienne Johnson EACH/USP

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Tratamento de Exceções

9 Exceções. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Tratamento de Exceções. Prof. Leonardo Barreto Campos 1

Programação Orientada a Objetos SANTOS, Rafael (PLT)

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc.

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula

Aula 13 POO 1 Tratamento de Exceções no Java. Profa. Elaine Faria UFU

Programação Orientada a Objetos (DPADF 0063)

22/9/16. Agenda. Erros. Erros. Exceções. Mecanismo de exceções

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

Tratamento de Exceções. Prof. Marcelo Roberto Zorzan

Java para Desktop. Exceções JSE

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Notas de Aula 09: Tratamento de exceções

Tratamento de Exceção. Tratamento de Exceções. Vantagens de TE. Exemplos de Exceções. Exemplo: Divide1 (sem TE)

Tratando exceções em Java

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP

Programação Orientada a Objetos II

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

Mecanismo de exceções em Java

Controlando Erros com Exceções

Programação Orientada a Objetos. Manipulação de Exceções

Computação II Orientação a Objetos

Programação Orientada a Objetos

AULA TEÓRICA 3. Tema 4. Excepções Ø Tratamento de excepções

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

terminar o programa; retornar um valor de erro indicando falha; retornar e ignorar o problema; chamar uma função para tratar o erro, etc...

[Desenvolvimento OO com Java] Exceções e controle de erros

Template de classe. class vetor { int *arranjo; int limite; public: vetor(int=100); int & operator[ ](int n); };

Classes e Objetos. Sintaxe de classe em Java

Programação de Computadores II TCC /Turma A 1

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

LÓGICA DE PROGRAMAÇÃO (JAVA) ESTRUTURAS REPETIÇÃO. Professor Carlos Muniz

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Tratamento de Erro e Javadoc. Professor: Norton T. Roman

Aula 13 Tratamento de Exceções. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Exceções. SCC0504 Programação Orientada a Objetos. Luiz Eduardo Virgilio da Silva ICMC, USP

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Java Standard Edition (JSE)

Tratamento de Exceções

Variáveis primitivas e Controle de fluxo

Programação de Computadores II

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Curso Profissional de Gestão e Programação de Sistemas Informáticos

LÓGICA DE PROGRAMAÇÃO (JAVA) VARIÁVEIS. Professor Carlos Muniz

Tipos de dados e comandos POO

Linguagem de Programação II Implementação

LINGUAGEM DE PROGRAMAÇÃO I

A R R A Y S E E X C E P T I O N S P R O F. M E. H É L I O E S P E R I D I Ã O

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

Programação Orientada a Objetos JAVA - NETBEANS

Computação II Orientação a Objetos

APIs Java: Tratamento de exceções e Coleções

Lógica de Programação e Algoritmos com exemplos na linguagem JAVA

Um Modelo Semântico para a Linguagem Java Jorge Henrique Cabral Fernandes CIC-UnB Junho de Introdução

Instituto Superior de Engenharia de Lisboa

Lógica de Programação e Algoritmos

Linguagens de Programação Classificação

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Introdução. LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++.

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Linguagem Java - Introdução

Erros, exceçõ. ções e asserçõ

Programação Orientada a Objetos Classes e Objetos. Prof. Vicente Paulo de Camargo

Instituto de Informática Estrutura de Dados II

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Transcrição:

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Ivan Mathias Filho ivan@inf.puc-rio.br Programa Capítulo 9 Tratamento de Exceções Assertivas 1

Programa Capítulo 9 Tratamento de Exceções Assertivas Exceções Exceções são condições anormais, possivelmente erros, que devem ser tratadas pelo programa de aplicação; Linguagens como C++ e Java fornecem suporte para o tratamento sistemático de exceções; Tais mecanismos permitem separar o código relativo ao tratamento de exceções do resto do código da aplicação. 2

Exemplos de situações anormais Erros de lógica de programação: Devem ser corrigidos pelo programador; Exemplos: (a) limite do vetor ultrapassado; (b) divisão por zero; Erros devido a condições do ambiente de execução: Fogem ao controle do programador, mas podem ser contornados; Exemplos: (a) arquivo não encontrado; (b) conexão não estabelecida; Erros graves, onde não há recuperação: Fogem ao controle do programador e não podem ser contornados; Exemplos: (a) falta de memória; (b) erro interno da JVM. Tipos de exceção de Java De um modo geral, as exceções podem ser classificadas segundo o seguinte critério: As geradas pelo run-time de Java; As geradas explicitamente pelo programador (checked Exceptions). Em ambos os casos, um objeto contendo informações sobre a exceção será instanciado; Tal objeto irá pertencer a uma das classes da hierarquia mostrada a seguir: 3

Hierarquia de exceções Tratamento de exceções em Java A linguagem Java permite o tratamento sistemático de exceções através do comando try; Um comando try deve envolver um bloco de código que pode levantar uma exceção; Ele deve ser seguido por: Um ou mais blocos catch(<tipodeexcecao> e); Um bloco finally (opcional). 4

Exemplo try...catch try // código da aplicação // pode levantar uma exceção catch (TipoExcecao1 ex) // código para o tratamento da exceção catch (TipoExcecao2 ex) // código para o tratamento da exceção catch (Exception ex) // código para o tratamento da exceção // captura qualquer exceção // código da aplicação - continuação Dinâmica do mecanismo try...catch O código contido em um bloco try levanta uma exceção; Um objeto contendo informações sobre a exceção é instanciado; O fluxo de execução desce pelos blocos catch até encontrar um que declare tratar a exceção; O bloco catch é executado; O bloco finally é executado, caso exista um; O código que segue o mecanismo try...catch é executado, caso não exista um return no bloco que tratou a exceção. 5

try...catch Observações (1) O bloco catch executado será aquele cujo parâmetro for da mesma classe ou de uma classe ancestral da exceção levantada; Apenas um dos blocos catch será executado; Não pode existir código algum entre o bloco try e o primeiro bloco catch; Não pode existir código algum entre dois blocos catch; try...catch Observações (2) O bloco try deve ser seguido por pelo menos um bloco catch, ou por um bloco finally; Caso um catch mais genérico (ex: catch(exception e)) apareça antes de um mais específico, o bloco mais específico jamais será executado; O compilador detecta a situação acima e sinaliza o erro; Para tratar uma exceção qualquer construa um catch que capture uma exceção do tipo Exception; Esta técnica, entretanto, deve ser usada como um último recurso, e não para substituir os tratamentos das exceções específicas. 6

O bloco finally O bloco finally contém instruções que devem ser executadas independentemente da ocorrência ou não de exceções. try // instruções executadas até linha onde ocorrer exceção catch (TipoExcecao1 ex) // executa somente se ocorrer TipoExcecao1 catch (TipoExcecao2 ex) // executa somente se ocorrer TipoExcecao2 finally // executa sempre este bloco // executa se exceção for tratada ou se não ocorrer exceção Mensagem da exceção Dentro de um bloco catch pode-se ter acesso à mensagem explicativa do motivo da exceção; Isso é feito através do método getmessage(): try... throw new NovaExcecao("Ocorreu uma excecao"); catch(novaexcecao e) System.out.println(e.getMessage()); 7

Seqüência de eventos (1) Quando uma exceção é levantada, o fluxo normal do programa é interrompido e os passos seguintes são executados: O fluxo do programa segue a exceção; Caso ela não seja tratada no método onde ela foi levantada, ela será propagada para o método que chamou o método gerador da exceção, e assim por diante. Caso nenhum método trate a exceção levantada, ela irá causar o término da aplicação; A figura a seguir ilustra o que foi dito acima: Seqüência de eventos (2) 8

Checked Exceptions (1) Para gerar um checked exception é necessário, primeiro, estender java.lang.exception: class NovaExcecao extends Exception Pode-se acrescentar variáveis de instância e métodos à classe de exceção, como em qualquer outra classe; Deve-se fornecer dois construtores para uma classe de exceção: public class NovaExcecao extends Exception public NovaExcecao() public NovaExcecao (String mensagem) super(mensagem); Checked Exceptions (2) O passo seguinte é criar (new) e depois lançar (throw) a exceção: NovaExcecao e = new NovaExcecao("Ocorreu uma excecao"); throw e; // exceção lançada A referência é desnecessária. A sintaxe abaixo é mais usual: throw new NovaExcecao("Ocorreu uma excecao"); 9

Exceções e métodos (1) Caso uma exceção seja explicitamente levantada no interior de um método, uma das medidas a seguir tem que ser tomada: (a) tratar a exceção no próprio método; try... throw new NovaExcecao(); catch (NovaExcecao ex)...... Exceções e métodos (2) (b) não tratar a exceção localmente e declarar que o método pode levantar uma exceção do tipo declarado (ou de qualquer subtipo). public void m1() throws NovaExcecao, Excecao2... A palavra reservada throws declara que o método m1() pode levantar uma das exceções declaradas. 10

Relançamento de uma exceção Às vezes, após tratar uma exceção, é desejável relançá-la para que outros métodos lidem com a mesma; Isto pode ser feito da seguinte forma: public void metodo() throws ExcecaoSimples try // instruções catch (ExcecaoSimples ex) // faz alguma coisa para lidar com a exceção throw ex; // relança exceção Programa Capítulo 9 Exceções Assertivas 11

Assertivas As assertivas foram introduzidas no JDK 1.4 com o objetivo de auxiliar os programadores a encontrar erros em programas (debugging); Um assertiva é uma declaração que pode ser verdadeira ou falsa; Podemos espalhar assertivas em determinados pontos de um programa para testarmos se certas condições são verdadeiras ou não; Se a declaração for falsa a assertiva levanta uma condição de erro (java.lang.error). O comando assert O comando assert possui duas formas: assert <expressaobooleana>; assert < expressaobooleana> : <expressao>; Caso a expressão booleana seja falsa uma condição de erro do tipo java.lang.assertionerror será levantada; Na segunda forma, uma mensagem pode ser passada para o construtor da classe AssertionError; Devemos usar assertivas apenas para detectar erros fatais aqueles não podem ser tratados e que irão encerrar a aplicação. 12

O comando assert Exemplo import java.util.scanner; public class Main public static void main(string[] args) Scanner s=new Scanner(System.in); System.out.println("Informe um inteiro\n"); int x=s.nextint(); System.out.println("Informe um inteiro\n"); int y=s.nextint(); assert y!=0.0 : "Denominador igual a zero"; System.out.println("x/y="+(x/y)); Execução da aplicação Após a compilação da classe Ex, podemos executar a aplicação, como é mostrado na figura abaixo: Veja que o comando assert não teve nenhuma influência no resultado da execução. 13

Comando java -ea Precisamos habilitar as assertivas para que elas tenham efeito (opção -ea no comando java): 14