Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.

Slides:



Advertisements
Apresentações semelhantes
Programação orientada a objetos
Advertisements

O TAD fila O TAD fila armazena objetos arbitrários
Programação em Java Prof. Maurício Braga
Tratamento de Exceções
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS TRATAMENTO DE EXCEÇÕES
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Os programas que obtêm certos tipos de recursos devem retorná-los ao sistema explicitamente.
Programação Básica em Java
Classes Concretas e Abstratas
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
O Mecanismo de Threads em Java 2. Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends.
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.
PLC – Introdução a POO Java
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tecnologia para Web Tratamento de Exceções
Chamada Remota de Procedimentos
Introdução à Programação Orientada a Objetos com Java
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Orientação a Objetos e Java Graduação em Ciência da Computação
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.
Pilhas Profa. Nádia Félix.
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 )
Listas Simplesmente Encadeadas
Wagner Santos C. de Jesus
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Tratamento de Exceções
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
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 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Capítulo 6 Exceções.
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)
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Classes Abstratas e Interface
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.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Herança e Arquitetura em camadas
Aula Prática 5 05/05/2010. //Estrutura do método public int subtrair (int a, int b){ //Calcule a operação desejada. int resultado = a – b; //Retorne o.
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,
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação e Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de.
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
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Capítulo 15 – Tratamento de Exceções
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.
Transcrição da apresentação:

Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções

Classe de Contas: Definição class Conta { private String numero; private double saldo; /*... */ void debitar(double valor) { saldo = saldo - valor; } Como evitar débitos acima do limite permitido?

Desconsiderar Operação class Conta { private String numero; private double saldo; /*... */ void debitar(double valor) { if (valor <= saldo) saldo = saldo - valor; }

Desconsiderar Operação Problemas: quem solicita a operação não tem como saber se ela foi realizada ou não nenhuma informação é dada ao usuário do sistema

Mostrar Mensagem de Erro class Conta { static final String erro = " Saldo Insuficiente! " ; private String numero; private double saldo; /*... */ void debitar(double valor) { if (valor <= saldo) saldo = saldo - valor; else System.out.print(erro); }

Mostrar Mensagem de Erro Problemas: informação é dada ao usuário do sistema, mas nenhuma sinalização de erro é fornecida para métodos que invocam debitar há uma forte dependência entre a classe Conta e sua interface com o usuário não há uma separação clara entre código da camada de negócio e código da camada de interface com o usuário

Retornar Código de Erro class Conta { private String numero; private double saldo; /*... */ boolean debitar(double valor) { boolean r = false; if (valor <= saldo) { saldo = saldo - valor; r = true; } else r = false; return r; }

Retornar Código de Erro Problemas: dificulta a definição e o uso do método métodos que invocam debitar têm que testar o resultado retornado para decidir o que deve ser feito A dificuldade é maior para métodos que retornam valores: —Se debitar já retornasse um outro valor qualquer? O que teria que ser feito?

Código de Erro: Problemas class Conta { /*... */ boolean transferir(Conta c, double v) { boolean r = false; boolean b = this.debitar(v); if (b) { c.creditar(v); r = true; } else r = false; return r; }

Código de Erro: Problemas class CadastroContas { /*... */ int debitar(String n, double v) { int r = 0; Conta c = contas.procurar(n); if (c != null) { boolean b = c.debitar(v); if (b) r = 0; else r = 2; } else r = 1; return r; }

Exceções Ao invés de códigos, teremos exceções... São objetos comuns, portanto têm que ter uma classe associada Classes representando exceções herdam e são subclasses de Exception (pré- definida) Define-se subclasses de Exception para —oferecer informações extras sobre a falha, ou distinguir os vários tipos de falhas

Definindo Exceções class SIException extends Exception { private double saldo; private Stringnumero; SIException (double s, String n) { super ( " Saldo Insuficiente! " ); saldo = s; numero = n; } double getSaldo() {return saldo;} /*... */ }

Definindo Métodos com Exceções class Conta { /*... */ void debitar(double v) throws SIException { if (v <= saldo) saldo = saldo - v; else { SIException e; e = new SIException(saldo,numero); throw e; }

Definindo e Levantando Exceções Res metodo(Pars) throws E1,...,EN Todos os tipos de exceções levantadas no corpo de um método devem ser declaradas na sua assinatura Levantando exceções: throw obj-exceção Fluxo de controle e exceção são passados para a chamada do código que contém o comando throw, e assim por diante...

Usando Métodos com Exceções class Conta { /*... */ void transferir(Conta c, double v) throws SIException { this.debitar(v); c.creditar(v); } Exceções levantadas indiretamente também devem ser declaradas!

Usando e Definindo Métodos com Exceções class CadastroContas { /*... */ void debitar(String n, double v) throws SIException, CNEException { Conta c = contas.procurar(n); if (c != null) c.debito(v); else throw new CNEException(n); }

Tratando Exceções /* Antes...*/ try { /*...*/ banco.debitar(“123-4”,90.00); /*...*/ } catch (SIException e) { System.out.print(sie.getMessage()); System.out.print(“ Conta/saldo: ”); System.out.print(e.getNumero()+ “ / ” + e.getSaldo()); } catch (CNEException e) {/*...*/} /* Depois...*/

Tratando Exceções A execução do try termina assim que uma exceção é levantada O primeiro catch de um supertipo da exceção é executado e o fluxo de controle passa para o código seguinte ao último catch Se não houver nenhum catch compátivel, a exceção e o fluxo de controle são passados para a chamada do código com o try/catch

Tratando Exceções: Forma Geral try {... } catch (E1 e1) {... }... } catch (En en) {... } finally {...}

Tratando Exceções O bloco finally é sempre executado, seja após a terminação normal do try, após a execução de um catch, ou até mesmo quando não existe nenhum catch compatível Quando o try termina normalmente ou um catch é executado, o fluxo de controle é passado para o código seguindo o bloco finally (depois deste ser executado)

Exceções no Cadastro de Contas class CadastroContas {/*... */ void cadastrar(Conta c) throws CEException,IllegalArgumentException { if (c != null) { String n = c.getNumero(); if (!contas.existe(n)) contas.inserir(c); else throw new CEException(n); } else throw new IllegalArgumentException(); }

Exceções no Cadastro de Contas void debitar(String n, double v) throws SIException, CNEException { Conta c = contas.procurar(n); c.debitar(v); }

Exceções no Conjunto de Contas class ConjuntoContas {/*...*/ static final IllegalArgumentException e = new IllegalArgumentException(); void inserir(Conta c) throws IllegalArgumentException { if (c != null) { contas[indice] = c; indice = indice + 1; } else throw e; }

Exceções no Conjunto de Contas Conta procurar(String n) throws CNEException { Conta c = null; int i = this.procurarIndice(n); if (i == indice) throw new CNEException(n); else c = contas[i]; return c; }