23

Programação Orientada a Objetos - univasf.edu.brrosalvo.oliveira/Disciplinas/2012_1/POO/aulas/... · lista. Sintaxe Exceção: Não Verificadas Univasf – Engenharia de Computação

  • 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)

[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

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());

}

Dúvidas