Upload
ngocong
View
213
Download
0
Embed Size (px)
Citation preview
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)
• 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
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
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.
Novo Requisito
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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.
Novo Requisito
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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; }
Novo Requisito
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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();
Novo Requisito
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
•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!!!");
Qual o problema do programa anterior?
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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?
Melhor solução: Lançar um exceção
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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.
Conceito - Exceção
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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
Exceção Verificada x Não Verificada
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
•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.
Dica
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
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.
Sintaxe Exceção: Não Verificadas
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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){
...
Exceções verificadas: cláusula throws
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
• 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{
...
}
Exceções verificadas: cláusula throws
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
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){
}
Criando novas classes de exceção
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
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
Exemplo – Criando Exceção
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
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!";
}
}
Exemplo – Lançando Exceção
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
public Produto buscar(String titulo) throws ProdutoNaoEncontrado{
...
throw new ProdutoNaoEncontrado(titulo);
}
Exemplo – Capturando Exceção
Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto
try{
Produto prod = ldb.buscar(name);
prod.print();
System.out.println("Busca concluida!!!");
}
catch(ProdutoNaoEncontrado e){
System.out.println(e.getMensagemErro());
}