Tratamento de Exceção

Saudações!
Estou desenvolvendo um jogo super trunfo, algo acadêmico. Estudei por muitos materiais sobre tratamento de exceção: exceção lançada, tratada, como fazer com um método sobreescrito que lança uma exceção, enfim…estudei bastante sobre o funcionamento e a dinâmica das exceções. No entanto, estou tendo uma enorme dificuldade em alguns pontos:
que métodos devem tratar exceção(ões)?
que tipo de exceções devem ser consideradas para os respectivos métodos?
quando um método deve lançar ou tratar uma exceção?

Ou seja, estou me deparando com as dificuldades de PROJETO no que tange o tratamento de exceção. Encontrei muito material falando sobre o funcionamento e regras das exceções, mas nada relativo a projeto.

Se alguém puder me indicar algum material ou alguma dica…

Muito obrigado,
Bruno Giminiani.

Em meus sistemas customo usar exceções no seguintes casos:

1 - em métodos que não podem receber parâmetros nulos;
2 - em situações de validações de dados;
3 - em casos onde a situação do erro e irreversivel ou seja o usuário não pode tratar o erro bloqueando o sistema;
4 - Erros que podem ser tratados pelo proprio usúario como e o caso de validações de dados;

Bem isso so e um simples resumo onde pode ser tratado exceções. No caso de jogos em não sei como poderia ser feito. Mas pode ser seguido pelo mesmo que caminho que te passei

puxando um pouco para UML…
imagine um caso de uso básico… sem nenhum fluxo alternativo, ou seja… quando tudo ocorre de maneira certa…
geralmente as excessões aparecem no outro caso… um fluxos alternativos, por exemplo:
imagine q para participar do seu jogo, o usuário precisa configurar o jogo (tempo, n de participantes etc) caso ele não tenha o feito, você pode usar um tratamento de excessão para avisá-lo e tranferí-lo para a tela de configuração do jogo… é só mais um exemplo… a resposta dada a cima já um bom começo para quem está treinando

abraços!

Essa é uma pergunta difícil de responder, porque, geralmente, quem deve tratar a exceção é a classe que consegue resolver satisfatoriamente o problema.

Boa parte das vezes, essa classe vai acabar sendo a interface gráfica, que vai resolver o problema mostrando uma mensagem de erro para o usuário e logando a exceção.

Se você acha que ninguém vai conseguir resolver o problema, lance uma RuntimeException e deixe que o seu uncaughtExceptionHandler lide com ela.

No caso de jogos, geralmente é o loop principal que faz o papel desse handler e loga todas as exceções não capturadas, sem abortar o jogo.

Pessoal!
Muito obrigado a todos. Ajudaram bastante!
Saudações,
Bruno Giminiani

[quote=Giminiani] Saudações!
Estou desenvolvendo um jogo super trunfo, algo acadêmico. Estudei por muitos materiais sobre tratamento de exceção: exceção lançada, tratada, como fazer com um método sobreescrito que lança uma exceção, enfim…estudei bastante sobre o funcionamento e a dinâmica das exceções. No entanto, estou tendo uma enorme dificuldade em alguns pontos:
que métodos devem tratar exceção(ões)?
que tipo de exceções devem ser consideradas para os respectivos métodos?
quando um método deve lançar ou tratar uma exceção?

Ou seja, estou me deparando com as dificuldades de PROJETO no que tange o tratamento de exceção. Encontrei muito material falando sobre o funcionamento e regras das exceções, mas nada relativo a projeto.

Se alguém puder me indicar algum material ou alguma dica…
[/quote]

Que métodos devem tratar a exceção : Aqueles que souberem como.
Quando se usa uma método de uma classe que pode lançar exceções verificadas como IOException ou SQLException
o método deve capturá-las se soubere resolver o problemas, ou passá-las À frente com throws se não souber.
Contudo ele não pode passar à frente se está na fronteira de um camada. Neste caso ele deve capturar a exceção
e encapsulá-la em uma exceção de camada (não verificada é mais simples).
Tratar é diferente de capturar. Todas as exeções devem ser tratadas mas isso não significa que tenham que ser capturadas.
O compilador irá obrigá-lo a tratar todas as exceções verificadas.

que tipo de exceções devem ser consideradas para os respectivos métodos : aquela que os métodos chamados internamente
lançam e que não possam ser tratados e aquelas que o próprio método lança (aquelas após o comando throw dentro do método)
Não se deve declarar muitas exceções ( má prática: lançar a casa pela janela) por isso se existem várias exceções é melhor agrupá-las com exceções suas (não verificadas é mais simples) e declara essas.
Utilize sempre as exceções mais especificas e dê prioridade à que já existem prontas. Exceções uteis são IllegalArgumentException,
IllegalStateEXception e UnsupportedOperationException, todas do pacote java.lang.

Quando um método deve lançar ou tratar uma exceção?
O método deve lançar uma exceção sempre que incorrer em uma lógica que não souber resolver ou sempre que o uso do método
estiver fora da especificação ( do contrato). O método deve manter a consistencia do estado do objeto em que está e se o objeto não tem estado ele deve pelo menos proteger a consistencia do proprio método. Por exemplo, não aceitar que um parametro seja null ou menor que zero, ou maior que algum numero, etc… Sempre que isso acontecer deve lançar uma exceção.

[adicionado]
Outro detalhe , construtores não devem lançar nenhuma exceção. A única exceção a essa regras é o lançamento de IllegalArgumentException. Para circunscrever o problema utilize um método estático para construir o objeto.
[/adicionado]
Se tiver duvidas especificas será mais fácil ajudar.

Para mais detalhe pode dar uma olhada em :
Exceções: Conceitos
Exceções: Boas práticas, más práticas
Exceções: Classe Utilitárias