[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