Ainda existem pessoas no mundo que não usam genéricos jave na "codificação comum". Eu posso acreditar com modelos C ++, mas genéricos? Eles nem são difíceis de aprender / usar. Sério, os melhores recursos do Java e C ++ são respectivamente genéricos e modelos.
A melhor maneira de convencer as pessoas das coisas é argumentar convincentemente, não ameaçar e estar certo.
Desde que você não esteja usando algo como modelos como sua linguagem de programação, o polimorfismo paramétrico (genéricos / modelos) é quase certamente bom.
1. Evita duplicação de código.
Isso é óbvio, mas o código polimórfico é o código geral. É por isso que é chamado de genérico.
2. Suporta melhor verificação estática.
Sem o polimorfismo paramétrico, você acaba escrevendo coisas como public Object clone()
ou public boolean equals(object b)
que não são apenas abominações, eles têm tipos que não fornecem informações sobre o que fazem e invariavelmente acabam lançando exceções em todo o lugar. A alternativa ao polimorfismo paramétrico está em todo o lado
3. Polimorfismo não paramétrico O código OOP é basicamente incapaz de lidar com "métodos binários" de maneira correta.
Você usa isso frequentemente.
4. É uma boa prática
Em Java, o uso de genéricos é considerado uma prática recomendada (consulte Java eficaz por Josh Bloch). Os principais pensadores de C ++, como Sutter e Alexandrescu, também incentivam o uso de modelos para resolver uma variedade de problemas.
5. Ele se encaixa no paradigma OO.
As pessoas geralmente não percebem isso, mas a combinação de subtipagem e genéricos produz um sistema MUITO mais poderoso, expressivo e orientado a objetos do que qualquer sistema com apenas um deles.
Considere os mixins de Scala. Esse é um ótimo recurso que permite reunir seus objetos a partir de peças componentes. Genéricos e modelos podem simular alguns desses benefícios. Por exemplo, digamos que um de seus objetos use um banco de dados. Um bom design faria você abstrair o acesso ao banco de dados em uma classe separada. Se bem feito, isso não apenas permite que você zombe do armazenamento de dados (chave para a testabilidade), mas também significa que você pode adicionar implementações alternativas, como o novo banco de dados no-sql. Aqui, porém, você pode ter um problema, independentemente da implementação usada, obterá diferentes recursos do seu objeto de negócios.
Genéricos para o resgate!
public class Business<S extends Datastore>{
private S store; ...
}
Agora você pode começar a diferenciar estaticamente seus Business
objetos com base na capacidade de usar recursos específicos do banco de dados. Você ainda precisa de algumas verificações e conversão do tempo de execução, mas pode começar a criar MUITO melhor código.
e
6. Código normal não existe.
Existem apenas três coisas no universo da programação:
- bibliotecas,
- configurações e
- código incorreto.
Se você não pensa no seu código como se fosse uma biblioteca, estará com sérios problemas quando os requisitos do seu projeto mudarem. Arquitetura é (sem dúvida) a arte de projetar boas APIs.
Acho essa atitude impressionante. Depois que você se acostuma a programar com tipos parametrizados, não usá-los apenas torna tudo um problema. E Java e C ++ têm vários pontos difíceis que ajudam a remediar.