Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

OO no tratamento de exceptions

Olá, Pensando em OO, quem deve ser responsavel por tratar as exceptions que cada classe pode lançar? seguindo o entendimento do curso acredito que a propria classe deve se responsabilizar pelo tratamento, porém essa é a forma corretar? Ou a classe devera lançar as exceptions para uma classe central tratar? Por exemplo, eu tenho uma classe Calculo que possui o metodo calcula, esse metodo lança um numberformatexception, a propria classe deve ser responsavel por tratar esse erro? ou ela deverá lançar para a classe que instanciou a classe Calculo e passou os argumentos para o metodo calcula tratar?

6 respostas

Olá Diego, tudo bem?

No seu exemplo, a classe Calculo possui um método calcula que pode lançar uma exceção do tipo RuntimeException, correto? Eu acredito que, neste caso, ela deveria ser tratada dentro do próprio método. Sendo assim, quem o chamasse não teria que se preocupar com este tratamento. Visto que o método calcula pode ser chamado em muitas partes do seu código e você ou quem estivesse usando sua classe deveria lembrar de tratar esta possível exceção. Além disso, ela é uma exceção unchecked, ou seja, não vefificada pelo compilador; ele não o obriga a tratá-la.

Abs.

Hm, concordo com seu ponto de vista, e no caso de um metodo que lançe uma checked exception? você usaria a mesma concepção, ou daria um throw nela?

solução!

Em java, tudo que não é primitivo é... objeto, certo? As exceções são instâncias da classe Exception.

Na verdade, a árvore começa com a classe Trowable.. Então, temos a seguinte hierarquia decrescente:

Trowable <-- Exception <-- RuntimeException <-- (Exceções Não verificadas)

No casa acima, acredito que devem ser tratadas com try/catch em algum lugar, o que depende da regra de negócio, do método utilizado, enfim...

Mas no caso das checkeds(verificadas) há a seguinte regra:

"Todo método deve ou tratar todas as exceções verificadas, fornecendo uma cláusula catch, ou então listar cada exceção verificada que não tiver recebido tratamento como uma exceção lançada."( Certificação Sun para Programador Java 6 - Guia de Estudo, Kathy Sierra e Bert Bates).

Estive dando uma olhada na API do java, na classe File, por exemplo. Há o seguinte método:

public String getCanonicalPath() throws IOException {
        if (isInvalid()) {
            throw new IOException("Invalid file path");
        }
        return fs.canonicalize(fs.resolve(this));
    }

Nas exceções verificadas, o compilador nos obriga a declará-las na interface pública do método. No método do exemplo acima, se o meu canonicalPath não for válido, o método getCanonicalPath lançara uma exceção. Acredito que quem estiver chamando o método saberá, em função de um contexto particular, como melhor tratá-la. Sendo assim, penso que no caso das verificadas, é melhor deixar a responsabilidade para quem chama o método. Até porque, há "risco" de ocorrer a exceção, ela não ocorrerá necessariamente. Além disso, penso que deixar a responsabilidade para quem chama, torna o código mais flexível.

Abs.

Olá Diego, tudo bem!?

O exercício 12 dá um pouco de luz a nossa discussão. Se já tiver feito, poste aqui!!

Abs!

De qual capitulo? Não aparece mais a numeração dos exercícios, se puder me informar ficarei extremamente agradecido, mas suas colocações e explicações foram bem úteis pra mim, consegui de fato sanar minha duvida, muito obrigado pelo esclarecimento!

Salve, meu caro Diego!

A Trilha: "Java";

O Curso é: "Java e Orientação a Objetos";

O Capítulo: "5. Exceções e controle de erros";

Exercício: "número 12".

Abs.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software