Queria saber a opnião de vocês a respeito desse assunto. Os prós e contras.
Pergunto porque estou para começar um projeto para meu TCC e quero começar ja da maneira correta. Ja ouvi muita gente reclamando de herança e ja ouvi gente a favor tambem. Oque vocês acham? Porque?
E qual melhor solução para o meu problema?
Quero criar uma classe de base para todos os meu DAOs (BaseDAO) que sera criada pelo spring, e minha duvida é utilizo esse objeto como composição ou como herança? E talvez tambem crie uma para minhas actions, para ter sempre sessão, request, response e algumas outras coisas que possam me ajudar.
Como diria um autor cujo nome não lembro, “herança é uma arma de um único tiro”. Ou seja, você deve tomar cuidado, já que não existe herança múltipla em Java. Entretanto, composição te tira a habilidade de tratar objetos na base do É-UM . Moral da história: é preciso analisar cada caso separadamente.
[]´s
vinicius_roc
No meu caso onde, todos os DAOs terão essa classe para “suporte” com os metodos CRUD e das actions que terão esse auxilio para tratar com coisas gerais da aplicação.
O que você sugere?
Alexandre_Saudate
Acho que Composição + IoC seria uma coisa excelente nesse caso. Você mesmo disse, essas classes são de suporte, portanto, elas não são DAOs também, certo? Não há porque modelar os DAOs como se fossem essa classe. Ou seja, DAO TEM-UM (classe de suporte), mas não É-UM.
[]´s
ViniGodoy
Em 90% dos casos composição é melhor do que herança. Nos outros 10%, existe uma boa chance de serem no mínimo equivalentes.
No meu caso, nos meus projetos eu não tive a necessidade de usar herança. Pois a maioria dos relacionamentos entre as minhas classes foram do tipo TEM-UM.
Mas como disseram ai em cima, você só usa herança em casos muito específicos, por exemplo você vai desenvolver um aplicativo para uma fábrica, e nessa fábrica tem diversas pessoas que tem diversas atribuições, daí você ve se vale a pena usar composição ou herança.
Alexandre_Saudate
ViniGodoy:
Em 90% dos casos composição é melhor do que herança. Nos outros 10%, existe uma boa chance de serem no mínimo equivalentes.
Mais ou menos. Eu gosto de usar herança no caso das classes abstratas (que representam, pra mim, a perfeita implementação de Template Method). Também gosto de usar com certos frameworks, como JBoss Seam ou JAX-WS (onde, aliás, fica incrivelmente difícil usar IoC), para o caso de comportamentos comuns a todos os objetos (ex.: todo objeto, antes de ser persistido, precisa de validação. O método de persistência fica na superclasse, onde ele invoca o método abstrato validar() ). Então, defendo: é questão de análise. E de lembrar que herança é um tiro único.