<RESOLVIDO> Vantagens de se criar a própria Exceptions

2 respostas
J

Olá pessoal, td bem?

Conforme o assunto do tópico, gostaria de saber qual a vantagem de nós mesmo criarmos nossa exceção. No caso
de uma validação de entrada de dados do usuário, não seria viável validar atráves de um loop, tipo Do/While. Não teria
o mesmo efeito. Desculpe minha ignorância pela dúvida, e talvez até mesmo a forma como estou descrevendo, pois
muito deverão estar confuso com o texto.
No aguardo de uma resposta.

Janfrancisco R. Xavier

2 Respostas

GilGandi

Boa noite, vou responder conforme entendi a pergunta.

As exceções tem por objetivo fazer com o que o software funcione corretamente.
Vou dar um exemplo.

Ao tentar escrever em um arquivo via java, pode ocorrer do arquivo não existe, ao tentar criar o arquivo pode ocorrer da pasta não existir.

Ou seja, neste caso foram duas exceções que ocorreram. Se for feita da maneira correta tudo será feito sem que o usuário final precise saber de nada.
Caso seja ignoradas as exceções ou tratadas diretamente com uma exceção genérica trazendo a mensagem do erro, o usuário iria ficar perdido e/ou achando o
software muito problemático e chato de lidar.

TerraSkilll

Janfrancisco
Recomendo a leitura do material da Caelum sobre Exceções (http://www.caelum.com.br/apostila-java-orientacao-objetos/excecoes-e-controle-de-erros/), principalmente a parte de “Motivação”, que explica o por que de se utilizar exceptions. Dentre outras coisas (como o tratamento de erros em si), eu vejo que o uso de exceptions permite desacoplar a implementação de uma classe da chamada a ela e um tratamento mais fino de determinadas regras de negócio.

Pegando um exemplo (simplista, talvez), imagine uma classe Cliente com um atributo cnpj (que pode ser alterado com o método setCnpj() ), que precisa ser validado antes de ser alterado. Sem usar exceptions, temos dois possíveis cenários:

  • validar o cnpj informado antes de usar o método setCnpj(), mostrando uma mensagem. O método para validar o cnpj (algo como validaCnpj()) poderia de estar em uma classe assistente;
  • dentro do método setCnpj(), haveria a validação (que também poderia ser de uma classe assistente);

O uso de um cnpj inválido é uma situação indesejada e deve ser evitada por poder levar a um estado inconsistente na aplicação. Mas no primeiro caso acima, o programador que usa a classe Cliente pode optar por simplesmente não verificar o cnpj (permitindo que a classe tenha um cnpj inválido), enquanto que, no segundo, se o método setCnpj() não interromper a execução do programa, o fato de o cnpj não ter sido alterado (já que era inválido) pode passar despercebido pelo programador que usa a classe Cliente. Além disso, nesse segundo caso, o método setCnpj() teria de exibir uma mensagem ao usuário (ou retorná-la), responsabilidade que esse método não deveria ter.

A exceção nesse caso é um jeito mais elegante de tratar essa situação, pois força que a situação anormal seja analisadapor quem chama o método que a dispara, ou seja, reforça a impressão de que a operação efetuada pode levar a um estado inconsistente e indesejado. A pessoa que utilizar o método setCnpj() pode optar sim por ignorar a exceção (com um catch que não faz nada, por exemplo), mas aí o estado inconsistente não ocorrerá por culpa da classe Cliente, mas por culpa da chamada ao método setCnpj() e de a exceção não ser tratada.

Abraço.

Criado 24 de junho de 2013
Ultima resposta 25 de jun. de 2013
Respostas 2
Participantes 3