Programação Orientada a Objetos Engenharia da Computação Professor: Rosalvo Ferreira de Oliveira Neto Dados Pessoais Rosalvo Ferreira de Oliveira Neto • MSc. em ciência da computação (UFPE) • • [email protected] www.univasf.edu.br/~rosalvo.oliveira Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto 3 Tópicos •Tratamento de Erros Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo do DoME O acrônimo DoME significa Database of Multimedia Entertainment Essencialmente, DoME é uma aplicação que permite armazenar informações sobre CDs e DVDs. A idéia é criar um catálogo de todos os CDs e DVDs que se possui. Os requisitos mínimos que queremos são: •Deve permitir que possamos inserir informações sobre CDs e DVDs; • Deve armazenar essas informações para que essas informações sejam localizadas depois. E Gere um relatório com todos itens do estoque. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Novo Requisito • Implementar o método buscar Produto que recebe como parâmetro o título e retorna o Produto; •Solicitar que o usuário informe o título do produto; •Imprimir todas as informações do Produto localizado. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Novo Requisito • Implementar o método buscar Produto que recebe como parâmetro o título e retorna o Produto; public Produto buscar(String titulo){ for(Produto prod: listaProdutos){ if (prod.getTitulo().equals(titulo)) { return prod; } return null; } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Novo Requisito • Solicitar que o usuário informe o título do produto; Scanner reader = new Scanner(System.in); System.out.println("Informe o nome do produto que deve ser procurado: "); String name = reader.nextLine(); Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Novo Requisito •Imprimir todas as informações do Produto localizado. Scanner reader = new Scanner(System.in); System.out.println("Informe o nome do produto que deve ser procurado: "); String name = reader.nextLine(); Produto prod = ldb.buscar(name); prod.print(); System.out.println("Busca concluída!!!"); Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Qual o problema do programa anterior? • Verificação de parâmetros; Se o parametro for null: Exception in thread "main" java.lang.NullPointerException at Program.main(Program.java:23) • O sistema irá gerar um erro, mas continuará funcionando! • Isso pode gerar problemas para o restante da aplicação! Qual a melhor solução? Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Melhor solução: Lançar um exceção • Exceção é um recurso do Java que também é encontrado em outras linguagens de programação; •Lançar uma exceção evitará ativamente que o programador ignore as consequencias da falha de um método; •Lançar uma exceção é a maneira mais eficaz que um objeto tem para indicar que não é capaz de atender uma solicitação. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Conceito - Exceção • Exceção é um objeto que representa os detalhes de uma falha de programa. Uma exceção é lançada para indicar que ocorreu uma falha. Java divide as classes de exceções em: •Verificadas •Não verificadas Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exceção Verificada x Não Verificada •Verificadas São concebidas para os casos em que deve esperar que uma operação possa falhar(por exemplo, se gravarmos em um disco, saberemos que o disco pode está cheio). •Não verificadas São concebidas para os casos em que nunca deve acontecer uma falha em uma operação normal – geralmente, elas indicam erro de programa. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Dica Infelizmente, conhecer qual categoria de exceção lançar não é uma ciência exata. Dica: Utilizar exceções não verificadas para situações que poderiam ser razoavelmente evitadas, como por exemplo: acessar um item que não contém na lista. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Sintaxe Exceção: Não Verificadas • throw new NullPointerException(“Mensagem de erro”) public Produto buscar(String titulo){ if (titulo.trim().length() == 0) { throw new NullPointerException("O título não pode ser vazio!"); }else{ for(Produto prod: listaProdutos){ ... Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exceções verificadas: cláusula throws • O primeiro requisito do compilador é que um método que lança uma exceção verificada deve declarar que faz isso em uma cláusula throws adicionada ao cabeçalho do método. Public void saveToFile(String arquivoDeDestino) Throws IOException{ ... } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exceções verificadas: cláusula throws O segundo requisito é que o chamador de um método que lança uma exceção verificada deve estar preparado para lidar com a exceção na forma de uma instrução try. try { Proteja uma ou mais instruções aqui! } catch (Exception e){ } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Criando novas classes de exceção Onde as classes de exceção padrão não descrevem satisfatoriamente a natureza do problema, novas classes de exceção mais declarativas podem ser definidas utilizando a herança. •Exceções verificadas herdam de Exception •Exceções não verificadas herdam de RuntimeException Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Criando Exceção public class ProdutoNaoEncontrado extends Exception{ private String titulo; public ProdutoNaoEncontrado(String titulo){ this.titulo = titulo; } public String getMensagemErro(){ return "O titulo: [" + titulo + "] nao foi encontrado em nosso banco de dados!"; } } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Lançando Exceção public Produto buscar(String titulo) throws ProdutoNaoEncontrado{ ... throw new ProdutoNaoEncontrado(titulo); } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Capturando Exceção try{ Produto prod = ldb.buscar(name); prod.print(); System.out.println("Busca concluida!!!"); } catch(ProdutoNaoEncontrado e){ System.out.println(e.getMensagemErro()); } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Dúvidas