# Programação automática

Dentro do diversificado leque de categorias de ferramentas que prestam apoio às atividades da Engenharia de Software (CASE), uma específica vem ganhando cada vez mais destaque e, sobre ela, tem-se aplicado muito investimento nos últimos tempos: as Ferramentas de Geração de Código, ou simplesmente Geradores de Código.
Dessa forma, Gerador de Código é aquela ferramenta que possui a capacidade de gerar código a partir de um determinado modelo de software. Inclusive, de acordo com alguns pontos de vista e a partir das características específicas do tipo de Gerador de Código, ele passa a ser conversor de códigos de linguagens distintas. Isso acontece, por exemplo, com o compilador, que transforma um código escrito através de uma linguagem de programação para código de máquina ou código objeto.

## Tipos mais comuns

Alguns tipos de Gerador de Código valem a pena serem mencionados. Eles possuem características específicas e uma maneira de trabalhar própria que está diretamente ligada aos seus objetivos. O mais básico tipo de gerador de código é o já mencionado compilador.
Existem basicamente dois tipos de Geradores de Código, o gerador de Código Ativo e o Gerador de Código Passivo.
Gerador de Código Ativo é toda ferramenta onde o código gerado depende de um critério de geração, como um template por exemplo, ferramentas de ORM em geral estão acompanhadas de ferramentas de geração de código para que seja possível a geração das classes de domínio baseados no banco de dados por exemplo.
A principal característica do Gerador de Código Ativo está no fato de que o código final gerado não deve sofrer intervenção direta, e sim, apenas por meio da ferramenta de geração. Nestes casos customizar o código gerado significa interagir com a ferramenta para que o resultado final seja diferente.
Outros geradores ainda mais comuns, presentes na maioria das IDE´s visuais de desenvolvimento, são os Geradores Passivos, essas ferramentas não tem compromisso com o funcionamento do código final, é apenas um facilitador, gerando código incompleto e não final, necessitando de que o programador finalize o código. No Visual Studio por exemplo, esses geradores são conhecidos como "Code Snippets"
Outros dois tipos de gerador de código que estão sendo cada vez mais utilizados em ambiente de produção de software são os geradores de código de IDE’s visuais e os geradores de código baseados em modelos de processador (templates).
Uma nova tendência é a utilização de geradores de códigos baseados na base de dados. Um exemplo é o Total Code Generator que cria um sistema em .Net.

### Geradores de código baseados em templates

Ultimamente, os geradores de código baseados em templates começaram a figurar o elenco das ferramentas CASE presentes em ambiente de produção de software como sendo uma opção para a geração automática e massiva de funcionalidades de aplicações, seja de maneira completa ou parcial.
Ferramentas tais como Velocity (do Apache Jakarta Project), Transformica (do Hammurapi Group) ou CodeFSW (da Unitech Tecnologia de Informação), além de diversas outras que vêm surgindo neste cenário, a depender de como sejam utilizadas, podem viabilizar a geração de código para as diversas camadas de uma aplicação, a partir de templates e parâmetros de entrada. Dessa maneira, tendo a necessidade de possuir diversas funcionalidades semelhantes em suas estrutura e que englobem códigos das camadas da aplicação adotadas em sua arquitetura, uma aplicação pode ser desenvolvida, em grande parte, com a ajuda de tais ferramentas.

## Principais vantagens

Certamente que as vantagens adquiridas ao se adotar Geradores de Código em um ambiente de produção de software só aparecem quando da boa utilização dessas ferramentas. A partir do uso adequado dos geradores de código, sejam quais tipos forem, a equipe de produção de software perceberá um ganho significativo em sua produtividade, sendo capaz de realizar a construção de funcionalidades das aplicações de maneira mais eficiente e segura, garantindo também a diminuição dos custos de projeto.
Uma outra vantagem que é vista de maneira bastante clara se refere à padronização percebida no código gerado, visto que pode se basear, a depender do tipo, tanto em um template utilizado, como na filosofia de trabalho da ferramenta IDE. E está definitivamente consolidada a ideia de que é um ponto positivo com relação à qualidade do software, ter uma aplicação em cujo código-fonte se percebe um estilo único de programação.
Por fim, pode-se considerar também como uma vantagem do uso de geradores de código, a depender novamente de como são utilizados, a construção de aplicações isentas de grande parte dos artifícios que facilitam a programação propriamente, mas, por outro lado, afetam diretamente o quesito performance. É sabido, por exemplo, que o uso de Reflexão, artifício que é suportado em linguagens como Java e C# e que permite a introspeção e manipulação de classes, interfaces e objetos no geral, afeta negativamente a performance de funcionalidades de aplicações. O uso adequado de geradores de código no processo de desenvolvimento de software pode fazer desnecessário o uso de tal artifício, melhorando o desempenho do produto final.
Muitas outras vantagens podem ser percebidas com o uso de geradores de código no processo de construção de software. Mas também vale alertar que tais ferramentas, em vez de contribuir com vantagens, podem atrapalhar o andamento do projeto quando é feito uso inadequado ou desnecessário das mesmas.