[quote=“tanque”]Nao entendi a necessidade da criacao da interface DAO descrita pelo Daniel. Acho ela meio Useless, ja que a classe abstrata parece ser exatamente igual a a interface.
Sei da importancia de programar para interfaces, mas acho que as vezes esse conceito eh levado um pouco ao extremo. Neste caso em especifico, por exemplo, acho perfeitamente dispensavel essa interface DAO.
Muitas vezes a criacao de classes abstratas me parece mais razoavel que o uso de interfaces propriamente dita.[/quote]
Bom, vamos lá. Note que estou bem influenciado pelo Effective Java
…
Como Java não permite herança múltipla, cabe às interfaces proprocionar uma mistura de tipos em uma classe, adicionando um tipo ao “tipo primário dela”. Se você dependesse da classe abstrata, como poderia fazer seu DAO pertencer a uma outra hierarquia?
Isso pode ser necessário ou não, para prover um mecanismo eficiente para ambos os casos, você pode criar uma interface que é o que realmente conta na hora de chamar métodos na classe, e pode prover uma Abstract<nome da interface> para prover as cosias já “mastigadas” para um DAO que não precisa herdar nada.
Acho que consegui ser mais confuso que o Daniel, mas imagina que vocês tem dois tipos de classes, que precisam ser persistidos em dois lugares diferentes.
Uma classe, você persiste num SGBD, logo você pode estender um AbstractDao que te server perfeitamente.
A outra precisa ser persistida em algo exótico, como o Prevayler. Você precisa que seu DAO pertença a uma hierarquia definida, ou seja: além de ser um DAO, ele precisa estender uma classe qualquer para funcionar. A suloção é estender a classe necessária e implementar a interface.
Vanessa Sabino tem um resumo bem legal do Effective Java no site dela, em português, este item específico você encotnra em http://vanessas.sites.uol.com.br/java/ej3.html , o blog (com o resumo completo) fica em http://java.blogger.com.br
[]s